diff options
Diffstat (limited to 'awk/rawk/tests/stdlib')
-rw-r--r-- | awk/rawk/tests/stdlib/README.md | 89 | ||||
-rw-r--r-- | awk/rawk/tests/stdlib/example_predicates_simple.rawk | 56 | ||||
-rw-r--r-- | awk/rawk/tests/stdlib/test_enhanced_utilities.rawk | 192 | ||||
-rw-r--r-- | awk/rawk/tests/stdlib/test_enhanced_utilities_simple.rawk | 174 | ||||
-rw-r--r-- | awk/rawk/tests/stdlib/test_functional.rawk | 108 | ||||
-rw-r--r-- | awk/rawk/tests/stdlib/test_predicates.rawk | 196 | ||||
-rw-r--r-- | awk/rawk/tests/stdlib/test_predicates_simple.rawk | 61 | ||||
-rw-r--r-- | awk/rawk/tests/stdlib/test_stdlib_simple.rawk | 30 |
8 files changed, 0 insertions, 906 deletions
diff --git a/awk/rawk/tests/stdlib/README.md b/awk/rawk/tests/stdlib/README.md deleted file mode 100644 index 1b7b028..0000000 --- a/awk/rawk/tests/stdlib/README.md +++ /dev/null @@ -1,89 +0,0 @@ -# Standard Library Tests - -This directory contains tests for the built-in standard library functions. - -## Test Files - -### `test_stdlib_simple.rawk` - Standard Library Functions -Tests the built-in standard library functions: -- **Array utilities**: `keys()`, `values()`, `get_keys()`, `get_values()` -- **Testing functions**: `assert()`, `expect_equal()`, `expect_true()`, `expect_false()` -- **Functional programming**: `map()`, `reduce()`, `pipe()` (limited support) - -**Features:** -- Direct function calls (these work reliably) -- Array operations with proper error handling -- Boolean assertions for testing -- Basic functional programming utilities - -**Run with:** -```bash -awk -f ../../rawk.awk test_stdlib_simple.rawk | awk -f - -``` - -**Sample Output:** -``` -✓ double(5) = 10 -✓ square(4) = 16 -✓ add(3, 7) = 10 -🎉 All basic function tests passed! -``` - -## Standard Library Functions - -### Array Utilities -- `keys(array)`: Returns count of keys in array -- `values(array)`: Returns count of values in array -- `get_keys(array, result)`: Populates result array with keys -- `get_values(array, result)`: Populates result array with values - -### Testing Functions -- `assert(condition, message)`: Asserts a condition is true -- `expect_equal(actual, expected, message)`: Asserts actual equals expected -- `expect_true(condition, message)`: Asserts condition is true -- `expect_false(condition, message)`: Asserts condition is false - -### Functional Programming (Limited Support) -- `map(func_name, array)`: Maps function over array -- `reduce(func_name, array, initial)`: Reduces array with function -- `pipe(value, func_names...)`: Pipes value through functions - -### Predicate Functions (25+ functions) -**Type Checking:** `is_number()`, `is_string()`, `is_array()`, `is_empty()` -**Numeric:** `is_positive()`, `is_negative()`, `is_zero()`, `is_integer()`, `is_float()`, `is_even()`, `is_odd()`, `is_prime()`, `is_in_range()` -**Boolean:** `is_boolean()`, `is_truthy()`, `is_falsy()` -**String:** `is_alpha()`, `is_numeric()`, `is_alphanumeric()`, `is_whitespace()`, `is_uppercase()`, `is_lowercase()`, `is_palindrome()`, `is_length()` -**Validation:** `is_email()`, `is_url()`, `is_ipv4()` - -## Limitations - -The standard library functions have some limitations due to awk's constraints: - -1. **Indirect Function Calls**: Standard awk doesn't support `@func` syntax, so some functional programming features are limited -2. **Array Returns**: Functions cannot return arrays directly (use pass-by-reference) -3. **String-based Dispatch**: The `map` and `reduce` functions work with string function names but have limited support - -## Usage Examples - -### Array Operations -```rawk -data["a"] = 1 -data["b"] = 2 -data["c"] = 3 - -key_count = keys(data) # Returns 3 -get_keys(data, key_array) # Populates key_array with keys -``` - -### Testing -```rawk -result = add(2, 3) -expect_equal(result, 5, "add(2, 3) should return 5") -expect_true(result > 0, "result should be positive") -``` - -### Functional Programming -```rawk -numbers[1] = 1; numbers[2] = 2; numbers[3] = 3 -doubled = map("double", numbers) # Limited support -``` \ No newline at end of file diff --git a/awk/rawk/tests/stdlib/example_predicates_simple.rawk b/awk/rawk/tests/stdlib/example_predicates_simple.rawk deleted file mode 100644 index 426f369..0000000 --- a/awk/rawk/tests/stdlib/example_predicates_simple.rawk +++ /dev/null @@ -1,56 +0,0 @@ -# Simple example: Using rawk predicate functions - -BEGIN { - print "=== rawk Predicate Functions Example ===" - print "" - - # Test various predicate functions - print "=== Type Checking ===" - print "is_number(42): " is_number(42) - print "is_string(\"hello\"): " is_string("hello") - print "is_empty(\"\"): " is_empty("") - print "is_empty(0): " is_empty(0) - - print "" - print "=== Numeric Predicates ===" - print "is_positive(42): " is_positive(42) - print "is_negative(-5): " is_negative(-5) - print "is_zero(0): " is_zero(0) - print "is_integer(42): " is_integer(42) - print "is_float(3.14): " is_float(3.14) - print "is_even(42): " is_even(42) - print "is_odd(43): " is_odd(43) - print "is_prime(17): " is_prime(17) - print "is_in_range(5, 1, 10): " is_in_range(5, 1, 10) - - print "" - print "=== String Predicates ===" - print "is_alpha(\"hello\"): " is_alpha("hello") - print "is_numeric(\"123\"): " is_numeric("123") - print "is_alphanumeric(\"Hello123\"): " is_alphanumeric("Hello123") - print "is_uppercase(\"HELLO\"): " is_uppercase("HELLO") - print "is_lowercase(\"hello\"): " is_lowercase("hello") - print "is_palindrome(\"racecar\"): " is_palindrome("racecar") - print "is_length(\"hello\", 5): " is_length("hello", 5) - - print "" - print "=== Validation Predicates ===" - print "is_email(\"user@example.com\"): " is_email("user@example.com") - print "is_email(\"invalid-email\"): " is_email("invalid-email") - print "is_url(\"http://example.com\"): " is_url("http://example.com") - print "is_url(\"example.com\"): " is_url("example.com") - print "is_ipv4(\"192.168.1.1\"): " is_ipv4("192.168.1.1") - print "is_ipv4(\"256.1.2.3\"): " is_ipv4("256.1.2.3") - - print "" - print "=== Boolean Predicates ===" - print "is_boolean(1): " is_boolean(1) - print "is_boolean(0): " is_boolean(0) - print "is_truthy(42): " is_truthy(42) - print "is_truthy(0): " is_truthy(0) - print "is_falsy(0): " is_falsy(0) - print "is_falsy(42): " is_falsy(42) - - print "" - print "🎉 Predicate functions example completed!" -} \ No newline at end of file diff --git a/awk/rawk/tests/stdlib/test_enhanced_utilities.rawk b/awk/rawk/tests/stdlib/test_enhanced_utilities.rawk deleted file mode 100644 index eacc3f7..0000000 --- a/awk/rawk/tests/stdlib/test_enhanced_utilities.rawk +++ /dev/null @@ -1,192 +0,0 @@ -$is_positive = (x) -> x > 0; -$is_even = (x) -> x % 2 == 0; -$is_negative = (x) -> x < 0; -$is_zero = (x) -> x == 0; -$is_valid_email = (email) -> is_email(email); -$has_error = (log) -> index(log, "ERROR") > 0 -$is_long_string = (str) -> length(str) > 10; - -BEGIN { - print "=== Enhanced Utilities Test Suite ===" - print "" - - # Test 1: Filter function - print "Test 1: Filter Function" - numbers[1] = -1 - numbers[2] = 0 - numbers[3] = 1 - numbers[4] = -5 - numbers[5] = 10 - numbers[6] = -3 - numbers[7] = 7 - - # Filter positive numbers - positive_count = filter("is_positive", numbers, positive_numbers) - expect_equal(positive_count, 3, "Should find 3 positive numbers") - expect_equal(positive_numbers[1], 1, "First positive should be 1") - expect_equal(positive_numbers[2], 10, "Second positive should be 10") - expect_equal(positive_numbers[3], 7, "Third positive should be 7") - print "✓ Filter positive numbers working" - - # Filter even numbers - even_count = filter("is_even", numbers, even_numbers) - expect_equal(even_count, 2, "Should find 2 even numbers") - expect_equal(even_numbers[1], 0, "First even should be 0") - expect_equal(even_numbers[2], 10, "Second even should be 10") - print "✓ Filter even numbers working" - - # Filter negative numbers - negative_count = filter("is_negative", numbers, negative_numbers) - expect_equal(negative_count, 3, "Should find 3 negative numbers") - expect_equal(negative_numbers[1], -1, "First negative should be -1") - expect_equal(negative_numbers[2], -5, "Second negative should be -5") - expect_equal(negative_numbers[3], -3, "Third negative should be -3") - print "✓ Filter negative numbers working" - print "" - - # Test 2: Find function - print "Test 2: Find Function" - - # Find first positive number - first_positive = find("is_positive", numbers) - expect_equal(first_positive, 1, "First positive should be 1") - print "✓ Find first positive working" - - # Find first even number - first_even = find("is_even", numbers) - expect_equal(first_even, 0, "First even should be 0") - print "✓ Find first even working" - - # Find first negative number - first_negative = find("is_negative", numbers) - expect_equal(first_negative, -1, "First negative should be -1") - print "✓ Find first negative working" - - # Test with empty result - first_zero = find("is_zero", numbers) - expect_equal(first_zero, 0, "First zero should be 0") - print "✓ Find with existing value working" - print "" - - # Test 3: FindIndex function - print "Test 3: FindIndex Function" - - # Find index of first positive number - first_positive_index = findIndex("is_positive", numbers) - expect_equal(first_positive_index, 3, "First positive should be at index 3") - print "✓ FindIndex first positive working" - - # Find index of first even number - first_even_index = findIndex("is_even", numbers) - expect_equal(first_even_index, 2, "First even should be at index 2") - print "✓ FindIndex first even working" - - # Find index of first negative number - first_negative_index = findIndex("is_negative", numbers) - expect_equal(first_negative_index, 1, "First negative should be at index 1") - print "✓ FindIndex first negative working" - - # Test with not found - first_zero_index = findIndex("is_zero", numbers) - expect_equal(first_zero_index, 2, "First zero should be at index 2") - print "✓ FindIndex with existing value working" - print "" - - # Test 4: Real-world scenarios - print "Test 4: Real-world Scenarios" - - # Test with email validation - emails[1] = "user@example.com" - emails[2] = "invalid-email" - emails[3] = "another@domain.org" - emails[4] = "not-an-email" - - valid_emails_count = filter("is_valid_email", emails, valid_emails) - expect_equal(valid_emails_count, 2, "Should find 2 valid emails") - expect_equal(valid_emails[1], "user@example.com", "First valid email should be user@example.com") - expect_equal(valid_emails[2], "another@domain.org", "Second valid email should be another@domain.org") - print "✓ Email filtering working" - - # Test with log analysis - logs[1] = "INFO: User logged in" - logs[2] = "ERROR: Database connection failed" - logs[3] = "INFO: Request processed" - logs[4] = "ERROR: Invalid input" - logs[5] = "DEBUG: Memory usage" - - error_logs_count = filter("has_error", logs, error_logs) - expect_equal(error_logs_count, 2, "Should find 2 error logs") - expect_equal(error_logs[1], "ERROR: Database connection failed", "First error log should be database error") - expect_equal(error_logs[2], "ERROR: Invalid input", "Second error log should be invalid input error") - print "✓ Log filtering working" - - # Find first error log - first_error = find("has_error", logs) - expect_equal(first_error, "ERROR: Database connection failed", "First error should be database error") - print "✓ Find first error working" - - # Find index of first error - first_error_index = findIndex("has_error", logs) - expect_equal(first_error_index, 2, "First error should be at index 2") - print "✓ FindIndex first error working" - print "" - - # Test 5: Edge cases - print "Test 5: Edge Cases" - - # Test with empty array - empty_count = filter("is_positive", empty_array, empty_result) - expect_equal(empty_count, 0, "Empty array should return 0") - print "✓ Empty array filtering working" - - # Test find with empty array - empty_find = find("is_positive", empty_array) - expect_equal(empty_find, "", "Find with empty array should return empty string") - print "✓ Find with empty array working" - - # Test findIndex with empty array - empty_find_index = findIndex("is_positive", empty_array) - expect_equal(empty_find_index, 0, "FindIndex with empty array should return 0") - print "✓ FindIndex with empty array working" - - # Test with single element array - single[1] = 42 - single_count = filter("is_positive", single, single_result) - expect_equal(single_count, 1, "Single positive element should return 1") - expect_equal(single_result[1], 42, "Single result should be 42") - print "✓ Single element array working" - print "" - - # Test 6: Integration with existing functions - print "Test 6: Integration with Existing Functions" - - # Filter then map - filtered_count = filter("is_positive", numbers, filtered) - doubled_count = map("double", filtered, doubled_filtered) - expect_equal(doubled_count, 3, "Should have 3 doubled positive numbers") - expect_equal(doubled_filtered[1], 2, "First doubled should be 2") - expect_equal(doubled_filtered[2], 20, "Second doubled should be 20") - expect_equal(doubled_filtered[3], 14, "Third doubled should be 14") - print "✓ Filter + Map integration working" - - # Find then pipe - first_positive = find("is_positive", numbers) - doubled_first = pipe(first_positive, "double") - expect_equal(doubled_first, 2, "Doubled first positive should be 2") - print "✓ Find + Pipe integration working" - print "" - - print "=== Enhanced Utilities Test Summary ===" - print "Total tests: 6" - print "Passed: 6" - print "Failed: 0" - print "🎉 All enhanced utilities tests passed!" - print "" - print "Features verified:" - print "✓ filter() - Array filtering with predicates" - print "✓ find() - Find first matching element" - print "✓ findIndex() - Find index of first matching element" - print "✓ Real-world scenarios (email validation, log analysis)" - print "✓ Edge cases (empty arrays, single elements)" - print "✓ Integration with existing functional programming features" -} \ No newline at end of file diff --git a/awk/rawk/tests/stdlib/test_enhanced_utilities_simple.rawk b/awk/rawk/tests/stdlib/test_enhanced_utilities_simple.rawk deleted file mode 100644 index 09c5988..0000000 --- a/awk/rawk/tests/stdlib/test_enhanced_utilities_simple.rawk +++ /dev/null @@ -1,174 +0,0 @@ -$is_positive = (x) -> x > 0; -$is_even = (x) -> x % 2 == 0; -$is_negative = (x) -> x < 0; -$is_zero = (x) -> x == 0; -$is_valid_email = (email) -> is_email(email); -$double = (x) -> x * 2; - -BEGIN { - print "=== Enhanced Utilities Test Suite (Simplified) ===" - print "" - - # Test 1: Filter function - print "Test 1: Filter Function" - numbers[1] = -1 - numbers[2] = 0 - numbers[3] = 1 - numbers[4] = -5 - numbers[5] = 10 - numbers[6] = -3 - numbers[7] = 7 - - # Filter positive numbers - positive_count = filter("is_positive", numbers, positive_numbers) - expect_equal(positive_count, 3, "Should find 3 positive numbers") - expect_equal(positive_numbers[1], 1, "First positive should be 1") - expect_equal(positive_numbers[2], 10, "Second positive should be 10") - expect_equal(positive_numbers[3], 7, "Third positive should be 7") - print "✓ Filter positive numbers working" - - # Filter even numbers - even_count = filter("is_even", numbers, even_numbers) - expect_equal(even_count, 2, "Should find 2 even numbers") - expect_equal(even_numbers[1], 0, "First even should be 0") - expect_equal(even_numbers[2], 10, "Second even should be 10") - print "✓ Filter even numbers working" - - # Filter negative numbers - negative_count = filter("is_negative", numbers, negative_numbers) - expect_equal(negative_count, 3, "Should find 3 negative numbers") - # Check that all expected negative numbers are present (order may vary) - has_neg1 = 0 - has_neg5 = 0 - has_neg3 = 0 - for (i = 1; i <= negative_count; i++) { - if (negative_numbers[i] == -1) has_neg1 = 1 - if (negative_numbers[i] == -5) has_neg5 = 1 - if (negative_numbers[i] == -3) has_neg3 = 1 - } - expect_true(has_neg1, "Should contain -1") - expect_true(has_neg5, "Should contain -5") - expect_true(has_neg3, "Should contain -3") - print "✓ Filter negative numbers working" - print "" - - # Test 2: Find function - print "Test 2: Find Function" - - # Find first positive number - first_positive = find("is_positive", numbers) - expect_equal(first_positive, 1, "First positive should be 1") - print "✓ Find first positive working" - - # Find first even number - first_even = find("is_even", numbers) - expect_equal(first_even, 0, "First even should be 0") - print "✓ Find first even working" - - # Find first negative number (order may vary) - first_negative = find("is_negative", numbers) - expect_true(first_negative == -1 || first_negative == -5 || first_negative == -3, "First negative should be one of the negative numbers") - print "✓ Find first negative working" - print "" - - # Test 3: FindIndex function - print "Test 3: FindIndex Function" - - # Find index of first positive number (order may vary) - first_positive_index = findIndex("is_positive", numbers) - expect_true(first_positive_index >= 1 && first_positive_index <= 7, "First positive should be at a valid index") - print "✓ FindIndex first positive working" - - # Find index of first even number (order may vary) - first_even_index = findIndex("is_even", numbers) - expect_true(first_even_index >= 1 && first_even_index <= 7, "First even should be at a valid index") - print "✓ FindIndex first even working" - - # Find index of first negative number (order may vary) - first_negative_index = findIndex("is_negative", numbers) - expect_true(first_negative_index >= 1 && first_negative_index <= 7, "First negative should be at a valid index") - print "✓ FindIndex first negative working" - print "" - - # Test 4: Real-world scenarios - print "Test 4: Real-world Scenarios" - - # Test with email validation - emails[1] = "user@example.com" - emails[2] = "invalid-email" - emails[3] = "another@domain.org" - emails[4] = "not-an-email" - - valid_emails_count = filter("is_valid_email", emails, valid_emails) - expect_equal(valid_emails_count, 2, "Should find 2 valid emails") - # Check that both valid emails are present (order may vary) - has_user = 0 - has_another = 0 - for (i = 1; i <= valid_emails_count; i++) { - if (valid_emails[i] == "user@example.com") has_user = 1 - if (valid_emails[i] == "another@domain.org") has_another = 1 - } - expect_true(has_user, "Should contain user@example.com") - expect_true(has_another, "Should contain another@domain.org") - print "✓ Email filtering working" - print "" - - # Test 5: Edge cases - print "Test 5: Edge Cases" - - # Test with empty array - empty_count = filter("is_positive", empty_array, empty_result) - expect_equal(empty_count, 0, "Empty array should return 0") - print "✓ Empty array filtering working" - - # Test find with empty array - empty_find = find("is_positive", empty_array) - expect_equal(empty_find, "", "Find with empty array should return empty string") - print "✓ Find with empty array working" - - # Test findIndex with empty array - empty_find_index = findIndex("is_positive", empty_array) - expect_equal(empty_find_index, 0, "FindIndex with empty array should return 0") - print "✓ FindIndex with empty array working" - - # Test with single element array - single[1] = 42 - single_count = filter("is_positive", single, single_result) - expect_equal(single_count, 1, "Single positive element should return 1") - expect_equal(single_result[1], 42, "Single result should be 42") - print "✓ Single element array working" - print "" - - # Test 6: Integration with existing functions - print "Test 6: Integration with Existing Functions" - - # Filter then map - filtered_count = filter("is_positive", numbers, filtered) - doubled_count = map("double", filtered, doubled_filtered) - expect_equal(doubled_count, 3, "Should have 3 doubled positive numbers") - expect_equal(doubled_filtered[1], 2, "First doubled should be 2") - expect_equal(doubled_filtered[2], 20, "Second doubled should be 20") - expect_equal(doubled_filtered[3], 14, "Third doubled should be 14") - print "✓ Filter + Map integration working" - - # Find then pipe - first_positive = find("is_positive", numbers) - doubled_first = pipe(first_positive, "double") - expect_equal(doubled_first, 2, "Doubled first positive should be 2") - print "✓ Find + Pipe integration working" - print "" - - print "=== Enhanced Utilities Test Summary ===" - print "Total tests: 6" - print "Passed: 6" - print "Failed: 0" - print "🎉 All enhanced utilities tests passed!" - print "" - print "Features verified:" - print "✓ filter() - Array filtering with predicates" - print "✓ find() - Find first matching element" - print "✓ findIndex() - Find index of first matching element" - print "✓ Real-world scenarios (email validation)" - print "✓ Edge cases (empty arrays, single elements)" - print "✓ Integration with existing functional programming features" -} \ No newline at end of file diff --git a/awk/rawk/tests/stdlib/test_functional.rawk b/awk/rawk/tests/stdlib/test_functional.rawk deleted file mode 100644 index b2d7e43..0000000 --- a/awk/rawk/tests/stdlib/test_functional.rawk +++ /dev/null @@ -1,108 +0,0 @@ -$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 diff --git a/awk/rawk/tests/stdlib/test_predicates.rawk b/awk/rawk/tests/stdlib/test_predicates.rawk deleted file mode 100644 index 60cc4d7..0000000 --- a/awk/rawk/tests/stdlib/test_predicates.rawk +++ /dev/null @@ -1,196 +0,0 @@ -# Test suite for rawk predicate functions -# This demonstrates all the new type checking and validation functions - -BEGIN { - print "=== rawk Predicate Functions Test Suite ===" - print "" - - # Test counters - total_tests = 0 - passed_tests = 0 - failed_tests = 0 - - # Helper function to run tests - $run_test = (name, condition, expected) -> { - total_tests++ - if (condition == expected) { - passed_tests++ - print "✓ " name - } else { - failed_tests++ - print "❌ " name " (expected " expected ", got " condition ")" - } - } - - # Helper function to print section headers - $print_section = (title) -> { - print "" - print "--- " title " ---" - } - - # Test basic type checking - print_section("Basic Type Checking") - - run_test("is_number(42)", is_number(42), 1) - run_test("is_number(0)", is_number(0), 1) - run_test("is_number(-3.14)", is_number(-3.14), 1) - run_test("is_number(\"hello\")", is_number("hello"), 0) - run_test("is_number(\"\")", is_number(""), 0) - - run_test("is_string(\"hello\")", is_string("hello"), 1) - run_test("is_string(\"\")", is_string(""), 1) - run_test("is_string(42)", is_string(42), 0) - run_test("is_string(0)", is_string(0), 0) - - # Test array detection - print_section("Array Detection") - - test_array[1] = "a" - test_array[2] = "b" - empty_array[0] = "" - - run_test("is_array(test_array)", is_array(test_array), 1) - run_test("is_array(empty_array)", is_array(empty_array), 1) - run_test("is_array(42)", is_array(42), 0) - run_test("is_array(\"hello\")", is_array("hello"), 0) - - # Test emptiness checking - print_section("Emptiness Checking") - - run_test("is_empty(\"\")", is_empty(""), 1) - run_test("is_empty(0)", is_empty(0), 1) - run_test("is_empty(\"hello\")", is_empty("hello"), 0) - run_test("is_empty(42)", is_empty(42), 0) - - # Test numeric predicates - print_section("Numeric Predicates") - - run_test("is_positive(42)", is_positive(42), 1) - run_test("is_positive(0)", is_positive(0), 0) - run_test("is_positive(-5)", is_positive(-5), 0) - - run_test("is_negative(-42)", is_negative(-42), 1) - run_test("is_negative(0)", is_negative(0), 0) - run_test("is_negative(5)", is_negative(5), 0) - - run_test("is_zero(0)", is_zero(0), 1) - run_test("is_zero(42)", is_zero(42), 0) - run_test("is_zero(-5)", is_zero(-5), 0) - - run_test("is_integer(42)", is_integer(42), 1) - run_test("is_integer(3.14)", is_integer(3.14), 0) - run_test("is_integer(0)", is_integer(0), 1) - - run_test("is_float(3.14)", is_float(3.14), 1) - run_test("is_float(42)", is_float(42), 0) - run_test("is_float(0)", is_float(0), 0) - - run_test("is_even(42)", is_even(42), 1) - run_test("is_even(43)", is_even(43), 0) - run_test("is_even(0)", is_even(0), 1) - - run_test("is_odd(43)", is_odd(43), 1) - run_test("is_odd(42)", is_odd(42), 0) - run_test("is_odd(0)", is_odd(0), 0) - - run_test("is_prime(2)", is_prime(2), 1) - run_test("is_prime(3)", is_prime(3), 1) - run_test("is_prime(4)", is_prime(4), 0) - run_test("is_prime(17)", is_prime(17), 1) - run_test("is_prime(1)", is_prime(1), 0) - - run_test("is_in_range(5, 1, 10)", is_in_range(5, 1, 10), 1) - run_test("is_in_range(0, 1, 10)", is_in_range(0, 1, 10), 0) - run_test("is_in_range(10, 1, 10)", is_in_range(10, 1, 10), 1) - - # Test boolean predicates - print_section("Boolean Predicates") - - run_test("is_boolean(1)", is_boolean(1), 1) - run_test("is_boolean(0)", is_boolean(0), 1) - run_test("is_boolean(2)", is_boolean(2), 0) - run_test("is_boolean(\"true\")", is_boolean("true"), 0) - - run_test("is_truthy(42)", is_truthy(42), 1) - run_test("is_truthy(\"hello\")", is_truthy("hello"), 1) - run_test("is_truthy(0)", is_truthy(0), 0) - run_test("is_truthy(\"\")", is_truthy(""), 0) - - run_test("is_falsy(0)", is_falsy(0), 1) - run_test("is_falsy(\"\")", is_falsy(""), 1) - run_test("is_falsy(42)", is_falsy(42), 0) - run_test("is_falsy(\"hello\")", is_falsy("hello"), 0) - - # Test string predicates - print_section("String Predicates") - - run_test("is_alpha(\"hello\")", is_alpha("hello"), 1) - run_test("is_alpha(\"Hello123\")", is_alpha("Hello123"), 0) - run_test("is_alpha(\"\")", is_alpha(""), 0) - - run_test("is_numeric(\"123\")", is_numeric("123"), 1) - run_test("is_numeric(\"123abc\")", is_numeric("123abc"), 0) - run_test("is_numeric(\"\")", is_numeric(""), 0) - - run_test("is_alphanumeric(\"Hello123\")", is_alphanumeric("Hello123"), 1) - run_test("is_alphanumeric(\"Hello 123\")", is_alphanumeric("Hello 123"), 0) - run_test("is_alphanumeric(\"\")", is_alphanumeric(""), 0) - - run_test("is_whitespace(\" \t\n\")", is_whitespace(" \t\n"), 1) - run_test("is_whitespace(\"hello\")", is_whitespace("hello"), 0) - run_test("is_whitespace(\"\")", is_whitespace(""), 0) - - run_test("is_uppercase(\"HELLO\")", is_uppercase("HELLO"), 1) - run_test("is_uppercase(\"Hello\")", is_uppercase("Hello"), 0) - run_test("is_uppercase(\"\")", is_uppercase(""), 0) - - run_test("is_lowercase(\"hello\")", is_lowercase("hello"), 1) - run_test("is_lowercase(\"Hello\")", is_lowercase("Hello"), 0) - run_test("is_lowercase(\"\")", is_lowercase(""), 0) - - run_test("is_palindrome(\"racecar\")", is_palindrome("racecar"), 1) - run_test("is_palindrome(\"hello\")", is_palindrome("hello"), 0) - run_test("is_palindrome(\"\")", is_palindrome(""), 1) - run_test("is_palindrome(\"A man a plan a canal Panama\")", is_palindrome("A man a plan a canal Panama"), 1) - - run_test("is_length(\"hello\", 5)", is_length("hello", 5), 1) - run_test("is_length(\"hello\", 3)", is_length("hello", 3), 0) - - # Test validation predicates - print_section("Validation Predicates") - - run_test("is_email(\"user@example.com\")", is_email("user@example.com"), 1) - run_test("is_email(\"invalid-email\")", is_email("invalid-email"), 0) - run_test("is_email(\"@example.com\")", is_email("@example.com"), 0) - run_test("is_email(\"user@\")", is_email("user@"), 0) - run_test("is_email(\"\")", is_email(""), 0) - - run_test("is_url(\"http://example.com\")", is_url("http://example.com"), 1) - run_test("is_url(\"https://example.com\")", is_url("https://example.com"), 1) - run_test("is_url(\"ftp://example.com\")", is_url("ftp://example.com"), 1) - run_test("is_url(\"example.com\")", is_url("example.com"), 0) - - run_test("is_ipv4(\"192.168.1.1\")", is_ipv4("192.168.1.1"), 1) - run_test("is_ipv4(\"256.1.2.3\")", is_ipv4("256.1.2.3"), 0) - run_test("is_ipv4(\"192.168.1\")", is_ipv4("192.168.1"), 0) - run_test("is_ipv4(\"192.168.1.1.1\")", is_ipv4("192.168.1.1.1"), 0) - - # Test array length (commented out due to AWK limitations) - # print_section("Array Length") - # - # run_test("is_length(test_array, 2)", is_length(test_array, 2), 1) - # run_test("is_length(test_array, 3)", is_length(test_array, 3), 0) - - # Print summary - print "" - print "=== Test Summary ===" - print "Total tests: " total_tests - print "Passed: " passed_tests - print "Failed: " failed_tests - - if (failed_tests == 0) { - print "🎉 All predicate function tests passed!" - } else { - print "❌ Some tests failed!" - } -} \ No newline at end of file diff --git a/awk/rawk/tests/stdlib/test_predicates_simple.rawk b/awk/rawk/tests/stdlib/test_predicates_simple.rawk deleted file mode 100644 index b5f6970..0000000 --- a/awk/rawk/tests/stdlib/test_predicates_simple.rawk +++ /dev/null @@ -1,61 +0,0 @@ -# Simple test for rawk predicate functions - -BEGIN { - print "=== Simple Predicate Functions Test ===" - print "" - - # Test basic type checking - print "is_number(42): " is_number(42) - print "is_number(\"hello\"): " is_number("hello") - print "is_string(\"hello\"): " is_string("hello") - print "is_string(42): " is_string(42) - print "is_empty(\"\"): " is_empty("") - print "is_empty(0): " is_empty(0) - print "is_empty(\"hello\"): " is_empty("hello") - - # Test numeric predicates - print "" - print "is_positive(42): " is_positive(42) - print "is_positive(-5): " is_positive(-5) - print "is_negative(-42): " is_negative(-42) - print "is_negative(5): " is_negative(5) - print "is_zero(0): " is_zero(0) - print "is_zero(42): " is_zero(42) - print "is_integer(42): " is_integer(42) - print "is_integer(3.14): " is_integer(3.14) - print "is_even(42): " is_even(42) - print "is_odd(43): " is_odd(43) - print "is_prime(17): " is_prime(17) - print "is_prime(4): " is_prime(4) - - # Test string predicates - print "" - print "is_alpha(\"hello\"): " is_alpha("hello") - print "is_alpha(\"Hello123\"): " is_alpha("Hello123") - print "is_numeric(\"123\"): " is_numeric("123") - print "is_numeric(\"123abc\"): " is_numeric("123abc") - print "is_uppercase(\"HELLO\"): " is_uppercase("HELLO") - print "is_lowercase(\"hello\"): " is_lowercase("hello") - print "is_palindrome(\"racecar\"): " is_palindrome("racecar") - print "is_palindrome(\"hello\"): " is_palindrome("hello") - - # Test validation predicates - print "" - print "is_email(\"user@example.com\"): " is_email("user@example.com") - print "is_email(\"invalid-email\"): " is_email("invalid-email") - print "is_url(\"http://example.com\"): " is_url("http://example.com") - print "is_url(\"example.com\"): " is_url("example.com") - print "is_ipv4(\"192.168.1.1\"): " is_ipv4("192.168.1.1") - print "is_ipv4(\"256.1.2.3\"): " is_ipv4("256.1.2.3") - - # Test string length - print "" - print "is_length(\"hello\", 5): " is_length("hello", 5) - print "is_length(\"hello\", 3): " is_length("hello", 3) - - print "" - print "🎉 Simple predicate function tests completed!" - print "" - print "Note: Array detection functions have limitations in standard awk" - print "and cannot be tested in this simple format." -} \ No newline at end of file diff --git a/awk/rawk/tests/stdlib/test_stdlib_simple.rawk b/awk/rawk/tests/stdlib/test_stdlib_simple.rawk deleted file mode 100644 index 56010ff..0000000 --- a/awk/rawk/tests/stdlib/test_stdlib_simple.rawk +++ /dev/null @@ -1,30 +0,0 @@ -# Simple standard library test -$double = (x) -> x * 2; -$square = (x) -> x * x; -$add = (a, b) -> a + b; - -# Test the standard library with direct function calls -BEGIN { - print "=== Testing Standard Library (Simple) ===" - - # Test direct function calls (these work) - print "double(5) =", double(5) - print "square(4) =", square(4) - print "add(3, 7) =", add(3, 7) - - # Test keys and values functions (these work) - data["a"] = 1 - data["b"] = 2 - data["c"] = 3 - key_count = keys(data) - value_count = values(data) - get_keys(data, key_array) - get_values(data, value_array) - print "keys(data) =", key_array[1], key_array[2], key_array[3] - print "values(data) =", value_array[1], value_array[2], value_array[3] - print "key count =", key_count, "value count =", value_count - - # Test nested function calls - print "double(square(3)) =", double(square(3)) - print "square(double(3)) =", square(double(3)) -} \ No newline at end of file |