feat(xan): Add a benchmark suite

Change-Id: Id31960e7bc2243dfa53dc5e45b09d8253bdef852
Reviewed-on: https://cl.tvl.fyi/c/depot/+/727
Reviewed-by: glittershark <grfn@gws.fyi>
This commit is contained in:
Griffin Smith 2020-06-28 19:35:41 -04:00 committed by glittershark
parent bf9b09bd8c
commit 7252468b34
6 changed files with 103 additions and 1 deletions

View file

@ -0,0 +1,12 @@
--------------------------------------------------------------------------------
module Main where
--------------------------------------------------------------------------------
import Bench.Prelude
--------------------------------------------------------------------------------
import qualified Xanthous.RandomBench
import qualified Xanthous.Generators.UtilBench
main :: IO ()
main = defaultMain
[ Xanthous.Generators.UtilBench.benchmark
]

View file

@ -0,0 +1,9 @@
--------------------------------------------------------------------------------
module Bench.Prelude
( module Xanthous.Prelude
, module Criterion.Main
) where
--------------------------------------------------------------------------------
import Xanthous.Prelude
import Criterion.Main
--------------------------------------------------------------------------------

View file

@ -0,0 +1,37 @@
--------------------------------------------------------------------------------
module Xanthous.Generators.UtilBench (benchmark, main) where
--------------------------------------------------------------------------------
import Bench.Prelude
--------------------------------------------------------------------------------
import Data.Array.IArray
import Data.Array.Unboxed
import System.Random (getStdGen)
--------------------------------------------------------------------------------
import Xanthous.Generators.Util
import qualified Xanthous.Generators.CaveAutomata as CaveAutomata
import Xanthous.Data (Dimensions'(..))
--------------------------------------------------------------------------------
main :: IO ()
main = defaultMain [benchmark]
--------------------------------------------------------------------------------
benchmark :: Benchmark
benchmark = bgroup "Generators.Util"
[ bgroup "floodFill"
[ env (NFWrapper <$> cells) $ \(NFWrapper ir) ->
bench "checkerboard" $ nf (floodFill ir) (1,0)
]
]
where
cells :: IO Cells
cells = CaveAutomata.generate
CaveAutomata.defaultParams
(Dimensions 50 50)
<$> getStdGen
newtype NFWrapper a = NFWrapper a
instance NFData (NFWrapper a) where
rnf (NFWrapper x) = x `seq` ()

View file

@ -0,0 +1,32 @@
--------------------------------------------------------------------------------
module Xanthous.RandomBench (benchmark, main) where
--------------------------------------------------------------------------------
import Bench.Prelude
--------------------------------------------------------------------------------
import Control.Parallel.Strategies
import Control.Monad.Random
--------------------------------------------------------------------------------
import Xanthous.Random
--------------------------------------------------------------------------------
main :: IO ()
main = defaultMain [benchmark]
--------------------------------------------------------------------------------
benchmark :: Benchmark
benchmark = bgroup "Random"
[ bgroup "chooseSubset"
[ bench "serially" $
nf (evalRand $ chooseSubset (0.5 :: Double) [1 :: Int ..1000000])
(mkStdGen 1234)
]
, bgroup "choose weightedBy"
[ bench "serially" $
nf (evalRand
. choose
. weightedBy (\n -> product [n, pred n .. 1])
$ [1 :: Int ..1000000])
(mkStdGen 1234)
]
]

View file

@ -137,3 +137,15 @@ tests:
- tasty-hunit
- tasty-quickcheck
- lens-properties
benchmarks:
benchmark:
main: Bench.hs
source-dirs: bench
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- xanthous
- criterion

View file

@ -23,7 +23,7 @@ let
else packageSet
);
drv = haskellPackages.callPackage pkg {};
drv = pkgs.haskell.lib.doBenchmark (haskellPackages.callPackage pkg {});
inherit (pkgs.haskell.lib) addBuildTools;
in