ac-library-hs-1.5.2.1: benchmarks/Bench/AddMod.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE MagicHash #-}
module Bench.AddMod (benches) where
import BenchLib.AddMod
import Criterion
import Data.Vector.Unboxed qualified as VU
import Data.Word (Word32)
import System.Random
n :: Int
n = 10000
benches :: Benchmark
benches =
bgroup
"addMod"
[ bench "addModMod" $ whnf (VU.foldl' (addModMod 998244353) w32) randomVec32,
bench "addModRem" $ whnf (VU.foldl' (addModRem 998244353) w32) randomVec32,
bench "addModSub" $ whnf (VU.foldl' (addModSub 998244353) w32) randomVec32,
bench "addModRem#" $ whnf (VU.foldl' (addModRem# 998244353) w32) randomVec32,
bench "addModSub#" $ whnf (VU.foldl' (addModSub# 998244353) w32) randomVec32
]
where
w32 :: Word32
w32 = 1
-- [1, 998244383)
randomVec32 :: VU.Vector Word32
randomVec32 = VU.map fromIntegral $ VU.unfoldrExactN n (genWord64R (998244383 - 1)) (mkStdGen 123456789)