about summary refs log tree commit diff
path: root/test/Xanthous/Data/EntityMapSpec.hs
blob: 53f03020f346dfe9a47b7b850170eb6febb5c887 (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
{-# LANGUAGE ApplicativeDo #-}
--------------------------------------------------------------------------------
module Xanthous.Data.EntityMapSpec where
--------------------------------------------------------------------------------
import           Test.Prelude
--------------------------------------------------------------------------------
import qualified Data.Aeson as JSON
--------------------------------------------------------------------------------
import           Xanthous.Data.EntityMap
--------------------------------------------------------------------------------

main :: IO ()
main = defaultMain test

test :: TestTree
test = localOption (QuickCheckTests 20)
  $ testGroup "Xanthous.Data.EntityMap"
  [ testBatch $ monoid @(EntityMap Int) mempty
  , testGroup "Deduplicate"
    [ testGroup "Semigroup laws"
      [ testProperty "associative" $ \(a :: Deduplicate (EntityMap Int)) b c ->
          a <> (b <> c) === (a <> b) <> c
      ]
    ]
  , testGroup "Eq laws"
    [ testProperty "reflexivity" $ \(em :: EntityMap Int) ->
        em == em
    , testProperty "symmetric" $ \(em₁ :: EntityMap Int) em₂ ->
        (em₁ == em₂) == (em₂ == em₁)
    , testProperty "transitive" $ \(em₁ :: EntityMap Int) em₂ em₃ ->
        if (em₁ == em₂ && em₂ == em₃)
        then (em₁ == em₃)
        else True
    ]
  , testGroup "JSON encoding/decoding"
    [ testProperty "Preserves IDs" $ \(em :: EntityMap Int) ->
        let Just em' = JSON.decode $ JSON.encode em
        in toEIDsAndPositioned em' === toEIDsAndPositioned em
    ]
  ]