]> Git — Sourcephile - haskell/symantic.git/blob - Language/LOL/Symantic/Repr/Host/Test.hs
init
[haskell/symantic.git] / Language / LOL / Symantic / Repr / Host / Test.hs
1 {-# LANGUAGE ConstraintKinds #-}
2 {-# LANGUAGE FlexibleContexts #-}
3 {-# LANGUAGE OverloadedStrings #-}
4 {-# LANGUAGE ScopedTypeVariables #-}
5 {-# LANGUAGE Rank2Types #-}
6
7 module Repr.Host.Test where
8
9 -- import Data.Function (($))
10 -- import Data.Functor.Identity (Identity)
11 import Test.Tasty
12 import Test.Tasty.HUnit
13 import Prelude hiding (and, not, or)
14
15 import Language.LOL.Symantic.Repr
16 import Language.LOL.Symantic.Expr
17 import qualified Expr.Lambda.Test as Lambda.Test
18 import qualified Expr.Bool.Test as Bool.Test
19
20 tests :: TestTree
21 tests = testGroup "Host" $
22 let (==>) (expr::forall repr. Sym_of_Expr (Expr_Lambda_Bool IO) repr => repr h) expected =
23 testCase ((string_from_expr :: Repr_String IO _h -> String) $ expr) $
24 (>>= (@?= expected)) $
25 host_from_expr expr in
26 [ testGroup "Bool"
27 [ Bool.Test.e1 ==> False
28 , Bool.Test.e2 ==> True
29 , Bool.Test.e3 ==> True
30 , Bool.Test.e4 ==> True
31 ]
32 , testGroup "Lambda"
33 [ (Lambda.Test.e1 `app` bool True `app` bool True) ==> False
34 , (Lambda.Test.e1 `app` bool True `app` bool False) ==> True
35 , (Lambda.Test.e1 `app` bool False `app` bool True) ==> True
36 , (Lambda.Test.e1 `app` bool False `app` bool False) ==> False
37
38 , (Lambda.Test.e2 `app` bool True `app` bool True) ==> False
39 , (Lambda.Test.e2 `app` bool True `app` bool False) ==> True
40 , (Lambda.Test.e2 `app` bool False `app` bool True) ==> True
41 , (Lambda.Test.e2 `app` bool False `app` bool False) ==> False
42
43 , Lambda.Test.e3 ==> True
44 , Lambda.Test.e4 ==> True
45
46 , (Lambda.Test.e5 `app` bool True `app` bool True) ==> True
47 , (Lambda.Test.e5 `app` bool True `app` bool False) ==> False
48 , (Lambda.Test.e5 `app` bool False `app` bool True) ==> False
49 , (Lambda.Test.e5 `app` bool False `app` bool False) ==> False
50
51 , Lambda.Test.e6 ==> False
52 , (Lambda.Test.e7 `app` val id) ==> True
53 , (Lambda.Test.e7 `app` val not) ==> False
54 ]
55 {-, testGroup "If"
56 [ If.e1 ==> "if True then False else True"
57 , If.e2 ==> "if True & True then False else True"
58 ]
59 -}]