79 lines
1.9 KiB
Plaintext
79 lines
1.9 KiB
Plaintext
|
|
// Simple weak reference test for Phase 10.2
|
||
|
|
|
||
|
|
// Test CPU with fini
|
||
|
|
box TestCPU {
|
||
|
|
init { memory, name }
|
||
|
|
|
||
|
|
TestCPU() {
|
||
|
|
me.name = "TestCPU"
|
||
|
|
print("CPU initialized: " + me.name)
|
||
|
|
}
|
||
|
|
|
||
|
|
fini() {
|
||
|
|
print("CPU fini called - cleaning up memory")
|
||
|
|
if (me.memory != null) {
|
||
|
|
me.memory.cleanup()
|
||
|
|
}
|
||
|
|
print("CPU fini complete")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Test Memory with weak reference
|
||
|
|
box TestMemory {
|
||
|
|
init { data, weak cpu_ref }
|
||
|
|
|
||
|
|
TestMemory(cpu_instance) {
|
||
|
|
me.data = new ArrayBox()
|
||
|
|
me.data.push("test_data")
|
||
|
|
me.cpu_ref = cpu_instance // This will be automatically downgraded to weak
|
||
|
|
print("Memory initialized with weak CPU reference")
|
||
|
|
}
|
||
|
|
|
||
|
|
read_data() {
|
||
|
|
if (me.cpu_ref != null) {
|
||
|
|
print("CPU is alive - returning data")
|
||
|
|
return me.data.get(0)
|
||
|
|
} else {
|
||
|
|
print("CPU is destroyed - access blocked")
|
||
|
|
return null
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
cleanup() {
|
||
|
|
print("Memory cleanup called")
|
||
|
|
me.data.clear()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Main test
|
||
|
|
static box Main {
|
||
|
|
init { console }
|
||
|
|
|
||
|
|
main() {
|
||
|
|
me.console = new ConsoleBox()
|
||
|
|
me.console.log("🧪 Testing weak references and fini propagation")
|
||
|
|
|
||
|
|
// Create CPU and Memory
|
||
|
|
local cpu = new TestCPU()
|
||
|
|
|
||
|
|
local memory = new TestMemory(cpu)
|
||
|
|
|
||
|
|
// Link memory to CPU for fini propagation
|
||
|
|
cpu.memory = memory
|
||
|
|
|
||
|
|
// Test 1: Normal operation
|
||
|
|
me.console.log("Test 1: Normal operation")
|
||
|
|
local result1 = memory.read_data()
|
||
|
|
me.console.log("Read result: " + result1)
|
||
|
|
|
||
|
|
// Test 2: After CPU destruction
|
||
|
|
me.console.log("Test 2: Destroying CPU...")
|
||
|
|
cpu.fini()
|
||
|
|
cpu = null
|
||
|
|
|
||
|
|
local result2 = memory.read_data()
|
||
|
|
me.console.log("Read after CPU destruction: " + result2)
|
||
|
|
|
||
|
|
return "Test complete"
|
||
|
|
}
|
||
|
|
}
|