feat(joinir): Phase 90 P0 - ParseStringComposite pattern
## Composite Pattern - Continue(escape i+=2) + EarlyReturn(close quote) - parse_string_composite_pattern.rs (50行、continue_return 再利用) - 89% コード削減(450行→50行) ## Shape Detection - BinOp Add const 2 検出(escape 特徴) - LoopStepInspector 活用(Phase 89 リファクタ成果) ## SSOT Integration - dev_fixtures.rs に登録 - StepCalculator 再利用(Phase 89-2 成果) ## Tests - +2 tests (vm_bridge + 期待値 n=10→acc=5) - normalized_dev: 61→63 passed - lib: 993 passed (回帰なし) Impact: - Reuse over Duplication 実践 - Phase 89 リファクタ成果の完全活用 - 箱化原則 5/5 遵守 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -19,6 +19,7 @@ use nyash_rust::mir::join_ir::normalized::fixtures::{
|
||||
build_pattern3_json_if_sum_min_structured_for_normalized_dev,
|
||||
build_pattern4_continue_min_structured_for_normalized_dev,
|
||||
build_pattern_continue_return_min_structured_for_normalized_dev,
|
||||
build_parse_string_composite_min_structured_for_normalized_dev,
|
||||
build_selfhost_args_parse_p2_structured_for_normalized_dev,
|
||||
build_selfhost_if_sum_p3_ext_structured_for_normalized_dev,
|
||||
build_selfhost_if_sum_p3_structured_for_normalized_dev,
|
||||
|
||||
@ -568,3 +568,34 @@ fn test_normalized_pattern_continue_return_min_expected_output() {
|
||||
"Expected acc=4 for n=10 (i=0,1,3,4 increments acc, i=2 skipped by continue, i=5 early return)"
|
||||
);
|
||||
}
|
||||
|
||||
/// Phase 90 P0: Parse String Composite minimal - vm_bridge direct vs structured
|
||||
#[test]
|
||||
fn test_parse_string_composite_min_vm_bridge_direct_matches_structured() {
|
||||
let _ctx = normalized_dev_test_ctx();
|
||||
let structured = build_parse_string_composite_min_structured_for_normalized_dev();
|
||||
let entry = structured.entry.expect("structured entry required");
|
||||
|
||||
let input = [JoinValue::Int(10)]; // n = 10
|
||||
let base = run_joinir_vm_bridge(&structured, entry, &input, false);
|
||||
let dev = run_joinir_vm_bridge(&structured, entry, &input, true);
|
||||
|
||||
assert_eq!(base, dev, "vm bridge mismatch for parse_string composite min");
|
||||
}
|
||||
|
||||
/// Phase 90 P0: Parse String Composite minimal - expected output test
|
||||
#[test]
|
||||
fn test_parse_string_composite_min_expected_output() {
|
||||
let _ctx = normalized_dev_test_ctx();
|
||||
let structured = build_parse_string_composite_min_structured_for_normalized_dev();
|
||||
let entry = structured.entry.expect("structured entry required");
|
||||
|
||||
let input = [JoinValue::Int(10)]; // n = 10
|
||||
let result = run_joinir_vm_bridge(&structured, entry, &input, true);
|
||||
|
||||
assert_eq!(
|
||||
result,
|
||||
JoinValue::Int(5),
|
||||
"Expected acc=5 for n=10 (i=0,1,2,5,6 increments acc, i=3 escape continue, i=7 close quote return)"
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user