You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Straightforward benchmarking via Benchmark.js. I am sorry about the name
(purescript-benchmark was taken).
usage
Suppose you want to find out which is faster out of foldr (+) 0 and
runAdditive <<< foldMap Additive. Let's also do the same for (*) for good
measure. Start by creating some Benchmark values:
moduleMainwhereimportPreludeimportControl.Monad.Eff (Eff)
importData.Array ((..))
importData.Foldable (foldMap, foldr)
importData.Monoid.Additive (Additive(..))
importData.Monoid.Multiplicative (Multiplicative(..))
importData.Newtype (ala)
importTest.QuickCheck.Arbitrary (arbitrary)
importTest.QuickCheck.Gen (vectorOf)
importBenchotron.Core (Benchmark, benchFn, mkBenchmark)
importBenchotron.UI.Console (runSuite)
benchSum::Benchmark
benchSum = mkBenchmark
{ slug: "sum"
, title: "Finding the sum of an array"
, sizes: (1..5) <#> (_ * 1000)
, sizeInterpretation: "Number of elements in the array"
, inputsPerSize: 1
, gen: \n -> vectorOf n arbitrary
, functions: [ benchFn "foldr" (foldr (+) 0)
, benchFn "foldMap" (ala Additive foldMap)
]
}
benchProduct::Benchmark
benchProduct = mkBenchmark
{ slug: "product"
, title: "Finding the product of an array"
, sizes: (1..5) <#> (_ * 1000)
, sizeInterpretation: "Number of elements in the array"
, inputsPerSize: 1
, gen: \n -> vectorOf n arbitrary
, functions: [ benchFn "foldr" (foldr (*) 1)
, benchFn "foldMap" (ala Multiplicative foldMap)
]
}
main::EffectUnit
main = runSuite [benchSum, benchProduct]
Now, run them with runSuite; this will save the results data for each
benchmark to tmp/sum.json and tmp/product.json respectively.