packages feed

crdt-1.0: test/PNCounter.hs

{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}

module PNCounter
    ( pnCounter
    ) where

import           Test.Tasty (TestTree, testGroup)
import           Test.Tasty.QuickCheck (testProperty)

import           CRDT.Cv.PNCounter (PNCounter (..), decrement, increment, query)

import           GCounter ()
import           Laws (cvrdtLaws)

pnCounter :: TestTree
pnCounter = testGroup "PNCounter"
    [ cvrdtLaws @(PNCounter Int)
    , testProperty "increment" $
        \(counter :: PNCounter Int) i ->
            query (increment i counter) == succ (query counter)
    , testProperty "decrement" $
        \(counter :: PNCounter Int) i ->
            query (decrement i counter) == pred (query counter)
    ]