arithmoi-0.9.0.0: benchmark/Math/NumberTheory/EuclideanBench.hs
{-# OPTIONS_GHC -fno-warn-type-defaults #-}
module Math.NumberTheory.EuclideanBench
( benchSuite
) where
import Gauge.Main
import Math.NumberTheory.Euclidean
doBench :: Integral a => (a -> a -> (a, a, a)) -> a -> a
doBench func lim = sum [ let (a, b, c) = func x y in a + b + c | y <- [3, 5 .. lim], x <- [0..y] ]
benchSuite :: Benchmark
benchSuite = bgroup "Euclidean"
[ bench "extendedGCD/Int" $ nf (doBench extendedGCD :: Int -> Int) 1000
, bench "extendedGCD/Word" $ nf (doBench extendedGCD :: Word -> Word) 1000
, bench "extendedGCD/Integer" $ nf (doBench extendedGCD :: Integer -> Integer) 1000
]