✓
Passing This code compiles and runs correctly.
Code
// ============================================================================
// VERIFIED REGRESSION TEST - DO NOT MODIFY WITHOUT DISCUSSION
// ============================================================================
// Test 210: All Proc Flow Patterns
// Demonstrates all three proc flow patterns working together
// ============================================================================
const std = @import("std");
~event simple { input: i32 }
| done { value: i32 }
~proc simple {
return .{ .done = .{ .value = input } };
}
~event pattern1 { }
| result { value: i32 }
~event pattern2 { }
| result { value: i32 }
~event pattern3 { }
| result { value: i32 }
// Pattern 1: Proc as flow expression (~proc name = flow)
~proc pattern1 = simple(input: 42)
| done d |> result { value: d.value }
// Pattern 2: Terminal flow with implicit return
~proc pattern2 {
// Last statement is flow without assignment → implicit return
~simple(input: 100)
| done d |> result { value: d.value }
}
// Pattern 3: Assigned flow with explicit return (current behavior)
~proc pattern3 {
const temp = ~simple(input: 200)
| done d |> result { value: d.value }
// Process the result further
const final_value = temp.result.value + 1;
return .{ .result = .{ .value = final_value } };
}
~event run_test { }
| done { }
~proc run_test {
// Test pattern 1
const r1 = ~pattern1()
| result r |> result { value: r.value }
std.debug.assert(r1.result.value == 42);
std.debug.print("✅ Pattern 1 (proc as expression): {}\n", .{r1.result.value});
// Test pattern 2
const r2 = ~pattern2()
| result r |> result { value: r.value }
std.debug.assert(r2.result.value == 100);
std.debug.print("✅ Pattern 2 (implicit return): {}\n", .{r2.result.value});
// Test pattern 3
const r3 = ~pattern3()
| result r |> result { value: r.value }
std.debug.assert(r3.result.value == 201);
std.debug.print("✅ Pattern 3 (explicit return): {}\n", .{r3.result.value});
return .{ .done = .{} };
}
~run_test()
| done |> _
Expected Output
✅ Pattern 1 (proc as expression): 42
✅ Pattern 2 (implicit return): 100
✅ Pattern 3 (explicit return): 201
Test Configuration
MUST_RUN