libmoost
/home/mhx/git/github/libmoost/test/hash/murmur3.cpp
Go to the documentation of this file.
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()