From 4b34e48a59d6f7c415b07e7db6a378191a6d1e6a Mon Sep 17 00:00:00 2001 From: Sidharth Kulkarni Date: Sat, 9 May 2026 09:10:16 -0700 Subject: [PATCH] player move tests --- test/Spec.hs | 70 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 52 insertions(+), 18 deletions(-) diff --git a/test/Spec.hs b/test/Spec.hs index 01c162e..6263306 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -4,30 +4,64 @@ module Spec where import Data.Array (array, elems) +import Data.Sequence qualified as S import Display (displayText) +import Optics import Test.Hspec +import Types.BoardAction import Types.GameBoard import Types.GameMode (SumTo (MkSumTo), Tile (IntTile)) +import Types.GameState +import Types.Player spec :: Spec -spec = describe "gameboard" do - let tiles = - array - ((0, 0), (1, 1)) - [ ((0, 0), Just $ IntTile 1) - , ((0, 1), Just $ IntTile 2) - , ((1, 0), Just $ IntTile 3) - , ((1, 1), Just $ IntTile 4) - ] - gameBoard = MkGameBoard{width = 2, height = 2, gameMode = MkSumTo 10, cells = tiles} +spec = do + describe "gameboard" do + let tiles = + array + ((0, 0), (1, 1)) + [ ((0, 0), Just $ IntTile 1) + , ((0, 1), Just $ IntTile 2) + , ((1, 0), Just $ IntTile 3) + , ((1, 1), Just $ IntTile 4) + ] + gameBoard = MkGameBoard{width = 2, height = 2, gameMode = MkSumTo 10, cells = tiles} - it "displays correctly" do - displayText gameBoard `shouldBe` "1 2 \n3 4 \n" + it "displays correctly" do + displayText gameBoard `shouldBe` "1 2 \n3 4 \n" - it "validates a move" do - selectCheck (0, 0) (1, 1) gameBoard `shouldBe` True - selectCheck (0, 0) (0, 1) gameBoard `shouldBe` False + it "validates a move" do + selectCheck (0, 0) (1, 1) gameBoard `shouldBe` True + selectCheck (0, 0) (0, 1) gameBoard `shouldBe` False - it "clears properly" do - let cleared = clear (0, 0) (0, 1) gameBoard - elems (cells cleared) `shouldBe` [Nothing, Nothing, Just $ IntTile 3, Just $ IntTile 4] + it "clears properly" do + let cleared = clear (0, 0) (0, 1) gameBoard + elems (cells cleared) `shouldBe` [Nothing, Nothing, Just $ IntTile 3, Just $ IntTile 4] + + describe "player moves" do + let tiles = + array + ((0, 0), (1, 1)) + [ ((0, 0), Just $ IntTile 5) + , ((0, 1), Just $ IntTile 5) + , ((1, 0), Just $ IntTile 1) + , ((1, 1), Just $ IntTile 2) + ] + gameBoard = MkGameBoard{width = 2, height = 2, gameMode = MkSumTo 10, cells = tiles} + initialState = MkGameState{board = gameBoard, players = S.fromList [MkPlayerState (MkPlayerName "P1") 0]} + + it "increases score if sum equals target" do + let action = SelectSquare (0, 0) (0, 1) + newState = makeMove (MkPlayerIndex 0) action initialState + + preview (#players % ix 0 % #score) newState `shouldBe` Just 1 + + it "does not increase score if sum does not equal target" do + let invalidAction = SelectSquare (0, 0) (1, 0) + newState = makeMove (MkPlayerIndex 0) invalidAction initialState + preview (#players % ix 0 % #score) newState `shouldBe` Just 0 + + it "does not change anything if invalid player index is provided" do + let action = SelectSquare (0, 0) (0, 1) + newState = makeMove (MkPlayerIndex 99) action initialState + preview (#players % ix 99 % #score) newState `shouldBe` Nothing