libmoost
|
00001 /* vim:set ts=3 sw=3 sts=3 et: */ 00031 #include <vector> 00032 00033 #include <boost/cstdint.hpp> 00034 #include <boost/test/unit_test.hpp> 00035 #include <boost/tr1/unordered_map.hpp> 00036 00037 #include "../../include/moost/hash/murmur3.hpp" 00038 00039 using namespace moost::hash; 00040 00041 BOOST_AUTO_TEST_SUITE(murmur3_hash_test) 00042 00043 BOOST_AUTO_TEST_CASE(murmur3_hash_test) 00044 { 00045 uint8_t u8 = 0; 00046 BOOST_CHECK_EQUAL(murmur3::compute32(u8, 0), 0x514e28b7); 00047 BOOST_CHECK_EQUAL(murmur3::compute32(u8, 1), 0x00000000); 00048 u8 = 255; 00049 BOOST_CHECK_EQUAL(murmur3::compute32(u8, 0), 0xfd6cf10d); 00050 BOOST_CHECK_EQUAL(murmur3::compute32(u8, 123456789), 0x8a6ddd1e); 00051 00052 uint16_t u16 = 0; 00053 BOOST_CHECK_EQUAL(murmur3::compute32(u16, 0), 0x30f4c306); 00054 BOOST_CHECK_EQUAL(murmur3::compute32(u16, 1), 0x85f0b427); 00055 u16 = 65535; 00056 BOOST_CHECK_EQUAL(murmur3::compute32(u16, 0), 0x8619621f); 00057 BOOST_CHECK_EQUAL(murmur3::compute32(u16, 123456789), 0x1bf78566); 00058 00059 uint32_t u32 = 0; 00060 BOOST_CHECK_EQUAL(murmur3::compute32(u32, 0), 0x2362f9de); 00061 BOOST_CHECK_EQUAL(murmur3::compute32(u32, 1), 0x78ed212d); 00062 u32 = 4294967295ul; 00063 BOOST_CHECK_EQUAL(murmur3::compute32(u32, 0), 0x76293b50); 00064 BOOST_CHECK_EQUAL(murmur3::compute32(u32, 123456789), 0xb3f4a79d); 00065 00066 std::string str(""); 00067 BOOST_CHECK_EQUAL(murmur3::compute32(str, 0), 0x00000000); 00068 BOOST_CHECK_EQUAL(murmur3::compute32(str, 1), 0x514e28b7); 00069 str = "marcus"; 00070 BOOST_CHECK_EQUAL(murmur3::compute32(str, 0), 0xa6091d51); 00071 BOOST_CHECK_EQUAL(murmur3::compute32(str, 123456789), 0xe09e097b); 00072 00073 std::vector<uint16_t> vec; 00074 BOOST_CHECK_EQUAL(murmur3::compute32(vec, 0), 0x00000000); 00075 BOOST_CHECK_EQUAL(murmur3::compute32(vec, 1), 0x514e28b7); 00076 vec.push_back(0x616d); 00077 vec.push_back(0x6372); 00078 vec.push_back(0x7375); 00079 BOOST_CHECK_EQUAL(murmur3::compute32(vec, 0), 0xa6091d51); 00080 BOOST_CHECK_EQUAL(murmur3::compute32(vec, 123456789), 0xe09e097b); 00081 00082 const char *buf = "mur\0mur3!"; 00083 BOOST_CHECK_EQUAL(murmur3::compute32(buf + 1, 7, 0), 0x2ff4e066); 00084 BOOST_CHECK_EQUAL(murmur3::compute32(buf + 1, 7, 1), 0x93806485); 00085 } 00086 00087 BOOST_AUTO_TEST_CASE(murmur3_functor_test) 00088 { 00089 std::tr1::unordered_map< std::string, int, murmur3::hash32<std::string> > umap; 00090 00091 umap["42"] = 42; 00092 umap["marcus"] = 13; 00093 00094 BOOST_CHECK_EQUAL(umap.count("42"), 1); 00095 BOOST_CHECK_EQUAL(umap.count("marcus"), 1); 00096 BOOST_CHECK_EQUAL(umap.count("foo"), 0); 00097 00098 murmur3::hash32<uint32_t, 123456789> hasher; 00099 BOOST_CHECK_EQUAL(hasher(4294967295ul), 0xb3f4a79d); 00100 } 00101 00102 BOOST_AUTO_TEST_SUITE_END()