packages feed

ppad-ripemd160-0.1.0: bench/Main.hs

{-# LANGUAGE OverloadedStrings #-}

module Main where

import Criterion.Main
import qualified Crypto.Hash.RIPEMD160 as RIPEMD160
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BL

main :: IO ()
main = defaultMain [
    suite
  ]

suite :: Benchmark
suite = env setup $ \ ~(bs, bl) ->
    bgroup "ppad-ripemd160" [
      bgroup "RIPEMD160 (32B input)" [
        bench "hash" $ whnf RIPEMD160.hash bs
      , bench "hash_lazy" $ whnf RIPEMD160.hash_lazy bl
      ]
    , bgroup "HMAC-RIPEMD160 (32B input)" [
        bench "hmac" $ whnf (RIPEMD160.hmac "key") bs
      , bench "hmac_lazy" $ whnf (RIPEMD160.hmac_lazy "key") bl
      ]
    ]
  where
    setup = do
      let bs_32B = BS.replicate 32 0
          bl_32B = BL.fromStrict bs_32B
      pure (bs_32B, bl_32B)