Improve test result printing
[tiger.ml.git] / tiger / src / exe / tiger_tests.ml
index 3e97eec..b76f368 100644 (file)
@@ -1,9 +1,10 @@
 module List = ListLabels
 
 let test_01 =
+  let name = "an array type and an array variable" in
   let code =
     " \
-    /* an array type and an array variable */ \
+    /* "^name^" */ \
     let \
       type arrtype = array of int \
       var arr1:arrtype := \
@@ -24,12 +25,13 @@ let test_01 =
       END
     ]
   in
-  ("test_01", code, tokens)
+  (name, code, tokens)
 
 let test_02 =
+  let name = "arr1 is valid since expression 0 is int = myint" in
   let code =
     " \
-    /* arr1 is valid since expression 0 is int = myint */ \
+    /* "^name^" */ \
     let \
       type myint = int \
       type arrtype = array of myint \
@@ -52,12 +54,13 @@ let test_02 =
       END
     ]
   in
-  ("test_02", code, tokens)
+  (name, code, tokens)
 
 let test_03 =
+  let name = "a record type and a record variable" in
   let code =
     " \
-    /* a record type and a record variable */ \
+    /* "^name^" */ \
     let \
       type rectype = \
         { name : string \
@@ -92,7 +95,39 @@ let test_03 =
       END
     ]
   in
-  ("test_03", code, tokens)
+  (name, code, tokens)
+
+let test_04 =
+  let name = "define a recursive function" in
+  let code =
+    " \
+    /* "^name^" */ \
+    let \
+    \
+      /* calculate n! */ \
+      function nfactor(n: int): int = \
+        if n = 0  \
+        then 1 \
+        else n * nfactor(n-1) \
+    \
+    in \
+      nfactor(10) \
+    end \
+    "
+  in
+  let tokens =
+    let open Tiger.Parser.Token in
+    [ LET;
+        FUNCTION; ID "nfactor"; LPAREN; ID "n"; COLON; ID "int"; RPAREN; COLON; ID "int"; EQ;
+          IF; ID "n"; EQ; INT 0;
+          THEN; INT 1;
+          ELSE; ID "n"; TIMES; ID "nfactor"; LPAREN; ID "n"; MINUS; INT 1; RPAREN;
+      IN;
+        ID "nfactor"; LPAREN; INT 10; RPAREN;
+      END
+    ]
+  in
+  (name, code, tokens)
 
 let tokens_of_code code =
   let lexbuf = Lexing.from_string code in
@@ -107,24 +142,26 @@ let tests =
   [ test_01
   ; test_02
   ; test_03
+  ; test_04
   ]
 
 let () =
   let bar_sep = String.make 80 '-' in
   let bar_end = String.make 80 '=' in
-  List.iter tests ~f:(fun (name, code, tokens_expected) ->
+  List.iteri tests ~f:(fun i (name, code, tokens_expected) ->
+    let i = i + 1 in  (* Because iteri starts with 0 *)
     let open Printf in
-    printf "%s\n==> Test %S: " bar_sep name;
+    printf "%s\n Test %d : %S\n" bar_sep i name;
     let tokens_emitted = tokens_of_code code in
     (try
       assert (tokens_emitted = tokens_expected);
-      print_endline "OK";
+      print_endline " ---> OK";
     with Assert_failure _ ->
       let tokens_to_string tokens =
         String.concat "; " (List.map ~f:Tiger.Parser.Token.to_string tokens)
       in
       printf
-        "ERROR\n    Expected: %s\n    Emitted : %s\n\n"
+        " ---> ERROR\n    Expected: %s\n    Emitted : %s\n\n"
         (tokens_to_string tokens_expected)
         (tokens_to_string tokens_emitted)
     );
This page took 0.04423 seconds and 4 git commands to generate.