module Language.HaLex.Test_HaLex ( test_size_fa
, test_gen_sentences
) where
import Language.HaLex.Dfa
import Language.HaLex.Ndfa
import Language.HaLex.RegExp
import Language.HaLex.RegExp2Fa
import Language.HaLex.RegExpParser
import Language.HaLex.FaOperations
import Language.HaLex.Minimize
import Language.HaLex.Sentences
import Language.HaLex.FaClasses
import Data.Maybe
import Data.List
import Test.HUnit
test_size_fa :: (Ord st, Ord sy, Show st, Show sy)
=> Ndfa st sy -> Test
test_size_fa ndfa = TestList [ sizeFa dfa_min <= sizeFa dfa ~?= True
, sizeFa dfa_min <= sizeFa ndfa ~?= True
]
where dfa = ndfa2dfa ndfa
dfa_min = minimizeDfa dfa
test_gen_sentences :: (Ord sy, Show sy) => RegExp sy -> Test
test_gen_sentences re =
TestList [ and (map (matches' re) sentences_re) ~?= True
, and (map (accept ndfa) sentences_re) ~?= True
, and (map (accept dfa) sentences_re) ~?= True
, and (map (accept dfa_min) sentences_re) ~?= True
]
where sentences_re = sentencesRegExp re
ndfa = regExp2Ndfa re
dfa = ndfa2dfa ndfa
dfa_min = minimizeDfa dfa
re = fromJust $ parseRegExp "('+'|'-')?[0-9]*('.'?)[0-9]+"
re'' = fromJust $ parseRegExp "a[^a]*a"
ndfa = regExp2Ndfa re
dfa = ndfa2dfa ndfa
dfa_int = beautifyDfa dfa
dfa_min = minimizeDfa dfa_int
dfa_min' = beautifyDfa dfa_min
test_acceptNdfa = TestList [ ndfaaccept ndfa "109" ~?= True
, ndfaaccept ndfa "+13" ~?= True
, ndfaaccept ndfa "-13.4" ~?= True
, ndfaaccept ndfa "-.15" ~?= True
, ndfaaccept ndfa "+0.123" ~?= True
, ndfaaccept ndfa "-.2.3" ~?= False
, ndfaaccept ndfa "" ~?= False
]
test_acceptDfa = TestList [ dfaaccept dfa "109" ~?= True
, dfaaccept dfa "+13" ~?= True
, dfaaccept dfa "-13.4" ~?= True
, dfaaccept dfa "-.15" ~?= True
, dfaaccept dfa "+0.123" ~?= True
, dfaaccept dfa "-.2.3" ~?= False
, dfaaccept dfa "" ~?= False
]
test_acceptDfamin = TestList [ dfaaccept dfa_min "109" ~?= True
, dfaaccept dfa_min "+13" ~?= True
, dfaaccept dfa_min "-13.4" ~?= True
, dfaaccept dfa_min "-.15" ~?= True
, dfaaccept dfa_min "+0.123" ~?= True
, dfaaccept dfa_min "-.2.3" ~?= False
, dfaaccept dfa_min "" ~?= False
]
dfaToHaskell = toHaskell dfa_int "Dfa_RE"
re' = fromJust $ parseRegExp "[a-z][a-z]*"
main = do runTestTT test_acceptNdfa
runTestTT test_acceptDfa
runTestTT test_acceptDfamin
runTestTT $ test_size_fa (regExp2Ndfa re)
runTestTT $ test_size_fa (regExp2Ndfa re')
runTestTT $ test_gen_sentences re
runTestTT $ test_gen_sentences re'