# 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 ```