{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -Wno-orphans #-} {-# OPTIONS_GHC -Wno-deprecations #-} module Main where import Prelude hiding (words) import qualified Data.ByteString as B import qualified Data.Digest.Adler32 as Adler32 import qualified Data.Digest.CRC32 as CRC32 import qualified Data.Digest.XXHash.FFI as FFI #ifdef MIN_VERSION_hashable import qualified Data.Hashable as Hashable #endif import Test.Tasty.Bench main :: IO () main = do -- apt-get install wamerican med <- B.readFile "/usr/share/dict/words" defaultMain [ bgroup "10B" [ bench "Data.Digest.XXHash.FFI.xxh32" $ nf (FFI.xxh32 bs10b) 0 , bench "Data.Digest.XXHash.FFI.xxh64" $ nf (FFI.xxh64 bs10b) 0 , bench "Data.Digest.Adler32" $ nf Adler32.adler32 bs10b , bench "Data.Digest.CRC32" $ nf CRC32.crc32 bs10b #ifdef MIN_VERSION_hashable , bench "Data.Digest.XXHash.FFI.XXH3" $ nf Hashable.hash (FFI.XXH3 bs10b) , bench "Data.Hashable" $ nf Hashable.hash bs10b #endif ] , bgroup "1kB" [ bench "Data.Digest.XXHash.FFI.xxh32" $ nf (FFI.xxh32 bs1k) 0 , bench "Data.Digest.XXHash.FFI.xxh64" $ nf (FFI.xxh64 bs1k) 0 , bench "Data.Digest.Adler32" $ nf Adler32.adler32 bs1k , bench "Data.Digest.CRC32" $ nf CRC32.crc32 bs1k #ifdef MIN_VERSION_hashable , bench "Data.Digest.XXHash.FFI.XXH3" $ nf Hashable.hash (FFI.XXH3 bs1k) , bench "Data.Hashable" $ nf Hashable.hash bs1k #endif ] , bgroup "4kB" [ bench "Data.Digest.XXHash.FFI.xxh32" $ nf (FFI.xxh32 bs4k) 0 , bench "Data.Digest.XXHash.FFI.xxh64" $ nf (FFI.xxh64 bs4k) 0 , bench "Data.Digest.Adler32" $ nf Adler32.adler32 bs4k , bench "Data.Digest.CRC32" $ nf CRC32.crc32 bs4k #ifdef MIN_VERSION_hashable , bench "Data.Digest.XXHash.FFI.XXH3" $ nf Hashable.hash (FFI.XXH3 bs4k) , bench "Data.Hashable" $ nf Hashable.hash bs4k #endif ] , bgroup "1MB" [ bench "Data.Digest.XXHash.FFI.xxh32" $ nf (FFI.xxh32 med) 0 , bench "Data.Digest.XXHash.FFI.xxh64" $ nf (FFI.xxh64 med) 0 , bench "Data.Digest.Adler32" $ nf Adler32.adler32 med , bench "Data.Digest.CRC32" $ nf CRC32.crc32 med #ifdef MIN_VERSION_hashable , bench "Data.Digest.XXHash.FFI.XXH3" $ nf Hashable.hash (FFI.XXH3 med) , bench "Data.Hashable" $ nf Hashable.hash med #endif ] ] bs10b :: B.ByteString bs10b = fst $ B.unfoldrN 10 (\x -> Just (x, x)) 0 bs1k :: B.ByteString bs1k = fst $ B.unfoldrN 1024 (\x -> Just (x, x)) 0 bs4k :: B.ByteString bs4k = fst $ B.unfoldrN 4096 (\x -> Just (x, x)) 0