1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
[@@@ocaml.text "/*"]
(** Copyright 2021-2024, Kakadu and contributors *)
(** SPDX-License-Identifier: LGPL-3.0-or-later *)
[@@@ocaml.text "/*"]
(** ***** UNIT TESTS COULD GO HERE (JUST AN EXAMPLE) *)
let rec fact n = if n = 1 then 1 else n * fact (n - 1)
let%test _ = fact 5 = 120
(* These is a simple unit test that tests a single function 'fact'
If you want to test something large, like interpretation of a piece
of a minilanguge, it is not longer a unit tests but an integration test.
Read about dune's cram tests and put the test into `demos/somefile.t`.
*)
open Lambda_lib
open Parser
let parse_optimistically str = Result.get_ok (parse str)
let pp = Printast.pp_named
let%expect_test _ =
Format.printf "%a" pp (parse_optimistically "x y");
[%expect {| (App ((Var x), (Var y))) |}]
;;
let%expect_test _ =
Format.printf "%a" pp (parse_optimistically "(x y)");
[%expect {| (App ((Var x), (Var y))) |}]
;;
let%expect_test _ =
Format.printf "%a" pp (parse_optimistically "(\\x . x x)");
[%expect {| (Abs (x, (App ((Var x), (Var x))))) |}]
;;
let%expect_test _ =
Format.printf "%a" pp (parse_optimistically "(λf.λx. f (x x))");
[%expect {| (Abs (f, (Abs (x, (App ((Var f), (App ((Var x), (Var x))))))))) |}]
;;
let _ = Lambda_lib.Interpret.parse_and_run
let _ = Lambda_lib.Lambda.a
let _ = Lambda_lib.Lambda.one
let _ = Lambda_lib.Lambda.p
let _ = Lambda_lib.Lambda.three
let _ = Lambda_lib.Lambda.two
let _ = Lambda_lib.Lambda.without_strat
let _ = Lambda_lib.Lambda.zero
let _ = Lambda_lib.Parser.parse_lam
let _ = Lambda_lib.Printast.pp
let _ = Lambda_lib.Printast.show