diff options
author | Erin van der Veen | 2017-11-20 13:37:47 +0100 |
---|---|---|
committer | Erin van der Veen | 2017-11-20 13:37:47 +0100 |
commit | 04332ff5dc10280e44ef148316010ce282620b95 (patch) | |
tree | d43267faadc944e99ae8fdf158db1f0717778790 /test/Test.hs | |
parent | Merge branch '3-quickcheck-property-there-should-not-ever-be-more-than-2-king... (diff) |
Add number of pieces property test
Diffstat (limited to 'test/Test.hs')
-rw-r--r-- | test/Test.hs | 16 |
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})) |