{-# LANGUAGE DataKinds #-} -- For using P.viewGrammar {-# LANGUAGE Rank2Types #-} {-# LANGUAGE TypeApplications #-} module Golden.Grammar where import Control.Monad (Monad(..)) import Data.Bool (Bool(..)) import Data.Function (($)) import Data.Int (Int) import Data.Semigroup (Semigroup(..)) import Data.String (IsString(..)) import Test.Tasty import Test.Tasty.Golden import Text.Show (Show(..)) 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 ]