Add (commented out) for loop test & working procedure test
Also clean up typo in unsupported for loop error message
This commit is contained in:
parent
a8def8c269
commit
ada8a2b703
11
src/contracts/for_fail.ligo
Normal file
11
src/contracts/for_fail.ligo
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// This was meant to test the for loop in PascaLIGO
|
||||||
|
// But for whatever reason, the LIGO compiler currently thinks this is a 'complex loop'
|
||||||
|
// even though it isn't.
|
||||||
|
// See this error:
|
||||||
|
// $ ligo dry-run for.ligo main 0 0
|
||||||
|
// bounded iterators: only simple for loops are supported yet
|
||||||
|
// {"loop_loc":"in file \"for.ligo\", line 4, characters 10-42"}
|
||||||
|
|
||||||
|
|
||||||
|
function main (const a: int) : int is
|
||||||
|
block { for i := 0 to 100 block { skip } } with i;
|
@ -7,7 +7,7 @@ function counter (var n : nat) : nat is block {
|
|||||||
}
|
}
|
||||||
} with i
|
} with i
|
||||||
|
|
||||||
function sum (var n : nat) : nat is block {
|
function while_sum (var n : nat) : nat is block {
|
||||||
var i : nat := 0n ;
|
var i : nat := 0n ;
|
||||||
var r : nat := 0n ;
|
var r : nat := 0n ;
|
||||||
while (i < n) block {
|
while (i < n) block {
|
||||||
@ -16,6 +16,13 @@ function sum (var n : nat) : nat is block {
|
|||||||
}
|
}
|
||||||
} with r
|
} with r
|
||||||
|
|
||||||
|
function for_sum (var n : nat) : nat is block {
|
||||||
|
for i := 1 to 100
|
||||||
|
begin
|
||||||
|
n := n + 1;
|
||||||
|
end }
|
||||||
|
with n
|
||||||
|
|
||||||
function dummy (const n : nat) : nat is block {
|
function dummy (const n : nat) : nat is block {
|
||||||
while (False) block { skip }
|
while (False) block { skip }
|
||||||
} with n
|
} with n
|
||||||
|
6
src/contracts/procedure.ligo
Normal file
6
src/contracts/procedure.ligo
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
// Test a trivial PascaLIGO procedure
|
||||||
|
|
||||||
|
procedure main (const i : int) : int is
|
||||||
|
begin
|
||||||
|
skip
|
||||||
|
end with i
|
@ -145,7 +145,7 @@ module Errors = struct
|
|||||||
let unsupported_for_loops region =
|
let unsupported_for_loops region =
|
||||||
let title () = "bounded iterators" in
|
let title () = "bounded iterators" in
|
||||||
let message () =
|
let message () =
|
||||||
Format.asprintf "only simple for loops are supported yet" in
|
Format.asprintf "only simple for loops are supported for now" in
|
||||||
let data = [
|
let data = [
|
||||||
("loop_loc",
|
("loop_loc",
|
||||||
fun () -> Format.asprintf "%a" Location.pp_lift @@ region)
|
fun () -> Format.asprintf "%a" Location.pp_lift @@ region)
|
||||||
|
@ -16,6 +16,11 @@ let function_ () : unit result =
|
|||||||
let make_expect = fun n -> n in
|
let make_expect = fun n -> n in
|
||||||
expect_eq_n_int program "main" make_expect
|
expect_eq_n_int program "main" make_expect
|
||||||
|
|
||||||
|
let procedure () : unit result =
|
||||||
|
let%bind program = type_file "./contracts/procedure.ligo" in
|
||||||
|
let make_expect = fun n -> n in
|
||||||
|
expect_eq_n_int program "main" make_expect
|
||||||
|
|
||||||
let assign () : unit result =
|
let assign () : unit result =
|
||||||
let%bind program = type_file "./contracts/assign.ligo" in
|
let%bind program = type_file "./contracts/assign.ligo" in
|
||||||
let make_expect = fun n -> n + 1 in
|
let make_expect = fun n -> n + 1 in
|
||||||
@ -459,10 +464,22 @@ let loop () : unit result =
|
|||||||
let%bind () =
|
let%bind () =
|
||||||
let make_input = e_nat in
|
let make_input = e_nat in
|
||||||
let make_expected = fun n -> e_nat (n * (n + 1) / 2) in
|
let make_expected = fun n -> e_nat (n * (n + 1) / 2) in
|
||||||
expect_eq_n_pos_mid program "sum" make_input make_expected
|
expect_eq_n_pos_mid program "while_sum" make_input make_expected
|
||||||
in
|
in(* For loop is currently unsupported
|
||||||
|
|
||||||
|
let%bind () =
|
||||||
|
let make_input = e_nat in
|
||||||
|
let make_expected = fun n -> e_nat (n * (n + 1) / 2) in
|
||||||
|
expect_eq_n_pos_mid program "for_sum" make_input make_expected
|
||||||
|
in *)
|
||||||
ok ()
|
ok ()
|
||||||
|
|
||||||
|
(* Don't know how to assert parse error happens in this test framework
|
||||||
|
let for_fail () : unit result =
|
||||||
|
let%bind program = type_file "./contracts/for_fail.ligo" in
|
||||||
|
let%bind () = expect_fail program "main" (e_nat 0)
|
||||||
|
in ok () *)
|
||||||
|
|
||||||
let matching () : unit result =
|
let matching () : unit result =
|
||||||
let%bind program = type_file "./contracts/match.ligo" in
|
let%bind program = type_file "./contracts/match.ligo" in
|
||||||
let%bind () =
|
let%bind () =
|
||||||
@ -666,6 +683,7 @@ let website2_ligo () : unit result =
|
|||||||
let main = test_suite "Integration (End to End)" [
|
let main = test_suite "Integration (End to End)" [
|
||||||
test "type alias" type_alias ;
|
test "type alias" type_alias ;
|
||||||
test "function" function_ ;
|
test "function" function_ ;
|
||||||
|
test "procedure" procedure ;
|
||||||
test "assign" assign ;
|
test "assign" assign ;
|
||||||
test "declaration local" declaration_local ;
|
test "declaration local" declaration_local ;
|
||||||
test "complex function" complex_function ;
|
test "complex function" complex_function ;
|
||||||
|
Loading…
Reference in New Issue
Block a user