diff options
| author | _ov4 <ov4@ov4.org> | 2026-10-20 11:01:01 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-10-20 11:01:01 +0000 |
| commit | 65599524f5b41ffb6d8d55664611612c0b57ad47 (patch) | |
| tree | 69eafa5e5651c13100c9509502efc1659b186d1c /tests | |
| parent | 0c4db4fea1960571318444bd39593533b04b3716 (diff) | |
feat(library): add experimental string MID function
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/library/exp-string/expected.txt | 6 | ||||
| -rw-r--r-- | tests/library/exp-string/notes.md | 2 | ||||
| -rw-r--r-- | tests/library/exp-string/program.cps | 13 |
3 files changed, 21 insertions, 0 deletions
diff --git a/tests/library/exp-string/expected.txt b/tests/library/exp-string/expected.txt index ef650f3..a3ce792 100644 --- a/tests/library/exp-string/expected.txt +++ b/tests/library/exp-string/expected.txt @@ -16,3 +16,9 @@ FGH 0:0:0 ABCDEFGH 4 +BCD +AB +GH +0:0 +0:0 +4 diff --git a/tests/library/exp-string/notes.md b/tests/library/exp-string/notes.md index ff25d0f..c05d6d7 100644 --- a/tests/library/exp-string/notes.md +++ b/tests/library/exp-string/notes.md @@ -9,3 +9,5 @@ LEFT keeps ABC, returns zero bytes for an empty source or nonpositive count, and RIGHT keeps FGH, returns zero bytes for an empty source or nonpositive count, and clamps 20 to all eight letters. Taking four bytes from hello followed by three NULs retains the final o and all three NULs. The added checks use separate procedures to keep generated temporary-object cleanup small enough for the ordinary runner timeout. + +MID positions 2..4 give BCD. The minimum INTEGER start clamps to 1 and gives AB; a maximum count from position 7 gives GH. Empty input, a maximum start, and nonpositive counts give length zero. Four bytes starting at the second of three NULs retain two NULs and AB. diff --git a/tests/library/exp-string/program.cps b/tests/library/exp-string/program.cps index f8c037f..0b6c977 100644 --- a/tests/library/exp-string/program.cps +++ b/tests/library/exp-string/program.cps @@ -41,6 +41,7 @@ CALL _EXP_STRING_OUTPUT(Heap) DELETE Heap CALL CheckLeft() CALL CheckRight() +CALL CheckMid() PROCEDURE CheckLeft() DECLARE Letters : _EXP_STRING((C_STRING)"ABCDEFGH") @@ -63,3 +64,15 @@ PROCEDURE CheckRight() CALL _EXP_STRING_OUTPUT(_EXP_STRING_RIGHT(Letters, 20)) OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(A & Nuls, 4)) ENDPROCEDURE + +PROCEDURE CheckMid() + DECLARE Letters : _EXP_STRING((C_STRING)"ABCDEFGH") + DECLARE Empty : _EXP_STRING + DECLARE Nuls : _EXP_STRING(3, (C_CHAR)'\0') + CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(Letters, 2, 3)) + CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(Letters, -9223372036854775808, 2)) + CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(Letters, 7, 9223372036854775807)) + OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_MID(Empty, 1, 2)), ":", _EXP_STRING_LENGTH(_EXP_STRING_MID(Letters, 9223372036854775807, 2)) + OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_MID(Letters, 2, 0)), ":", _EXP_STRING_LENGTH(_EXP_STRING_MID(Letters, 2, -1)) + OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_MID(Nuls & Letters, 2, 4)) +ENDPROCEDURE |
