symantic-parser-0.2.1.20210803: tests/Golden/Grammar.hs
{-# LANGUAGE DataKinds #-} -- For using P.viewGrammar
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE TypeApplications #-}
module Golden.Grammar where
import Data.Bool (Bool(..))
import Control.Monad (Monad(..))
import Data.Function (($))
import Data.Semigroup (Semigroup(..))
import Data.String (IsString(..))
import Test.Tasty
import Test.Tasty.Golden
import Text.Show (Show(..))
import Data.Int (Int)
import qualified Data.List as List
import Golden.Utils
import qualified Symantic.Parser as P
import qualified Grammar
goldens :: TestTree
goldens = testGroup "Grammar" $
[ testGroup "ViewGrammar" $
(\f -> List.zipWith f Grammar.grammars [1::Int ..]) $ \g gNum ->
let grammarFile = getGoldenDir $ "Grammar/ViewGrammar/G"<>show gNum<>".expected.txt" in
goldenVsStringDiff ("G"<>show gNum) goldenDiff grammarFile $ do
resetTHNameCounter
return $ fromString $ show $
P.viewGrammar @'False g
, testGroup "OptimizeGrammar" $
(\f -> List.zipWith f Grammar.grammars [1::Int ..]) $ \g gNum ->
let grammarFile = getGoldenDir $ "Grammar/OptimizeGrammar/G"<>show gNum<>".expected.txt" in
goldenVsStringDiff ("G"<>show gNum) goldenDiff grammarFile $ do
resetTHNameCounter
return $ fromString $ show $
P.viewGrammar @'False $
P.optimizeGrammar g
]