cryptohash-0.8.0: 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.SHA1 as SHA1
import qualified Crypto.Hash.SHA3 as SHA3
import Crypto.Hash
import qualified Crypto.Classes as CAPI
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])
defaultMain
[ bcompare
[ bench "sha1.hash 32" $ whnf SHA1.hash bs32
, bench "sha1.incr 32" $ whnf (SHA1.finalize . SHA1.update SHA1.init) bs32
, bench "sha1.api 32" $ whnf (digestToByteString . hashsha1) bs32
, bench "sha1.capi 32" $ whnf (CAPI.hash' :: B.ByteString -> SHA1.SHA1) bs32
]
, bcompare
[ bench "sha1.hash 256" $ whnf SHA1.hash bs256
, bench "sha1.incr 256" $ whnf (SHA1.finalize . SHA1.update SHA1.init) bs256
, bench "sha1.api 256" $ whnf (digestToByteString . hashsha1) bs256
, bench "sha1.capi 256" $ whnf (CAPI.hash' :: B.ByteString -> SHA1.SHA1) bs256
]
, bcompare
[ bench "sha1.hash 4096" $ whnf SHA1.hash bs4096
, bench "sha1.incr 4096" $ whnf (SHA1.finalize . SHA1.update SHA1.init) bs4096
, bench "sha1.api 4096" $ whnf (digestToByteString . hashsha1) bs4096
, bench "sha1.capi 4096" $ whnf (CAPI.hash' :: B.ByteString -> SHA1.SHA1) bs4096
]
]
where hashsha1 = hash :: B.ByteString -> Digest SHA1