packages feed

context-free-grammar-0.1.1: tests/Data/Cfg/BnfTests.hs

{-# 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 . |]

-}