Some typer tests for expressions

This commit is contained in:
Georges Dupéron 2019-03-26 16:20:40 +01:00
parent 5507482b2d
commit e342c278d7
4 changed files with 55 additions and 18 deletions

View File

@ -513,7 +513,13 @@ end
module Combinators = struct
let annotated_expression ?type_annotation expression = {expression ; type_annotation}
let unit () : expression = Literal (Unit)
let number n : expression = Literal (Number n)
let bool b : expression = Literal (Bool b)
let string s : expression = Literal (String s)
let bytes b : expression = Literal (Bytes (Bytes.of_string b))
let tuple (lst : ae list) : expression = Tuple lst
let record (lst : (string * ae) list) : expression =
let aux prev (k, v) = SMap.add k v prev in

1
src/ligo/ligo-parser/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/Version.ml

View File

@ -1 +0,0 @@
let version = "UNKNOWN"

View File

@ -4,6 +4,7 @@ open Test_helpers
module Typed = Ligo.AST_Typed
module Typer = Ligo.Typer
module Simplified = Ligo.AST_Simplified
let int () : unit result =
let open Combinators in
@ -16,25 +17,55 @@ let int () : unit result =
let%bind () = assert_type_value_eq (post.type_annotation, make_t_int) in
ok ()
let record () : unit result =
let open Combinators in
let pre = ae (record [
("foo", ae @@ number 32) ;
("bar", ae @@ number 23) ;
]) in
module TestExpressions = struct
let test_expression (expr : expression) (test_expected_ty : Typed.tv) =
let open Typer in
let%bind post = type_annotated_expression Environment.empty pre in
let open Typed in
let open Combinators in
let result_type = make_t_ez_record [
("foo", make_t_int) ;
("bar", make_t_int) ;
] in
let%bind () = assert_type_value_eq (post.type_annotation, result_type) in
let pre = ae @@ expr in
let e = Environment.empty in
let%bind post = type_annotated_expression e pre in
let%bind () = assert_type_value_eq (post.type_annotation, test_expected_ty) in
ok ()
open Simplified.Combinators
open Typed.Combinators
let unit () : unit result = test_expression (unit ()) (make_t_unit)
let int () : unit result = test_expression (number 32) (make_t_int)
let bool () : unit result = test_expression (bool true) (make_t_bool)
let string () : unit result = test_expression (string "s") (make_t_string)
let bytes () : unit result = test_expression (bytes "b") (make_t_bytes)
let tuple () : unit result =
test_expression Simplified.Combinators.(tuple [
ae @@ number 32 ;
ae @@ string "foo" ;
])
(make_t_tuple [
make_t_int ;
make_t_string ;
])
let record () : unit result =
test_expression Simplified.Combinators.(record [
("foo", ae @@ number 32) ;
("bar", ae @@ string "foo") ;
])
(make_t_ez_record [
("foo", make_t_int) ;
("bar", make_t_string) ;
])
end
(* TODO: deep types (e.g. record of record)
TODO: negative tests (expected type error) *)
let main = "Typer (from simplified AST)", [
test "int" int ;
test "record" record ;
test "unit" TestExpressions.unit ;
test "int2" TestExpressions.int ;
test "bool" TestExpressions.bool ;
test "string" TestExpressions.string ;
test "bytes" TestExpressions.bytes ;
test "record" TestExpressions.record ;
]