diff options
Diffstat (limited to 'tests/programs/closure.zc')
| -rw-r--r-- | tests/programs/closure.zc | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/tests/programs/closure.zc b/tests/programs/closure.zc index 660c32a..eee6226 100644 --- a/tests/programs/closure.zc +++ b/tests/programs/closure.zc @@ -1,4 +1,7 @@ -// closures: calls through values, captures by value, state in a capture, +namespace; +include rt; + +// closures: calls through values, shared captures, state in a capture, // nested captures, closures passed as arguments and returned from functions fn apply(f, x) { return f(x); } fn twice(g, x) { return g(g(x)); } @@ -10,30 +13,30 @@ word.u make(n) { fn main() { let k = 10, m = 3; let add = fn(x) { return x + k * m; }; - put_n(add(1)); put_c(10); - put_n(apply(add, 5)); put_c(10); + rt.put_n(add(1)); rt.put_c(10); + rt.put_n(apply(add, 5)); rt.put_c(10); let none = fn() { return 42; }; - put_n(none()); put_c(10); + rt.put_n(none()); rt.put_c(10); let n = 0; let bump = fn(d) { n = n + d; return n; }; - put_n(bump(2)); put_c(10); - put_n(bump(5)); put_c(10); - put_n(n); put_c(10); + rt.put_n(bump(2)); rt.put_c(10); + rt.put_n(bump(5)); rt.put_c(10); + rt.put_n(n); rt.put_c(10); let a = 2; let outer = fn(x) { let inner = fn(y) { return y + a + x; }; return inner(100); }; - put_n(outer(7)); put_c(10); + rt.put_n(outer(7)); rt.put_c(10); let base = 5; let scale = fn(i) { return i * base; }; let s = 0, i = 0; while (i < 4) { s = s + scale(i); i++; } - put_n(s); put_c(10); + rt.put_n(s); rt.put_c(10); let c = 3; let plus = fn(v) { return v + c; }; - put_n(twice(plus, 1)); put_c(10); - put_n(sq(4)); put_c(10); + rt.put_n(twice(plus, 1)); rt.put_c(10); + rt.put_n(sq(4)); rt.put_c(10); let total = 0, j = 0; while (j < 3) { let kk = j; @@ -41,12 +44,12 @@ fn main() { total = total + g(10); j++; } - put_n(total); put_c(10); + rt.put_n(total); rt.put_c(10); let f = make(4); - put_n(f(5)); put_c(10); + rt.put_n(f(5)); rt.put_c(10); let h = 1; let frozen = fn(x) { return x + h; }; h = 100; - put_n(frozen(1)); put_c(10); + rt.put_n(frozen(1)); rt.put_c(10); return 0; } |
