packages feed

Earley-0.12.0.0: tests/ReversedWords.hs

module ReversedWords where
import Control.Applicative
import Test.Tasty
import Test.Tasty.HUnit as HU

import Text.Earley

someWords :: Grammar r (Prod r () Char [String])
someWords = return $ flip (:) <$> (map reverse <$> some (list "word")) <*> list "stop"

tests :: TestTree
tests = testGroup "Reversed words"
  [ HU.testCase "Parse" $
      let input = "wordwordstop"
          l     = length input in
      allParses (parser someWords) input
      @?= (,) [(["stop", "drow", "drow"], l)] Report { position   = l
                                                     , expected   = []
                                                     , unconsumed = []
                                                     }
  , HU.testCase "Generate" $
    upTo 16 (generator someWords "stopwrd")
    @?=
    [ (["stop", "drow"], "wordstop")
    , (["stop", "drow", "drow"], "wordwordstop")
    , (["stop","drow","drow","drow"],"wordwordwordstop")
    ]
  ]