packages feed

assignment-0.0.1.0: bench/speed/Main.hs

module Main (main) where

import Criterion.Main
import Data.Algorithm.Assignment (assign)

main :: IO ()
main =
  defaultMain
    [ benchCase 5 5,
      benchCase 5 10,
      benchCase 10 5,
      benchCase 10 10,
      benchCase 10 20,
      benchCase 20 10,
      benchCase 20 20,
      benchCase 40 40
    ]

benchCase :: Int -> Int -> Benchmark
benchCase a b =
  env (return (as, bs)) (bench name . nf (uncurry (assign cost)))
  where
    name = "assign " ++ show a ++ " " ++ show b
    as = [1 .. a]
    bs = [1 .. b]
    cost x y = x `div` y - x `rem` y + (y * 3) `rem` 4