Use lazy text for test outputs
Simplifies encoding code slightly, and potentially saves a lot of time for failing tests. Plus we've always been using `T.show` in practice anyway, so it's an easy change to make.
This commit is contained in:
parent
f91824a6a9
commit
be0a6510d8
@ -4,8 +4,8 @@ import Data.Bool
|
|||||||
import Data.ByteString.Lazy qualified as BL
|
import Data.ByteString.Lazy qualified as BL
|
||||||
import Data.Functor
|
import Data.Functor
|
||||||
import Data.List.Extra
|
import Data.List.Extra
|
||||||
import Data.Text.Encoding (encodeUtf8)
|
|
||||||
import Data.Text.IO qualified as T
|
import Data.Text.IO qualified as T
|
||||||
|
import Data.Text.Lazy.Encoding (encodeUtf8)
|
||||||
import Puzzle
|
import Puzzle
|
||||||
import Puzzles.Day1 qualified as Day1
|
import Puzzles.Day1 qualified as Day1
|
||||||
import Puzzles.Day2 qualified as Day2
|
import Puzzles.Day2 qualified as Day2
|
||||||
@ -40,6 +40,6 @@ main =
|
|||||||
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
|
encodeUtf8 . pp <$> input
|
||||||
)
|
)
|
||||||
<> [testGroup "extra" $ extraTests isRealData ("../outputs/" <> t <> "/" <> pt <> "/extra/") input]
|
<> [testGroup "extra" $ extraTests isRealData ("../outputs/" <> t <> "/" <> pt <> "/extra/") input]
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
module Puzzle where
|
module Puzzle where
|
||||||
|
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
|
import Data.Text.Lazy qualified as TL
|
||||||
import Data.Void
|
import Data.Void
|
||||||
import Test.Tasty
|
import Test.Tasty
|
||||||
import Text.Megaparsec
|
import Text.Megaparsec
|
||||||
@ -8,6 +9,6 @@ import Text.Megaparsec
|
|||||||
data Puzzle = forall input. Puzzle
|
data Puzzle = forall input. Puzzle
|
||||||
{ number :: Word
|
{ number :: Word
|
||||||
, parser :: Parsec Void Text input
|
, parser :: Parsec Void Text input
|
||||||
, parts :: [input -> Text]
|
, parts :: [input -> TL.Text]
|
||||||
, extraTests :: Bool -> FilePath -> IO input -> [TestTree]
|
, extraTests :: Bool -> FilePath -> IO input -> [TestTree]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,7 @@ module Puzzles.Day1 (puzzle) where
|
|||||||
import Control.Monad.State
|
import Control.Monad.State
|
||||||
import Data.Bifunctor
|
import Data.Bifunctor
|
||||||
import Data.Functor
|
import Data.Functor
|
||||||
import Data.Text qualified as T
|
import Data.Text.Lazy qualified as TL
|
||||||
import Puzzle
|
import Puzzle
|
||||||
import Text.Megaparsec hiding (Pos)
|
import Text.Megaparsec hiding (Pos)
|
||||||
import Text.Megaparsec.Char
|
import Text.Megaparsec.Char
|
||||||
@ -15,14 +15,14 @@ puzzle =
|
|||||||
{ number = 1
|
{ number = 1
|
||||||
, parser = flip sepEndBy newline $ (,) <$> ((char 'L' $> L) <|> (char 'R' $> R)) <*> (Inc <$> Lex.decimal)
|
, parser = flip sepEndBy newline $ (,) <$> ((char 'L' $> L) <|> (char 'R' $> R)) <*> (Inc <$> Lex.decimal)
|
||||||
, parts =
|
, parts =
|
||||||
[ T.show
|
[ TL.show
|
||||||
. sum
|
. sum
|
||||||
. flip evalState 50
|
. flip evalState 50
|
||||||
. traverse \(d, i) -> do
|
. traverse \(d, i) -> do
|
||||||
modify $ snd . step i d
|
modify $ snd . step i d
|
||||||
p' <- get
|
p' <- get
|
||||||
pure $ Count if p' == 0 then 1 else 0
|
pure $ Count if p' == 0 then 1 else 0
|
||||||
, T.show
|
, TL.show
|
||||||
. sum
|
. sum
|
||||||
. flip evalState 50
|
. flip evalState 50
|
||||||
. traverse \(d, i) -> do
|
. traverse \(d, i) -> do
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import Data.Functor
|
|||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import Data.Text qualified as T
|
import Data.Text qualified as T
|
||||||
|
import Data.Text.Lazy qualified as TL
|
||||||
import Puzzle
|
import Puzzle
|
||||||
import Text.Megaparsec
|
import Text.Megaparsec
|
||||||
import Text.Megaparsec.Char
|
import Text.Megaparsec.Char
|
||||||
@ -16,11 +17,11 @@ puzzle =
|
|||||||
{ number = 2
|
{ number = 2
|
||||||
, parser = (<* newline) $ flip sepBy (char ',') $ (,) <$> (Lex.decimal <* char '-') <*> Lex.decimal
|
, parser = (<* newline) $ flip sepBy (char ',') $ (,) <$> (Lex.decimal <* char '-') <*> Lex.decimal
|
||||||
, parts =
|
, parts =
|
||||||
[ T.show
|
[ TL.show
|
||||||
. sum
|
. sum
|
||||||
. concatMap
|
. concatMap
|
||||||
(mapMaybe (\n -> guard (isRepetition2 n) $> n) . uncurry enumFromTo)
|
(mapMaybe (\n -> guard (isRepetition2 n) $> n) . uncurry enumFromTo)
|
||||||
, T.show
|
, TL.show
|
||||||
. sum
|
. sum
|
||||||
. concatMap
|
. concatMap
|
||||||
(mapMaybe (\n -> guard (isRepetitionN n) $> n) . uncurry enumFromTo)
|
(mapMaybe (\n -> guard (isRepetitionN n) $> n) . uncurry enumFromTo)
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import Data.List.Extra (dropEnd)
|
|||||||
import Data.List.NonEmpty (NonEmpty ((:|)), nonEmpty, some1)
|
import Data.List.NonEmpty (NonEmpty ((:|)), nonEmpty, some1)
|
||||||
import Data.List.NonEmpty qualified as NE
|
import Data.List.NonEmpty qualified as NE
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Text qualified as T
|
import Data.Text.Lazy qualified as TL
|
||||||
import Data.Word
|
import Data.Word
|
||||||
import Puzzle
|
import Puzzle
|
||||||
import Text.Megaparsec
|
import Text.Megaparsec
|
||||||
@ -19,10 +19,10 @@ puzzle =
|
|||||||
{ number = 3
|
{ number = 3
|
||||||
, parser = flip sepEndBy newline $ Bank . fmap (fromIntegral . digitToInt) <$> some1 digitChar
|
, parser = flip sepEndBy newline $ Bank . fmap (fromIntegral . digitToInt) <$> some1 digitChar
|
||||||
, parts =
|
, parts =
|
||||||
[ T.show
|
[ TL.show
|
||||||
. sum
|
. sum
|
||||||
. map (digitsToInt . fromMaybe (error "battery list too short") . maxBatteries 2)
|
. map (digitsToInt . fromMaybe (error "battery list too short") . maxBatteries 2)
|
||||||
, T.show
|
, TL.show
|
||||||
. sum
|
. sum
|
||||||
. map (digitsToInt . fromMaybe (error "battery list too short") . maxBatteries 12)
|
. map (digitsToInt . fromMaybe (error "battery list too short") . maxBatteries 12)
|
||||||
]
|
]
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import Data.Functor
|
|||||||
import Data.List.Extra
|
import Data.List.Extra
|
||||||
import Data.Sequence qualified as Seq
|
import Data.Sequence qualified as Seq
|
||||||
import Data.Text qualified as T
|
import Data.Text qualified as T
|
||||||
|
import Data.Text.Lazy qualified as TL
|
||||||
import Linear
|
import Linear
|
||||||
import Puzzle
|
import Puzzle
|
||||||
import Text.Megaparsec hiding (some)
|
import Text.Megaparsec hiding (some)
|
||||||
@ -18,11 +19,11 @@ puzzle =
|
|||||||
{ number = 4
|
{ number = 4
|
||||||
, parser = flip sepEndBy newline $ some $ asum $ enumerate <&> \t -> char (inToChar t) $> t
|
, parser = flip sepEndBy newline $ some $ asum $ enumerate <&> \t -> char (inToChar t) $> t
|
||||||
, parts =
|
, parts =
|
||||||
[ T.show
|
[ TL.show
|
||||||
. fst
|
. fst
|
||||||
. findAccessible
|
. findAccessible
|
||||||
. addCoords
|
. addCoords
|
||||||
, T.show
|
, TL.show
|
||||||
. sum
|
. sum
|
||||||
. unfoldr ((\r -> guard (fst r /= 0) $> r) . (removeAccessibleRolls <<<<$>>>>) . findAccessible)
|
. unfoldr ((\r -> guard (fst r /= 0) $> r) . (removeAccessibleRolls <<<<$>>>>) . findAccessible)
|
||||||
. addCoords
|
. addCoords
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user