packages feed

cryptohash-md5-0.11.7.1: Bench/BenchAPI.hs

{-# LANGUAGE BangPatterns #-}
import Criterion.Main
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as L
import qualified Crypto.Hash.MD5 as MD5

md5F = ( "MD5"
        , MD5.hash
        , MD5.finalize . MD5.update MD5.init
        )

main = do
    let !bs32     = B.replicate 32 0
        !bs256    = B.replicate 256 0
        !bs4096   = B.replicate 4096 0
        !bs1M     = B.replicate (1*1024*1024) 0
    let !lbs64x256 = (map (const (B.replicate 64 0)) [0..3])
        !lbs64x4096 = (map (const (B.replicate 64 0)) [0..63])

    let (fname, fHash, fIncr) = md5F
    let benchName ty z = fname ++ "." ++ ty -- ++ " " ++ show z
    defaultMain
        [ bgroup "hash-0b"
            [ bench (benchName "hash" 0) $ whnf fHash B.empty
            , bench (benchName "incr" 0) $ whnf fIncr B.empty
            ]
        , bgroup "hash-32b"
            [ bench (benchName "hash" 32) $ whnf fHash bs32
            , bench (benchName "incr" 32) $ whnf fIncr bs32
            ]
        , bgroup "hash-256b"
            [ bench (benchName "hash" 256) $ whnf fHash bs256
            , bench (benchName "incr" 256) $ whnf fIncr bs256
            ]
        , bgroup "hash-4Kb"
            [ bench (benchName "hash" 4096) $ whnf fHash bs4096
            , bench (benchName "incr" 4096) $ whnf fIncr bs4096
            ]
        ]