{-# LANGUAGE QuasiQuotes #-} module Data.Cfg.BnfTests ( tests ) where import Data.Cfg.Bnf import Data.Cfg.Cfg import Data.Cfg.FreeCfg import qualified Data.Set as S import Test.Framework (Test, testGroup) import Test.Framework.Providers.HUnit (testCase) import Test.HUnit (assertEqual) tests :: Test tests = testGroup "Data.Cfg.Bnf" [test] test :: Test test = testCase "bnf quasiquoter sanity test" $ do assertEqual "startSymbol works" "foo" (startSymbol cfg') assertEqual "terminals works" 5 (S.size $ terminals cfg') assertEqual "nonterminals works" 2 (S.size $ nonterminals cfg') assertEqual "productions count works" 3 (length $ productions cfg') where cfg' = toFreeCfg gram' gram' = [bnf|foo ::= A B C D bar. foo ::= . bar ::= E A B. |] {- Test code for yieldCfg. import Data.Cfg.RuleApplication py :: Int -> IO () py n = mapM_ print $ take n y where y = yieldCfg cfg cfg = gramToCfg' gram' gram' = [gram|digits ::= digit | digit digits . digit ::= O | I . |] -}