crc32c-0.2.0: bench/Bench.hs
{-# LANGUAGE BangPatterns #-}
module Main where
import qualified Data.ByteString as BS
import Data.ByteString (ByteString)
import Data.Word
import Criterion.Main
import Data.Digest.CRC32C
main =
defaultMain [
env (pure (largeByteString (2^8) 42)) $ \bs ->
bench "crc32c small (2^8)" $ whnf crc32c bs
, env (pure (largeByteString (2^16) 42)) $ \bs ->
bench "crc32c large (2^16)" $ whnf crc32c bs
, env (pure (largeByteString (2^16+1) 42)) $ \bs ->
bench "crc32c large (2^16+1)" $ whnf crc32c bs
]
largeByteString :: Int -> Word -> ByteString
largeByteString n seed =
fst $ BS.unfoldrN n (Just . step) seed
where
-- C11 example linear congruential generator
step :: Word -> (Word8, Word)
step rng = (w8, rng')
where
!rng' = rng * 1103515245 + 12345
!w8 = fromIntegral (rng' `div` 65536)