perga/tests/ParserTests.hs

71 lines
1.8 KiB
Haskell
Raw Normal View History

2024-11-14 19:56:33 -08:00
module ParserTests (tests) where
import Expr (Expr (..))
import Parser (pAll)
import Test.HUnit
ident :: Expr
ident =
Abs "A" Star $
Abs "x" (Var 0 "A") $
Var 0 "x"
ident1 :: Test
ident1 =
TestCase $
assertEqual
"ident 1"
(Right ident)
(pAll "lambda (A : *) . lambda (x : A) . x")
ident2 :: Test
ident2 =
TestCase $
assertEqual
"ident 2"
(Right ident)
(pAll "fun (A : *) (x : A) => x")
double :: Expr
double =
Abs "A" Star $
Abs "B" Star $
Abs "f" (Pi "" (Var 1 "A") (Var 1 "B")) $
Abs "g" (Pi "" (Var 2 "A") (Var 2 "B")) $
Abs "x" (Var 3 "A") $
App (Var 2 "f") (Var 0 "x")
doubleTest :: Test
doubleTest =
TestCase $
assertEqual
"double"
(Right double)
(pAll "fun (A B : *) (f g : A -> B) (x : A) => f x")
theorem :: Expr
theorem =
Abs "S" Star $
Abs "P" (Pi "" (Var 0 "S") Star) $
Abs "Q" (Pi "" (Var 1 "S") Star) $
Abs "HP" (Pi "x" (Var 2 "S") (App (Var 2 "P") (Var 0 "x"))) $
Abs "H" (Pi "x" (Var 3 "S") (Pi "" (App (Var 3 "P") (Var 0 "x")) (App (Var 3 "Q") (Var 1 "x")))) $
Abs "x" (Var 4 "S") (App (App (Var 1 "H") (Var 0 "x")) (App (Var 2 "HP") (Var 0 "x")))
theoremTest :: Test
theoremTest =
TestCase $
assertEqual
"theorem"
(Right theorem)
(pAll "fun (S : *) (P Q : S -> *) (HP : ∏ (x : S) . P x) (H : forall (x : S), P x -> Q x) (x : S) => H x (HP x)")
tests :: Test
tests =
TestList
[ TestLabel "ident1" ident1
, TestLabel "ident2" ident2
, TestLabel "double" doubleTest
, TestLabel "theorem" theoremTest
]