More tests, integration of some of the operators
This commit is contained in:
parent
8c37fe355d
commit
606f7ca907
5
src/contracts/condition-annot.mligo
Normal file
5
src/contracts/condition-annot.mligo
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
let%entry main (i : int) =
|
||||||
|
if (i = 2 : bool) then
|
||||||
|
(42 : int)
|
||||||
|
else
|
||||||
|
(0 : int)
|
9
src/contracts/condition-shadowing.mligo
Normal file
9
src/contracts/condition-shadowing.mligo
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
(* TODO : make a test using mutation, not shadowing *)
|
||||||
|
let%entry main (i : int) =
|
||||||
|
let result = 0 in
|
||||||
|
if i = 2 then
|
||||||
|
let result = 42 in
|
||||||
|
result
|
||||||
|
else
|
||||||
|
let result = 0 in
|
||||||
|
result
|
5
src/contracts/condition.mligo
Normal file
5
src/contracts/condition.mligo
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
let%entry main (i : int) =
|
||||||
|
if i = 2 then
|
||||||
|
42
|
||||||
|
else
|
||||||
|
0
|
12
src/contracts/fibo.mligo
Normal file
12
src/contracts/fibo.mligo
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
type storage = unit
|
||||||
|
|
||||||
|
(* not supported yet
|
||||||
|
let%entry main (p:unit) storage =
|
||||||
|
(fun x -> ()) ()
|
||||||
|
*)
|
||||||
|
|
||||||
|
let%entry main (p:unit) storage =
|
||||||
|
(fun (f : int -> int -> int) (x : int) (y : int) -> f y (x + y))
|
||||||
|
(fun (x : int) (y : int) -> x + y)
|
||||||
|
0
|
||||||
|
1
|
@ -103,9 +103,20 @@ module Simplify = struct
|
|||||||
module Camligo = struct
|
module Camligo = struct
|
||||||
let constants = [
|
let constants = [
|
||||||
("Bytes.pack" , "PACK") ;
|
("Bytes.pack" , "PACK") ;
|
||||||
|
|
||||||
|
("Map.remove" , "MAP_REMOVE") ;
|
||||||
|
("Map.update" , "MAP_UPDATE") ;
|
||||||
|
("Map.add" , "MAP_ADD") ;
|
||||||
|
("Map.mem" , "MAP_MEM") ;
|
||||||
|
("Map.find" , "MAP_FIND") ;
|
||||||
|
("Map.fold" , "MAP_FOLD") ;
|
||||||
|
("Map.map" , "MAP_MAP") ;
|
||||||
|
|
||||||
("Crypto.hash" , "HASH") ;
|
("Crypto.hash" , "HASH") ;
|
||||||
|
|
||||||
("Operation.transaction" , "CALL") ;
|
("Operation.transaction" , "CALL") ;
|
||||||
("Operation.get_contract" , "CONTRACT") ;
|
("Operation.get_contract" , "CONTRACT") ;
|
||||||
|
|
||||||
("sender" , "SENDER") ;
|
("sender" , "SENDER") ;
|
||||||
("unit" , "UNIT") ;
|
("unit" , "UNIT") ;
|
||||||
("source" , "SOURCE") ;
|
("source" , "SOURCE") ;
|
||||||
@ -704,6 +715,13 @@ module Compiler = struct
|
|||||||
("MAP_FIND_OPT" , simple_binary @@ prim I_GET) ;
|
("MAP_FIND_OPT" , simple_binary @@ prim I_GET) ;
|
||||||
("MAP_ADD" , simple_ternary @@ seq [dip (i_some) ; prim I_UPDATE]) ;
|
("MAP_ADD" , simple_ternary @@ seq [dip (i_some) ; prim I_UPDATE]) ;
|
||||||
("MAP_UPDATE" , simple_ternary @@ prim I_UPDATE) ;
|
("MAP_UPDATE" , simple_ternary @@ prim I_UPDATE) ;
|
||||||
|
(* ("GET_CONTRACT" , simple_constant @@ prim I_CONTRACT) ; *)
|
||||||
|
(* ( "MAP_REMOVE" , simple_binary @@ seq [prim I_NONE TODO: + annotation ; prim I_UPDATE ]) ; *)
|
||||||
|
( "MAP_MEM" , simple_binary @@ prim I_MEM) ;
|
||||||
|
(* ( "MAP_FOLD" , simple_ternary @@ prim TODO I_ITER?) ; *)
|
||||||
|
( "MAP_MAP" , simple_binary @@ prim I_MAP) ;
|
||||||
|
(* ( "MAP_MAP_FOLD" , simple_ternary @@ prim TODO I_ITER?) ; *)
|
||||||
|
(* ( "MAP_ITER" , simple_binary @@ prim TODO I_ITER?) ; *)
|
||||||
("SIZE" , simple_unary @@ prim I_SIZE) ;
|
("SIZE" , simple_unary @@ prim I_SIZE) ;
|
||||||
("FAILWITH" , simple_unary @@ prim I_FAILWITH) ;
|
("FAILWITH" , simple_unary @@ prim I_FAILWITH) ;
|
||||||
("ASSERT_INFERRED" , simple_binary @@ i_if (seq [i_failwith]) (seq [i_drop ; i_push_unit])) ;
|
("ASSERT_INFERRED" , simple_binary @@ i_if (seq [i_failwith]) (seq [i_drop ; i_push_unit])) ;
|
||||||
|
@ -533,6 +533,20 @@ let condition () : unit result =
|
|||||||
let make_expected = fun n -> e_int (if n = 2 then 42 else 0) in
|
let make_expected = fun n -> e_int (if n = 2 then 42 else 0) in
|
||||||
expect_eq_n program "main" make_input make_expected
|
expect_eq_n program "main" make_input make_expected
|
||||||
|
|
||||||
|
let condition_mligo () : unit result =
|
||||||
|
let%bind _ =
|
||||||
|
let aux file =
|
||||||
|
let%bind program = mtype_file file in
|
||||||
|
let make_input = e_int in
|
||||||
|
let make_expected = fun n -> e_int (if n = 2 then 42 else 0) in
|
||||||
|
expect_eq_n program "main" make_input make_expected in
|
||||||
|
bind_map_list aux [
|
||||||
|
"./contracts/condition.mligo";
|
||||||
|
"./contracts/condition-shadowing.mligo";
|
||||||
|
"./contracts/condition-annot.mligo";
|
||||||
|
] in
|
||||||
|
ok ()
|
||||||
|
|
||||||
let condition_simple () : unit result =
|
let condition_simple () : unit result =
|
||||||
let%bind program = type_file "./contracts/condition-simple.ligo" in
|
let%bind program = type_file "./contracts/condition-simple.ligo" in
|
||||||
let make_input = e_int in
|
let make_input = e_int in
|
||||||
@ -794,6 +808,12 @@ let lambda2_mligo () : unit result =
|
|||||||
let make_expected = (e_unit ()) in
|
let make_expected = (e_unit ()) in
|
||||||
expect_eq program "main" make_input make_expected
|
expect_eq program "main" make_input make_expected
|
||||||
|
|
||||||
|
let fibo_mligo () : unit result =
|
||||||
|
let%bind program = mtype_file "./contracts/fibo.mligo" in
|
||||||
|
let make_input = e_pair (e_unit ()) (e_unit ()) in
|
||||||
|
let make_expected = (e_int 42) in
|
||||||
|
expect_eq program "main" make_input make_expected
|
||||||
|
|
||||||
let website1_ligo () : unit result =
|
let website1_ligo () : unit result =
|
||||||
let%bind program = type_file "./contracts/website1.ligo" in
|
let%bind program = type_file "./contracts/website1.ligo" in
|
||||||
let make_input = fun n-> e_pair (e_int n) (e_int 42) in
|
let make_input = fun n-> e_pair (e_int n) (e_int 42) in
|
||||||
@ -851,7 +871,8 @@ let main = test_suite "Integration (End to End)" [
|
|||||||
test "tuple" tuple ;
|
test "tuple" tuple ;
|
||||||
test "record" record ;
|
test "record" record ;
|
||||||
test "condition simple" condition_simple ;
|
test "condition simple" condition_simple ;
|
||||||
test "condition" condition ;
|
test "condition (ligo)" condition ;
|
||||||
|
test "condition (mligo)" condition_mligo ;
|
||||||
test "shadow" shadow ;
|
test "shadow" shadow ;
|
||||||
test "annotation" annotation ;
|
test "annotation" annotation ;
|
||||||
test "multiple parameters" multiple_parameters ;
|
test "multiple parameters" multiple_parameters ;
|
||||||
@ -893,9 +914,10 @@ let main = test_suite "Integration (End to End)" [
|
|||||||
(* test "guess string mligo" guess_string_mligo ; WIP? *)
|
(* test "guess string mligo" guess_string_mligo ; WIP? *)
|
||||||
test "lambda mligo" lambda_mligo ;
|
test "lambda mligo" lambda_mligo ;
|
||||||
test "lambda ligo" lambda_ligo ;
|
test "lambda ligo" lambda_ligo ;
|
||||||
(* test "lambda2 mligo" lambda2_mligo ; *)
|
|
||||||
test "tez (ligo)" tez_ligo ;
|
test "tez (ligo)" tez_ligo ;
|
||||||
test "tez (mligo)" tez_mligo ;
|
test "tez (mligo)" tez_mligo ;
|
||||||
|
test "lambda2 mligo" lambda2_mligo ;
|
||||||
|
(* test "fibo (mligo)" fibo_mligo ; *)
|
||||||
test "website1 ligo" website1_ligo ;
|
test "website1 ligo" website1_ligo ;
|
||||||
test "website2 ligo" website2_ligo ;
|
test "website2 ligo" website2_ligo ;
|
||||||
test "website2 (mligo)" website2_mligo ;
|
test "website2 (mligo)" website2_mligo ;
|
||||||
|
Loading…
Reference in New Issue
Block a user