-- |
-- Module : test-stlc
-- Copyright : (c) 2014, Aleksey Kliger
-- License : BSD3 (See LICENSE)
-- Maintainer : Aleksey Kliger
-- Stability : experimental
--
{-# LANGUAGE DeriveGeneric, DeriveDataTypeable #-}
module TestCalc (test_calc) where
import Unbound.Generics.LocallyNameless
import Calc
import Test.Tasty
import Test.Tasty.HUnit
import AlphaAssertions
test_ex1 :: TestTree
test_ex1 = testCase "example 1" $ assertAeq (runWhnf emptyEnv ex1) (Just $ C 3)
test_ex2_open :: TestTree
test_ex2_open = testCase "example 2 (open)" $ assertBool "alpha equivalent" (not $ aeq ex2x ex2y)
test_ex2_closed :: TestTree
test_ex2_closed = testCase "example 2 (closed)" $ assertAeq ex2xc ex2yc
test_ex3 :: TestTree
test_ex3 = testCase "example 3" $ assertAeq ex3x ex3y
test_ex4 :: TestTree
test_ex4 = testCase "example 4 (let scoping)" $ assertAeq (runWhnf emptyEnv ex4) (Just ex4_ans)
test_ex5 :: TestTree
test_ex5 = testCase "example 5 (let* scoping)" $ assertAeq (runWhnf emptyEnv ex5) (Just ex5_ans)
test_ex6 :: TestTree
test_ex6 = testCase "example 6 (free variables)" $ assertAeq (anyFreeVarList ex6) ex6_ans
test_ex7 :: TestTree
test_ex7 = testCase "example 7 (sorted free variables)" $ assertAeq (freeVarList ex7) ex7_ans
test_calc :: TestTree
test_calc =
testGroup "calc"
[test_ex1
, test_ex2_open
, test_ex2_closed
, test_ex3
, test_ex4
, test_ex5
, test_ex6
, test_ex7
]