Inline main test function

This commit is contained in:
George Thomas 2025-12-02 14:35:17 +00:00
parent 40f7a8ee9a
commit ef54d8ffa9

View File

@ -23,25 +23,24 @@ main =
defaultMain defaultMain
. localOption (Always :: UseColor) . localOption (Always :: UseColor)
. testGroup "tests" . testGroup "tests"
$ ["examples", "real"] <&> \s -> $ ["examples", "real"] <&> \t ->
testGroup s $ testGroup t $
puzzleTest s [ puzzle1
<$> [ puzzle1
, puzzle2 , puzzle2
] ]
<&> \Puzzle{number, parser, parts} ->
puzzleTest :: FilePath -> Puzzle -> TestTree let
puzzleTest t Puzzle{number, parser, parts} = pt = show number
parseFile fp =
either (fail . ("parse failure: " <>) . errorBundlePretty) pure
. runParser (parser <* eof) fp
=<< T.readFile fp
in
withResource (parseFile $ "inputs/" <> t <> "/" <> pt) mempty \input -> withResource (parseFile $ "inputs/" <> t <> "/" <> pt) mempty \input ->
testGroup pt $ testGroup pt $
zip (map show [1 :: Int ..]) parts <&> \(n, pp) -> zip (map show [1 :: Int ..]) parts <&> \(n, pp) ->
goldenVsString n ("outputs/" <> t <> "/" <> pt <> "/" <> n) $ goldenVsString n ("outputs/" <> t <> "/" <> pt <> "/" <> n) $
BL.fromStrict . encodeUtf8 . pp <$> input BL.fromStrict . encodeUtf8 . pp <$> input
where
pt = show number
parseFile fp =
either (fail . ("parse failure: " <>) . errorBundlePretty) pure . runParser (parser <* eof) fp
=<< T.readFile fp
data Puzzle = forall input. Puzzle data Puzzle = forall input. Puzzle
{ number :: Word { number :: Word