diff options
Diffstat (limited to 'tests/i/string-aggregate-assignment')
| -rw-r--r-- | tests/i/string-aggregate-assignment/case.json | 1 | ||||
| -rw-r--r-- | tests/i/string-aggregate-assignment/expected.txt | 2 | ||||
| -rw-r--r-- | tests/i/string-aggregate-assignment/notes.md | 3 | ||||
| -rw-r--r-- | tests/i/string-aggregate-assignment/program.cps | 28 |
4 files changed, 34 insertions, 0 deletions
diff --git a/tests/i/string-aggregate-assignment/case.json b/tests/i/string-aggregate-assignment/case.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/tests/i/string-aggregate-assignment/case.json @@ -0,0 +1 @@ +{} diff --git a/tests/i/string-aggregate-assignment/expected.txt b/tests/i/string-aggregate-assignment/expected.txt new file mode 100644 index 0000000..b5956eb --- /dev/null +++ b/tests/i/string-aggregate-assignment/expected.txt @@ -0,0 +1,2 @@ +left:changed:0:0 +2:0 diff --git a/tests/i/string-aggregate-assignment/notes.md b/tests/i/string-aggregate-assignment/notes.md new file mode 100644 index 0000000..592272d --- /dev/null +++ b/tests/i/string-aggregate-assignment/notes.md @@ -0,0 +1,3 @@ +# Aggregate assignment with STRING fields + +Human review: pending. Default class assignment copies STRING fields independently, including self-assignment, without invoking the enclosing class's copy constructor or destructor. The two declared boxes are destroyed only when Check returns. diff --git a/tests/i/string-aggregate-assignment/program.cps b/tests/i/string-aggregate-assignment/program.cps new file mode 100644 index 0000000..9659437 --- /dev/null +++ b/tests/i/string-aggregate-assignment/program.cps @@ -0,0 +1,28 @@ +GLOBAL + DECLARE Destroyed : INTEGER + DECLARE Copies : INTEGER +ENDGLOBAL +CLASS Box + Text : STRING + OVERLOAD PROCEDURE NEW() + ENDPROCEDURE + OVERLOAD PROCEDURE NEW(BYREF Other : Box) + Text <- Other.Text + Copies <- Copies + 1 + ENDPROCEDURE + PROCEDURE DELETE() + Destroyed <- Destroyed + 1 + ENDPROCEDURE +ENDCLASS +PROCEDURE Check() + DECLARE A : Box + DECLARE B : Box + A.Text <- "left" + B.Text <- "right" + B <- A + B <- B + B.Text <- "changed" + OUTPUT A.Text, ":", B.Text, ":", Destroyed, ":", Copies +ENDPROCEDURE +CALL Check() +OUTPUT Destroyed, ":", Copies |
