diff --git a/src/Types/GameBoard.hs b/src/Types/GameBoard.hs index f6516bf..1b81e3f 100644 --- a/src/Types/GameBoard.hs +++ b/src/Types/GameBoard.hs @@ -1,6 +1,7 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TupleSections #-} {-# LANGUAGE UndecidableInstances #-} module Types.GameBoard where @@ -20,8 +21,10 @@ data GameBoard mode = MkGameBoard , gameMode :: mode } -clear = undefined clear :: (GameMode mode) => BoardPosition -> BoardPosition -> GameBoard mode -> GameBoard mode +clear topLeft bottomRight gBoard@MkGameBoard{board} = gBoard{board = newCells} + where + newCells = board // map (,Nothing) (range (topLeft, bottomRight)) selectCheck :: (GameMode mode) => BoardPosition -> BoardPosition -> GameBoard mode -> Bool selectCheck topLeft bottomRight board@MkGameBoard{gameMode} = diff --git a/test/Spec.hs b/test/Spec.hs index 2cbed54..803b34e 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -3,7 +3,7 @@ module Spec where -import Data.Array (array) +import Data.Array (array, elems) import Display (displayText) import Test.Hspec import Types.GameBoard @@ -27,3 +27,7 @@ spec = describe "gameboard" do 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 (board cleared) `shouldBe` [Nothing, Nothing, Just $ IntTile 3, Just $ IntTile 4]