packages feed

word24-2.0.0: 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)