summaryrefslogtreecommitdiff
path: root/Examples/test-suite/csharp/virtual_poly_runme.cs
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2009-08-18 20:56:02 +0000
committerLorry <lorry@roadtrain.codethink.co.uk>2012-09-25 16:59:08 +0000
commit9f8a09ed743cedd9547bf0661d518647966ab114 (patch)
tree9c7803d3b27a8ec22e91792ac7f7932efa128b20 /Examples/test-suite/csharp/virtual_poly_runme.cs
downloadswig-tarball-master.tar.gz
Imported from /srv/lorry/lorry-area/swig-tarball/swig-1.3.40.tar.gz.HEADswig-1.3.40master
Diffstat (limited to 'Examples/test-suite/csharp/virtual_poly_runme.cs')
-rw-r--r--Examples/test-suite/csharp/virtual_poly_runme.cs51
1 files changed, 51 insertions, 0 deletions
diff --git a/Examples/test-suite/csharp/virtual_poly_runme.cs b/Examples/test-suite/csharp/virtual_poly_runme.cs
new file mode 100644
index 0000000..9c1f796
--- /dev/null
+++ b/Examples/test-suite/csharp/virtual_poly_runme.cs
@@ -0,0 +1,51 @@
+using System;
+using virtual_polyNamespace;
+
+public class runme {
+ static void Main() {
+
+ NDouble d = new NDouble(3.5);
+ NInt i = new NInt(2);
+
+ //
+ // These two natural 'copy' forms fail because no covariant (polymorphic) return types
+ // are supported in C#.
+ //
+ // NDouble dc = d.copy();
+ // NInt ic = i.copy();
+
+ //
+ // Unlike C++, we have to downcast instead.
+ //
+ NDouble dc = (NDouble)d.copy();
+ NInt ic = (NInt)i.copy();
+
+ NDouble ddc = NDouble.narrow(dc);
+ NInt dic = NInt.narrow(ic);
+ dc = ddc; ic = dic; // warning suppression
+
+ virtual_poly.incr(ic);
+ if ( (i.get() + 1) != ic.get() )
+ throw new Exception("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 Exception("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 Exception("copy/narrow test failed");
+ }
+}