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:
parent
bf9b09bd8c
commit
7252468b34
6 changed files with 103 additions and 1 deletions
12
users/glittershark/xanthous/bench/Bench.hs
Normal file
12
users/glittershark/xanthous/bench/Bench.hs
Normal 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
|
||||
]
|
9
users/glittershark/xanthous/bench/Bench/Prelude.hs
Normal file
9
users/glittershark/xanthous/bench/Bench/Prelude.hs
Normal file
|
@ -0,0 +1,9 @@
|
|||
--------------------------------------------------------------------------------
|
||||
module Bench.Prelude
|
||||
( module Xanthous.Prelude
|
||||
, module Criterion.Main
|
||||
) where
|
||||
--------------------------------------------------------------------------------
|
||||
import Xanthous.Prelude
|
||||
import Criterion.Main
|
||||
--------------------------------------------------------------------------------
|
|
@ -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` ()
|
32
users/glittershark/xanthous/bench/Xanthous/RandomBench.hs
Normal file
32
users/glittershark/xanthous/bench/Xanthous/RandomBench.hs
Normal 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)
|
||||
]
|
||||
]
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue