006 event purity

✗ Failing This test is currently failing.

Failed: backend-exec

Error Details

output_emitted.zig:74:59: error: type 'i32' does not support struct initialization syntax

Failure Output

Showing last 10 of 11 lines
Error: output_emitted.zig:74:59: error: type 'i32' does not support struct initialization syntax
                        .done => .{ .done = .{ .result = d.result } },
                                                         ~^~~~~~~
referenced by:
    flow0: output_emitted.zig:82:59
    main: output_emitted.zig:200:22
    4 reference(s) hidden; use '-freference-trace=6' to see all references
output_emitted.zig:84:56: error: type 'i32' does not support field access
        @import("std").debug.print("Result: {d}\n", .{d.result});
                                                      ~^~~~~~~

Code

// Test event purity computation
// Event purity is computed from ALL proc implementations
// If ALL procs are pure -> event is pure
// If ANY proc is impure -> event is impure

~import "$std/io"

const std = @import("std");

// Event with single pure implementation -> pure event
~event pure_add { x: i32, y: i32 }
| done i32

~[pure]proc pure_add {
    return .{ .done = x + y };
}

// Event with single impure implementation -> impure event
~event impure_log { msg: []const u8 }
| done

~proc impure_log {
    std.debug.print("[LOG] {s}\n", .{msg});
    return .{ .done = .{} };
}

// Flow that composes pure and impure events
~event compute { a: i32, b: i32 }
| done i32

~compute = pure_add(x: a, y: b)
| done d |> impure_log(msg: "Computed!")
    | done |> done { result: d.result }

~compute(a: 20, b: 22)
| done d |> std.io:print.ln("Result: {{ d.result:d }}")
input.kz

Expected

[LOG] Computed!
Result: 42

Test Configuration

MUST_RUN