Files
advent-of-code-2022/test/Day8Spec.hs
Jens Kadenbach ce3466f746 Day 8 - cleanup
2022-12-08 13:58:34 +01:00

65 lines
1.6 KiB
Haskell

{-# LANGUAGE QuasiQuotes #-}
module Day8Spec (spec) where
import Test.Hspec
import Text.Heredoc
import Control.Arrow ((>>>))
import qualified Data.Matrix as M
import qualified Data.Vector as V
import Day8
testInput :: String
testInput = [str|30373
|25512
|65332
|33549
|35390
|]
testVisibility :: Visibillity
testVisibility = M.fromList 5 5
[x,x,x,x,x,
x,x,x,o,x,
x,x,o,x,x,
x,o,x,o,x,
x,x,x,x,x]
where
x = True
o = False
smallForest :: String
smallForest = [str|1234
|5678
|9012
|]
parsedSmallForest :: Forest
parsedSmallForest = M.fromList 3 4 $ [1..9] ++ [0,1,2]
spec :: Spec
spec =
describe "Day8" $ do
describe "Part1" $ do
it "parses a forest" $ do
parseForest smallForest `shouldBe` parsedSmallForest
it "checks visibility" $ do
let forest = parseForest testInput
checkVisibility forest `shouldBe` testVisibility
it "counts visible things" $ do
let v = parseForest >>>
checkVisibility >>>
countVisible $ testInput
v `shouldBe` 21
describe "Part2" $ do
it "calculates viewing distance from height" $ do
viewingDistance 5 (V.fromList [3]) `shouldBe` 1
viewingDistance 5 (V.fromList [5,2]) `shouldBe` 1
viewingDistance 5 (V.fromList [1,2]) `shouldBe` 2
viewingDistance 5 (V.fromList [3,5,3]) `shouldBe` 2
it "calculates the scenic score" $ do
let s = parseForest >>>
findMaxScenicScore $ testInput
s `shouldBe` 8