✓
Passing This code compiles and runs correctly.
Code
// Test 155: Transitive File Import
//
// Tests that A -> B -> C import chain works:
// - input.kz imports helper.kz
// - helper.kz imports base.kz
// - input.kz uses helper, helper uses base
//
// KEY TEST: Does the compiler correctly handle transitive imports?
// Does base.kz get emitted even though input.kz doesn't directly import it?
const std = @import("std");
// Import helper (which itself imports base)
~import "$app/helper"
// Use helper's quadruple event (which uses base's double event internally)
~app.helper:quadruple(x: 5)
| done _ |> _
// Expected: 5 * 4 = 20
// (quadruple calls double twice: 5 -> 10 -> 20)
Imported Files
// Base module - lowest level in import chain
// Defines a simple pure operation
const std = @import("std");
~pub event double { x: i32 }
| doubled { result: i32 }
~proc double {
const result = x * 2;
return .{ .doubled = .{ .result = result } };
}
// Helper module - middle level in import chain
// Imports base.kz and builds on its functionality
const std = @import("std");
// TRANSITIVE IMPORT: helper imports base
~import "$app/base"
// Define quadruple by calling base's double twice
~pub event quadruple { x: i32 }
| done { result: i32 }
~quadruple =
app.base:double(x: x)
| doubled d1 |> app.base:double(x: d1.result)
| doubled d2 |> done { result: d2.result }
Test Configuration
MUST_RUN