about summary refs log tree commit diff
path: root/test/Xanthous/DataSpec.hs
diff options
context:
space:
mode:
Diffstat (limited to 'test/Xanthous/DataSpec.hs')
-rw-r--r--test/Xanthous/DataSpec.hs35
1 files changed, 35 insertions, 0 deletions
diff --git a/test/Xanthous/DataSpec.hs b/test/Xanthous/DataSpec.hs
new file mode 100644
index 000000000000..ba060b7ad289
--- /dev/null
+++ b/test/Xanthous/DataSpec.hs
@@ -0,0 +1,35 @@
+-- |
+
+module Xanthous.DataSpec where
+
+import Test.Prelude hiding (Right, Left, Down)
+import Xanthous.Data
+import Data.Group
+
+main :: IO ()
+main = defaultMain test
+
+test :: TestTree
+test = testGroup "Xanthous.Data"
+  [ testGroup "Position"
+    [ testBatch $ monoid @Position mempty
+    , testProperty "group laws" $ \(pos :: Position) ->
+        pos <> invert pos == mempty && invert pos <> pos == mempty
+    ]
+  , testGroup "Direction"
+    [ testProperty "opposite is involutive" $ \(dir :: Direction) ->
+        opposite (opposite dir) == dir
+    , testProperty "opposite provides inverse" $ \dir ->
+        invert (asPosition dir) == asPosition (opposite dir)
+    , testGroup "Move"
+      [ testCase "Up"        $ move Up mempty        @?= Position 0 (-1)
+      , testCase "Down"      $ move Down mempty      @?= Position 0 1
+      , testCase "Left"      $ move Left mempty      @?= Position (-1) 0
+      , testCase "Right"     $ move Right mempty     @?= Position 1 0
+      , testCase "UpLeft"    $ move UpLeft mempty    @?= Position (-1) (-1)
+      , testCase "UpRight"   $ move UpRight mempty   @?= Position 1 (-1)
+      , testCase "DownLeft"  $ move DownLeft mempty  @?= Position (-1) 1
+      , testCase "DownRight" $ move DownRight mempty @?= Position 1 1
+      ]
+    ]
+  ]