This commit is contained in:
Jens Kadenbach
2022-12-12 09:57:32 +01:00
parent 08306ed57d
commit 17e4d9d0ab
5 changed files with 415 additions and 1 deletions

193
test/Day10Spec.hs Normal file
View File

@@ -0,0 +1,193 @@
{-# LANGUAGE QuasiQuotes #-}
module Day10Spec (spec) where
import Control.Arrow ((>>>))
import Day10
import Test.Hspec
import Text.Heredoc
testInput :: String
testInput = [str|noop
|addx 3
|addx -5
|]
testProgram :: [Instruction]
testProgram = [Noop, Addx 3, Addx (-5)]
testInput2 :: String
testInput2 = [str|addx 15
|addx -11
|addx 6
|addx -3
|addx 5
|addx -1
|addx -8
|addx 13
|addx 4
|noop
|addx -1
|addx 5
|addx -1
|addx 5
|addx -1
|addx 5
|addx -1
|addx 5
|addx -1
|addx -35
|addx 1
|addx 24
|addx -19
|addx 1
|addx 16
|addx -11
|noop
|noop
|addx 21
|addx -15
|noop
|noop
|addx -3
|addx 9
|addx 1
|addx -3
|addx 8
|addx 1
|addx 5
|noop
|noop
|noop
|noop
|noop
|addx -36
|noop
|addx 1
|addx 7
|noop
|noop
|noop
|addx 2
|addx 6
|noop
|noop
|noop
|noop
|noop
|addx 1
|noop
|noop
|addx 7
|addx 1
|noop
|addx -13
|addx 13
|addx 7
|noop
|addx 1
|addx -33
|noop
|noop
|noop
|addx 2
|noop
|noop
|noop
|addx 8
|noop
|addx -1
|addx 2
|addx 1
|noop
|addx 17
|addx -9
|addx 1
|addx 1
|addx -3
|addx 11
|noop
|noop
|addx 1
|noop
|addx 1
|noop
|noop
|addx -13
|addx -19
|addx 1
|addx 3
|addx 26
|addx -30
|addx 12
|addx -1
|addx 3
|addx 1
|noop
|noop
|noop
|addx -9
|addx 18
|addx 1
|addx 2
|noop
|noop
|addx 9
|noop
|noop
|noop
|addx -1
|addx 2
|addx -37
|addx 1
|addx 3
|noop
|addx 15
|addx -21
|addx 22
|addx -6
|addx 1
|noop
|addx 2
|addx 1
|noop
|addx -10
|noop
|noop
|addx 20
|addx 1
|addx 2
|addx 2
|addx -6
|addx -11
|noop
|noop
|noop
|]
spec :: Spec
spec =
describe "Day10" $ do
describe "Part1" $ do
it "parses" $ do
parseProgram testInput `shouldBe` testProgram
it "executes" $ do
executeProgram testProgram `shouldBe` [1,1,1,4,4,-1]
it "executes larger program" $ do
let registerValues = parseProgram >>> executeProgram $ testInput2
registerValues !! 20 `shouldBe` 21
registerValues !! 60 `shouldBe` 19
registerValues !! 100 `shouldBe` 18
registerValues !! 140 `shouldBe` 21
registerValues !! 180 `shouldBe` 16
registerValues !! 220 `shouldBe` 18
it "computes signal strength" $ do
let registerValues = parseProgram >>> executeProgram $ testInput2
signalStrength registerValues `shouldBe` 13140
it "prints a crt" $ do
let registerValues = parseProgram >>> executeProgram $ testInput2
putStrLn $ draw registerValues
it "sprites drawn" $ do
isSpriteDrawn 1 1 `shouldBe` True
isSpriteDrawn 1 1 `shouldBe` True