Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

#!/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!"