packages feed

crdt-1.0: test/ArbitraryOrphans.hs

{-# OPTIONS_GHC -Wno-orphans #-}

{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE StandaloneDeriving #-}

module ArbitraryOrphans () where

import           Test.QuickCheck (Arbitrary (..), arbitraryBoundedEnum, oneof)

import           CRDT.Cm.Counter (Counter (..), CounterOp (..))
import           CRDT.Cm.GSet (Add (..))
import           CRDT.Cm.LWW (Assign (..), LWW (..))
import           CRDT.Cm.TPSet (TPSet (..), TPSetOp (..))
import qualified CRDT.Cm.TPSet as TPSet
import           CRDT.Cv.GCounter (GCounter (..))
import           CRDT.Cv.Max (Max (..))
import           CRDT.Cv.PNCounter (PNCounter (..))
import           LamportClock (Pid (..), Timestamp (..))

deriving instance Arbitrary a => Arbitrary (Counter a)

instance Arbitrary (CounterOp a) where
    arbitrary = arbitraryBoundedEnum

deriving instance Arbitrary a => Arbitrary (Add a)

deriving instance Arbitrary a => Arbitrary (Assign a)

instance Arbitrary a => Arbitrary (LWW a) where
    arbitrary = LWW <$> arbitrary <*> arbitrary

deriving instance (Arbitrary a, Ord a) => Arbitrary (TPSet a)

instance Arbitrary a => Arbitrary (TPSetOp a) where
    arbitrary = oneof [TPSet.Add <$> arbitrary, Remove <$> arbitrary]

deriving instance Arbitrary a => Arbitrary (GCounter a)

deriving instance Arbitrary a => Arbitrary (Max a)

instance Arbitrary a => Arbitrary (PNCounter a) where
    arbitrary = PNCounter <$> arbitrary <*> arbitrary

deriving instance Arbitrary Pid

instance Arbitrary Timestamp where
    arbitrary = Timestamp <$> arbitrary <*> arbitrary