-- | -- Module : test-stlc -- Copyright : (c) 2014, Aleksey Kliger -- License : BSD3 (See LICENSE) -- Maintainer : Aleksey Kliger -- Stability : experimental -- {-# LANGUAGE DeriveGeneric, DeriveDataTypeable #-} module Main where import Unbound.Generics.LocallyNameless import Calc import Test.HUnit test_ex1 :: Test test_ex1 = TestCase $ assertBool "example 1" (runWhnf emptyEnv ex1 `aeq` (Just $ C 3)) test_ex2_open :: Test test_ex2_open = TestCase $ assertBool "example 2 (open)" (not $ aeq ex2x ex2y) test_ex2_closed :: Test test_ex2_closed = TestCase $ assertBool "example 2 (closed)" (aeq ex2xc ex2yc) test_ex3 :: Test test_ex3 = TestCase $ assertBool "example 3" (aeq ex3x ex3y) test_ex4 :: Test test_ex4 = TestCase $ assertBool "example 4 (let scoping)" (runWhnf emptyEnv ex4 `aeq` Just ex4_ans) test_ex5 :: Test test_ex5 = TestCase $ assertBool "example 5 (let* scoping)" (runWhnf emptyEnv ex5 `aeq` Just ex5_ans) test_ex6 :: Test test_ex6 = TestCase $ assertBool "example 6 (free variables)" (anyFreeVarList ex6 `aeq` ex6_ans) test_ex7 :: Test test_ex7 = TestCase $ assertBool "example 7 (sorted free variables)" (freeVarList ex7 `aeq` ex7_ans) main :: IO () main = do result <- runTestTT $ TestList [test_ex1 , test_ex2_open , test_ex2_closed , test_ex3 , test_ex4 , test_ex5 , test_ex6 , test_ex7 ] if failures result > 0 then fail "Some tests failed!" else return ()