X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=compiler%2Fsrc%2Flib%2Ftiger%2Ftiger_test_cases.ml;h=bff7efc1d49884dcb08687dd90256a76de96fcd8;hb=3be8511c0587d12da978306068c143c71b49f57c;hp=5684f730c1f919f7468357b7cc672bfc5899c191;hpb=9d441341c4514e47a537bb29068e0e0d9ab78989;p=tiger.ml.git diff --git a/compiler/src/lib/tiger/tiger_test_cases.ml b/compiler/src/lib/tiger/tiger_test_cases.ml index 5684f73..bff7efc 100644 --- a/compiler/src/lib/tiger/tiger_test_cases.ml +++ b/compiler/src/lib/tiger/tiger_test_cases.ml @@ -1,3 +1,4 @@ +module Error = Tiger_error module Test = Tiger_test let book = @@ -130,6 +131,7 @@ let book = [ 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: @@ -184,21 +186,82 @@ let micro = [ (let code = "nil" in Test.case code ~code ~out_lexing:[NIL]) ; (let code = "5" in Test.case code ~code ~out_lexing:[INT 5]) ; (let code = "-5" in Test.case code ~code ~out_lexing:[MINUS; INT 5]) - ; (let code = "f()" in Test.case code ~code ~out_lexing:[ID "f"; LPAREN; RPAREN]) - ; (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 ~code - ~out_lexing: - [ID "f"; LPAREN; STRING "a"; COMMA; INT 3; COMMA; ID "foo"; RPAREN]) + ; ( let code = "f()" in + Test.case + code + ~code + ~out_lexing:[ID "f"; LPAREN; RPAREN] + ~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 = "f(\"a\", 3, foo)" in + Test.case + code + ~code + ~out_lexing: + [ID "f"; LPAREN; STRING "a"; COMMA; INT 3; COMMA; ID "foo"; RPAREN] + ~is_error_expected_semant:Error.is_unknown_id + ) + ; ( let code = + "let + type a = int + type b = a + type c = b + var i : a := 2 + var j : c := 3 + in + i := j + end + " + in + Test.case + "Type aliases" + ~code + ) + ; ( let code = + "let + type a = {x:int, y:int} + type b = {x:int, y:int} /* new type generated */ + var foo : a := a {x = 1, y = 2} + var bar : b := b {x = 1, y = 2} + in + foo = bar /* incompatible types */ + end + " + in + Test.case + code + ~code + ~is_error_expected_semant:Error.is_wrong_type (* TODO: Be more specific *) + ) ] let all =