packages feed

rest-rewrite-0.4.1: test/MultisetOrder.hs

module MultisetOrder where

import Prelude hiding (GT)


import Control.Monad.Identity

import Language.REST.Internal.MultiSet as M
import Language.REST.Internal.MultisetOrder
import Language.REST.WQOConstraints.Strict as SC
import Language.REST.WQOConstraints as OC
import Language.REST.Types

compareChar :: ConstraintGen impl Char Char Identity
compareChar impl r oc c1 c2 = Identity $ intersectRelation impl oc (c1, c2, r)

existingOC :: StrictOC Char
existingOC = OC.intersectRelation strictOC' SC.noConstraints ('a', 'c', GTE)

ms :: StrictOC Char -> MultiSet Char -> MultiSet Char -> Identity (StrictOC Char)
ms = multisetOrder compareChar strictOC' GTE

multisetNext :: Identity (StrictOC Char)
multisetNext = ms existingOC (M.fromList "bac") (M.fromList "aaaa")

unsat :: Identity (StrictOC Char)
unsat = do
  mn <- multisetNext
  return $ OC.intersectRelation strictOC' mn ('c', 'a', GT)

tests :: [(String, Bool)]
tests = [
    ("Constraints",
     SC.noConstraints /=
     runIdentity (ms SC.noConstraints (M.fromList "bc") (M.fromList "aa")))
  , ("Unsat", SC.isUnsatisfiable $ runIdentity unsat)
  ]