diff options
| author | _ov4 <ov4@ov4.org> | 2026-10-20 11:00:16 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-10-20 11:00:16 +0000 |
| commit | 0c4db4fea1960571318444bd39593533b04b3716 (patch) | |
| tree | c0370d23f10225a6ee3dfe73590f38ca05877606 /tests | |
| parent | cf9af14fe749c52473fdf5a327c3e935e45bf0e7 (diff) | |
feat(library): add experimental string RIGHT function
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/library/exp-string/expected.txt | 4 | ||||
| -rw-r--r-- | tests/library/exp-string/notes.md | 4 | ||||
| -rw-r--r-- | tests/library/exp-string/program.cps | 29 |
3 files changed, 32 insertions, 5 deletions
diff --git a/tests/library/exp-string/expected.txt b/tests/library/exp-string/expected.txt index 19f0d9b..ef650f3 100644 --- a/tests/library/exp-string/expected.txt +++ b/tests/library/exp-string/expected.txt @@ -12,3 +12,7 @@ ABC 0:0:0 ABCDEFGH 4 +FGH +0:0:0 +ABCDEFGH +4 diff --git a/tests/library/exp-string/notes.md b/tests/library/exp-string/notes.md index f44a2b3..ff25d0f 100644 --- a/tests/library/exp-string/notes.md +++ b/tests/library/exp-string/notes.md @@ -5,3 +5,7 @@ Review status: pending human review. Copies of hello are independent; assigning world to the copy gives helloworld when concatenated. Empty length is zero, and three NUL bytes retain length three. One hundred appended five-byte words grow 20000 bytes to 20500, preserved by BYVAL and RETURN. C++17 formatting gives 42 and 1.250000. Parsing 12.5 compares equal to 12.5. Trailing junk and negative counts emit the explicit library reasons at user lines 27 and 32, then are caught. Discarded numeric and Echo results must release their owned strings at statement end. The explicitly deleted heap object prints heap. This fixture covers compiler/library extensions, including numeric text formatting. LEFT keeps ABC, returns zero bytes for an empty source or nonpositive count, and clamps 20 to all eight letters. Taking four bytes from three NULs followed by hello retains all four bytes. + +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. diff --git a/tests/library/exp-string/program.cps b/tests/library/exp-string/program.cps index c9dad8a..f8c037f 100644 --- a/tests/library/exp-string/program.cps +++ b/tests/library/exp-string/program.cps @@ -39,8 +39,27 @@ DECLARE Heap : _EXP_STRING Heap <- NEW _EXP_STRING((C_STRING)"heap") CALL _EXP_STRING_OUTPUT(Heap) DELETE Heap -DECLARE Letters : _EXP_STRING((C_STRING)"ABCDEFGH") -CALL _EXP_STRING_OUTPUT(_EXP_STRING_LEFT(Letters, 3)) -OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Empty, 2)), ":", _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Letters, 0)), ":", _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Letters, -1)) -CALL _EXP_STRING_OUTPUT(_EXP_STRING_LEFT(Letters, 20)) -OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Nuls & A, 4)) +CALL CheckLeft() +CALL CheckRight() + +PROCEDURE CheckLeft() + DECLARE Letters : _EXP_STRING((C_STRING)"ABCDEFGH") + DECLARE Empty : _EXP_STRING + DECLARE Nuls : _EXP_STRING(3, (C_CHAR)'\0') + DECLARE A : _EXP_STRING((C_STRING)"hello") + CALL _EXP_STRING_OUTPUT(_EXP_STRING_LEFT(Letters, 3)) + OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Empty, 2)), ":", _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Letters, 0)), ":", _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Letters, -1)) + CALL _EXP_STRING_OUTPUT(_EXP_STRING_LEFT(Letters, 20)) + OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Nuls & A, 4)) +ENDPROCEDURE + +PROCEDURE CheckRight() + DECLARE Letters : _EXP_STRING((C_STRING)"ABCDEFGH") + DECLARE Empty : _EXP_STRING + DECLARE Nuls : _EXP_STRING(3, (C_CHAR)'\0') + DECLARE A : _EXP_STRING((C_STRING)"hello") + CALL _EXP_STRING_OUTPUT(_EXP_STRING_RIGHT(Letters, 3)) + OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(Empty, 2)), ":", _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(Letters, 0)), ":", _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(Letters, -1)) + CALL _EXP_STRING_OUTPUT(_EXP_STRING_RIGHT(Letters, 20)) + OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(A & Nuls, 4)) +ENDPROCEDURE |
