diff options
| author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2009-08-18 20:56:02 +0000 |
|---|---|---|
| committer | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-09-25 16:59:08 +0000 |
| commit | 9f8a09ed743cedd9547bf0661d518647966ab114 (patch) | |
| tree | 9c7803d3b27a8ec22e91792ac7f7932efa128b20 /Examples/test-suite/csharp/virtual_poly_runme.cs | |
| download | swig-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.cs | 51 |
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"); + } +} |
