packages feed

rest-rewrite-0.1: test/MultisetOrder.hs

module MultisetOrder where

import Prelude hiding (GT)


import Control.Monad.Identity
import Debug.Trace (trace)

import Language.REST.MultiSet as M
import Language.REST.MultisetOrder
import Language.REST.OrderingConstraints.Strict as SC
import Language.REST.OrderingConstraints 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 = OC.intersectRelation strictOC' SC.noConstraints ('a', 'c', GTE)

ms = multisetOrder compareChar strictOC' GTE

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)
  ]