packages feed

OddWord-1.0.2.0: bench/Main.hs

{-# LANGUAGE ScopedTypeVariables, DataKinds #-}

module Main where

import Data.Proxy
import Data.Typeable
import Data.Word
import Data.Word.Odd
import Criterion.Main

testAddMul :: (Num a) => a -> a
testAddMul n = 2*n*n + 3*n + 4

testEquals :: (Eq a, Num a) => a -> Bool
testEquals n = n == 7 || n == 11 || n == 13

benchNum :: forall a. (Eq a, Num a, Typeable a) => a -> Benchmark
benchNum x =
    bgroup (show $ typeRep (Proxy :: Proxy a)) [
        bench "addMul" $ whnf testAddMul x,
        bench "equals" $ whnf testEquals x
    ]

main :: IO ()
main =
    defaultMain [
        benchNum (1::Word),
        benchNum (1::Word20),
        benchNum (1::(OddWord Word32 (Lit 20)))
    ]