garnet/haskell/Main.hs

46 lines
1.7 KiB
Haskell
Raw Normal View History

2025-12-02 01:37:59 +00:00
module Main (main) where
2025-12-08 12:48:49 +00:00
import Pre
2025-12-02 09:11:42 +00:00
import Data.Text.IO qualified as T
import Puzzles.Day1 qualified as Day1
2025-12-13 11:19:54 +00:00
import Puzzles.Day10 qualified as Day10
import Puzzles.Day2 qualified as Day2
2025-12-03 11:18:04 +00:00
import Puzzles.Day3 qualified as Day3
2025-12-04 10:00:15 +00:00
import Puzzles.Day4 qualified as Day4
2025-12-05 12:56:40 +00:00
import Puzzles.Day5 qualified as Day5
2025-12-08 13:09:28 +00:00
import Puzzles.Day6 qualified as Day6
2025-12-08 13:32:15 +00:00
import Puzzles.Day7 qualified as Day7
2025-12-08 13:40:55 +00:00
import Puzzles.Day8 qualified as Day8
2025-12-09 10:27:50 +00:00
import Puzzles.Day9 qualified as Day9
2025-12-02 00:32:49 +00:00
main :: IO ()
2025-12-02 08:23:53 +00:00
main =
sydTest $ doNotRandomiseExecutionOrder $ for_ enumerate \isRealData@(bool "examples" "real" -> t) ->
describe t $ for_
[ Day1.puzzle
, Day2.puzzle
, Day3.puzzle
, Day4.puzzle
, Day5.puzzle
, Day6.puzzle
, Day7.puzzle
, Day8.puzzle
, Day9.puzzle
, Day10.puzzle
]
\Puzzle{number, parser, parts, extraTests} ->
let
pt = show number
parseFile fp =
either (fail . ("parse failure: " <>) . errorBundlePretty) pure
. runParser (parser isRealData <* eof) fp
=<< T.readFile fp
in
describe pt do
input <- liftIO $ parseFile $ "../inputs/" <> t <> "/" <> pt
let (os, rs) = applyPuzzleParts input parts
for_ (zip [1 :: Int ..] rs) $ uncurry $ \(show -> n) ->
it n . pureGoldenTextFile ("../outputs/" <> t <> "/" <> pt <> "/" <> n) . (<> "\n")
describe "extra" $ extraTests isRealData ("../outputs/" <> t <> "/" <> pt <> "/extra/") input os