symantic-parser-0.2.0.20210703: test/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 ..]) $ \gram g ->
let grammarFile = getGoldenDir $ "Grammar/ViewGrammar/G"<>show g<>".expected.txt" in
goldenVsStringDiff ("G"<>show g) goldenDiff grammarFile $ do
resetTHNameCounter
return $ fromString $ show $
P.viewGrammar @'False gram
, testGroup "OptimizeGrammar" $
(\f -> List.zipWith f Grammar.grammars [1::Int ..]) $ \gram g ->
let grammarFile = getGoldenDir $ "Grammar/OptimizeGrammar/G"<>show g<>".expected.txt" in
goldenVsStringDiff ("G"<>show g) goldenDiff grammarFile $ do
resetTHNameCounter
return $ fromString $ show $
P.viewGrammar @'False $
P.optimizeGrammar gram
]