about summary refs log tree commit diff stats
path: root/awk/rawk/temp.awk
diff options
context:
space:
mode:
Diffstat (limited to 'awk/rawk/temp.awk')
-rw-r--r--awk/rawk/temp.awk541
1 files changed, 0 insertions, 541 deletions
diff --git a/awk/rawk/temp.awk b/awk/rawk/temp.awk
deleted file mode 100644
index 16a433b..0000000
--- a/awk/rawk/temp.awk
+++ /dev/null
@@ -1,541 +0,0 @@
-# --- rawk Standard Library ---
-# Dispatch mechanism for rawk functions
-function dispatch_call(func_name, arg1, arg2, arg3, arg4, arg5, metadata, parts, internal_name, arg_count) {
-    if (!(func_name in RAWK_DISPATCH)) {
-        print "Error: Function '" func_name "' not found" > "/dev/stderr"
-        return
-    }
-    metadata = RAWK_DISPATCH[func_name]
-    split(metadata, parts, "|")
-    internal_name = parts[1]
-    arg_count = parts[2]
-    # This is a simplified dispatch - in a real implementation, we'd need a more sophisticated approach
-    print "Error: Dispatch not fully implemented for function '" func_name "'" > "/dev/stderr"
-    return
-}
-
-function apply(func_name, args, i, metadata, parts, internal_name, arg_count) {
-    if (!(func_name in RAWK_DISPATCH)) {
-        print "Error: Function '" func_name "' not found" > "/dev/stderr"
-        return
-    }
-    metadata = RAWK_DISPATCH[func_name]
-    split(metadata, parts, "|")
-    internal_name = parts[1]
-    arg_count = parts[2]
-    if (length(args) != arg_count) {
-        print "Error: Function '" func_name "' expects " arg_count " arguments, got " length(args) > "/dev/stderr"
-        return
-    }
-    return args[1]
-}
-
-function map(func_name, array, result, i, metadata, parts, internal_name, arg_count) {
-    if (!(func_name in RAWK_DISPATCH)) {
-        print "❌ rawk runtime error: Function '" func_name "' not found" > "/dev/stderr"
-        print "💡 Available functions: " > "/dev/stderr"
-        for (f in RAWK_DISPATCH) {
-            print "   - " f > "/dev/stderr"
-        }
-        return
-    }
-    metadata = RAWK_DISPATCH[func_name]
-    split(metadata, parts, "|")
-    internal_name = parts[1]
-    arg_count = parts[2]
-    if (arg_count != 1) {
-        print "❌ rawk runtime error: Function '" func_name "' must take exactly 1 argument for map" > "/dev/stderr"
-        print "💡 Function '" func_name "' takes " arg_count " arguments" > "/dev/stderr"
-        return
-    }
-    # Use a switch-based dispatch for standard awk compatibility
-    for (i in array) {
-        if (internal_name == "__lambda_0") result[i] = __lambda_0(array[i])
-        else if (internal_name == "__lambda_1") result[i] = __lambda_1(array[i])
-        else if (internal_name == "__lambda_2") result[i] = __lambda_2(array[i])
-        else if (internal_name == "__lambda_3") result[i] = __lambda_3(array[i])
-        else if (internal_name == "__lambda_4") result[i] = __lambda_4(array[i])
-        else if (internal_name == "__lambda_5") result[i] = __lambda_5(array[i])
-        else if (internal_name == "__lambda_6") result[i] = __lambda_6(array[i])
-        else if (internal_name == "__lambda_7") result[i] = __lambda_7(array[i])
-        else if (internal_name == "__lambda_8") result[i] = __lambda_8(array[i])
-        else if (internal_name == "__lambda_9") result[i] = __lambda_9(array[i])
-        else {
-            print "❌ rawk runtime error: Function '" func_name "' not supported in map" > "/dev/stderr"
-            print "💡 This is a limitation of the current implementation" > "/dev/stderr"
-            return
-        }
-    }
-    return result
-}
-
-function reduce(func_name, array, initial_value, result, i, metadata, parts, internal_name, arg_count) {
-    if (!(func_name in RAWK_DISPATCH)) {
-        print "Error: Function '" func_name "' not found" > "/dev/stderr"
-        return
-    }
-    metadata = RAWK_DISPATCH[func_name]
-    split(metadata, parts, "|")
-    internal_name = parts[1]
-    arg_count = parts[2]
-    if (arg_count != 2) {
-        print "Error: Function '" func_name "' must take exactly 2 arguments for reduce" > "/dev/stderr"
-        return
-    }
-    result = initial_value
-    for (i in array) {
-        if (internal_name == "__lambda_0") result = __lambda_0(result, array[i])
-        else if (internal_name == "__lambda_1") result = __lambda_1(result, array[i])
-        else if (internal_name == "__lambda_2") result = __lambda_2(result, array[i])
-        else if (internal_name == "__lambda_3") result = __lambda_3(result, array[i])
-        else if (internal_name == "__lambda_4") result = __lambda_4(result, array[i])
-        else if (internal_name == "__lambda_5") result = __lambda_5(result, array[i])
-        else if (internal_name == "__lambda_6") result = __lambda_6(result, array[i])
-        else if (internal_name == "__lambda_7") result = __lambda_7(result, array[i])
-        else if (internal_name == "__lambda_8") result = __lambda_8(result, array[i])
-        else if (internal_name == "__lambda_9") result = __lambda_9(result, array[i])
-        else {
-            print "Error: Function '" func_name "' not supported in reduce" > "/dev/stderr"
-            return
-        }
-    }
-    return result
-}
-
-function pipe(value, func_names, result, i, metadata, parts, internal_name) {
-    result = value
-    for (i = 1; i <= length(func_names); i++) {
-        if (!(func_names[i] in RAWK_DISPATCH)) {
-            print "Error: Function '" func_names[i] "' not found" > "/dev/stderr"
-            return
-        }
-        metadata = RAWK_DISPATCH[func_names[i]]
-        split(metadata, parts, "|")
-        internal_name = parts[1]
-        result = result * 2
-    }
-    return result
-}
-
-function get_keys(array, result, i, count) {
-    count = 0
-    for (i in array) {
-        count++
-        result[count] = i
-    }
-    return count
-}
-
-function get_values(array, result, i, count) {
-    count = 0
-    for (i in array) {
-        count++
-        result[count] = array[i]
-    }
-    return count
-}
-
-function keys(array) {
-    # This is a simplified version that just returns the count
-    count = 0
-    for (i in array) {
-        count++
-    }
-    return count
-}
-
-function values(array) {
-    # This is a simplified version that just returns the count
-    count = 0
-    for (i in array) {
-        count++
-    }
-    return count
-}
-
-# --- Predicate Functions ---
-# Type checking and validation functions
-
-function is_number(value) {
-    # Check if value is a number (including 0)
-    return value == value + 0
-}
-
-function is_string(value) {
-    # Check if value is a string (not a number)
-    return value != value + 0
-}
-
-function is_array(value, i) {
-    # Check if value is an array by trying to iterate over it
-    # This is a heuristic - in awk, arrays are associative
-    # Note: This function has limitations in standard awk
-    # It can only detect arrays that have been passed as parameters
-    count = 0
-    for (i in value) {
-        count++
-        if (count > 0) return 1
-    }
-    return 0
-}
-
-function is_empty(value) {
-    # Check if value is empty (empty string, 0, or empty array)
-    if (value == "") return 1
-    if (value == 0) return 1
-    if (is_array(value)) {
-        count = 0
-        for (i in value) count++
-        return count == 0
-    }
-    return 0
-}
-
-function is_positive(value) {
-    # Check if value is a positive number
-    return is_number(value) && value > 0
-}
-
-function is_negative(value) {
-    # Check if value is a negative number
-    return is_number(value) && value < 0
-}
-
-function is_zero(value) {
-    # Check if value is zero
-    return is_number(value) && value == 0
-}
-
-function is_integer(value) {
-    # Check if value is an integer
-    return is_number(value) && int(value) == value
-}
-
-function is_float(value) {
-    # Check if value is a floating point number
-    return is_number(value) && int(value) != value
-}
-
-function is_boolean(value) {
-    # Check if value is a boolean (0 or 1)
-    return value == 0 || value == 1
-}
-
-function is_truthy(value) {
-    # Check if value is truthy (non-zero, non-empty)
-    if (is_number(value)) return value != 0
-    if (is_string(value)) return value != ""
-    if (is_array(value)) {
-        count = 0
-        for (i in value) count++
-        return count > 0
-    }
-    return 0
-}
-
-function is_falsy(value) {
-    # Check if value is falsy (zero, empty string, empty array)
-    return !is_truthy(value)
-}
-
-function is_email(value) {
-    # Basic email validation
-    if (!is_string(value)) return 0
-    if (value == "") return 0
-    # Check for @ symbol and basic format
-    if (index(value, "@") == 0) return 0
-    if (index(value, "@") == length(value)) return 0
-    if (index(value, "@") == 0) return 0
-    # Check for domain part
-    split(value, parts, "@")
-    if (length(parts) != 2) return 0
-    if (parts[1] == "" || parts[2] == "") return 0
-    if (index(parts[2], ".") == 0) return 0
-    if (index(parts[2], ".") == length(parts[2])) return 0
-    return 1
-}
-
-function is_url(value) {
-    # Basic URL validation
-    if (!is_string(value)) return 0
-    if (value == "") return 0
-    # Check for http:// or https://
-    if (substr(value, 1, 7) == "http://") return 1
-    if (substr(value, 1, 8) == "https://") return 1
-    return 0
-}
-
-function is_ipv4(value) {
-    # Basic IPv4 validation
-    if (!is_string(value)) return 0
-    if (value == "") return 0
-    # Split by dots and check each octet
-    split(value, octets, ".")
-    if (length(octets) != 4) return 0
-    for (i = 1; i <= 4; i++) {
-        if (!is_number(octets[i])) return 0
-        if (octets[i] < 0 || octets[i] > 255) return 0
-    }
-    return 1
-}
-
-function is_alpha(value) {
-    # Check if string contains only alphabetic characters
-    if (!is_string(value)) return 0
-    if (value == "") return 0
-    # Remove all alphabetic characters and check if empty
-    gsub(/[a-zA-Z]/, "", value)
-    return value == ""
-}
-
-function is_numeric(value) {
-    # Check if string contains only numeric characters
-    if (!is_string(value)) return 0
-    if (value == "") return 0
-    # Remove all numeric characters and check if empty
-    gsub(/[0-9]/, "", value)
-    return value == ""
-}
-
-function is_alphanumeric(value) {
-    # Check if string contains only alphanumeric characters
-    if (!is_string(value)) return 0
-    if (value == "") return 0
-    # Remove all alphanumeric characters and check if empty
-    gsub(/[a-zA-Z0-9]/, "", value)
-    return value == ""
-}
-
-function is_whitespace(value) {
-    # Check if string contains only whitespace characters
-    if (!is_string(value)) return 0
-    if (value == "") return 0
-    # Remove all whitespace characters and check if empty
-    gsub(/[ \t\n\r]/, "", value)
-    return value == ""
-}
-
-function is_uppercase(value) {
-    # Check if string is all uppercase
-    if (!is_string(value)) return 0
-    if (value == "") return 0
-    # Convert to uppercase and compare
-    return toupper(value) == value
-}
-
-function is_lowercase(value) {
-    # Check if string is all lowercase
-    if (!is_string(value)) return 0
-    if (value == "") return 0
-    # Convert to lowercase and compare
-    return tolower(value) == value
-}
-
-function is_palindrome(value) {
-    # Check if string is a palindrome
-    if (!is_string(value)) return 0
-    if (value == "") return 1
-    # Remove non-alphanumeric characters and convert to lowercase
-    gsub(/[^a-zA-Z0-9]/, "", value)
-    value = tolower(value)
-    # Check if it reads the same forwards and backwards
-    len = length(value)
-    for (i = 1; i <= len/2; i++) {
-        if (substr(value, i, 1) != substr(value, len-i+1, 1)) return 0
-    }
-    return 1
-}
-
-function is_prime(value) {
-    # Check if number is prime
-    if (!is_integer(value)) return 0
-    if (value < 2) return 0
-    if (value == 2) return 1
-    if (value % 2 == 0) return 0
-    # Check odd divisors up to square root
-    for (i = 3; i <= sqrt(value); i += 2) {
-        if (value % i == 0) return 0
-    }
-    return 1
-}
-
-function is_even(value) {
-    # Check if number is even
-    return is_integer(value) && value % 2 == 0
-}
-
-function is_odd(value) {
-    # Check if number is odd
-    return is_integer(value) && value % 2 == 1
-}
-
-function is_in_range(value, min, max) {
-    # Check if number is within range [min, max]
-    return is_number(value) && value >= min && value <= max
-}
-
-function is_length(value, expected_length, i, count) {
-    # Check if string or array has specific length
-    if (is_string(value)) return length(value) == expected_length
-    if (is_array(value)) {
-        count = 0
-        for (i in value) count++
-        return count == expected_length
-    }
-    return 0
-}
-
-function assert(condition, message) {
-    if (!condition) {
-        print "ASSERTION FAILED: " message > "/dev/stderr"
-        print "  at line " FNR " in " FILENAME > "/dev/stderr"
-        exit 1
-    }
-    return 1
-}
-
-function expect_equal(actual, expected, message) {
-    if (actual != expected) {
-        print "EXPECTATION FAILED: " message > "/dev/stderr"
-        print "  Expected: " expected > "/dev/stderr"
-        print "  Actual:   " actual > "/dev/stderr"
-        print "  at line " FNR " in " FILENAME > "/dev/stderr"
-        exit 1
-    }
-    return 1
-}
-
-function expect_true(condition, message) {
-    return assert(condition, message)
-}
-
-function expect_false(condition, message) {
-    return assert(!condition, message)
-}
-
-# --- Recursive Function Call Replacement ---
-function replace_recursive_calls(line) {
-    # This function replaces any remaining function calls with internal names
-    # This handles recursive calls that weren't replaced in the first pass
-    gsub("classify_string\\(", "__lambda_2(", line)
-    gsub("run_test\\(", "__lambda_0(", line)
-    gsub("classify_number\\(", "__lambda_1(", line)
-    gsub("validate_input\\(", "__lambda_4(", line)
-    gsub("classify_type\\(", "__lambda_3(", line)
-    return line
-}
-
-# --- Post-processed User Functions ---
-function __lambda_0(name, actual, expected) {
-            total_tests++
-            if (actual == expected) {
-                passed_tests++
-                print "✓ " name
-            } else {
-                failed_tests++
-                print "❌ " name " (expected '" expected "', got '" actual "')"
-
-}
-
-function __lambda_1(value) {
-    if (value == 0) { return  "zero" }
-    else if (1 && (is_positive(value))) { return  "positive" }
-    else if (1 && (is_negative(value))) { return  "negative" }
-    else if (1) { return  "unknown" }
-}
-
-function __lambda_2(str) {
-    if (str == "") { return  "empty" }
-    else if (str ==  && (is_alpha(str))) { return  "alphabetic" }
-    else if (str ==  && (is_numeric(str))) { return  "numeric" }
-    else if (str ==  && (is_alphanumeric(str))) { return  "alphanumeric" }
-    else if (str ==  && (is_palindrome(str))) { return  "palindrome" }
-    else if (1) { return  "other" }
-}
-
-function __lambda_3(value) {
-    if (1 && (is_number(value))) { return  "number" }
-    else if (1 && (is_string(value))) { return  "string" }
-    else if (1 && (is_empty(value))) { return  "empty" }
-    else if (1) { return  "unknown" }
-}
-
-function __lambda_4(value) {
-    if (value == "") { return  "empty input" }
-    else if (1 && (is_email(value))) { return  "valid email" }
-    else if (1 && (is_url(value))) { return  "valid url" }
-    else if (1 && (is_ipv4(value))) { return  "valid ipv4" }
-    else if (1 && (is_number(value) && is_in_range(value, 1, 100))) { return  "valid number in range" }
-    else if (1) { return  "invalid input" }
-}
-
-# --- Main Script Body ---
-# Test suite for rawk pattern matching
-# This demonstrates the new pattern matching capabilities
-
-BEGIN {
-    print "=== rawk Pattern Matching Test Suite ==="
-    print ""
-    
-    # Test counters
-    total_tests = 0
-    passed_tests = 0
-    failed_tests = 0
-    
-    # Helper function to run tests
-    }
-    
-    # Pattern matching function for number classification
-    
-    # Pattern matching function for string classification
-    
-    # Pattern matching function for type checking
-    
-    # Pattern matching function for validation
-    
-    # Test number classification
-    print "=== Number Classification Tests ==="
-    __lambda_0("__lambda_1(0)", __lambda_1(0), "zero")
-    __lambda_0("__lambda_1(42)", __lambda_1(42), "positive")
-    __lambda_0("__lambda_1(-5)", __lambda_1(-5), "negative")
-    __lambda_0("__lambda_1(3.14)", __lambda_1(3.14), "positive")
-    
-    print ""
-    print "=== String Classification Tests ==="
-    __lambda_0("__lambda_2(\"\")", __lambda_2(""), "empty")
-    __lambda_0("__lambda_2(\"hello\")", __lambda_2("hello"), "alphabetic")
-    __lambda_0("__lambda_2(\"123\")", __lambda_2("123"), "numeric")
-    __lambda_0("__lambda_2(\"Hello123\")", __lambda_2("Hello123"), "alphanumeric")
-    __lambda_0("__lambda_2(\"racecar\")", __lambda_2("racecar"), "palindrome")
-    __lambda_0("__lambda_2(\"hello world\")", __lambda_2("hello world"), "other")
-    
-    print ""
-    print "=== Type Classification Tests ==="
-    __lambda_0("__lambda_3(42)", __lambda_3(42), "number")
-    __lambda_0("__lambda_3(\"hello\")", __lambda_3("hello"), "string")
-    __lambda_0("__lambda_3(\"\")", __lambda_3(""), "empty")
-    __lambda_0("__lambda_3(0)", __lambda_3(0), "number")
-    
-    print ""
-    print "=== Validation Tests ==="
-    __lambda_0("__lambda_4(\"\")", __lambda_4(""), "empty input")
-    __lambda_0("__lambda_4(\"user@example.com\")", __lambda_4("user@example.com"), "valid email")
-    __lambda_0("__lambda_4(\"http://example.com\")", __lambda_4("http://example.com"), "valid url")
-    __lambda_0("__lambda_4(\"192.168.1.1\")", __lambda_4("192.168.1.1"), "valid ipv4")
-    __lambda_0("__lambda_4(50)", __lambda_4(50), "valid number in range")
-    __lambda_0("__lambda_4(150)", __lambda_4(150), "invalid input")
-    __lambda_0("__lambda_4(\"invalid\")", __lambda_4("invalid"), "invalid input")
-    
-    # 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 pattern matching tests passed!"
-    } else {
-        print "❌ Some tests failed!"
-    }
-}