import Control.Search.SetFunctions import TestLib import REDef import RE (consume) consumeDet r xs = sortValues (set2 consume r xs) testsConsume = [ "Eps" ~: consumeDet Eps "0101" ~?= ["0101"] , "Single match" ~: consumeDet (Single '0') "0011" ~?= ["011"] , "Single nomatch" ~: consumeDet (Single '1') "0011" ~?= [] , "01" ~: consumeDet (Cat (Single '0') (Single '1')) "01ab" ~?= ["ab"] , "0|01" ~: consumeDet (Or (Single '0') (Cat (Single '0') (Single '1'))) "01ab" ~?= ["1ab", "ab"] , "0*" ~: consumeDet (Star (Single '0')) "0011" ~?= ["0011", "011", "11"] , "0*0" ~: consumeDet (Cat (Star (Single '0')) (Single '0')) "0011" ~?= ["011", "11"] ] gen :: R -> String gen r | consume r xs =:= "" = xs where xs free genDet :: R -> [String] genDet r = sortValues (set1 gen r) testsGen = [ "gen Eps" ~: genDet Eps ~?= [""] , "gen 1" ~: genDet (Single '1') ~?= ["1"] , "gen 01" ~: genDet (Cat (Single '0') (Single '1')) ~?= ["01"] , "gen 0|01" ~: genDet (Or (Single '0') (Cat (Single '0') (Single '1'))) ~?= ["0", "01"] ] tests = [Group testsConsume, Group testsGen] main = testlibMain tests