packages feed

decision-diagrams-0.1.0.0: test/Utils.hs

{-# LANGUAGE RankNTypes #-}
module Utils
  ( forAllItemOrder
  ) where

import Data.Proxy
import Test.QuickCheck

import Data.DecisionDiagram.BDD.Internal.ItemOrder

data SomeItemOrder
  = AscOrder
  | DescOrder
  deriving (Show, Enum, Bounded)

instance Arbitrary SomeItemOrder where
  arbitrary = arbitraryBoundedEnum

forAllItemOrder :: Testable prop => (forall o. ItemOrder o => Proxy o -> prop) -> Property
forAllItemOrder k =
  forAll arbitrary $ \o ->
    case o of
      AscOrder -> withAscOrder k
      DescOrder -> withDescOrder k