spec :: Spec
spec = do
    describe "parseInput" $ do
        it "parses sample input correctly" $ do
            parseInput sampleInput `shouldBe` sampleParsed
        it "parses actual input correctly" $ do
            actualInput <- readFile "inputs/day15.txt"
            parseInput actualInput `shouldBe` actualParsed
    describe "satisfy" $ do
        it "works on sample" $ do
            satisfy (map makeRequirement sampleParsed) `shouldBe` 5
    describe "day15" $ do
        it "determines to drop the ball at time t=5 for sample input" $ do
            day15 sampleInput `shouldBe` 5
        it "determines to drop the ball at time t=400589 for actual input" $ do
            actualInput <- readFile "inputs/day15.txt"
            day15 actualInput `shouldBe` 400589
    describe "day15'" $ do
        it "determines to drop the ball at time t=85 for sample input" $ do
            day15' sampleInput `shouldBe` 85
        it "determines to drop the ball at time t=3045959 for actual input" $ do
            actualInput <- readFile "inputs/day15.txt"
            day15' actualInput `shouldBe` 3045959
spec :: Spec
spec = do
    describe "parseInput" $ do
        it "parses sample input correctly" $ do
            parseInput sampleInput `shouldBe` sampleParsed
        it "parses actual input correctly" $ do
            actualInput <- readFile "inputs/day15.txt"
            parseInput actualInput `shouldBe` actualParsed
    describe "satisfy" $ do
        it "works on sample" $ do
            satisfy (map makeRequirement sampleParsed) `shouldBe` 5
    describe "day15" $ do
        it "determines to drop the ball at time t=5 for sample input" $ do
            day15 sampleInput `shouldBe` 5
        it "determines to drop the ball at time t=400589 for actual input" $ do
            actualInput <- readFile "inputs/day15.txt"
            day15 actualInput `shouldBe` 400589
    describe "day15'" $ do
        it "determines to drop the ball at time t=85 for sample input" $ do
            day15' sampleInput `shouldBe` 85
        it "determines to drop the ball at time t=3045959 for actual input" $ do
            actualInput <- readFile "inputs/day15.txt"
            day15' actualInput `shouldBe` 3045959
spec = do
    describe "parseInput" $ do
        it "parses sample input correctly" $ do
            parseInput sampleInput `shouldBe` sampleParsed
        it "parses actual input correctly" $ do
            actualInput <- readFile "inputs/day15.txt"
            parseInput actualInput `shouldBe` actualParsed
    describe "satisfy" $ do
        it "works on sample" $ do
            satisfy (map makeRequirement sampleParsed) `shouldBe` 5
    describe "day15" $ do
        it "determines to drop the ball at time t=5 for sample input" $ do
            day15 sampleInput `shouldBe` 5
        it "determines to drop the ball at time t=400589 for actual input" $ do
            actualInput <- readFile "inputs/day15.txt"
            day15 actualInput `shouldBe` 400589
    describe "day15'" $ do
        it "determines to drop the ball at time t=85 for sample input" $ do
            day15' sampleInput `shouldBe` 85
        it "determines to drop the ball at time t=3045959 for actual input" $ do
            actualInput <- readFile "inputs/day15.txt"
            day15' actualInput `shouldBe` 3045959