diff options
Diffstat (limited to '8puzzle/PuzzleTest.hs')
-rw-r--r-- | 8puzzle/PuzzleTest.hs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/8puzzle/PuzzleTest.hs b/8puzzle/PuzzleTest.hs new file mode 100644 index 0000000..cbd88af --- /dev/null +++ b/8puzzle/PuzzleTest.hs @@ -0,0 +1,37 @@ +import Test.Framework (defaultMain, testGroup) +import Test.Framework.Providers.QuickCheck2 (testProperty) +import Test.Framework.Providers.HUnit +import Test.HUnit +import Test.QuickCheck +import Test.QuickCheck.Gen +import qualified Data.Vector as V + +import Puzzle hiding (main) + +instance Arbitrary Puzzle where + arbitrary = do + size <- choose (1, 10) + board <- shuffle [0 .. (size*size - 1)] + return $ Puzzle size (V.fromList board) False + +tests = [ + testGroup "Board" + [ testProperty "neighbors have distance of 1" prop_neighborDistance, + testCase "basic distance" test_distance + ] + ] + +test_distance = distance puzzle @?= 4 + where puzzle = Puzzle 2 (V.fromList [1, 3, 2, 0]) False + +prop_neighborDistance p = all validNeighbor (neighbors p) + where validNeighbor n = abs (distance p - distance n) == 1 + +example = Puzzle 2 (V.fromList [1, 3, 2, 0]) False + +main = do + print example + putStrLn "Neighbors:" + mapM_ print (neighbors example) + putStrLn "" + defaultMain tests |