packages feed

murmur3-1.0.0: tests/Data/Hash/Murmur/Units.hs

module Data.Hash.Murmur.Units (tests) where

import Test.HUnit (assertBool, Assertion)
import Test.Framework (Test, testGroup)
import Test.Framework.Providers.HUnit (testCase)

import Data.Word (Word32)
import qualified Data.ByteString.Base16 as B16 (decode)
import qualified Data.ByteString.Char8 as C (pack)

import Data.Hash.Murmur (murmur3)

type TestVector = (Word32, Word32, String)

tests :: [Test]
tests =
    [ testGroup "MurmurHash3" 
        (map buildTest $ zip testVectors [0..])
    ]

buildTest :: (TestVector, Int) -> Test.Framework.Test
buildTest (v, i) =
    testCase ("MurmurHash3 test vector " ++ show i) $ assertTestVector v

assertTestVector :: TestVector -> Assertion
assertTestVector (expected, seed, str) =
    assertBool "    > MurmurHash3 " $ result == expected
  where
    result = murmur3 seed (fst $ B16.decode $ C.pack str)

testVectors :: [TestVector]
testVectors =
    [ (0x00000000, 0x00000000, "")
    , (0x6a396f08, 0xFBA4C795, "")
    , (0x81f16f39, 0xffffffff, "")
    , (0x514e28b7, 0x00000000, "00")
    , (0xea3f0b17, 0xFBA4C795, "00")
    , (0xfd6cf10d, 0x00000000, "ff")
    , (0x16c6b7ab, 0x00000000, "0011")
    , (0x8eb51c3d, 0x00000000, "001122")
    , (0xb4471bf8, 0x00000000, "00112233")
    , (0xe2301fa8, 0x00000000, "0011223344")
    , (0xfc2e4a15, 0x00000000, "001122334455")
    , (0xb074502c, 0x00000000, "00112233445566")
    , (0x8034d2a0, 0x00000000, "0011223344556677")
    , (0xb4698def, 0x00000000, "001122334455667788")
    ]