packages feed

bits-bytestring-0.1.0.0: bench/BenchmarkSuite.hs

import            Criterion.Main
import            Data.Bits
import            Data.Bits.ByteString()
import qualified  Data.ByteString as B

zero :: B.ByteString
zero = B.replicate 64 0

bs512 :: B.ByteString
bs512 = B.replicate 64 255

bs1024 :: B.ByteString
bs1024 = B.replicate 128 255

benchBitwiseOperator :: (Int -> B.ByteString) -> [Benchmark]
benchBitwiseOperator f = fmap (\x -> bench (show x) $ whnf f x) ([128,256,512,1024] :: [Int])

main :: IO ()
main = defaultMain
  [ bgroup "AND" [ bench "512" $ whnf ((.&.) zero) bs512 ]
  , bgroup "OR" [ bench "512" $ whnf ((.|.) zero) bs512 ]
  , bgroup "XOR" [ bench "512" $ whnf (xor zero) bs512 ]
  , bgroup "shift" $ benchBitwiseOperator (shift bs1024)
  , bgroup "rotate" $ benchBitwiseOperator (rotate bs1024)
  ]