From ac011192ae8b80ed4447a68d4dd5cfa06fb9d0f6 Mon Sep 17 00:00:00 2001 From: Marcelo Matus Date: Wed, 24 Dec 2003 06:53:47 +0000 Subject: [PATCH] added a reference polymorphic return type case, and some extra test for the Java side. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5596 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- .../test-suite/java/virtual_poly_runme.java | 20 +++++++++++++++++++ .../test-suite/python/virtual_poly_runme.py | 4 ++++ Examples/test-suite/virtual_poly.i | 17 ++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/Examples/test-suite/java/virtual_poly_runme.java b/Examples/test-suite/java/virtual_poly_runme.java index 12ca4a2e3..81e2f398a 100644 --- a/Examples/test-suite/java/virtual_poly_runme.java +++ b/Examples/test-suite/java/virtual_poly_runme.java @@ -37,5 +37,25 @@ public class virtual_poly_runme { virtual_poly.incr(ic); if ( (i.get() + 1) != ic.get() ) throw new RuntimeException("incr test failed"); + + // + // Checking a pure user downcast + // + NNumber n1 = d.copy(); + NNumber n2 = d.nnumber(); + NDouble dn1 = NDouble.narrow(n1); + NDouble dn2 = NDouble.narrow(n2); + + if ( (dn1.get()) != dn2.get() ) + throw new RuntimeException("copy/narrow test failed"); + + // + // Checking the ref polymorphic case + // + NNumber nr = d.ref_this(); + NDouble dr1 = NDouble.narrow(nr); + NDouble dr2 = (NDouble)d.ref_this(); + if ( dr1.get() != dr2.get() ) + throw new RuntimeException("copy/narrow test failed"); } } diff --git a/Examples/test-suite/python/virtual_poly_runme.py b/Examples/test-suite/python/virtual_poly_runme.py index d2b8de65e..7e202f9cf 100644 --- a/Examples/test-suite/python/virtual_poly_runme.py +++ b/Examples/test-suite/python/virtual_poly_runme.py @@ -21,6 +21,10 @@ if (i.get() + 1) != ic.get(): raise RuntimeError +dr = d.ref_this() +if d.get() != dr.get(): + raise RuntimeError + # # 'narrowing' also works diff --git a/Examples/test-suite/virtual_poly.i b/Examples/test-suite/virtual_poly.i index 1ccb6816e..baf5a532b 100644 --- a/Examples/test-suite/virtual_poly.i +++ b/Examples/test-suite/virtual_poly.i @@ -16,12 +16,18 @@ { virtual ~NNumber() {}; virtual NNumber* copy() const = 0; + virtual NNumber& ref_this() + { + return *this; + } + NNumber* nnumber() { return this; } + }; /* @@ -57,8 +63,14 @@ return new NInt(val); } + virtual NInt& ref_this() + { + return *this; + } + /* See below */ static NInt* narrow(NNumber* nn); + private: int val; @@ -85,6 +97,11 @@ return new NDouble(val); } + virtual NDouble& ref_this() + { + return *this; + } + /* See below */ static NDouble* narrow(NNumber* nn);