#!/usr/bin/ruby # Test localization of functions in block objects do { var refs = [] var funcs = [1,2,3].map {|x| func foo(n) { refs << foo.refaddr [n, x] } } assert_eq( funcs.map { .call(1) }, [[1, 1], [1, 2], [1, 3]] ) var t = funcs.map{.refaddr} assert_eq(t.uniq.len, 3) assert_eq(refs.uniq.len, 3) assert_eq(t, refs) } # Test localization of functions in non-block objects do { var arr = [] for x in (1..3) { arr << func f(n) { [n, x, f.refaddr, f] } } var test = arr.map { .call(42) } assert_eq(test.map{ .[0] }, [42, 42, 42]) assert_eq(test.map{ .[1] }, [1, 2, 3]) assert_eq(test.map{ .[2] }.uniq.len, 3) assert_eq(test.map{ .[3] }.uniq.len, 3) } do { var fs = 10.of { |i| ->(k) { i + k } } assert_eq(fs[3](4), 7) } say "** Test passed!"