about summary refs log tree commit diff
path: root/users/aspen/xanthous/test/Xanthous/Entities/RawTypesSpec.hs
blob: e23f7faba3a692444decaa6aec58491deee0e87b (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
36
37
38
39
40
41
42
43
44
45
{-# LANGUAGE RecordWildCards #-}
--------------------------------------------------------------------------------
module Xanthous.Entities.RawTypesSpec (main, test) where
--------------------------------------------------------------------------------
import           Test.Prelude
--------------------------------------------------------------------------------
import           Data.Interval (Extended(..), (<=..<=))
--------------------------------------------------------------------------------
import           Xanthous.Entities.RawTypes
--------------------------------------------------------------------------------

main :: IO ()
main = defaultMain test

test :: TestTree
test = testGroup "Xanthous.Entities.RawTypesSpec"
  [ testGroup "CreatureGenerateParams"
    [ testGroup "Ord laws"
      [ testProperty "comparability" $ \(a :: CreatureGenerateParams) b ->
          a <= b || b <= a
      , testProperty "transitivity" $ \(a :: CreatureGenerateParams) b c ->
          a <= b && b <= c ==> a <= c
      , testProperty "reflexivity" $ \(a :: CreatureGenerateParams) ->
          a <= a
      , testProperty "antisymmetry" $ \(a :: CreatureGenerateParams) b ->
          (a <= b && b <= a) == (a == b)
      ]
    , testGroup "canGenerate" $
      let makeParams minB maxB =
            let _levelRange = maybe NegInf Finite minB <=..<= maybe PosInf Finite maxB
                _equippedItem = Nothing
            in CreatureGenerateParams {..}
      in
        [ testProperty "no bounds" $ \level ->
            let gps = makeParams Nothing Nothing
            in canGenerate level gps
        , testProperty "min bound" $ \level minB ->
            let gps = makeParams (Just minB) Nothing
            in canGenerate level gps === (level >= minB)
        , testProperty "max bound" $ \level maxB ->
            let gps = makeParams Nothing (Just maxB)
            in canGenerate level gps === (level <= maxB)
        ]
    ]
  ]