1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
{-# OPTIONS_GHC -fno-warn-type-defaults #-}
module Math.NumberTheory.ArithmeticFunctionsBench
( benchSuite
) where
import Test.Tasty.Bench
import Data.Set (Set)
import Math.NumberTheory.ArithmeticFunctions as A
compareFunctions :: String -> (Integer -> Integer) -> [Integer] -> Benchmark
compareFunctions name new range = bench name $ nf (map new) range
compareSetFunctions :: String -> (Integer -> Set Integer) -> Benchmark
compareSetFunctions name new = bench name $ nf (map new) [1..100000]
benchSuite :: Benchmark
benchSuite = bgroup "ArithmeticFunctions"
[ compareSetFunctions "divisors" A.divisors
, bench "divisors/int" $ nf (map A.divisorsSmall) [1 :: Int .. 100000]
, compareFunctions "totient" A.totient [1..100000]
, compareFunctions "carmichael" A.carmichael [1..100000]
, compareFunctions "moebius" (A.runMoebius . A.moebius) [1..100000]
, compareFunctions "tau" A.tau [1..100000]
, compareFunctions "sigma 1" (A.sigma 1) [1..100000]
, compareFunctions "sigma 2" (A.sigma 2) [1..100000]
, compareFunctions "ramanujan range" ramanujan [1..2000]
, compareFunctions "ramanujan large prime" ramanujan [100003]
, compareFunctions "ramanujan prime power" ramanujan [2^3000]
]
|