packages feed

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
  ]