#!/usr/bin/ruby
#
## Lazy iterators
#
var iter = (^Inf -> lazy.grep{ .is_prime }.iter)
var a = 10.of(iter)
var b = 10.defs(iter)
var c = 10.defs { |i| i.is_prime ? i : nil }
assert_eq(a, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29])
assert_eq(b, [31, 37, 41, 43, 47, 53, 59, 61, 67, 71])
assert_eq(a, c)
var jter = (^100 -> lazy.grep { .is_even }.map {|n| 4*n + 1 }.grep{ .is_prime }.iter)
var d = 100.of { jter() \\ break }
assert_eq(d, [17, 41, 73, 89, 97, 113, 137, 193, 233, 241, 257, 281, 313, 337, 353])
var kter = (^Inf -> lazy.grep { .is_odd }.map { |n| 12*n + 1 }.grep { .is_prime })
var e = []
for p in (kter) {
e << p
break if (p > 200)
}
assert_eq(e, [13, 37, 61, 109, 157, 181, 229])
for p in (kter) {
break if (p == 13)
die "kter error!"
}
say "** Test passed!"