import Lib import Test.Tasty import Test.Tasty.HUnit main :: IO () main = defaultMain $ testGroup "Minesweeper tests" [flagTileTest, revealTileTest] emptyBoard :: Board emptyBoard = Board [[]] hiddenBoard :: Board hiddenBoard = Board [ [Bomb Hidden, Value 1 Hidden, Value 0 Hidden] , [Value 1 Hidden, Value 1 Hidden, Value 0 Hidden] , [Value 0 Hidden, Value 0 Hidden, Value 0 Hidden] ] revealedBoard :: Board revealedBoard = Board [ [Bomb Revealed, Value 1 Revealed, Value 0 Revealed] , [Value 1 Revealed, Value 1 Revealed, Value 0 Revealed] , [Value 0 Revealed, Value 0 Revealed, Value 0 Revealed] ] flagTileTest :: TestTree flagTileTest = testGroup "Flag tile" [ testCase "Empty board" $ flagTile (1, 1) emptyBoard @?= emptyBoard , testCase "Flag bomb tile" $ flagTile (0, 0) hiddenBoard @?= Board [ [Bomb Flagged, Value 1 Hidden, Value 0 Hidden] , [Value 1 Hidden, Value 1 Hidden, Value 0 Hidden] , [Value 0 Hidden, Value 0 Hidden, Value 0 Hidden] ] , testCase "Flag value tile" $ flagTile (2, 0) hiddenBoard @?= Board [ [Bomb Hidden, Value 1 Hidden, Value 0 Flagged] , [Value 1 Hidden, Value 1 Hidden, Value 0 Hidden] , [Value 0 Hidden, Value 0 Hidden, Value 0 Hidden] ] , testCase "Flag revealed bomb tile" $ flagTile (0, 0) revealedBoard @?= revealedBoard , testCase "Flag revealed value tile" $ flagTile (1, 2) revealedBoard @?= revealedBoard ] revealTileTest :: TestTree revealTileTest = testGroup "Reveal tile" [ testCase "Empty board" $ revealTile (1, 1) emptyBoard @?= emptyBoard , testCase "Reveal bomb tile" $ revealTile (0, 0) hiddenBoard @?= revealedBoard , testCase "Flag 0 value tile" $ revealTile (2, 0) hiddenBoard @?= Board [ [Bomb Hidden, Value 1 Revealed, Value 0 Revealed] , [Value 1 Revealed, Value 1 Revealed, Value 0 Revealed] , [Value 0 Revealed, Value 0 Revealed, Value 0 Revealed] ] , testCase "Flag non 0 value tile" $ revealTile (1, 0) hiddenBoard @?= Board [ [Bomb Hidden, Value 1 Revealed, Value 0 Hidden] , [Value 1 Hidden, Value 1 Hidden, Value 0 Hidden] , [Value 0 Hidden, Value 0 Hidden, Value 0 Hidden] ] , testCase "Flag revealed bomb tile" $ revealTile (0, 0) revealedBoard @?= revealedBoard , testCase "Flag revealed value tile" $ revealTile (1, 2) revealedBoard @?= revealedBoard ]