Test for semantic errors
[tiger.ml.git] / compiler / src / lib / tiger / tiger_test.ml
index bea8611..89e317f 100644 (file)
@@ -45,7 +45,7 @@ type t =
   ; code        : string
   ; out_lexing  : (Tiger_parser.token list) option
   ; out_parsing : Tiger_absyn.t option
-  ; is_error_expected : (Tiger_error.t -> bool)
+  ; is_error_expected_semant : (Tiger_error.t -> bool)
   }
 
 type color =
@@ -69,19 +69,19 @@ let status indicator info =
   | "" -> indicator
   | _  -> sprintf "%s: %s" indicator info
 
-let status_ok ?(info="") () =
-  status (color Green "OK") info
+let status_pass ?(info="") () =
+  status (color Green "Pass") info
 
-let status_error ?(info="") () =
-  status (color Red "ERROR") info
+let status_fail ?(info="") () =
+  status (color Red "Fail") info
 
-let status_warn ?(info="") () =
-  status (color Yellow "WARN") info
+let status_skip ?(info="") () =
+  status (color Yellow "Skip") info
 
 let case
     ?(out_lexing)
     ?(out_parsing)
-    ?(is_error_expected=(fun _ -> false))
+    ?(is_error_expected_semant=(fun _ -> false))
     ~code
     name
   =
@@ -89,7 +89,7 @@ let case
   ; code
   ; out_lexing
   ; out_parsing
-  ; is_error_expected
+  ; is_error_expected_semant
   }
 
 let bar_sep = String.make 80 '-'
@@ -144,13 +144,13 @@ let run tests =
         let execution_status =
           (match e with
           | Tiger_error.T e when is_error_expected e ->
-              status_ok () ~info:(Tiger_error.to_string e)
+              status_pass () ~info:(Tiger_error.to_string e)
           | Tiger_error.T e ->
               incr error_count;
-              status_error () ~info:(Tiger_error.to_string e)
+              status_fail () ~info:(Tiger_error.to_string e)
           | e ->
               incr error_count;
-              status_error () ~info:(Printexc.to_string e)
+              status_fail () ~info:(Printexc.to_string e)
           )
         in
         ( execution_status
@@ -159,49 +159,56 @@ let run tests =
         )
     | Error info ->
         incr error_count;
-        ( status_error ~info ()
+        ( status_fail ~info ()
         , output_status
         , output_value
         )
     | Ok produced ->
-        let execution_status = status_ok () in
+        let execution_status = status_pass () in
         let output_status =
           match
             Option.map expect_output (fun expected -> expected = produced)
           with
           | None ->
-              status_warn () ~info:"expected output not provided"
+              status_skip () ~info:"expected output not provided"
           | Some true ->
-              status_ok ()
+              status_pass ()
           | Some false ->
               incr error_count;
-              status_error ()
+              status_fail ()
         in
         let output_value = Some produced in
         (execution_status, output_status, output_value)
   in
   List.iter tests ~f:(
-    fun {name; code; out_lexing; out_parsing; is_error_expected} ->
+    fun
+      { name
+      ; code
+      ; out_lexing
+      ; out_parsing
+      ; is_error_expected_semant
+      }
+    ->
       let (stat_lex_exe, stat_lex_out_cmp, _) =
         run_pass
           ~f:pass_lexing
           ~input:code
           ~expect_output:out_lexing
-          ~is_error_expected
+          ~is_error_expected:(fun _ -> false)
       in
       let (stat_pars_exe, stat_pars_out_cmp, absyn_opt) =
         run_pass
           ~f:pass_parsing
           ~input:code
           ~expect_output:out_parsing
-          ~is_error_expected
+          ~is_error_expected:(fun _ -> false)
       in
       let (stat_semant_exe, stat_semant_out_cmp, _) =
         run_pass
           ~f:pass_semant
           ~input:absyn_opt
           ~expect_output:(Some ())
-          ~is_error_expected
+          ~is_error_expected:is_error_expected_semant
       in
       p "%s" bar_sep; p_ln ();
       p "Test: %S" name; p_ln ();
This page took 0.039446 seconds and 4 git commands to generate.