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-hunit
|
||||||
- tasty-quickcheck
|
- tasty-quickcheck
|
||||||
- lens-properties
|
- 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
|
else packageSet
|
||||||
);
|
);
|
||||||
|
|
||||||
drv = haskellPackages.callPackage pkg {};
|
drv = pkgs.haskell.lib.doBenchmark (haskellPackages.callPackage pkg {});
|
||||||
|
|
||||||
inherit (pkgs.haskell.lib) addBuildTools;
|
inherit (pkgs.haskell.lib) addBuildTools;
|
||||||
in
|
in
|
||||||
|
|
Loading…
Reference in a new issue