packages feed

list-shuffle-1.0.0: bench/Main.hs

module Main (main) where

import Control.DeepSeq (force)
import Control.Exception (evaluate)
import List.Shuffle qualified as List
import System.Random qualified as Random
import Test.Tasty.Bench (bench, defaultMain, whnf)

main :: IO ()
main = do
  let list = [1 .. 1_000_000] :: [Int]
  _ <- evaluate (force list)

  defaultMain
    [ bench "sample 10/1000000" (whnf (sample 10) (list, Random.mkStdGen 0)),
      bench "shuffle 1000000" (whnf shuffle (list, Random.mkStdGen 0))
    ]

sample :: Int -> ([Int], Random.StdGen) -> [Int]
sample n (list, gen) =
  List.sample_ n list gen

shuffle :: ([Int], Random.StdGen) -> [Int]
shuffle (list, gen) =
  List.shuffle_ list gen