Dave Cross: Still Munging Data With Perl: Online event - Mar 27 Learn more

#!/usr/bin/ruby
# Tests for the "Date" built-in type.
var palindates = Enumerator({ |f|
var d = Date.strptime("2020-02-02", "%Y-%m-%d")
loop {
f(d) if d.strftime("%Y%m%d").is_palindrome
d = d.add_days(1)
}
})
var dates = palindates.first(3)
assert_eq(
dates.map { .strftime("%Y-%m-%d") },
["2020-02-02", "2021-12-02", "2030-03-02"]
)
assert_eq(dates.sort, dates)
assert_eq(dates.flip.sort, dates)
dates.cons(2, {|a,b|
assert(a < b)
assert(a <= b)
assert_ne(a, b)
assert(b > a)
assert(b >= a)
})
dates.flip.cons(2, {|a,b|
assert(a > b)
assert(a >= b)
assert_ne(a, b)
assert(b < a)
assert(b <= a)
})
assert(dates[0] == dates[0])
assert(dates[-1] == dates[-1])
assert(dates[0] != dates[-1])
assert(dates[-1] != dates[0])
assert_ne(!(dates[0] != dates[-1]))
assert_ne(!(dates[-1] != dates[0]))
assert(!(dates[0] == dates[-1]))
assert(!(dates[-1] == dates[0]))
assert_eq(dates[0].add_days(2).ymd, "2020-02-04")
assert_eq(dates[0].add_months(2).ymd, "2020-04-02")
assert_eq(dates[0].add_years(2).ymd, "2022-02-02")
assert_eq(dates[0].add_days(2) - dates[0], 2*86400)
assert_eq(dates[0].add_days(2) - 2*86400 -> ymd, "2020-02-02")
say "** Test passed!"