ligo/src/test/contracts/loop.religo
2019-12-10 13:47:31 +00:00

47 lines
1.1 KiB
Plaintext

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