packages feed

axel-0.0.6: test/Axel/Test/DenormalizeSpec.hs

{-# LANGUAGE TypeApplications #-}

module Axel.Test.DenormalizeSpec where

import Axel.Denormalize
import Axel.Error
import Axel.Normalize
import qualified Axel.Test.ASTGen as ASTGen
import Axel.Test.MockUtils

import Control.Monad.Freer as Eff
import Control.Monad.Freer.Error (runError)

import Hedgehog

hprop_normalizeExpression_is_the_inverse_of_denormalizeExpression :: Property
hprop_normalizeExpression_is_the_inverse_of_denormalizeExpression =
  property $ do
    expr <- forAll ASTGen.genExpression
    expr ===
      unwrapRight
        (Eff.run . runError @Error $
         normalizeExpression (denormalizeExpression expr))

hprop_normalizeStatement_is_the_inverse_of_denormalizeStatement :: Property
hprop_normalizeStatement_is_the_inverse_of_denormalizeStatement =
  property $ do
    stmt <- forAll ASTGen.genStatement
    stmt ===
      unwrapRight
        (Eff.run . runError @Error $
         normalizeStatement (denormalizeStatement stmt))