diff options
Diffstat (limited to 'awk/rawk/scratch/tests_old/stdlib/test_functional.rawk')
-rw-r--r-- | awk/rawk/scratch/tests_old/stdlib/test_functional.rawk | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/awk/rawk/scratch/tests_old/stdlib/test_functional.rawk b/awk/rawk/scratch/tests_old/stdlib/test_functional.rawk new file mode 100644 index 0000000..b2d7e43 --- /dev/null +++ b/awk/rawk/scratch/tests_old/stdlib/test_functional.rawk @@ -0,0 +1,108 @@ +$double = (x) -> x * 2; +$add = (x, y) -> x + y; +$square = (x) -> x * x; +$add_one = (x) -> x + 1; +$multiply = (x, y) -> x * y; + +BEGIN { + print "=== Functional Programming Test Suite ===" + print "" + + # Test 1: Basic dispatch_call + print "Test 1: Function Dispatch" + expect_equal(dispatch_call("double", 5), 10, "dispatch_call('double', 5) should be 10") + expect_equal(dispatch_call("add", 3, 4), 7, "dispatch_call('add', 3, 4) should be 7") + expect_equal(dispatch_call("square", 4), 16, "dispatch_call('square', 4) should be 16") + print "✓ Function dispatch working correctly" + print "" + + # Test 2: Map function + print "Test 2: Map Function" + numbers[1] = 1 + numbers[2] = 2 + numbers[3] = 3 + numbers[4] = 4 + numbers[5] = 5 + + doubled_count = map("double", numbers, doubled) + expect_equal(doubled_count, 5, "doubled array should have 5 elements") + expect_equal(doubled[1], 2, "doubled[1] should be 2") + expect_equal(doubled[2], 4, "doubled[2] should be 4") + expect_equal(doubled[3], 6, "doubled[3] should be 6") + expect_equal(doubled[4], 8, "doubled[4] should be 8") + expect_equal(doubled[5], 10, "doubled[5] should be 10") + print "✓ Map function working correctly" + print "" + + # Test 3: Reduce function + print "Test 3: Reduce Function" + sum = reduce("add", numbers) + expect_equal(sum, 15, "sum of [1,2,3,4,5] should be 15") + + product = reduce("multiply", numbers) + expect_equal(product, 120, "product of [1,2,3,4,5] should be 120") + print "✓ Reduce function working correctly" + print "" + + # Test 4: Pipe function (single function) + print "Test 4: Pipe Function (Single)" + result = pipe(5, "double") + expect_equal(result, 10, "pipe(5, 'double') should be 10") + result = pipe(3, "square") + expect_equal(result, 9, "pipe(3, 'square') should be 9") + print "✓ Pipe function working correctly" + print "" + + # Test 5: Pipe_multi function (multiple functions) + print "Test 5: Pipe Function (Multiple)" + func_names[1] = "double" + func_names[2] = "add_one" + + result = pipe_multi(5, func_names) + expect_equal(result, 11, "pipe_multi(5, ['double', 'add_one']) should be 11") + + func_names[1] = "square" + func_names[2] = "double" + result = pipe_multi(3, func_names) + expect_equal(result, 18, "pipe_multi(3, ['square', 'double']) should be 18") + print "✓ Pipe_multi function working correctly" + print "" + + # Test 6: Complex functional composition + print "Test 6: Complex Functional Composition" + # Create array of squares + squared_count = map("square", numbers, squared) + expect_equal(squared_count, 5, "squared array should have 5 elements") + expect_equal(squared[1], 1, "squared[1] should be 1") + expect_equal(squared[2], 4, "squared[2] should be 4") + expect_equal(squared[3], 9, "squared[3] should be 9") + + # Sum of squares + sum_of_squares = reduce("add", squared) + expect_equal(sum_of_squares, 55, "sum of squares [1,4,9,16,25] should be 55") + print "✓ Complex functional composition working correctly" + print "" + + # Test 7: Error handling + print "Test 7: Error Handling" + # Test non-existent function + result = dispatch_call("nonexistent", 1) + expect_equal(result, "", "dispatch_call should return empty for non-existent function") + print "✓ Error handling working correctly" + print "" + + print "=== Functional Programming Test Summary ===" + print "Total tests: 7" + print "Passed: 7" + print "Failed: 0" + print "🎉 All functional programming tests passed!" + print "" + print "Features verified:" + print "✓ Function dispatch with switch statements" + print "✓ map() - Apply function to array elements" + print "✓ reduce() - Reduce array with function" + print "✓ pipe() - Single function pipeline" + print "✓ pipe_multi() - Multiple function pipeline" + print "✓ Error handling for non-existent functions" + print "✓ Complex functional composition" +} \ No newline at end of file |