- Replace .at() with .get() in mir_analyzer.hako (10 occurrences) - Fix test_rep1_inline.hako and test_mir_analyzer.hako - Builtin ArrayBox only supports .get(), not .at() Phase 161-2 MIR JSON parsing tests now pass: - JSON object parsing: PASS - functions array extraction: PASS - Function name extraction: PASS - blocks extraction: PASS - PHI instruction detection: PASS (found PHI at block=10 dst=r30) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
165 lines
4.9 KiB
Plaintext
165 lines
4.9 KiB
Plaintext
// local_tests/phase161/test_rep1_inline.hako
|
|
// Inline test for rep1_if_simple MIR analysis
|
|
|
|
static box Main {
|
|
main(args) {
|
|
print("Phase 161-2: Testing MirAnalyzerBox on rep1_if_simple")
|
|
print("=======================================================")
|
|
|
|
// Minimal MIR JSON for testing (simplified from actual rep1)
|
|
local mir_json = '{"capabilities":["unified_call","phi","effects","callee_typing"],"functions":[{"name":"Main.main/0","params":[],"entry":7,"blocks":[{"id":7,"instructions":[{"op":"const","dst":2,"value":{"type":"i64","value":5}},{"op":"const","dst":5,"value":{"type":"i64","value":3}},{"op":"compare","operation":">","lhs":9,"rhs":10,"dst":8},{"op":"branch","cond":12,"then":8,"else":9}]},{"id":8,"instructions":[{"op":"const","dst":18,"value":{"type":"i64","value":10}},{"op":"jump","target":10}]},{"id":9,"instructions":[{"op":"const","dst":24,"value":{"type":"i64","value":20}},{"op":"jump","target":10}]},{"id":10,"instructions":[{"op":"phi","dst":30,"incoming":[[18,8],[24,9]]},{"op":"ret","value":32}]}]}]}'
|
|
|
|
// Parse and analyze
|
|
print("")
|
|
print("Step 1: Creating MirAnalyzerBox...")
|
|
|
|
local analyzer = new MirAnalyzerBox(mir_json)
|
|
|
|
if analyzer == null {
|
|
print("FAIL: Failed to create analyzer")
|
|
return 1
|
|
}
|
|
|
|
print("SUCCESS: MirAnalyzerBox created")
|
|
|
|
// Test 1: Validate schema
|
|
print("")
|
|
print("Step 2: Validating schema...")
|
|
|
|
local valid = analyzer.validateSchema()
|
|
if valid == 1 {
|
|
print("SUCCESS: Schema is valid")
|
|
} else {
|
|
print("FAIL: Schema validation failed")
|
|
return 1
|
|
}
|
|
|
|
// Test 2: Summarize function
|
|
print("")
|
|
print("Step 3: Summarizing function 0...")
|
|
|
|
local summary = analyzer.summarize_function(0)
|
|
if summary == null {
|
|
print("FAIL: summarize_function returned null")
|
|
return 1
|
|
}
|
|
|
|
local name = summary.get("name")
|
|
local blocks = summary.get("block_count")
|
|
local instructions = summary.get("instruction_count")
|
|
local has_phi = summary.get("has_phis")
|
|
local has_if = summary.get("has_ifs")
|
|
local has_loop = summary.get("has_loops")
|
|
|
|
print("Function name: " + name)
|
|
print("Blocks: " + blocks)
|
|
print("Instructions: " + instructions)
|
|
print("Has PHI: " + has_phi)
|
|
print("Has If: " + has_if)
|
|
print("Has Loop: " + has_loop)
|
|
|
|
// Verify expected values
|
|
local pass_count = 0
|
|
|
|
if name == "Main.main/0" {
|
|
print(" [OK] Function name correct")
|
|
pass_count = pass_count + 1
|
|
} else {
|
|
print(" [FAIL] Function name mismatch")
|
|
}
|
|
|
|
if blocks == 4 {
|
|
print(" [OK] Block count correct (4)")
|
|
pass_count = pass_count + 1
|
|
} else {
|
|
print(" [FAIL] Block count mismatch (expected 4, got " + blocks + ")")
|
|
}
|
|
|
|
if has_phi == 1 {
|
|
print(" [OK] PHI detected")
|
|
pass_count = pass_count + 1
|
|
} else {
|
|
print(" [FAIL] PHI not detected")
|
|
}
|
|
|
|
if has_if == 1 {
|
|
print(" [OK] If detected")
|
|
pass_count = pass_count + 1
|
|
} else {
|
|
print(" [FAIL] If not detected")
|
|
}
|
|
|
|
if has_loop == 0 {
|
|
print(" [OK] No loop (correct)")
|
|
pass_count = pass_count + 1
|
|
} else {
|
|
print(" [FAIL] Loop incorrectly detected")
|
|
}
|
|
|
|
// Test 3: Count PHI instructions
|
|
print("")
|
|
print("Step 4: Counting PHI instructions...")
|
|
|
|
local phi_list = analyzer.count_phis(0)
|
|
if phi_list == null {
|
|
print("FAIL: count_phis returned null")
|
|
return 1
|
|
}
|
|
|
|
local phi_count = phi_list.size()
|
|
print("PHI count: " + phi_count)
|
|
|
|
if phi_count == 1 {
|
|
print(" [OK] Correct PHI count (1)")
|
|
pass_count = pass_count + 1
|
|
|
|
local phi = phi_list.get(0)
|
|
local block_id = phi.get("block_id")
|
|
local dest = phi.get("dest")
|
|
local incoming_count = phi.get("incoming_count")
|
|
|
|
print(" PHI details: block=" + block_id + " dest=r" + dest + " incoming=" + incoming_count)
|
|
|
|
if block_id == 10 {
|
|
print(" [OK] PHI in correct block (10)")
|
|
pass_count = pass_count + 1
|
|
}
|
|
|
|
if incoming_count == 2 {
|
|
print(" [OK] Correct incoming count (2)")
|
|
pass_count = pass_count + 1
|
|
}
|
|
} else {
|
|
print(" [FAIL] Incorrect PHI count (expected 1, got " + phi_count + ")")
|
|
}
|
|
|
|
// Test 4: Count loops
|
|
print("")
|
|
print("Step 5: Counting loops...")
|
|
|
|
local loop_count = analyzer.count_loops(0)
|
|
print("Loop count: " + loop_count)
|
|
|
|
if loop_count == 0 {
|
|
print(" [OK] No loops detected (correct)")
|
|
pass_count = pass_count + 1
|
|
} else {
|
|
print(" [FAIL] Loops incorrectly detected (expected 0, got " + loop_count + ")")
|
|
}
|
|
|
|
// Final results
|
|
print("")
|
|
print("=======================================================")
|
|
print("Test Results: " + pass_count + " / 9 checks passed")
|
|
print("=======================================================")
|
|
|
|
if pass_count == 9 {
|
|
print("SUCCESS: All tests passed!")
|
|
return 0
|
|
} else {
|
|
print("PARTIAL: Some tests failed")
|
|
return 1
|
|
}
|
|
}
|
|
}
|