g2-0.2.0.0: tests/Simplifications.hs
{-# LANGUAGE OverloadedStrings #-}
module Simplifications (simplificationTests) where
import G2.Language.Simplification
import G2.Language.Syntax
import Test.Tasty
import Test.Tasty.HUnit
simplificationTests :: TestTree
simplificationTests =
testGroup "Simplifications" [
testCase "AppLamSimplification" (assertBool "Substituting two variables" simplifyAppLambdasTest1)
, testCase "AppLamSimplification" (assertBool "Substituting two variables" simplifyAppLambdasTest2)
, testCase "AppLamSimplification" (assertBool "Substituting a tyvar" simplifyTyVar1)
]
simplifyAppLambdasTest1 :: Bool
simplifyAppLambdasTest1 =
let
le = Lam TermL id1
. Lam TermL id2
$ App (Var id1) (Var id2)
e = App (App le (Var id3)) (Var id4)
in
simplifyAppLambdas e == App (Var id3) (Var id4)
simplifyAppLambdasTest2 :: Bool
simplifyAppLambdasTest2 =
let
le = Lam TermL id1
$ (App (Lam TermL id2 (Var id2)) (Var id1))
e = App le (Var id3)
in
simplifyAppLambdas e == Var id3
simplifyTyVar1 :: Bool
simplifyTyVar1 =
let
tyvar_id1 = Id (Name "tv_1" Nothing 0 Nothing) TYPE
tyvar_id2 = Id (Name "tv_2" Nothing 0 Nothing) TYPE
v_n = Name "v" Nothing 0 Nothing
v_id1 = Id v_n (TyVar tyvar_id1)
v_id2 = Id v_n (TyVar tyvar_id2)
le = Lam TypeL tyvar_id1 (Var v_id1)
e = App le (Var tyvar_id2)
in
simplifyAppLambdas e == Var v_id2
id1 :: Id
id1 = Id (Name "a" Nothing 0 Nothing) TyUnknown
id2 :: Id
id2 = Id (Name "b" Nothing 0 Nothing) TyUnknown
id3 :: Id
id3 = Id (Name "c" Nothing 0 Nothing) TyUnknown
id4 :: Id
id4 = Id (Name "d" Nothing 0 Nothing) TyUnknown