module Repr.String.Test where import Test.Tasty import Test.Tasty.HUnit import Language.LOL.Symantic.Repr import qualified Expr.Lambda.Test as Lambda.Test import qualified Expr.Bool.Test as Bool.Test import qualified Expr.Maybe.Test as Maybe.Test tests :: TestTree tests = testGroup "String" $ let (==>) expr expected = testCase expected $ (@?= expected) $ string_from_expr expr in [ testGroup "Bool" [ Bool.Test.e1 ==> "True & False" , Bool.Test.e2 ==> "True & False | True & True" , Bool.Test.e3 ==> "(True | False) & (True | True)" , Bool.Test.e4 ==> "True & !False" , Bool.Test.e5 ==> "True & !x" , Bool.Test.e6 ==> "(x | y) & !(x & y)" , Bool.Test.e7 ==> "((x | y) & !(x & y) | z) & !(((x | y) & !(x & y)) & z)" , Bool.Test.e8 ==> "(x | (y | True) & !(y & True)) & !(x & ((y | True) & !(y & True)))" ] , testGroup "Lambda" [ Lambda.Test.e1 ==> "\\x0 -> (\\x1 -> (x0 | x1) & !(x0 & x1))" , Lambda.Test.e2 ==> "\\x0 -> (\\x1 -> x0 & !x1 | !x0 & x1)" , Lambda.Test.e3 ==> "let x0 = True in x0 & x0" , Lambda.Test.e4 ==> "let x0 = \\x1 -> x1 & x1 in x0 True" , Lambda.Test.e5 ==> "\\x0 -> (\\x1 -> x0 & x1)" , Lambda.Test.e6 ==> "(let x0 = True in x0) & False" , Lambda.Test.e7 ==> "\\x0 -> x0 True & True" , Lambda.Test.e8 ==> "\\x0 -> x0 (True & True)" ] , testGroup "Maybe" [ Maybe.Test.e1 ==> "maybe True (\\x0 -> !x0) (just True)" ] {-, testGroup "If" [ If.e1 ==> "if True then False else True" , If.e2 ==> "if True & True then False else True" ] -}]