packages feed

sized-vector-1.3.0.0: bench/coercion.hs

{-# LANGUAGE QuasiQuotes #-}
module Main where
import           Control.DeepSeq
import           Control.Parallel.Strategies
import           Criterion
import           Data.Type.Natural
import qualified Data.Vector.Sized           as V
import           Progression.Main
import           System.Environment

main :: IO ()
main = do
  name : rest <- getArgs
  v10 <- return $!! ((V.replicate [snat|10|] ()) `using` rdeepseq)
  v100 <- return $!! ((V.replicate [snat|100|] ()) `using` rdeepseq)
  v200 <- return $!! ((V.replicate [snat|200|] ()) `using` rdeepseq)
  withArgs (("-n"++name) : rest) $
    defaultMain $
    bgroup "bench" [ bgroup "reverse"
                     [ bench "10" $ nf V.reverse v10
                     , bench "100" $ nf V.reverse v100
                     , bench "1000" $ nf V.reverse v200
                     ]
                   , bgroup "intersperse"
                     [ bench "10" $ nf (V.intersperse ()) v10
                     , bench "100" $ nf (V.intersperse ()) v100
                     , bench "200" $ nf (V.intersperse ()) v200
                     ]
                   ]