packages feed

arithmoi-0.9.0.0: benchmark/Math/NumberTheory/SmoothNumbersBench.hs

{-# OPTIONS_GHC -fno-warn-type-defaults #-}

module Math.NumberTheory.SmoothNumbersBench
  ( benchSuite
  ) where

import Data.List (genericTake)
import Data.Maybe
import Gauge.Main

import Math.NumberTheory.Euclidean (Euclidean)
import Math.NumberTheory.SmoothNumbers

doBench :: (Euclidean a, Integral a) => a -> a
doBench lim = sum $ genericTake lim $ smoothOver $ fromJust $ fromSmoothUpperBound lim

benchSuite :: Benchmark
benchSuite = bgroup "SmoothNumbers"
  [ bench "100"      $ nf doBench    (100 :: Int)
  , bench "1000"     $ nf doBench   (1000 :: Int)
  , bench "10000"    $ nf doBench  (10000 :: Int)
  ]