ligo/src/test/contracts/loop.mligo
2019-11-04 19:06:18 +00:00

34 lines
1.0 KiB
Plaintext

(* Test loops in CameLIGO *)
let aux_simple (i: int) : bool * int =
if i < 100 then continue (i + 1) else stop i
let counter_simple (n: int) : int =
Loop.fold_while n aux_simple
type sum_aggregator = {
counter : int ;
sum : int ;
}
let counter (n : int) : int =
let initial : sum_aggregator = { counter = 0 ; sum = 0 } in
let out : sum_aggregator = Loop.fold_while initial (fun (prev: sum_aggregator) ->
if prev.counter <= n then
continue ({ counter = prev.counter + 1 ; sum = prev.counter + prev.sum })
else
stop ({ counter = prev.counter ; sum = prev.sum })
) in out.sum
let aux_nest (prev: sum_aggregator) : bool * sum_aggregator =
if prev.counter < 100 then
continue ({ counter = prev.counter + 1 ;
sum = prev.sum + Loop.fold_while prev.counter aux_simple})
else
stop ({ counter = prev.counter ; sum = prev.sum })
let counter_nest (n: int) : int =
let initial : sum_aggregator = { counter = 0 ; sum = 0 } in
let out : sum_aggregator = Loop.fold_while initial aux_nest
in out.sum