1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
{-# LANGUAGE ScopedTypeVariables #-}
module Instances.Integer
( benchmarks -- :: [Benchmark]
) where
import Criterion.Main
import qualified Data.ByteString.Lazy as BS
import qualified Data.Vector as Vector
import Codec.Serialise
benchmarks :: [Benchmark]
benchmarks =
[ bgroup "serialise"
[ bench "small positive" (nf goSerialise integerDataSmallPos)
, bench "small negative" (nf goSerialise integerDataSmallNeg)
, bench "large positive" (nf goSerialise integerDataLargePos)
, bench "large negative" (nf goSerialise integerDataLargeNeg)
]
, bgroup "deserialise"
[ bench "small positive" (nf goDeserialise integerDataSerialisedSmallPos)
, bench "small negative" (nf goDeserialise integerDataSerialisedSmallNeg)
, bench "large positive" (nf goDeserialise integerDataSerialisedLargePos)
, bench "large negative" (nf goDeserialise integerDataSerialisedLargeNeg)
]
]
where
goSerialise = BS.length . serialise
goDeserialise :: BS.ByteString -> Vector.Vector Integer
goDeserialise = deserialise
integerDataSmallPos = Vector.replicate (100 :: Int) (10 :: Integer)
integerDataSmallNeg = Vector.replicate (100 :: Int) (-10 :: Integer)
integerDataLargePos = Vector.replicate (100 :: Int) (two^(two * 100))
integerDataLargeNeg = Vector.replicate (100 :: Int) (-(two^(two * 100)))
integerDataSerialisedSmallPos = serialise integerDataSmallPos
integerDataSerialisedSmallNeg = serialise integerDataSmallNeg
integerDataSerialisedLargePos = serialise integerDataLargePos
integerDataSerialisedLargeNeg = serialise integerDataLargeNeg
two = 2 :: Integer
|