{-# language ImportQualifiedPost #-} import Data.Set (Set) import Data.Set qualified as Set import REDef import RE (consume) import TestLib eqSet :: [String] -> [String] -> Test eqSet = checkRel MkRel{rel = e, relName = "equal up to order and dups"} where e xs ys = Set.fromList xs == Set.fromList ys -- So go through binary seach trees to compare. infix 5 `eqSet` tests = [ "Eps" ~: consume Eps "0101" `eqSet` ["0101"] , "Single match A" ~: consume (Single '0') "0011" `eqSet` ["011"] , "Single nomatch A" ~: consume (Single '1') "0011" `eqSet` [] , "01" ~: consume (Cat (Single '0') (Single '1')) "01ab" `eqSet` ["ab"] , "0|01" ~: consume (Or (Single '0') (Cat (Single '0') (Single '1'))) "01ab" `eqSet` ["1ab", "ab"] , "0*" ~: consume (Star (Single '0')) "0011" `eqSet` ["0011", "011", "11"] , "0*|0" ~: consume (Or (Star (Single '0')) (Single '0')) "0011" `eqSet` ["0011", "011", "11", "011"] , "0*0" ~: consume (Cat (Star (Single '0')) (Single '0')) "0011" `eqSet` ["011", "11"] ] main = testlibMain tests