| Invalid_operand_type _
| Different_operand_types _ ->
false
+
+let is_unknown_type t =
+ match t with
+ | Unknown_type _ ->
+ true
+ | Unknown_id _
+ | Invalid_syntax _
+ | Id_is_a_function _
+ | Id_not_a_function _
+ | No_such_field_in_record _
+ | Exp_not_a_record _
+ | Exp_not_an_array _
+ | Wrong_type _
+ | Wrong_type_of_expression_in_var_dec _
+ | Wrong_type_used_as_array _
+ | Wrong_type_used_as_record _
+ | Wrong_type_of_field_value _
+ | Wrong_type_of_arg _
+ | Wrong_number_of_args _
+ | Invalid_operand_type _
+ | Different_operand_types _ ->
+ false
+
+let is_wrong_type t =
+ match t with
+ | Wrong_type _ ->
+ true
+ | Unknown_type _
+ | Unknown_id _
+ | Invalid_syntax _
+ | Id_is_a_function _
+ | Id_not_a_function _
+ | No_such_field_in_record _
+ | Exp_not_a_record _
+ | Exp_not_an_array _
+ | Wrong_type_of_expression_in_var_dec _
+ | Wrong_type_used_as_array _
+ | Wrong_type_used_as_record _
+ | Wrong_type_of_field_value _
+ | Wrong_type_of_arg _
+ | Wrong_number_of_args _
+ | Invalid_operand_type _
+ | Different_operand_types _ ->
+ false
[ IF; LPAREN; INT 5; GT; INT 4; RPAREN; THEN; INT 13; ELSE; STRING " "
]
)
+ ~is_error_expected_semant:Error.is_wrong_type (* TODO: Be more specific *)
; Test.case
"Book test: 8-queens"
~code:
code
~code
~out_lexing:[ID "f"; LPAREN; RPAREN]
- ~is_error_expected_semant:Error.is_unknown_id
+ ~is_error_expected_semant:Error.is_unknown_id (* TODO: Be more specific *)
+ )
+ ; ( let code = "abc.i" in
+ Test.case
+ code
+ ~code
+ ~out_lexing:[ID "abc"; DOT; ID "i"]
+ ~is_error_expected_semant:Error.is_unknown_id (* TODO: Be more specific *)
+ )
+ ; ( let code = "abc[0]" in
+ Test.case
+ code
+ ~code
+ ~out_lexing:[ID "abc"; LBRACK; INT 0; RBRACK]
+ ~is_error_expected_semant:Error.is_unknown_id (* TODO: Be more specific *)
+ )
+ ; ( let code = "abc[0] := foo()" in
+ Test.case
+ code
+ ~code
+ ~out_lexing:
+ [ID "abc"; LBRACK; INT 0; RBRACK; ASSIGN; ID "foo"; LPAREN; RPAREN]
+ ~is_error_expected_semant:Error.is_unknown_id (* TODO: Be more specific *)
+ )
+ ; ( let code = "abc [5] of nil" in
+ Test.case
+ code
+ ~code
+ ~out_lexing:[ID "abc"; LBRACK; INT 5; RBRACK; OF; NIL]
+ ~is_error_expected_semant:Error.is_unknown_type (* TODO: Be more specific *)
)
- ; (let code = "abc.i" in Test.case code ~code ~out_lexing:[ID "abc"; DOT; ID "i"])
- ; (let code = "abc[0]" in Test.case code ~code ~out_lexing:[ID "abc"; LBRACK; INT 0; RBRACK])
-
- ; (let code = "abc[0] := foo()" in Test.case code ~code
- ~out_lexing:
- [ID "abc"; LBRACK; INT 0; RBRACK; ASSIGN; ID "foo"; LPAREN; RPAREN])
-
- ; (let code = "abc [5] of nil" in Test.case code ~code
- ~out_lexing:
- [ID "abc"; LBRACK; INT 5; RBRACK; OF; NIL])
-
; ( let code = "f(\"a\", 3, foo)" in
Test.case
code