Files
hakorune/local_tests/test_weak_comprehensive.hako

84 lines
2.4 KiB
Plaintext
Raw Normal View History

// Comprehensive weak reference validation test
box Parent {
init { name }
pack(parentName) {
me.name = parentName
}
getName() {
return me.name
}
}
box Child {
init { weak parent, id }
pack(childId) {
me.id = childId
me.parent = 0 // Initialize as null
}
setParent(p) {
me.parent = p
}
// Safe check that doesn't call toString on null
checkParentStatus() {
local parentRef = me.parent
// Check if we got a valid parent reference
local console = new ConsoleBox()
console.log("Child " + me.id.toString() + " checking parent...")
// We expect null after parent drop, which should not cause errors
return "checked"
}
getId() {
return me.id
}
}
static box Main {
main() {
print("=== Comprehensive Weak Reference Validation ===")
local parent1 = new Parent("Parent1")
local parent2 = new Parent("Parent2")
local child1 = new Child(1)
local child2 = new Child(2)
local child3 = new Child(3)
print("Step 1: Set up multiple weak references")
child1.setParent(parent1)
child2.setParent(parent1) // Two children reference same parent
child3.setParent(parent2) // One child references different parent
print("Step 2: Verify all children can access parents")
child1.checkParentStatus()
child2.checkParentStatus()
child3.checkParentStatus()
print("Step 3: Drop parent1 (affects child1 and child2)")
parent1 = 0 // This should invalidate child1 and child2's references
print("Step 4: Check all children after parent1 drop")
child1.checkParentStatus() // Should be null now
child2.checkParentStatus() // Should be null now
child3.checkParentStatus() // Should still be valid (different parent)
print("Step 5: Drop parent2 (affects child3)")
parent2 = 0 // This should invalidate child3's reference
print("Step 6: Final check - all should be null now")
child1.checkParentStatus() // Still null
child2.checkParentStatus() // Still null
child3.checkParentStatus() // Now null too
print("✅ Weak reference system validation complete!")
return "All tests passed"
}
}