/* Test each combinator for APL-style element-wise operations */ /* Basic table creation */ numbers : {1, 2, 3, 4, 5}; table1 : {a: 1, b: 2, c: 3}; table2 : {a: 10, b: 20, c: 30}; /* Test each with no tables (backward compatibility) */ normal_add : each @add 5 3; /* Expected: 8 */ /* Test each with single table */ double : x -> x * 2; each_result : each @double numbers; /* Expected: {1: 2, 2: 4, 3: 6, 4: 8, 5: 10} */ /* Test each with mixed table and scalar */ mixed_operation : each @add numbers 10; /* Expected: {1: 11, 2: 12, 3: 13, 4: 14, 5: 15} */ /* Test each with multiple tables */ multi_table_sum : each @add table1 table2; /* Expected: {a: 11, b: 22, c: 33} */ /* Test each with three arguments using composition */ add_100 : x -> add x 100; triple_sum : each @add_100 table1; /* Expected: {a: 101, b: 102, c: 103} */ /* Test nested table operations */ nested : { data: {a: 1, b: 2, c: 3}, meta: {type: "numbers", count: 3} }; /* Top-level only (nested tables unchanged) */ top_level_only : each @double nested; /* Expected: {data: {a: 1, b: 2, c: 3}, meta: {type: "numbers", count: 3}} */ /* Nested operations with explicit composition */ nested_doubled : each (each @double) nested; /* Expected: {data: {a: 2, b: 4, c: 6}, meta: {type: "numbers", count: 3}} */ /* Output results */ ..out "=== EACH COMBINATOR TESTS ==="; ..out "Normal add (no tables):"; ..out normal_add; ..out "Each with single table:"; ..out each_result; ..out "Each with mixed table and scalar:"; ..out mixed_operation; ..out "Each with multiple tables:"; ..out multi_table_sum; ..out "Each with three arguments using composition:"; ..out triple_sum; ..out "Top-level only (nested):"; ..out top_level_only; ..out "Nested with explicit composition:"; ..out nested_doubled;