packages feed

semiring-num-1.4.0.0: bench/bench.hs

module Main (main) where

import           Criterion.Main

import           System.Random

import           Control.Monad

import           Data.Semiring

threeInts :: IO (Int,Int,Int)
threeInts = (,,) <$> randomIO <*> randomIO <*> randomIO

int :: IO Int
int = randomIO

sumAtSize :: Int -> Benchmark
sumAtSize n =
    env (replicateM n threeInts) $
    \xs ->
         bgroup (show n) [bench "add" $ nf add xs]

prodAtSize :: Int -> Int -> Benchmark
prodAtSize n m =
    env ((,) <$> replicateM n int <*> replicateM m int) $
    \xs ->
         bench "prod-list" (nf (uncurry (<.>)) xs)

main :: IO ()
main = defaultMain [prodAtSize 2000 1000, sumAtSize 10000]