summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/Test.hs16
1 files changed, 16 insertions, 0 deletions
diff --git a/test/Test.hs b/test/Test.hs
index c5c694e..e07fcc5 100644
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -27,6 +27,15 @@ atAnyState ok pgn = and [ok b | Right b <- seqList [moveSAN m | m <- moves pgn]
seqList _ (Left _) = []
seqList [] _ = []
+atAnyTwoStates :: (Board -> Board -> Bool) -> PGN -> Bool
+atAnyTwoStates ok pgn = and [ok b1 b2 | Right b1 <- seqList [moveSAN m | m <- moves pgn] | Right b2 <- seqList [moveSAN m | m <- moves pgn] $ Right defaultBoard]
+ where
+ seqList :: [r -> Either e r] -> Either e r -> [Either e r]
+ seqList (f:fs) (Right io) = f io:seqList fs (f io)
+ seqList _ (Left _) = []
+ seqList [] _ = []
+
+
prop_checkPGN :: PGN -> Bool
prop_checkPGN pgn
| isLeft parsed = False
@@ -75,5 +84,12 @@ prop_only_2_kings = atAnyState (\b ->
where
pieceCoords clr brd piece = [i | (i, pc) <- (assocs $ board brd), pc == Just (Piece clr piece)]
+prop_number_of_pieces :: PGN -> Bool
+prop_number_of_pieces = atAnyTwoStates (\b1 b2 ->
+ length (pieceCoords Nothing Nothing b1) == length (pieceCoords Nothing Nothing b2)
+ ||
+ length (pieceCoords Nothing Nothing b1) - 1 == length (pieceCoords Nothing Nothing b2)
+ )
+
return []
main = $forAllProperties (quickCheckWithResult (stdArgs {maxSuccess=10000}))