feat(phase72): HAKO_JOINIR_IF_SELECT SSOT consolidation - Test helpers
Phase 72-B: Created SSOT helper functions for HAKO_JOINIR_IF_SELECT ENV control.
Changes:
- Added set_if_select_on() and set_if_select_off() helpers to joinir_env.rs
- Replaced 13 direct std::env calls with helper functions in src/tests/mir_joinir_if_select.rs
- std::env::set_var("HAKO_JOINIR_IF_SELECT", "1") → joinir_env::set_if_select_on()
- std::env::remove_var("HAKO_JOINIR_IF_SELECT") → joinir_env::set_if_select_off()
Benefits:
- Centralized IfSelect mode control at single point (joinir_env.rs)
- Consistent naming convention (set_X_on/off pattern)
- Easier to extend with validation or trace logging if needed
Tests verified: cargo check --tests passed with no errors
Completed Phase 72-A+B progress:
- Phase 72-A: NYASH_JOINIR_EXPERIMENT (15 occurrences) ✅
- Phase 72-B: HAKO_JOINIR_IF_SELECT (13 occurrences) ✅
- Phase 72-C: Dev/experimental flags (pending)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -25,3 +25,14 @@ pub fn clear_joinir_flags() {
|
|||||||
pub fn is_experiment_enabled() -> bool {
|
pub fn is_experiment_enabled() -> bool {
|
||||||
std::env::var("NYASH_JOINIR_EXPERIMENT").ok().as_deref() == Some("1")
|
std::env::var("NYASH_JOINIR_EXPERIMENT").ok().as_deref() == Some("1")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Phase 72-B: HAKO_JOINIR_IF_SELECT SSOT ヘルパー
|
||||||
|
/// IfSelect/JoinIR If分岐選択モードをONにする
|
||||||
|
pub fn set_if_select_on() {
|
||||||
|
std::env::set_var("HAKO_JOINIR_IF_SELECT", "1");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// IfSelect/JoinIR If分岐選択モードをOFFにする
|
||||||
|
pub fn set_if_select_off() {
|
||||||
|
std::env::remove_var("HAKO_JOINIR_IF_SELECT");
|
||||||
|
}
|
||||||
|
|||||||
@ -7,6 +7,7 @@ mod tests {
|
|||||||
use crate::mir::join_ir::lowering::try_lower_if_to_joinir;
|
use crate::mir::join_ir::lowering::try_lower_if_to_joinir;
|
||||||
use crate::mir::join_ir::JoinInst;
|
use crate::mir::join_ir::JoinInst;
|
||||||
use crate::mir::{BasicBlock, BasicBlockId, MirFunction, MirInstruction, MirModule, ValueId};
|
use crate::mir::{BasicBlock, BasicBlockId, MirFunction, MirInstruction, MirModule, ValueId};
|
||||||
|
use crate::tests::helpers::joinir_env;
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
use std::env;
|
use std::env;
|
||||||
|
|
||||||
@ -148,7 +149,7 @@ mod tests {
|
|||||||
clear_joinir_flags();
|
clear_joinir_flags();
|
||||||
|
|
||||||
// ==== 1. Simple pattern (env ON) ====
|
// ==== 1. Simple pattern (env ON) ====
|
||||||
std::env::set_var("HAKO_JOINIR_IF_SELECT", "1");
|
joinir_env::set_if_select_on();
|
||||||
|
|
||||||
let func = create_simple_pattern_mir();
|
let func = create_simple_pattern_mir();
|
||||||
let entry_block = func.entry_block;
|
let entry_block = func.entry_block;
|
||||||
@ -205,7 +206,7 @@ mod tests {
|
|||||||
|
|
||||||
// ==== 3. Disabled by default (env OFF) ====
|
// ==== 3. Disabled by default (env OFF) ====
|
||||||
set_core_off();
|
set_core_off();
|
||||||
std::env::remove_var("HAKO_JOINIR_IF_SELECT");
|
joinir_env::set_if_select_off();
|
||||||
|
|
||||||
let func = create_simple_pattern_mir();
|
let func = create_simple_pattern_mir();
|
||||||
let entry_block = func.entry_block;
|
let entry_block = func.entry_block;
|
||||||
@ -219,7 +220,7 @@ mod tests {
|
|||||||
eprintln!("✅ If/Select lowering correctly disabled by default");
|
eprintln!("✅ If/Select lowering correctly disabled by default");
|
||||||
|
|
||||||
// ==== 4. Wrong function name (env ON) ====
|
// ==== 4. Wrong function name (env ON) ====
|
||||||
std::env::set_var("HAKO_JOINIR_IF_SELECT", "1");
|
joinir_env::set_if_select_on();
|
||||||
|
|
||||||
let mut func = create_simple_pattern_mir();
|
let mut func = create_simple_pattern_mir();
|
||||||
func.signature.name = "WrongName.test/1".to_string();
|
func.signature.name = "WrongName.test/1".to_string();
|
||||||
@ -545,7 +546,7 @@ mod tests {
|
|||||||
use crate::mir::join_ir::JoinInst;
|
use crate::mir::join_ir::JoinInst;
|
||||||
|
|
||||||
let _env = strict_if_env_guard();
|
let _env = strict_if_env_guard();
|
||||||
std::env::set_var("HAKO_JOINIR_IF_SELECT", "1");
|
joinir_env::set_if_select_on();
|
||||||
|
|
||||||
let func = create_if_merge_simple_pattern_mir();
|
let func = create_if_merge_simple_pattern_mir();
|
||||||
let entry_block = func.entry_block;
|
let entry_block = func.entry_block;
|
||||||
@ -578,7 +579,7 @@ mod tests {
|
|||||||
panic!("Expected JoinInst::IfMerge, got {:?}", result);
|
panic!("Expected JoinInst::IfMerge, got {:?}", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::remove_var("HAKO_JOINIR_IF_SELECT");
|
joinir_env::set_if_select_off();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Phase 33-7: Test IfMerge lowering for 3-variable pattern
|
/// Phase 33-7: Test IfMerge lowering for 3-variable pattern
|
||||||
@ -587,7 +588,7 @@ mod tests {
|
|||||||
use crate::mir::join_ir::JoinInst;
|
use crate::mir::join_ir::JoinInst;
|
||||||
|
|
||||||
let _env = strict_if_env_guard();
|
let _env = strict_if_env_guard();
|
||||||
std::env::set_var("HAKO_JOINIR_IF_SELECT", "1");
|
joinir_env::set_if_select_on();
|
||||||
|
|
||||||
let func = create_if_merge_multiple_pattern_mir();
|
let func = create_if_merge_multiple_pattern_mir();
|
||||||
let entry_block = func.entry_block;
|
let entry_block = func.entry_block;
|
||||||
@ -620,7 +621,7 @@ mod tests {
|
|||||||
panic!("Expected JoinInst::IfMerge, got {:?}", result);
|
panic!("Expected JoinInst::IfMerge, got {:?}", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::remove_var("HAKO_JOINIR_IF_SELECT");
|
joinir_env::set_if_select_off();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Phase 63-2: Helper to create a simple pattern MIR with Const instructions
|
/// Phase 63-2: Helper to create a simple pattern MIR with Const instructions
|
||||||
@ -683,7 +684,7 @@ mod tests {
|
|||||||
use crate::mir::MirType;
|
use crate::mir::MirType;
|
||||||
|
|
||||||
let _env = strict_if_env_guard();
|
let _env = strict_if_env_guard();
|
||||||
std::env::set_var("HAKO_JOINIR_IF_SELECT", "1");
|
joinir_env::set_if_select_on();
|
||||||
|
|
||||||
let func = create_simple_pattern_mir_with_const();
|
let func = create_simple_pattern_mir_with_const();
|
||||||
let entry_block = func.entry_block;
|
let entry_block = func.entry_block;
|
||||||
@ -708,7 +709,7 @@ mod tests {
|
|||||||
panic!("Expected Select instruction with type_hint");
|
panic!("Expected Select instruction with type_hint");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::remove_var("HAKO_JOINIR_IF_SELECT");
|
joinir_env::set_if_select_off();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Phase 63-6-4: A/B テスト - Route A (legacy) vs Route B (type hint)
|
/// Phase 63-6-4: A/B テスト - Route A (legacy) vs Route B (type hint)
|
||||||
@ -721,7 +722,7 @@ mod tests {
|
|||||||
use crate::mir::MirType;
|
use crate::mir::MirType;
|
||||||
|
|
||||||
let _env = strict_if_env_guard();
|
let _env = strict_if_env_guard();
|
||||||
std::env::set_var("HAKO_JOINIR_IF_SELECT", "1");
|
joinir_env::set_if_select_on();
|
||||||
|
|
||||||
// P1 Simple pattern で Select 生成
|
// P1 Simple pattern で Select 生成
|
||||||
let func = create_simple_pattern_mir_with_const();
|
let func = create_simple_pattern_mir_with_const();
|
||||||
@ -748,7 +749,7 @@ mod tests {
|
|||||||
eprintln!("✅ Phase 63-6-4 Step 2: P1 function name filter: IfSelectTest.* ✓");
|
eprintln!("✅ Phase 63-6-4 Step 2: P1 function name filter: IfSelectTest.* ✓");
|
||||||
eprintln!("✅ Phase 63-6-4: A/B test passed - JoinIR type hint available for lifecycle.rs");
|
eprintln!("✅ Phase 63-6-4: A/B test passed - JoinIR type hint available for lifecycle.rs");
|
||||||
|
|
||||||
std::env::remove_var("HAKO_JOINIR_IF_SELECT");
|
joinir_env::set_if_select_off();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Phase 64-2-2: A/B テスト - P2 IfMerge Simple 型ヒント検証
|
/// Phase 64-2-2: A/B テスト - P2 IfMerge Simple 型ヒント検証
|
||||||
|
|||||||
Reference in New Issue
Block a user