summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2020-09-01 23:30:32 -0700
committerKaz Kylheku <kaz@kylheku.com>2020-09-01 23:30:32 -0700
commit5338a16040fca8720c60c18b78d663a53a8eba20 (patch)
tree41ce0d7b5fd57b3d036940d41f741619a9a2a0f6 /tests
parent0f6702adbc7792499fba6d2fb067fb817a603fd6 (diff)
downloadtxr-5338a16040fca8720c60c18b78d663a53a8eba20.tar.gz
txr-5338a16040fca8720c60c18b78d663a53a8eba20.tar.bz2
txr-5338a16040fca8720c60c18b78d663a53a8eba20.zip
oop: add tests for diamond problem.
* tests/012/oop-mi.tl (grand, base1, base2): Add list slot li to grand, targeted by :init and :fini handlers in all three structs. Added test case which triggers finalization. * tests/012/oop-mi.expected: Updated.
Diffstat (limited to 'tests')
-rw-r--r--tests/012/oop-mi.expected12
-rw-r--r--tests/012/oop-mi.tl13
2 files changed, 23 insertions, 2 deletions
diff --git a/tests/012/oop-mi.expected b/tests/012/oop-mi.expected
index 6d112c2e..ebc807f3 100644
--- a/tests/012/oop-mi.expected
+++ b/tests/012/oop-mi.expected
@@ -1,7 +1,7 @@
-#S(der0 gx gx gy dgy x dx y dy z dz)
+#S(der0 li (b1 b2 g) gx gx gy dgy x dx y dy z dz)
dgs0
gs1-b1
-#S(der1 x b3x gx b3gx gy gy y b2y)
+#S(der1 x b3x gx b3gx li (b1 b2 g) gy gy y b2y)
gs0
gs1-b1
(meth base3 b3m0)
@@ -15,3 +15,11 @@ gm
base1
base2
grand
+(b1 b2 g)
+(gf b2f b1f b1 b2 g)
+(b1 b2 g)
+(gf b2f b1f b1 b2 g)
+(b1 b2 g)
+(gf b2f b1f b1 b2 g)
+(b2 b1 g)
+(gf b1f b2f b2 b1 g)
diff --git a/tests/012/oop-mi.tl b/tests/012/oop-mi.tl
index 4431f23d..0e54086a 100644
--- a/tests/012/oop-mi.tl
+++ b/tests/012/oop-mi.tl
@@ -1,8 +1,11 @@
(load "../common")
(defstruct grand nil
+ (li 'nil)
(gx 'gx)
(gy 'gy)
+ (:init (me) (push 'g me.li))
+ (:fini (me) (push 'gf me.li))
(:static gs0 'gs0)
(:static gs1 'gs1)
(:method gm (me) 'gm))
@@ -12,11 +15,15 @@
(defstruct base1 grand
(x 'b1x)
+ (:init (me) (push 'b1 me.li))
+ (:fini (me) (push 'b1f me.li))
(:static gs1 'gs1-b1)
(:method m (me) 'm1))
(defstruct base2 grand
(y 'b2y)
+ (:init (me) (push 'b2 me.li))
+ (:fini (me) (push 'b2f me.li))
(:static gs1 'gs1-b2)
(:method m (me) 'm2))
@@ -63,3 +70,9 @@
(prinl (static-slot-home 'der2 'm))
(prinl (static-slot-home 'der3 'm))
(prinl (static-slot-home 'der3 'gm))
+
+(each ((ty '(der0 der1 der2 der3)))
+ (let ((ob (new* ty)))
+ (prinl ob.li)
+ (call-finalizers ob)
+ (prinl ob.li)))