diff options
| author | _ov4 <ov4@ov4.org> | 2026-10-18 06:11:42 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-10-18 06:11:42 +0000 |
| commit | 5a67f4e3833c2acca4a351f5dd613bc08f04bfc0 (patch) | |
| tree | 6d75f5d13931ba0f7c15d286028049a421a6e974 /tests/i/multifile-operators | |
| parent | b17f101cfc75565f9991c856ec62f1e17b0ab104 (diff) | |
feat(operators): document overloads and cover remaining operator forms
Add fixed cases for every supported operator, imported global and member
operators, CASE comparisons, and declared result type errors. Document
syntax, exact matching, access rules and temporary receiver lifetimes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'tests/i/multifile-operators')
| -rw-r--r-- | tests/i/multifile-operators/case.json | 7 | ||||
| -rw-r--r-- | tests/i/multifile-operators/expected.txt | 5 | ||||
| -rw-r--r-- | tests/i/multifile-operators/notes.md | 7 | ||||
| -rw-r--r-- | tests/i/multifile-operators/operators.cps | 4 | ||||
| -rw-r--r-- | tests/i/multifile-operators/program.cps | 21 | ||||
| -rw-r--r-- | tests/i/multifile-operators/types.cps | 12 |
6 files changed, 56 insertions, 0 deletions
diff --git a/tests/i/multifile-operators/case.json b/tests/i/multifile-operators/case.json new file mode 100644 index 0000000..a71b210 --- /dev/null +++ b/tests/i/multifile-operators/case.json @@ -0,0 +1,7 @@ +{ + "sources": [ + "program.cps", + "operators.cps", + "types.cps" + ] +} diff --git a/tests/i/multifile-operators/expected.txt b/tests/i/multifile-operators/expected.txt new file mode 100644 index 0000000..7642205 --- /dev/null +++ b/tests/i/multifile-operators/expected.txt @@ -0,0 +1,5 @@ +5 +FALSE +range +TRUE +8 diff --git a/tests/i/multifile-operators/notes.md b/tests/i/multifile-operators/notes.md new file mode 100644 index 0000000..73263d1 --- /dev/null +++ b/tests/i/multifile-operators/notes.md @@ -0,0 +1,7 @@ +# multifile-operators + +Human review: pending. Expected output was independently traced by AI, not captured from cpsc. + +Basis: INCLUDE and operator overloading are project extensions. + +Trace: program imports the global INTEGER addition and transitively imports Key and its comparison methods. Value 3 plus 2 gives 5; 3 equals 4 is FALSE. CASE first rejects equality with 1, then matches the inclusive range 1 through 4. Array element value 4 equals high, yielding TRUE. Dereferencing the pointer to item then adding 5 gives 8. diff --git a/tests/i/multifile-operators/operators.cps b/tests/i/multifile-operators/operators.cps new file mode 100644 index 0000000..f0c4f05 --- /dev/null +++ b/tests/i/multifile-operators/operators.cps @@ -0,0 +1,4 @@ +INCLUDE "types.cps" +OVERLOAD FUNCTION OPERATOR+(lhs : Key, rhs : INTEGER) RETURNS INTEGER +RETURN lhs.Value + rhs +ENDFUNCTION diff --git a/tests/i/multifile-operators/program.cps b/tests/i/multifile-operators/program.cps new file mode 100644 index 0000000..85eb3ee --- /dev/null +++ b/tests/i/multifile-operators/program.cps @@ -0,0 +1,21 @@ +INCLUDE "operators.cps" +DECLARE item : Key +DECLARE low : Key +DECLARE high : Key +item.Value <- 3 +low.Value <- 1 +high.Value <- 4 +OUTPUT item + 2 +OUTPUT item = high +CASE OF item +low : OUTPUT "wrong" +low TO high : OUTPUT "range" +OTHERWISE : OUTPUT "wrong" +ENDCASE +DECLARE items : ARRAY[1:2] OF Key +items[2].Value <- 4 +OUTPUT items[2] = high +TYPE KeyPointer = ^Key +DECLARE pointer : KeyPointer +pointer <- ^item +OUTPUT pointer^ + 5 diff --git a/tests/i/multifile-operators/types.cps b/tests/i/multifile-operators/types.cps new file mode 100644 index 0000000..9198da4 --- /dev/null +++ b/tests/i/multifile-operators/types.cps @@ -0,0 +1,12 @@ +CLASS Key +Value : INTEGER +OVERLOAD FUNCTION OPERATOR=(rhs : Key) RETURNS BOOLEAN +RETURN Value = rhs.Value +ENDFUNCTION +OVERLOAD FUNCTION OPERATOR>=(rhs : Key) RETURNS BOOLEAN +RETURN Value >= rhs.Value +ENDFUNCTION +OVERLOAD FUNCTION OPERATOR<=(rhs : Key) RETURNS BOOLEAN +RETURN Value <= rhs.Value +ENDFUNCTION +ENDCLASS |
