about summary refs log tree commit diff
path: root/test/Xanthous/DataSpec.hs
blob: 2c9f9dd3f9b1cb600e839006640fc48256382536 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
-- |

module Xanthous.DataSpec (main, test) 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
      ]
    ]
  ]