{-# 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 = "test/Golden/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 = "test/Golden/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 ]