#!/usr/bin/ruby
#
## Test for nested evals.
#
var s1 = "1 + 2";
var s2 = "x";
10.times {
s1 = %Q<eval(%Q<#{s1}>)>;
s2 = %Q{eval(%Q{#{s2}})};
}
do {
var x = 42;
assert_eq(eval(s1), 3);
assert_eq(eval(s2), x);
x = "foo";
assert_eq(eval(s1), 3);
assert_eq(eval(s2), "foo");
}
var s3 = "0"
var strs = []
for i in (1..10) {
s3 = %Q<#{i} + eval(%Q<#{s3}>)>
strs << s3;
}
assert_eq(eval(s3), 55);
assert_eq(strs.map {|s| eval(s) }, 10.of { |i| (i+1) * (i+2) / 2 });
assert_eq(eval(s3), 55);
say "** Test passed!";