X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=compiler%2Fsrc%2Flib%2Ftiger%2Ftiger_test.ml;h=81f549da1f4abd9890103736201c764021f249e3;hb=217e963845b596d25400ec28035a15d64478e6da;hp=47939dfc2f3c1dbbc685bd37f734c9ba2e6c0b7f;hpb=b53d50d3d7395376979b6fb90863901b5dd69cfe;p=tiger.ml.git diff --git a/compiler/src/lib/tiger/tiger_test.ml b/compiler/src/lib/tiger/tiger_test.ml index 47939df..81f549d 100644 --- a/compiler/src/lib/tiger/tiger_test.ml +++ b/compiler/src/lib/tiger/tiger_test.ml @@ -46,6 +46,7 @@ type t = ; code : string ; out_lexing : (Tiger_parser.token list) option ; out_parsing : Tiger_absyn.t option + ; is_error_expected_parsing : (Tiger_error.t -> bool) option ; is_error_expected_semant : (Tiger_error.t -> bool) option } @@ -120,6 +121,7 @@ let status_skip ?(info="") () = let case ?(out_lexing=None) ?(out_parsing=None) + ?(is_error_expected_parsing=None) ?(is_error_expected_semant=None) ~code name @@ -128,6 +130,7 @@ let case ; code ; out_lexing ; out_parsing + ; is_error_expected_parsing ; is_error_expected_semant } @@ -178,14 +181,10 @@ let pass_parsing ~fake_filename ~code | ast -> Ok ast -let pass_semant (absyn_opt : Tiger_absyn.t option) +let pass_semant (absyn : Tiger_absyn.t) : (unit, string) result = - match absyn_opt with - | None -> - Error "AST not provided" - | Some absyn -> - Ok (Tiger_semant.transProg absyn) + Ok (Tiger_semant.transProg absyn) let str_exact str exact = let len = String.length str in @@ -291,6 +290,7 @@ let run tests = ; code ; out_lexing ; out_parsing + ; is_error_expected_parsing ; is_error_expected_semant } -> @@ -305,13 +305,23 @@ let run tests = run_pass ~f:(fun () -> pass_parsing ~fake_filename:name ~code) ~expect_output:out_parsing - ~is_error_expected:None + ~is_error_expected:is_error_expected_parsing in let res_sem = - run_pass - ~f:(fun () -> pass_semant res_pars.out_val) - ~expect_output:(Some ()) - ~is_error_expected:is_error_expected_semant + (* TODO: Replace this hack with general test-dependency checking *) + match res_pars.out_val with + | None -> + { exe_stat = Skip + ; exe_msg = "No AST provided" + ; out_stat = Skip + ; out_val = None + ; out_msg = "" + } + | Some absyn -> + run_pass + ~f:(fun () -> pass_semant absyn) + ~expect_output:(Some ()) + ~is_error_expected:is_error_expected_semant in let results = (* Replacing out_val for type compatibility *)