packages feed

xxhash-0.0.1: bench/Bench.hs

{-# OPTIONS_GHC -fno-warn-orphans #-}
module Main
       ( main -- :: IO ()
       ) where
import Prelude hiding (words)

import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as L
import qualified Data.Digest.XXHash as XXHash
import qualified Data.Digest.Adler32 as Adler32
import qualified Data.Digest.CRC32 as CRC32
import qualified Data.Digest.Murmur32 as M32
import qualified Data.Hashable as Hashable

import Criterion.Main
import Control.DeepSeq
instance NFData M32.Hash32

main :: IO ()
main = do
    med <- L.readFile "/usr/share/dict/all"
    med' <- B.readFile "/usr/share/dict/all"

    small <- L.readFile "/usr/share/dict/cracklib-small"
    small' <- B.readFile "/usr/share/dict/cracklib-small"

    defaultMain 
        [ bgroup "24MB text"
            [ bench "xxhash (c)" $ nf XXHash.c_xxHash' med'
            , bench "Data.Digest.XXHash lazy (haskell)" $ nf XXHash.xxHash med
            , bench "Data.Digest.XXHash (haskell)" $ nf XXHash.xxHash' med'
            , bench "Data.Digest.adler32 (c, zlib)" $ nf Adler32.adler32 med'
            , bench "Data.Digest.crc32 (c, zlib)" $ nf CRC32.crc32 med'
            , bench "Data.Hashable (c, FNV?)" $ nf Hashable.hash med'
            ]
        , bgroup "478K text"
            [ bench "Data.Digest.XXHash lazy (haskell)" $ nf XXHash.xxHash small
            , bench "Data.Digest.XXHash (haskell)" $ nf XXHash.xxHash' small'
            , bench "xxhash (c)" $ nf XXHash.c_xxHash' small'
            , bench "Data.Digest.adler32 (c, zlib)" $ nf Adler32.adler32 small'
            , bench "Data.Digest.crc32 (c, zlib)" $ nf CRC32.crc32 small'
            , bench "Data.Hashable (c, FNV?)" $ nf Hashable.hash small'
            ]
        ]