From cb7021e166b101eabdce93e40d957d119e5916a9 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Wed, 31 Dec 2025 12:17:31 +0900 Subject: [PATCH] phase29aq(p4): add trim stdlib coverage --- apps/tests/phase29aq_string_trim_end_min.hako | 3 ++ .../phase29aq_string_trim_start_min.hako | 3 ++ docs/development/current/main/10-Now.md | 2 +- docs/development/current/main/30-Backlog.md | 2 +- .../design/coreplan-migration-roadmap-ssot.md | 2 +- .../current/main/phases/phase-29ae/README.md | 2 + .../P4-TRIM-COVERAGE-SUBSET-INSTRUCTIONS.md | 38 +++++++++++++++++++ .../current/main/phases/phase-29aq/README.md | 3 +- .../joinir/phase29aq_stdlib_pack_vm.sh | 2 + .../phase29aq_string_trim_end_min_vm.sh | 17 +++++++++ .../phase29aq_string_trim_start_min_vm.sh | 17 +++++++++ 11 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 apps/tests/phase29aq_string_trim_end_min.hako create mode 100644 apps/tests/phase29aq_string_trim_start_min.hako create mode 100644 docs/development/current/main/phases/phase-29aq/P4-TRIM-COVERAGE-SUBSET-INSTRUCTIONS.md create mode 100644 tools/smokes/v2/profiles/integration/joinir/phase29aq_string_trim_end_min_vm.sh create mode 100644 tools/smokes/v2/profiles/integration/joinir/phase29aq_string_trim_start_min_vm.sh diff --git a/apps/tests/phase29aq_string_trim_end_min.hako b/apps/tests/phase29aq_string_trim_end_min.hako new file mode 100644 index 00000000..805aef3f --- /dev/null +++ b/apps/tests/phase29aq_string_trim_end_min.hako @@ -0,0 +1,3 @@ +using "apps/lib/json_native/utils/string.hako" as StringUtils + +print(StringUtils.trim_end(" ab ")) diff --git a/apps/tests/phase29aq_string_trim_start_min.hako b/apps/tests/phase29aq_string_trim_start_min.hako new file mode 100644 index 00000000..9c7775c4 --- /dev/null +++ b/apps/tests/phase29aq_string_trim_start_min.hako @@ -0,0 +1,3 @@ +using "apps/lib/json_native/utils/string.hako" as StringUtils + +print(StringUtils.trim_start(" ab ")) diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md index 7ef6a0d8..7f6b5cb0 100644 --- a/docs/development/current/main/10-Now.md +++ b/docs/development/current/main/10-Now.md @@ -3,7 +3,7 @@ ## Current Focus - Phase: `docs/development/current/main/phases/phase-29aq/README.md` -- Next: Phase 29aq P4 (stdlib split/scan derivatives) +- Next: Phase 29aq P5 (stdlib split/scan derivatives) ## Gate (SSOT) diff --git a/docs/development/current/main/30-Backlog.md b/docs/development/current/main/30-Backlog.md index f95ae332..f55a52cf 100644 --- a/docs/development/current/main/30-Backlog.md +++ b/docs/development/current/main/30-Backlog.md @@ -5,7 +5,7 @@ Scope: 「次にやる候補」を短く列挙するメモ。入口は `docs/dev ## Active -- Phase 29aq: `docs/development/current/main/phases/phase-29aq/README.md` (Next: P4 split/scan derivatives) +- Phase 29aq: `docs/development/current/main/phases/phase-29aq/README.md` (Next: P5 split/scan derivatives) - JoinIR regression gate SSOT: `docs/development/current/main/phases/phase-29ae/README.md` - CorePlan hardening (docs-first): `docs/development/current/main/phases/phase-29al/README.md` diff --git a/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md b/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md index f361b1d1..181a2df5 100644 --- a/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md +++ b/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md @@ -34,7 +34,7 @@ Related: ## 1.1 Current (active) - Active phase: `docs/development/current/main/phases/phase-29aq/README.md` -- Next step: Phase 29aq P4 (stdlib split/scan derivatives) +- Next step: Phase 29aq P5 (stdlib split/scan derivatives) ## 2. すでに固めた SSOT(再発防止の土台) diff --git a/docs/development/current/main/phases/phase-29ae/README.md b/docs/development/current/main/phases/phase-29ae/README.md index 66849aac..eb93a3f7 100644 --- a/docs/development/current/main/phases/phase-29ae/README.md +++ b/docs/development/current/main/phases/phase-29ae/README.md @@ -22,6 +22,8 @@ Goal: JoinIR の最小回帰セットを SSOT として固定する。 - SplitScan (stdlib split, VM): `phase29aq_string_split_min_vm` - SplitScan (stdlib split char, VM): `phase29aq_string_split_char_min_vm` - SplitScan (stdlib split string, VM): `phase29aq_string_split_string_min_vm` +- Pattern2 (stdlib trim_start, VM): `phase29aq_string_trim_start_min_vm` +- Pattern2 (stdlib trim_end, VM): `phase29aq_string_trim_end_min_vm` - Pattern1 (stdlib to_upper, VM): `phase29aq_string_to_upper_min_vm` - Pattern5 (Break, VM): `phase286_pattern5_break_vm` - Pattern5 (strict shadow, VM): `phase29ao_pattern5_strict_shadow_vm` diff --git a/docs/development/current/main/phases/phase-29aq/P4-TRIM-COVERAGE-SUBSET-INSTRUCTIONS.md b/docs/development/current/main/phases/phase-29aq/P4-TRIM-COVERAGE-SUBSET-INSTRUCTIONS.md new file mode 100644 index 00000000..097ae6e3 --- /dev/null +++ b/docs/development/current/main/phases/phase-29aq/P4-TRIM-COVERAGE-SUBSET-INSTRUCTIONS.md @@ -0,0 +1,38 @@ +--- +Status: Done +Scope: stdlib trim coverage (trim_start, trim_end) +Related: +- docs/development/current/main/phases/phase-29aq/README.md +- docs/development/current/main/phases/phase-29ae/README.md +--- + +# Phase 29aq P4: stdlib trim coverage (trim_start, trim_end) + +Goal: add fixtures/smokes for trim_start and trim_end, wired into the stdlib +pack and the JoinIR regression gate. No behavior or logging changes. + +## Subsets (SSOT) + +- trim_start: leading whitespace trimmed, trailing preserved +- trim_end: trailing whitespace trimmed, leading preserved + +Inputs exclude empty-only strings; no new Pattern2 logic is introduced. + +## Fixtures / smokes + +- `apps/tests/phase29aq_string_trim_start_min.hako` +- `apps/tests/phase29aq_string_trim_end_min.hako` +- `tools/smokes/v2/profiles/integration/joinir/phase29aq_string_trim_start_min_vm.sh` +- `tools/smokes/v2/profiles/integration/joinir/phase29aq_string_trim_end_min_vm.sh` + +## Gate wiring + +- Add both smokes to `tools/smokes/v2/profiles/integration/joinir/phase29aq_stdlib_pack_vm.sh`. +- Ensure `phase29ae_regression_pack_vm.sh` runs the stdlib pack. +- Update `docs/development/current/main/phases/phase-29ae/README.md`. + +## Verification + +- `cargo build --release` +- `./tools/smokes/v2/run.sh --profile quick` +- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` diff --git a/docs/development/current/main/phases/phase-29aq/README.md b/docs/development/current/main/phases/phase-29aq/README.md index 2977ad23..81d9660c 100644 --- a/docs/development/current/main/phases/phase-29aq/README.md +++ b/docs/development/current/main/phases/phase-29aq/README.md @@ -59,7 +59,8 @@ Plan/Composer subsets (or mark unsupported) before adding new subsets. - P1: Add stdlib subsets in priority order (index_of/last_index_of → parse_integer → split). - P2: Add stdlib subsets (index_of_string → to_upper). - P3: Expand split subsets (char/string delimiters; empty segments excluded by input). +- P4: Expand stdlib trim coverage (trim_start/trim_end fixtures). ## Next (planned) -- P4: Expand split/scan derivatives (candidate: starts_with/ends_with). +- P5: Expand split/scan derivatives (candidate: starts_with/ends_with). diff --git a/tools/smokes/v2/profiles/integration/joinir/phase29aq_stdlib_pack_vm.sh b/tools/smokes/v2/profiles/integration/joinir/phase29aq_stdlib_pack_vm.sh index d2a884d5..f6ad1d0e 100644 --- a/tools/smokes/v2/profiles/integration/joinir/phase29aq_stdlib_pack_vm.sh +++ b/tools/smokes/v2/profiles/integration/joinir/phase29aq_stdlib_pack_vm.sh @@ -24,6 +24,8 @@ run_filter "string_parse_integer_vm" "phase29aq_string_parse_integer_min_vm" || run_filter "string_split_vm" "phase29aq_string_split_min_vm" || exit 1 run_filter "string_split_char_vm" "phase29aq_string_split_char_min_vm" || exit 1 run_filter "string_split_string_vm" "phase29aq_string_split_string_min_vm" || exit 1 +run_filter "string_trim_start_vm" "phase29aq_string_trim_start_min_vm" || exit 1 +run_filter "string_trim_end_vm" "phase29aq_string_trim_end_min_vm" || exit 1 run_filter "string_to_upper_vm" "phase29aq_string_to_upper_min_vm" || exit 1 log_success "phase29aq_stdlib_pack_vm: all stdlib subset filters passed" diff --git a/tools/smokes/v2/profiles/integration/joinir/phase29aq_string_trim_end_min_vm.sh b/tools/smokes/v2/profiles/integration/joinir/phase29aq_string_trim_end_min_vm.sh new file mode 100644 index 00000000..320ff745 --- /dev/null +++ b/tools/smokes/v2/profiles/integration/joinir/phase29aq_string_trim_end_min_vm.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# phase29aq_string_trim_end_min_vm.sh - StringUtils.trim_end via plan/composer (VM) + +source "$(dirname "$0")/../../../lib/test_runner.sh" +require_env || exit 2 + +FIXTURE="$NYASH_ROOT/apps/tests/phase29aq_string_trim_end_min.hako" +export NYASH_ALLOW_USING_FILE=1 + +output=$(run_nyash_vm "$FIXTURE") + +expected=$(cat << 'TXT' + ab +TXT +) + +compare_outputs "$expected" "$output" "phase29aq_string_trim_end_min_vm" || exit 1 diff --git a/tools/smokes/v2/profiles/integration/joinir/phase29aq_string_trim_start_min_vm.sh b/tools/smokes/v2/profiles/integration/joinir/phase29aq_string_trim_start_min_vm.sh new file mode 100644 index 00000000..421a8e29 --- /dev/null +++ b/tools/smokes/v2/profiles/integration/joinir/phase29aq_string_trim_start_min_vm.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# phase29aq_string_trim_start_min_vm.sh - StringUtils.trim_start via plan/composer (VM) + +source "$(dirname "$0")/../../../lib/test_runner.sh" +require_env || exit 2 + +FIXTURE="$NYASH_ROOT/apps/tests/phase29aq_string_trim_start_min.hako" +export NYASH_ALLOW_USING_FILE=1 + +output=$(run_nyash_vm "$FIXTURE") + +expected=$(cat << 'TXT' +ab +TXT +) + +compare_outputs "$expected" "$output" "phase29aq_string_trim_start_min_vm" || exit 1