packages feed

yarl-0.1.0.0: bench/Main.hs

module Main where

import Control.DeepSeq
import Criterion.Main
import qualified LinkedList.ScenarioDirect as LinkedList
import qualified LinkedList.ScenarioGetValueClass as LinkedList
import qualified LinkedList.ScenarioGetValueConcrete as LinkedList
import qualified LinkedList.Value as LinkedList
import qualified PlainRecord.ScenarioDirect as PlainRecord
import qualified PlainRecord.ScenarioGetValueClass as PlainRecord
import qualified PlainRecord.ScenarioGetValueConcrete as PlainRecord
import qualified PlainRecord.Type as PlainRecord
import qualified PlainRecord.Value as PlainRecord

main :: IO ()
main =
  defaultMain
    [ bench "PlainRecord.sumDirect" $ nf' PlainRecord.sumDirect PlainRecord.oneRecord,
      bench "PlainRecord.sumGetValueConcrete" $ nf' PlainRecord.sumGetValueConcrete PlainRecord.oneRecord,
      bench "PlainRecord.sumGetValueClass" $ nf' PlainRecord.sumGetValueClass PlainRecord.oneRecord,
      bench "LinkedList.sumDirect" $ nf' LinkedList.sumDirect LinkedList.oneRecord,
      bench "LinkedList.sumGetValueConcrete" $ nf' LinkedList.sumGetValueConcrete LinkedList.oneRecord,
      bench "LinkedList.sumGetValueClass" $ nf' LinkedList.sumGetValueClass LinkedList.oneRecord
    ]

nf' :: (NFData b, Num b) => (a -> b) -> a -> Benchmarkable
nf' f = nf (sum . map f) . replicate 1000000