#!/usr/bin/ruby

var arr_test = [["x", "y", "z"]];

arr_test[0][1]->say;
arr_test[0][-1]->say;

arr_test[1] = "x";
arr_test->to_s->say;

arr_test[0][0,2]->to_s->say;

var ref_slice = [arr_test[0,1,2]];
ref_slice[0,1,2,3] = ("hu","hi","hei","no");

ref_slice.to_s.say;
arr_test->to_s.say;

arr_test->len->to_s->say;

["zzzz","ioana"][1]->say;
[[["zzz","trizen","zzz"]]][0][0][1]->say;

#
## Test `nil` return-values
#

var a = [4, 8, 10, 12]
var r = [a.first_by { .is_odd }, a.last_by { .is_odd }]

assert_eq(r.len, 2)
assert_eq(r, [nil, nil])

#
## Test `map_2d` and `grep_2d`
#

assert_eq(
    Matrix([1,2,3],[4,5,6]).map_2d{ |*a| a.map { _**2 } },
    Matrix([1, 4, 9], [16, 25, 36])
)

assert_eq([[1,2], [3,4], [5,6]].map_2d {|a,b| a+b }, [3, 7, 11])
assert_eq([[1,2], [3,4], [5,6]].map_2d {|a,b| [a**2, b**2] }, [[1,4], [9,16], [25, 36]])

assert_eq([[1,2], [3,4], [5,6]].grep_2d{|a,b| a+b == 7 }, [[3,4]])
assert_eq([[1,2], [3,4], [5,6]].grep_2d{|a,b| a+b <= 7 }, [[1,2], [3,4]])

say "** Test passed!"