windjammer 0.48.0

A simple language inspired by Go, Ruby, and Elixir that transpiles to Rust - 80% of Rust's power with 20% of the complexity
Documentation
// Pattern Matching Consistency Test
// Tests that patterns work consistently across all contexts

// ============================================================================
// TEST 1: Simple function parameters (baseline)
// ============================================================================

fn test_param_simple(x: i32) -> i32 {
    return x + 42
}

// ============================================================================
// TEST 2: Patterns in let bindings
// ============================================================================

fn test_let_patterns() -> i32 {
    // Tuple destructuring
    let (x, y) = (10, 20)
    
    // Wildcard
    let _ = 100
    
    return x + y
}

// ============================================================================
// TEST 3: Patterns in match arms
// ============================================================================

enum Color {
    Red,
    Green,
    Blue,
    Rgb(i32, i32, i32),
    Named(string),
}

fn test_match_patterns(color: Color) -> i32 {
    match color {
        // Unit variant
        Color::Red => {
            return 1
        }
        Color::Green => {
            return 2
        }
        Color::Blue => {
            return 3
        }
        // Tuple variant with wildcard
        Color::Rgb(_, _, _) => {
            return 4
        }
        // Tuple variant with binding
        Color::Named(name) => {
            return 5
        }
    }
}

// ============================================================================
// TEST 4: Patterns in for loops
// ============================================================================

fn test_for_loop_patterns() -> i32 {
    let pairs = vec![(1, 2), (3, 4), (5, 6)]
    
    let mut sum = 0
    for (a, b) in pairs {
        sum = sum + a + b
    }
    
    return sum
}

// ============================================================================
// TEST 5: Nested patterns
// ============================================================================

enum Result<T, E> {
    Ok(T),
    Err(E),
}

fn test_nested_patterns(result: Result<Option<i32>, string>) -> i32 {
    match result {
        Result::Ok(Some(value)) => {
            return value
        }
        Result::Ok(None) => {
            return 0
        }
        Result::Err(_) => {
            return -1
        }
    }
}

// ============================================================================
// TEST 6: Qualified paths in patterns
// ============================================================================

fn test_qualified_patterns(opt: std::option::Option<i32>) -> i32 {
    match opt {
        std::option::Option::Some(x) => {
            return x
        }
        std::option::Option::None => {
            return 0
        }
    }
}

// ============================================================================
// TEST 7: Struct patterns
// ============================================================================

struct Point {
    x: i32,
    y: i32,
}

fn test_struct_patterns(point: Point) -> i32 {
    match point {
        Point { x: 0, y: 0 } => {
            return 0
        }
        Point { x, y } => {
            return x + y
        }
    }
}

// ============================================================================
// TEST 8: Or patterns
// ============================================================================

fn test_or_patterns(value: i32) -> i32 {
    match value {
        1 | 2 | 3 => {
            return 100
        }
        4 | 5 => {
            return 200
        }
        _ => {
            return 0
        }
    }
}

// ============================================================================
// TEST 9: Reference patterns
// ============================================================================

fn test_reference_patterns(opt: Option<i32>) -> i32 {
    match opt {
        Some(value) => {
            return value
        }
        None => {
            return 0
        }
    }
}

// ============================================================================
// MAIN: Run all tests
// ============================================================================

fn main() {
    // Test 1: Function parameters
    let result1 = test_param_simple(10)
    
    // Test 2: Let bindings
    let result3 = test_let_patterns()
    
    // Test 3: Match arms
    let result4 = test_match_patterns(Color::Red)
    let result5 = test_match_patterns(Color::Rgb(255, 0, 0))
    
    // Test 4: For loops
    let result6 = test_for_loop_patterns()
    
    // Test 5: Nested patterns
    let result7 = test_nested_patterns(Result::Ok(Some(42)))
    let result8 = test_nested_patterns(Result::Err("error"))
    
    // Test 7: Struct patterns
    let point = Point { x: 10, y: 20 }
    let result9 = test_struct_patterns(point)
    
    // Test 8: Or patterns
    let result10 = test_or_patterns(2)
    let result11 = test_or_patterns(5)
    
    // Test 9: Reference patterns
    let result12 = test_reference_patterns(Some(100))
    
    println("All pattern matching tests passed!")
}