module Main where import Lib import Criterion import Criterion.Main paths :: [FilePath] paths = [ "./data/01.in" , "./data/02.in" , "./data/03.in" , "./data/04.in" , "./data/05.in" , "./data/06.in" , "./data/07.in" , "./data/08.in" , "./data/09.in" , "./data/10.in" , "./data/11.in" ] solutions :: [(Integer, [Day], FilePath)] solutions = filter (\(n, d, p) -> not (null d)) $ zip3 [1 ..] days paths makeGroup :: (Show a) => (a, [Day], FilePath) -> Benchmark makeGroup (n, d, f) = bgroup ("Day " ++ show n) (makeBenchmarks f d) makeBenchmarks :: FilePath -> [Day] -> [Benchmark] makeBenchmarks f = zipWith name [1 ..] . map (makeBench f) where name :: Int -> Benchmarkable -> Benchmark name n = bench ("v" ++ show n) makeBench :: FilePath -> Day -> Benchmarkable makeBench f d = nfAppIO (fmap show . run d) f groups :: [Benchmark] groups = map makeGroup solutions main :: IO () main = defaultMain groups