aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/i/string-aggregate-assignment/case.json1
-rw-r--r--tests/i/string-aggregate-assignment/expected.txt2
-rw-r--r--tests/i/string-aggregate-assignment/notes.md3
-rw-r--r--tests/i/string-aggregate-assignment/program.cps28
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