word24-2.0.1: bench/Benchmark.hs
module Main where
import Criterion.Main
import Control.DeepSeq
import Data.Int.Int24
import Data.Word.Word24
import Data.Int
import Data.Word
import Data.List
main = defaultMain
[ bgroup "Int24" intses
, bgroup "Word24" wordses
, bgroup "Int16" baseses
, bgroup "Word16" basessW
]
benches :: (Enum i, Num i, NFData i, Integral i) => i -> [Benchmark]
benches x =
[ bench "Add" $ nf (\i -> foldl' (+) i [1..100]) x
, bench "Mul" $ nf (\i -> foldl' (*) i [1..100]) x
, bench "quot" $ nf (\i -> map (flip quot i) [1..25]) x
, bench "rem" $ nf (\i -> map (flip rem i) [1..25]) x
, bench "div" $ nf (\i -> map (flip div i) [1..25]) x
, bench "mod" $ nf (\i -> map (flip mod i) [1..25]) x
]
{-# INLINE benches #-}
intses = benches (1 :: Int24)
wordses = benches (1 :: Word24)
baseses = benches (1 :: Int16)
basessW = benches (1 :: Word16)