#!/usr/bin/ruby # Test scalar context (provided by the unary + operator). var TimePiece = require('Time::Piece') var d = TimePiece.strptime("2020-02-02", "%Y-%m-%d") var a = [d.add(TimePiece.ONE_DAY)] var b = +d.add(TimePiece.ONE_DAY) assert_eq(a, [0, 0, 0, 3, 1, 120, 1, 33, 0]) assert_eq(b.strftime("%Y-%m-%d"), "2020-02-03") var palindates = Enumerator({ |f| loop { f(d) if d.strftime("%Y%m%d").is_palindrome d = +d.add(TimePiece.ONE_DAY) } }) assert_eq(palindates.first(2).map { .strftime("%Y-%m-%d") }, ["2020-02-02", "2021-12-02"]) do { func foo(n) { (n, n+1, n+2) } var a = foo(42) # first element var b = +foo(42) # last element assert_eq(a, 42) assert_eq(b, 44) } do { require('Algorithm::Combinatorics') var data = %w(a b c) var iter = +%S<Algorithm::Combinatorics>.permutations(data) assert_eq( gather { while (var p = iter.next) { take(p) } }, data.permutations) assert_eq([%S<Algorithm::Combinatorics>.permutations(data)], data.permutations) # list context } do { require('Algorithm::Loops') var arr1 = %w(a b c) var arr2 = %w(x y z) var iter = +%S<Algorithm::Loops>.NestedLoops([arr1, arr2]) assert_eq( gather { while (var *car = iter.call) { take(car.clone) } }, [arr1, arr2].cartesian ) assert_eq([%S<Algorithm::Loops>.NestedLoops([arr1, arr2], {|*a| a })], [arr1, arr2].cartesian) # list context } say "** Test passed!"