From 5338a16040fca8720c60c18b78d663a53a8eba20 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 1 Sep 2020 23:30:32 -0700 Subject: 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. --- tests/012/oop-mi.expected | 12 ++++++++++-- tests/012/oop-mi.tl | 13 +++++++++++++ 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))) -- cgit v1.2.3