summaryrefslogtreecommitdiff
path: root/Examples/test-suite
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite')
-rw-r--r--Examples/test-suite/apply_strings.i4
-rw-r--r--Examples/test-suite/char_constant.i30
-rw-r--r--Examples/test-suite/chartest.i69
-rw-r--r--Examples/test-suite/common.mk27
-rw-r--r--Examples/test-suite/compactdefaultargs.i1
-rw-r--r--Examples/test-suite/constant_directive.i42
-rw-r--r--Examples/test-suite/cpp11_li_std_array.i2
-rw-r--r--Examples/test-suite/cpp11_strongly_typed_enumerations.i7
-rw-r--r--Examples/test-suite/cpp11_type_aliasing.i76
-rw-r--r--Examples/test-suite/csharp/director_pass_by_value_runme.cs43
-rw-r--r--Examples/test-suite/csharp/multiple_inheritance_abstract_runme.cs245
-rw-r--r--Examples/test-suite/csharp/multiple_inheritance_interfaces_runme.cs87
-rw-r--r--Examples/test-suite/csharp/multiple_inheritance_nspace_runme.cs246
-rw-r--r--Examples/test-suite/csharp/multiple_inheritance_shared_ptr_runme.cs329
-rw-r--r--Examples/test-suite/default_args.i4
-rw-r--r--Examples/test-suite/default_args_c.i14
-rw-r--r--Examples/test-suite/director_pass_by_value.i30
-rw-r--r--Examples/test-suite/enum_thorough.i103
-rw-r--r--Examples/test-suite/errors/c_default_error.i4
-rw-r--r--Examples/test-suite/errors/c_default_error.stderr0
-rw-r--r--Examples/test-suite/errors/c_varargs.i3
-rw-r--r--Examples/test-suite/errors/c_varargs.stderr0
-rw-r--r--Examples/test-suite/errors/cpp_inherit_ignored.i19
-rw-r--r--Examples/test-suite/errors/cpp_inherit_ignored.stderr3
-rw-r--r--Examples/test-suite/errors/cpp_overload.i15
-rw-r--r--Examples/test-suite/errors/cpp_overload.stderr0
-rw-r--r--Examples/test-suite/errors/cpp_private_defvalue.i7
-rw-r--r--Examples/test-suite/errors/cpp_private_defvalue.stderr0
-rw-r--r--Examples/test-suite/errors/cpp_template_argname.i8
-rw-r--r--Examples/test-suite/errors/cpp_template_argname.stderr0
-rw-r--r--Examples/test-suite/errors/cpp_template_repeat.i2
-rw-r--r--Examples/test-suite/errors/cpp_using_type_aliasing.stderr3
-rw-r--r--Examples/test-suite/errors/pp_macro_args.i7
-rw-r--r--Examples/test-suite/errors/pp_macro_args.stderr0
-rw-r--r--Examples/test-suite/exception_classname.i3
-rw-r--r--Examples/test-suite/funcptr_cpp.i2
-rw-r--r--Examples/test-suite/go/go_inout_runme.go10
-rw-r--r--Examples/test-suite/go_inout.i48
-rw-r--r--Examples/test-suite/insert_directive.i2
-rw-r--r--Examples/test-suite/java/Makefile.in11
-rw-r--r--Examples/test-suite/java/constant_directive_runme.java4
-rw-r--r--Examples/test-suite/java/cpp11_li_std_array_runme.java82
-rw-r--r--Examples/test-suite/java/director_classes_runme.java2
-rw-r--r--Examples/test-suite/java/director_pass_by_value_runme.java48
-rw-r--r--Examples/test-suite/java/long_long_runme.java50
-rw-r--r--Examples/test-suite/java/multiple_inheritance_abstract_runme.java253
-rw-r--r--Examples/test-suite/java/multiple_inheritance_interfaces_runme.java78
-rw-r--r--Examples/test-suite/java/multiple_inheritance_nspace_runme.java255
-rw-r--r--Examples/test-suite/java/multiple_inheritance_shared_ptr_runme.java337
-rw-r--r--Examples/test-suite/java/smart_pointer_ignore_runme.java19
-rw-r--r--Examples/test-suite/javascript/Makefile.in6
-rw-r--r--Examples/test-suite/li_boost_array.i2
-rw-r--r--Examples/test-suite/li_boost_shared_ptr_template.i2
-rw-r--r--Examples/test-suite/li_std_vector.i10
-rw-r--r--Examples/test-suite/long_long.i6
-rw-r--r--Examples/test-suite/lua/Makefile.in1
-rw-r--r--Examples/test-suite/lua/funcptr_cpp_runme.lua1
-rw-r--r--Examples/test-suite/lua/lua_inherit_getitem_runme.lua12
-rw-r--r--Examples/test-suite/lua_inherit_getitem.i19
-rw-r--r--Examples/test-suite/multiple_inheritance_abstract.i328
-rw-r--r--Examples/test-suite/multiple_inheritance_interfaces.i66
-rw-r--r--Examples/test-suite/multiple_inheritance_nspace.i338
-rw-r--r--Examples/test-suite/multiple_inheritance_shared_ptr.i499
-rw-r--r--Examples/test-suite/namespace_typemap.i6
-rw-r--r--Examples/test-suite/nested_extend_c.i4
-rw-r--r--Examples/test-suite/nested_ignore.i24
-rw-r--r--Examples/test-suite/operator_overload.i108
-rw-r--r--Examples/test-suite/php/director_pass_by_value_runme.php24
-rw-r--r--Examples/test-suite/preproc_defined.i1
-rw-r--r--Examples/test-suite/primitive_types.i1
-rw-r--r--Examples/test-suite/python/Makefile.in4
-rw-r--r--Examples/test-suite/python/autodoc_runme.py8
-rw-r--r--Examples/test-suite/python/compactdefaultargs_runme.py3
-rw-r--r--Examples/test-suite/python/constant_directive_runme.py8
-rw-r--r--Examples/test-suite/python/cpp11_type_aliasing_runme.py32
-rw-r--r--Examples/test-suite/python/cpp_static_runme.py3
-rw-r--r--Examples/test-suite/python/default_args_c_runme.py6
-rw-r--r--Examples/test-suite/python/default_args_runme.py18
-rw-r--r--Examples/test-suite/python/director_pass_by_value_runme.py13
-rw-r--r--Examples/test-suite/python/exception_classname_runme.py3
-rw-r--r--Examples/test-suite/python/funcptr_cpp_runme.py2
-rw-r--r--Examples/test-suite/python/li_attribute_runme.py10
-rw-r--r--Examples/test-suite/python/li_boost_shared_ptr_template_runme.py18
-rw-r--r--Examples/test-suite/python/operator_overload_runme.py77
-rw-r--r--Examples/test-suite/python/operbool_runme.py3
-rw-r--r--Examples/test-suite/python/python_abstractbase_runme3.py4
-rw-r--r--Examples/test-suite/python/python_destructor_exception_runme.py6
-rw-r--r--Examples/test-suite/python/rename_rstrip_encoder_runme.py5
-rw-r--r--Examples/test-suite/python/template_default_arg_overloaded_extend_runme.py20
-rw-r--r--Examples/test-suite/python/unicode_strings_runme.py12
-rw-r--r--Examples/test-suite/python_abstractbase.i6
-rw-r--r--Examples/test-suite/r/Makefile.in12
-rw-r--r--Examples/test-suite/r/li_std_vector_runme.R19
-rw-r--r--Examples/test-suite/r/unittest.R4
-rw-r--r--Examples/test-suite/rename_rstrip_encoder.i15
-rw-r--r--Examples/test-suite/ruby/Makefile.in3
-rw-r--r--Examples/test-suite/ruby/ruby_manual_proxy_runme.rb49
-rw-r--r--Examples/test-suite/ruby_manual_proxy.i66
-rw-r--r--Examples/test-suite/scilab/funcptr_cpp_runme.sci1
-rw-r--r--Examples/test-suite/scilab/overload_polymorphic_runme.sci11
-rw-r--r--Examples/test-suite/scilab/overload_simple_runme.sci36
-rw-r--r--Examples/test-suite/scilab/overload_subtype_runme.sci13
-rw-r--r--Examples/test-suite/scilab/template_rename_runme.sci2
-rw-r--r--Examples/test-suite/smart_pointer_ignore.i33
-rw-r--r--Examples/test-suite/string_constants.i44
-rw-r--r--Examples/test-suite/template_default_arg_overloaded_extend.i44
-rw-r--r--Examples/test-suite/typemap_manyargs.i1
-rw-r--r--Examples/test-suite/typemap_subst.i2
108 files changed, 4512 insertions, 196 deletions
diff --git a/Examples/test-suite/apply_strings.i b/Examples/test-suite/apply_strings.i
index 62b578bf2..695dd068f 100644
--- a/Examples/test-suite/apply_strings.i
+++ b/Examples/test-suite/apply_strings.i
@@ -68,6 +68,10 @@ TAscii *DigitsGlobalC;
// Director test
%feature("director");
+#if defined(SWIGGO)
+%typemap(godirectorout) CharPtr, CCharPtr ""
+#endif
+
%inline %{
struct DirectorTest {
virtual UCharPtr UCharFunction(UCharPtr str) { return str; }
diff --git a/Examples/test-suite/char_constant.i b/Examples/test-suite/char_constant.i
index 5235b0581..918456192 100644
--- a/Examples/test-suite/char_constant.i
+++ b/Examples/test-suite/char_constant.i
@@ -12,6 +12,36 @@
#define ESC_CONST '\1'
#define NULL_CONST '\0'
#define SPECIALCHAR 'á'
+#define SPECIALCHAR2 '\n'
+#define SPECIALCHARA 'A'
+#define SPECIALCHARB '\102' // B
+#define SPECIALCHARC '\x43' // C
+#define SPECIALCHARD 0x44 // D
+#define SPECIALCHARE 69 // E
+#define SPECIALCHARAE1 'Æ' // AE (latin1 encoded)
+#define SPECIALCHARAE2 '\306' // AE (latin1 encoded)
+#define SPECIALCHARAE3 '\xC6' // AE (latin1 encoded)
+
+#if defined(SWIGJAVA)
+%javaconst(1);
+#elif SWIGCSHARP
+%csconst(1);
+#elif SWIGD
+%dmanifestconst;
+#endif
+
+#define X_ESC_CONST '\1'
+#define X_NULL_CONST '\0'
+#define X_SPECIALCHAR 'á'
+#define X_SPECIALCHAR2 '\n'
+#define X_SPECIALCHARA 'A'
+#define X_SPECIALCHARB '\102' // B
+#define X_SPECIALCHARC '\x43' // C
+#define X_SPECIALCHARD 0x44 // D
+#define X_SPECIALCHARE 69 // E
+#define X_SPECIALCHARAE1 'Æ' // AE (latin1 encoded)
+#define X_SPECIALCHARAE2 '\306' // AE (latin1 encoded)
+#define X_SPECIALCHARAE3 '\xC6' // AE (latin1 encoded)
%inline
{
diff --git a/Examples/test-suite/chartest.i b/Examples/test-suite/chartest.i
index e81cf54a4..1046fa4d1 100644
--- a/Examples/test-suite/chartest.i
+++ b/Examples/test-suite/chartest.i
@@ -1,6 +1,11 @@
%module chartest
%inline %{
+#if defined(__clang__)
+#pragma clang diagnostic push
+// Suppress: illegal character encoding in character literal
+#pragma clang diagnostic ignored "-Winvalid-source-encoding"
+#endif
char printable_global_char = 'a';
char unprintable_global_char = 0x7F;
@@ -12,4 +17,68 @@ char GetUnprintableChar() {
return 0x7F;
}
+static const char globchar0 = '\0';
+static const char globchar1 = '\1';
+static const char globchar2 = '\n';
+static const char globcharA = 'A';
+static const char globcharB = '\102'; // B
+static const char globcharC = '\x43'; // C
+static const char globcharD = 0x44; // D
+static const char globcharE = 69; // E
+static const char globcharAE1 = 'Æ'; // AE (latin1 encoded)
+static const char globcharAE2 = '\306'; // AE (latin1 encoded)
+static const char globcharAE3 = '\xC6'; // AE (latin1 encoded)
+
+struct CharTestClass {
+ static const char memberchar0 = '\0';
+ static const char memberchar1 = '\1';
+ static const char memberchar2 = '\n';
+ static const char membercharA = 'A';
+ static const char membercharB = '\102'; // B
+ static const char membercharC = '\x43'; // C
+ static const char membercharD = 0x44; // D
+ static const char membercharE = 69; // E
+ static const char membercharAE1 = 'Æ'; // AE (latin1 encoded)
+ static const char membercharAE2 = '\306'; // AE (latin1 encoded)
+ static const char membercharAE3 = '\xC6'; // AE (latin1 encoded)
+};
+%}
+
+#if defined(SWIGJAVA)
+%javaconst(1);
+#elif SWIGCSHARP
+%csconst(1);
+#elif SWIGD
+%dmanifestconst;
+#endif
+
+%inline %{
+static const char x_globchar0 = '\0';
+static const char x_globchar1 = '\1';
+static const char x_globchar2 = '\n';
+static const char x_globcharA = 'A';
+static const char x_globcharB = '\102'; // B
+static const char x_globcharC = '\x43'; // C
+static const char x_globcharD = 0x44; // D
+static const char x_globcharE = 69; // E
+static const char x_globcharAE1 = 'Æ'; // AE (latin1 encoded)
+static const char x_globcharAE2 = '\306'; // AE (latin1 encoded)
+static const char x_globcharAE3 = '\xC6'; // AE (latin1 encoded)
+
+struct X_CharTestClass {
+ static const char memberchar0 = '\0';
+ static const char memberchar1 = '\1';
+ static const char memberchar2 = '\n';
+ static const char membercharA = 'A';
+ static const char membercharB = '\102'; // B
+ static const char membercharC = '\x43'; // C
+ static const char membercharD = 0x44; // D
+ static const char membercharE = 69; // E
+ static const char membercharAE1 = 'Æ'; // AE (latin1 encoded)
+ static const char membercharAE2 = '\306'; // AE (latin1 encoded)
+ static const char membercharAE3 = '\xC6'; // AE (latin1 encoded)
+};
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#endif
%}
diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk
index 9f948c2ca..1658e509b 100644
--- a/Examples/test-suite/common.mk
+++ b/Examples/test-suite/common.mk
@@ -174,7 +174,6 @@ CPP_TEST_CASES += \
director_abstract \
director_alternating \
director_basic \
- director_property \
director_binary_string \
director_classes \
director_classic \
@@ -189,12 +188,14 @@ CPP_TEST_CASES += \
director_ignore \
director_keywords \
director_namespace_clash \
+ director_nested \
director_nspace \
director_nspace_director_name_collision \
- director_nested \
director_overload \
director_overload2 \
+ director_pass_by_value \
director_primitives \
+ director_property \
director_protected \
director_protected_overloaded \
director_redefined \
@@ -282,6 +283,10 @@ CPP_TEST_CASES += \
minherit2 \
mixed_types \
multiple_inheritance \
+ multiple_inheritance_abstract \
+ multiple_inheritance_interfaces \
+ multiple_inheritance_nspace \
+ multiple_inheritance_shared_ptr \
name_cxx \
name_warnings \
namespace_class \
@@ -303,6 +308,7 @@ CPP_TEST_CASES += \
nested_class \
nested_directors \
nested_comment \
+ nested_ignore \
nested_scope \
nested_template_base \
nested_workaround \
@@ -341,6 +347,7 @@ CPP_TEST_CASES += \
rename2 \
rename3 \
rename4 \
+ rename_rstrip_encoder \
rename_scope \
rename_simple \
rename_strip_encoder \
@@ -357,6 +364,7 @@ CPP_TEST_CASES += \
smart_pointer_const2 \
smart_pointer_const_overload \
smart_pointer_extend \
+ smart_pointer_ignore \
smart_pointer_member \
smart_pointer_multi \
smart_pointer_multi_typedef \
@@ -379,6 +387,7 @@ CPP_TEST_CASES += \
static_array_member \
static_const_member \
static_const_member_2 \
+ string_constants \
struct_initialization_cpp \
struct_value \
symbol_clash \
@@ -396,6 +405,7 @@ CPP_TEST_CASES += \
template_default2 \
template_default_arg \
template_default_arg_overloaded \
+ template_default_arg_overloaded_extend \
template_default_arg_virtual_destructor \
template_default_class_parms \
template_default_class_parms_typedef \
@@ -664,6 +674,11 @@ MULTI_CPP_TEST_CASES += \
wallkw.cpptest: SWIGOPT += -Wallkw
preproc_include.ctest: SWIGOPT += -includeall
+# Allow modules to define temporarily failing tests.
+C_TEST_CASES := $(filter-out $(FAILING_C_TESTS),$(C_TEST_CASES))
+CPP_TEST_CASES := $(filter-out $(FAILING_CPP_TESTS),$(CPP_TEST_CASES))
+MULTI_CPP_TEST_CASES := $(filter-out $(FAILING_MULTI_CPP_TESTS),$(MULTI_CPP_TEST_CASES))
+
NOT_BROKEN_TEST_CASES = $(CPP_TEST_CASES:=.cpptest) \
$(C_TEST_CASES:=.ctest) \
@@ -694,6 +709,7 @@ all: $(NOT_BROKEN_TEST_CASES) $(BROKEN_TEST_CASES)
broken: $(BROKEN_TEST_CASES)
check: $(NOT_BROKEN_TEST_CASES)
+ @echo $(words $^) $(LANGUAGE) tests passed
check-c: $(C_TEST_CASES:=.ctest)
@@ -701,6 +717,13 @@ check-cpp: $(CPP_TEST_CASES:=.cpptest)
check-cpp11: $(CPP11_TEST_CASES:=.cpptest)
+check-failing-test = \
+ $(MAKE) -s $1.$2 >/dev/null 2>/dev/null && echo "Failing test $1 passed."
+
+check-failing:
+ +-$(foreach t,$(FAILING_C_TESTS),$(call check-failing-test,$t,ctest);)
+ +-$(foreach t,$(FAILING_CPP_TESTS),$(call check-failing-test,$t,cpptest);)
+ +-$(foreach t,$(FAILING_MULTI_CPP_TESTS),$(call check-failing-test,$t,multicpptest);)
endif
# partialcheck target runs SWIG only, ie no compilation or running of tests (for a subset of languages)
diff --git a/Examples/test-suite/compactdefaultargs.i b/Examples/test-suite/compactdefaultargs.i
index b2b07c5f8..af96fbe23 100644
--- a/Examples/test-suite/compactdefaultargs.i
+++ b/Examples/test-suite/compactdefaultargs.i
@@ -30,6 +30,7 @@ public:
static const double PUBLIC_DEFAULT;
Defaults2(int a = PRIVATE_DEFAULT) {}
double ret(double d = PUBLIC_DEFAULT) { return d; }
+ double nodefault(int x) { return x; }
};
%}
diff --git a/Examples/test-suite/constant_directive.i b/Examples/test-suite/constant_directive.i
index 8204720d6..89f13cecc 100644
--- a/Examples/test-suite/constant_directive.i
+++ b/Examples/test-suite/constant_directive.i
@@ -1,28 +1,44 @@
%module constant_directive
// %constant and struct
-%{
- struct Type1 {
- Type1(int val = 0) : val(val) {}
- int val;
- };
- static Type1 TYPE1_CONSTANT1(1);
- static Type1 TYPE1_CONST2(2);
- static Type1 TYPE1_CONST3(3);
-%}
+%inline %{
+#if defined(_MSC_VER)
+ #pragma warning(disable : 4190) // warning C4190: 'result' has C-linkage specified, but returns UDT 'Type1' which is incompatible with C
+#endif
struct Type1 {
- Type1(int val = 0) : val(val) {}
+ Type1(int val = 0) : val(val) {}
int val;
};
+/* Typedefs for const Type and its pointer */
+typedef const Type1 Type1Const;
+typedef const Type1* Type1Cptr;
-%inline %{
+/* Typedefs for function pointers returning Type1 */
+typedef Type1 (*Type1Fptr)();
+typedef Type1 (* const Type1Cfptr)();
+
+/* Function returning an instance of Type1 */
Type1 getType1Instance() { return Type1(111); }
%}
+%{
+ static Type1 TYPE1_CONSTANT1(1);
+ static Type1 TYPE1_CONST2(2);
+ static Type1 TYPE1_CONST3(3);
+%}
+
%constant Type1 TYPE1_CONSTANT1;
%constant Type1 TYPE1_CONSTANT2 = TYPE1_CONST2;
%constant Type1 *TYPE1_CONSTANT3 = &TYPE1_CONST3;
-
+/* Typedef'ed types */
+%constant Type1Const* TYPE1CONST_CONSTANT1 = &TYPE1_CONSTANT1;
+%constant Type1Cptr TYPE1CPTR_CONSTANT1 = &TYPE1_CONSTANT1;
+/* Function pointers */
+%constant Type1 (*TYPE1FPTR1_CONSTANT1)() = getType1Instance;
+%constant Type1 (* const TYPE1CFPTR1_CONSTANT1)() = getType1Instance;
+/* Typedef'ed function pointers */
+%constant Type1Fptr TYPE1FPTR1DEF_CONSTANT1 = getType1Instance;
+%constant Type1Cfptr TYPE1CFPTR1DEF_CONSTANT1 = getType1Instance;
+/* Regular constant */
%constant int TYPE_INT = 0;
-
diff --git a/Examples/test-suite/cpp11_li_std_array.i b/Examples/test-suite/cpp11_li_std_array.i
index 74e34370c..19304d9e6 100644
--- a/Examples/test-suite/cpp11_li_std_array.i
+++ b/Examples/test-suite/cpp11_li_std_array.i
@@ -1,6 +1,6 @@
%module cpp11_li_std_array
-#if defined(SWIGPYTHON) || defined(SWIGRUBY)
+#if defined(SWIGPYTHON) || defined(SWIGRUBY) || defined(SWIGJAVA)
%{
#include <array>
diff --git a/Examples/test-suite/cpp11_strongly_typed_enumerations.i b/Examples/test-suite/cpp11_strongly_typed_enumerations.i
index 3a4ee107a..64fdd2b6f 100644
--- a/Examples/test-suite/cpp11_strongly_typed_enumerations.i
+++ b/Examples/test-suite/cpp11_strongly_typed_enumerations.i
@@ -214,5 +214,12 @@ Enum1 globalTest1(Enum1 e) { return e; }
Class1::Enum12 globalTest2(Class1::Enum12 e) { return e; }
Class1::Struct1::Enum12 globalTest3(Class1::Struct1::Enum12 e) { return e; }
+class PrivateEnumClass {
+private:
+ enum class Enum {
+ PrivateEnum1,
+ PrivateEnum2
+ };
+};
%}
diff --git a/Examples/test-suite/cpp11_type_aliasing.i b/Examples/test-suite/cpp11_type_aliasing.i
index 87443633a..2f6ea3aa7 100644
--- a/Examples/test-suite/cpp11_type_aliasing.i
+++ b/Examples/test-suite/cpp11_type_aliasing.i
@@ -2,15 +2,6 @@
// Type aliasing seg fault : Github issue #424
-%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) Target;
-%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) Int;
-%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) IntRef;
-%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) IntPtrRef;
-%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) IntRValueRef;
-%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) IntArray;
-%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) HalideTargetPtr1;
-%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) HalideTargetPtr2;
-
%inline %{
namespace Halide {
@@ -53,14 +44,69 @@ public:
%inline %{
-using Int = int;
-using IntRef = int&;
-using IntPtrRef = int*&;
-using IntRValueRef = int&&;
-using IntArray = int[];
-
using HalideTargetPtr1 = Halide::Target*;
namespace Halide {
using HalideTargetPtr2 = Target*;
}
%}
+
+// Define some types
+
+%inline %{
+using Int = int;
+using IntPtr = Int*;
+using IntRef = Int&;
+using IntPtrRef = Int*&;
+using IntRValueRef = Int&&;
+using IntArray = Int[];
+%}
+
+// Test that SWIG understands these new types
+
+%callback("%s_cb");
+Int mult2(Int x);
+%nocallback;
+
+%inline %{
+Int mult2(Int x) { return x * 2; }
+IntPtr allocate_int() { return new Int(12); }
+void free_int(int* ptr) { delete ptr; }
+void inplace_mult2(IntRef x) { x *= 2; }
+Int read_int(IntPtr ptr) { return *ptr; }
+
+template <typename T> class Pair {
+public:
+ using data_t = T;
+
+ data_t a, b;
+
+ Pair() : a(), b() { }
+ Pair(data_t a, data_t b) : a(a), b(b) { }
+ data_t first() { return a; }
+ data_t second() { return b; }
+};
+%}
+
+%template(int_pair) Pair<Int>;
+
+%inline %{
+using PairInt = Pair<Int>;
+
+class PairSubclass : public PairInt {
+public:
+ PairSubclass(data_t a, data_t b) : PairInt(a, b) { }
+
+ using const_ref_data_t = const data_t&;
+};
+
+PairSubclass::data_t plus1(PairSubclass::const_ref_data_t x) { return x + 1; }
+%}
+
+// Test function pointers
+
+%inline %{
+using callback_t = int(*)(int);
+
+callback_t get_callback() { return mult2; }
+int call(callback_t func, int param) { return func(param); }
+%}
diff --git a/Examples/test-suite/csharp/director_pass_by_value_runme.cs b/Examples/test-suite/csharp/director_pass_by_value_runme.cs
new file mode 100644
index 000000000..ba6371590
--- /dev/null
+++ b/Examples/test-suite/csharp/director_pass_by_value_runme.cs
@@ -0,0 +1,43 @@
+using System;
+using director_pass_by_valueNamespace;
+
+public class runme
+{
+ private static void WaitForGC()
+ {
+ System.GC.Collect();
+ System.GC.WaitForPendingFinalizers();
+ System.Threading.Thread.Sleep(10);
+ }
+
+ static void Main()
+ {
+ runme r = new runme();
+ r.run();
+ }
+
+ void run()
+ {
+ Caller caller = new Caller();
+ caller.call_virtualMethod(new director_pass_by_value_Derived());
+ {
+ int countdown = 5;
+ while (true) {
+ WaitForGC();
+ if (--countdown == 0)
+ break;
+ };
+ }
+ // bug was the passByVal 'global' object was destroyed after the call to virtualMethod had finished.
+ int ret = runme.passByVal.getVal();
+ if (ret != 0x12345678)
+ throw new Exception("Bad return value, got " + ret.ToString("x"));
+ }
+ public static PassedByValue passByVal;
+}
+
+class director_pass_by_value_Derived : DirectorPassByValueAbstractBase {
+ public override void virtualMethod(PassedByValue pbv) {
+ runme.passByVal = pbv;
+ }
+}
diff --git a/Examples/test-suite/csharp/multiple_inheritance_abstract_runme.cs b/Examples/test-suite/csharp/multiple_inheritance_abstract_runme.cs
new file mode 100644
index 000000000..4584be399
--- /dev/null
+++ b/Examples/test-suite/csharp/multiple_inheritance_abstract_runme.cs
@@ -0,0 +1,245 @@
+using System;
+using multiple_inheritance_abstractNamespace;
+
+public class multiple_inheritance_abstract_runme {
+
+ //Test base class as a parameter in C#
+ int jcbase1b(CBase1 cb1){
+ return cb1.cbase1y();
+ }
+ int jabase1(ABase1 ab1){
+ return ab1.abase1();
+ }
+ int jcbase2(CBase2 cb2){
+ return cb2.cbase2();
+ }
+
+ public static void check(bool fail, string msg) {
+ if (fail)
+ throw new Exception(msg);
+ }
+
+ public static void Main() {
+ //Test Derived1
+ Derived1 d1=new Derived1();
+ check(d1.cbase1y()!=3, "Derived1::cbase1y() failed");
+ check(d1.cbase2()!=4, "Derived1::cbase2() failed");
+
+ //Test Derived2
+ Derived2 d2=new Derived2();
+ check(d2.cbase1y()!=6, "Derived2::cbase1y() failed");
+ check(d2.abase1()!=5, "Derived2::abase1() failed");
+
+ //Test Derived3
+ Derived3 d3=new Derived3();
+ check(d3.cbase1y()!=7, "Derived3::cbase1y() failed");
+ check(d3.cbase2()!=8, "Derived3::cbase2() failed");
+ check(d3.abase1()!=9, "Derived3::abase1() failed");
+
+ //Test Bottom1
+ Bottom1 b1=new Bottom1();
+ check(b1.cbase1y()!=103, "Bottom1::cbase1y() failed");
+ check(b1.cbase2()!=104, "Bottom1::cbase2() failed");
+
+ //Test Bottom2
+ Bottom2 b2=new Bottom2();
+ check(b2.cbase1y()!=206, "Bottom2::cbase1y() failed");
+ check(b2.abase1()!=205, "Bottom2::abase1() failed");
+
+ //Test Bottom3
+ Bottom3 b3=new Bottom3();
+ check(b3.cbase1y()!=307, "Bottom3::cbase1y() failed");
+ check(b3.cbase2()!=308, "Bottom3::cbase2() failed");
+ check(b3.abase1()!=309, "Bottom3::abase1() failed");
+
+ //Test interfaces from c++ classes
+ CBase1 cb1=new CBase1SwigImpl();
+ CBase2 cb2=new CBase2SwigImpl();
+ check(cb1.cbase1y()!=1, "CBase1::cbase1y() failed");
+ check(cb2.cbase2()!=2, "CBase2::cbase2() failed");
+
+ //Test abstract class as return value
+ ABase1 ab1=d3.cloneit();
+ check(ab1.abase1()!=9, "Derived3::abase1() through ABase1 failed");
+
+ //Test concrete base class as return value
+ CBase1 cb6=d2.cloneit();
+ CBase2 cb7=d1.cloneit();
+ check(cb6.cbase1y()!=6, "Derived2::cbase1y() through CBase1 failed");
+ check(cb7.cbase2()!=4, "Derived1:cbase2() through ABase1 failed");
+
+ //Test multi inheritance
+ CBase1 cb3=new Derived1();
+ CBase1 cb4=new Derived3();
+ CBase2 cb5=new Derived3();
+ ABase1 ab6=new Derived2();
+ check(cb3.cbase1y()!=3, "Derived1::cbase1y() through CBase1 failed");
+ check(cb4.cbase1y()!=7, "Derived3::cbase1y() through CBase1 failed");
+ check(cb5.cbase2()!=8, "Derived3::cbase2() through CBase2 failed");
+ check(ab6.abase1()!=5, "Derived2::abase1() through ABase1 failed");
+
+ //Test base classes as parameter in C#
+ multiple_inheritance_abstract_runme mhar=new multiple_inheritance_abstract_runme();
+ check(mhar.jcbase1b(d1)!=3, "jcbase1b() through Derived1 as parameter failed");
+ check(mhar.jcbase1b(d2)!=6, "jcbase1b() through Derived2 as parameter failed");
+ check(mhar.jcbase1b(d3)!=7, "jcbase1b() through Derived3 as parameter failed");
+ check(mhar.jcbase2(d1)!=4, "jcbase2() through Derived1 as parameter failed");
+ check(mhar.jcbase2(d3)!=8, "jcbase2() through Derived3 as parameter failed");
+ check(mhar.jabase1(d2)!=5, "jabase1() through Derived2 as parameter failed");
+ check(mhar.jabase1(d3)!=9, "jabase1() through Derived3 as parameter failed");
+
+ //Value parameters
+ //Test CBase1 CBase2 as parameters (note slicing for Derived and Bottom classes)
+ check(multiple_inheritance_abstract.InputValCBase1(d1)!=1, "InputValCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase1(d2)!=1, "InputValCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase1(d3)!=1, "InputValCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase2(d3)!=2, "InputValCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase2(d1)!=2, "InputValCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase1(cb1)!=1, "InputValCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase2(cb2)!=2, "InputValCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase1(b1)!=1, "InputValCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase1(b2)!=1, "InputValCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase1(b3)!=1, "InputValCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase2(b3)!=2, "InputValCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase2(b1)!=2, "InputValCBase2(), Bottom1 as a parameter failed");
+
+ //Pointer parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_abstract.InputPtrABase1(d2)!=5, "InputPtrABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrABase1(d3)!=9, "InputPtrABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrABase1(b2)!=205, "InputPtrABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrABase1(b3)!=309, "InputPtrABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_abstract.InputPtrCBase1(d1)!=3, "InputPtrCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase1(d2)!=6, "InputPtrCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase1(d3)!=7, "InputPtrCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase2(d3)!=8, "InputPtrCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase2(d1)!=4, "InputPtrCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase1(cb1)!=1, "InputPtrCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase2(cb2)!=2, "InputPtrCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase1(b1)!=103, "InputPtrCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase1(b2)!=206, "InputPtrCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase1(b3)!=307, "InputPtrCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase2(b3)!=308, "InputPtrCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase2(b1)!=104, "InputPtrCBase2(), Bottom1 as a parameter failed");
+
+ //Reference parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_abstract.InputRefABase1(d2)!=5, "InputRefABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefABase1(d3)!=9, "InputRefABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefABase1(b2)!=205, "InputRefABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefABase1(b3)!=309, "InputRefABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_abstract.InputRefCBase1(d1)!=3, "InputRefCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase1(d2)!=6, "InputRefCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase1(d3)!=7, "InputRefCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase2(d3)!=8, "InputRefCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase2(d1)!=4, "InputRefCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase1(cb1)!=1, "InputRefCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase2(cb2)!=2, "InputRefCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase1(b1)!=103, "InputRefCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase1(b2)!=206, "InputRefCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase1(b3)!=307, "InputRefCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase2(b3)!=308, "InputRefCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase2(b1)!=104, "InputRefCBase2(), Bottom1 as a parameter failed");
+
+ //Const reference pointer parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_abstract.InputCPtrRefABase1(d2)!=5, "InputCPtrRefABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefABase1(d3)!=9, "InputCPtrRefABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefABase1(b2)!=205, "InputCPtrRefABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefABase1(b3)!=309, "InputCPtrRefABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_abstract.InputCPtrRefCBase1(d1)!=3, "InputCPtrRefCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase1(d2)!=6, "InputCPtrRefCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase1(d3)!=7, "InputCPtrRefCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase2(d3)!=8, "InputCPtrRefCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase2(d1)!=4, "InputCPtrRefCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase1(cb1)!=1, "InputCPtrRefCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase2(cb2)!=2, "InputCPtrRefCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase1(b1)!=103, "InputCPtrRefCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase1(b2)!=206, "InputCPtrRefCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase1(b3)!=307, "InputCPtrRefCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase2(b3)!=308, "InputCPtrRefCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase2(b1)!=104, "InputCPtrRefCBase2(), Bottom1 as a parameter failed");
+
+ //Derived classes as parameters
+ check(multiple_inheritance_abstract.InputValDerived1(d1)!=3+4, "InputValDerived1() failed");
+ check(multiple_inheritance_abstract.InputValDerived2(d2)!=6+5, "InputValDerived2() failed");
+ check(multiple_inheritance_abstract.InputValDerived3(d3)!=7+8+9, "InputValDerived3() failed");
+
+ check(multiple_inheritance_abstract.InputRefDerived1(d1)!=3+4, "InputRefDerived1() failed");
+ check(multiple_inheritance_abstract.InputRefDerived2(d2)!=6+5, "InputRefDerived2() failed");
+ check(multiple_inheritance_abstract.InputRefDerived3(d3)!=7+8+9, "InputRefDerived3() failed");
+
+ check(multiple_inheritance_abstract.InputPtrDerived1(d1)!=3+4, "InputPtrDerived1() failed");
+ check(multiple_inheritance_abstract.InputPtrDerived2(d2)!=6+5, "InputPtrDerived2() failed");
+ check(multiple_inheritance_abstract.InputPtrDerived3(d3)!=7+8+9, "InputPtrDerived3() failed");
+
+ check(multiple_inheritance_abstract.InputCPtrRefDerived1(d1)!=3+4, "InputCPtrRefDerived1() failed");
+ check(multiple_inheritance_abstract.InputCPtrRefDerived2(d2)!=6+5, "InputCPtrRefDerived2() failed");
+ check(multiple_inheritance_abstract.InputCPtrRefDerived3(d3)!=7+8+9, "InputCPtrRefDerived3() failed");
+
+ //Bottom classes as Derived parameters
+ check(multiple_inheritance_abstract.InputValDerived1(b1)!=3+4, "InputValDerived1() failed");
+ check(multiple_inheritance_abstract.InputValDerived2(b2)!=6+5, "InputValDerived2() failed");
+ check(multiple_inheritance_abstract.InputValDerived3(b3)!=7+8+9, "InputValDerived3() failed");
+
+ check(multiple_inheritance_abstract.InputRefDerived1(b1)!=103+104, "InputRefDerived1() failed");
+ check(multiple_inheritance_abstract.InputRefDerived2(b2)!=206+205, "InputRefDerived2() failed");
+ check(multiple_inheritance_abstract.InputRefDerived3(b3)!=307+308+309, "InputRefDerived3() failed");
+
+ check(multiple_inheritance_abstract.InputPtrDerived1(b1)!=103+104, "InputPtrDerived1() failed");
+ check(multiple_inheritance_abstract.InputPtrDerived2(b2)!=206+205, "InputPtrDerived2() failed");
+ check(multiple_inheritance_abstract.InputPtrDerived3(b3)!=307+308+309, "InputPtrDerived3() failed");
+
+ check(multiple_inheritance_abstract.InputCPtrRefDerived1(b1)!=103+104, "InputCPtrRefDerived1() failed");
+ check(multiple_inheritance_abstract.InputCPtrRefDerived2(b2)!=206+205, "InputCPtrRefDerived2() failed");
+ check(multiple_inheritance_abstract.InputCPtrRefDerived3(b3)!=307+308+309, "InputCPtrRefDerived3() failed");
+
+ //Bottom classes as Bottom parameters
+ check(multiple_inheritance_abstract.InputValBottom1(b1)!=103+104, "InputValBottom1() failed");
+ check(multiple_inheritance_abstract.InputValBottom2(b2)!=206+205, "InputValBottom2() failed");
+ check(multiple_inheritance_abstract.InputValBottom3(b3)!=307+308+309, "InputValBottom3() failed");
+
+ check(multiple_inheritance_abstract.InputRefBottom1(b1)!=103+104, "InputRefBottom1() failed");
+ check(multiple_inheritance_abstract.InputRefBottom2(b2)!=206+205, "InputRefBottom2() failed");
+ check(multiple_inheritance_abstract.InputRefBottom3(b3)!=307+308+309, "InputRefBottom3() failed");
+
+ check(multiple_inheritance_abstract.InputPtrBottom1(b1)!=103+104, "InputPtrBottom1() failed");
+ check(multiple_inheritance_abstract.InputPtrBottom2(b2)!=206+205, "InputPtrBottom2() failed");
+ check(multiple_inheritance_abstract.InputPtrBottom3(b3)!=307+308+309, "InputPtrBottom3() failed");
+
+ check(multiple_inheritance_abstract.InputCPtrRefBottom1(b1)!=103+104, "InputCPtrRefBottom1() failed");
+ check(multiple_inheritance_abstract.InputCPtrRefBottom2(b2)!=206+205, "InputCPtrRefBottom2() failed");
+ check(multiple_inheritance_abstract.InputCPtrRefBottom3(b3)!=307+308+309, "InputCPtrRefBottom3() failed");
+ // Return pointers
+ check(multiple_inheritance_abstract.MakePtrDerived1_CBase1().cbase1y()!=3, "MakePtrDerived1_CBase1 failed");
+ check(multiple_inheritance_abstract.MakePtrDerived1_CBase2().cbase2()!=4, "MakePtrDerived1_CBase2 failed");
+ check(multiple_inheritance_abstract.MakePtrDerived2_CBase1().cbase1y()!=6, "MakePtrDerived2_CBase1 failed");
+ check(multiple_inheritance_abstract.MakePtrDerived2_ABase1().abase1()!=5, "MakePtrDerived2_ABase1 failed");
+ check(multiple_inheritance_abstract.MakePtrDerived3_ABase1().abase1()!=9, "MakePtrDerived3_ABase1 failed");
+ check(multiple_inheritance_abstract.MakePtrDerived3_CBase1().cbase1y()!=7, "MakePtrDerived3_CBase1 failed");
+ check(multiple_inheritance_abstract.MakePtrDerived3_CBase2().cbase2()!=8, "MakePtrDerived3_CBase2 failed");
+
+ // Return references
+ check(multiple_inheritance_abstract.MakeRefDerived1_CBase1().cbase1y()!=3, "MakeRefDerived1_CBase1 failed");
+ check(multiple_inheritance_abstract.MakeRefDerived1_CBase2().cbase2()!=4, "MakeRefDerived1_CBase2 failed");
+ check(multiple_inheritance_abstract.MakeRefDerived2_CBase1().cbase1y()!=6, "MakeRefDerived2_CBase1 failed");
+ check(multiple_inheritance_abstract.MakeRefDerived2_ABase1().abase1()!=5, "MakeRefDerived2_ABase1 failed");
+ check(multiple_inheritance_abstract.MakeRefDerived3_ABase1().abase1()!=9, "MakeRefDerived3_ABase1 failed");
+ check(multiple_inheritance_abstract.MakeRefDerived3_CBase1().cbase1y()!=7, "MakeRefDerived3_CBase1 failed");
+ check(multiple_inheritance_abstract.MakeRefDerived3_CBase2().cbase2()!=8, "MakeRefDerived3_CBase2 failed");
+
+ // Return by value (sliced objects)
+ check(multiple_inheritance_abstract.MakeValDerived1_CBase1().cbase1y()!=1, "MakeValDerived1_CBase1 failed");
+ check(multiple_inheritance_abstract.MakeValDerived1_CBase2().cbase2()!=2, "MakeValDerived1_CBase2 failed");
+ check(multiple_inheritance_abstract.MakeValDerived2_CBase1().cbase1y()!=1, "MakeValDerived2_CBase1 failed");
+ check(multiple_inheritance_abstract.MakeValDerived3_CBase1().cbase1y()!=1, "MakeValDerived3_CBase1 failed");
+ check(multiple_inheritance_abstract.MakeValDerived3_CBase2().cbase2()!=2, "MakeValDerived3_CBase2 failed");
+
+ }
+}
diff --git a/Examples/test-suite/csharp/multiple_inheritance_interfaces_runme.cs b/Examples/test-suite/csharp/multiple_inheritance_interfaces_runme.cs
new file mode 100644
index 000000000..c786ff9b3
--- /dev/null
+++ b/Examples/test-suite/csharp/multiple_inheritance_interfaces_runme.cs
@@ -0,0 +1,87 @@
+using System;
+using System.Collections.Generic;
+using multiple_inheritance_interfacesNamespace;
+
+public class multiple_inheritance_interfaces_runme {
+
+ static string SortArrayToString(string[] types) {
+ Array.Sort<string>(types);
+ return string.Join(" ", types);
+ }
+
+ static string SortArrayToString(Type[] types) {
+ List<string> stypes = new List<string>();
+ foreach (Type t in types)
+ stypes.Add(t.Name);
+ return SortArrayToString(stypes.ToArray());
+ }
+
+
+ private static void checkBaseAndInterfaces(Type cls, bool interfaceExpected, string baseClass, string[] interfaces) {
+ string[] expectedInterfaces = new string[interfaces.Length + (interfaceExpected ? 0 : 1)];
+ for (int i=0; i<interfaces.Length; ++i)
+ expectedInterfaces[i] = interfaces[i];
+ if (!interfaceExpected)
+ expectedInterfaces[interfaces.Length] = "IDisposable";
+ Type[] actualInterfaces = cls.GetInterfaces();
+ string expectedInterfacesString = SortArrayToString(expectedInterfaces);
+ string actualInterfacesString = SortArrayToString(actualInterfaces);
+ if (expectedInterfacesString != actualInterfacesString)
+ throw new Exception("Expected interfaces for " + cls.Name + ": \n" + expectedInterfacesString + "\n" + "Actual interfaces: \n" + actualInterfacesString);
+
+ string expectedBaseString = null;
+ if (interfaceExpected) {
+ // expecting an interface
+ if (!cls.IsInterface)
+ throw new Exception(cls.Name + " should be an interface but is not");
+ expectedBaseString = string.IsNullOrEmpty(baseClass) ? "" : "multiple_inheritance_interfacesNamespace." + baseClass;
+ } else {
+ // expecting a class
+ if (cls.IsInterface)
+ throw new Exception(cls.Name + " is an interface but it should not be");
+ expectedBaseString = string.IsNullOrEmpty(baseClass) ? "Object" : baseClass;
+ }
+
+ string actualBaseString = cls.BaseType == null ? "" : cls.BaseType.Name;
+ if (expectedBaseString != actualBaseString)
+ throw new Exception("Expected base for " + cls.Name + ": [" + expectedBaseString + "]" + " Actual base: [" + actualBaseString + "]");
+ }
+
+ public static void Main() {
+ // Note that we can't get just the immediate interface
+ // Type.GetInterfaces() returns all interfaces up the inheritance hierarchy
+ checkBaseAndInterfaces(typeof(IA), true, "", new string[] {});
+ checkBaseAndInterfaces(typeof(IB), true, "", new string[] {});
+ checkBaseAndInterfaces(typeof(IC), true, "", new string[] {"IA", "IB"});
+ checkBaseAndInterfaces(typeof(A), false, "", new string[] {"IA"});
+ checkBaseAndInterfaces(typeof(B), false, "", new string[] {"IB"});
+ checkBaseAndInterfaces(typeof(C), false, "", new string[] {"IA", "IB", "IC"});
+ checkBaseAndInterfaces(typeof(D), false, "", new string[] {"IA", "IB", "IC"});
+ checkBaseAndInterfaces(typeof(E), false, "D", new string[] {"IA", "IB", "IC"});
+
+ checkBaseAndInterfaces(typeof(IJ), true, "", new string[] {});
+ checkBaseAndInterfaces(typeof(IK), true, "", new string[] {"IJ"});
+ checkBaseAndInterfaces(typeof(IL), true, "", new string[] {"IJ", "IK"});
+ checkBaseAndInterfaces(typeof(J), false, "", new string[] {"IJ"});
+ checkBaseAndInterfaces(typeof(K), false, "", new string[] {"IJ", "IK"});
+ checkBaseAndInterfaces(typeof(L), false, "", new string[] {"IJ", "IK", "IL"});
+ checkBaseAndInterfaces(typeof(M), false, "", new string[] {"IJ", "IK", "IL"});
+
+ checkBaseAndInterfaces(typeof(P), false, "", new string[] {});
+ checkBaseAndInterfaces(typeof(IQ), true, "", new string[] {});
+ checkBaseAndInterfaces(typeof(Q), false, "", new string[] {"IQ"});
+ checkBaseAndInterfaces(typeof(R), false, "P", new string[] {"IQ"});
+ checkBaseAndInterfaces(typeof(S), false, "P", new string[] {"IQ"});
+ checkBaseAndInterfaces(typeof(T), false, "", new string[] {"IQ"});
+ checkBaseAndInterfaces(typeof(U), false, "R", new string[] {"IQ"});
+ checkBaseAndInterfaces(typeof(V), false, "S", new string[] {"IQ"});
+ checkBaseAndInterfaces(typeof(W), false, "T", new string[] {"IQ"});
+
+ // overloaded methods check
+ D d = new D();
+ d.ia();
+ d.ia(10);
+ d.ia("bye");
+ d.ia("bye", false);
+ }
+}
diff --git a/Examples/test-suite/csharp/multiple_inheritance_nspace_runme.cs b/Examples/test-suite/csharp/multiple_inheritance_nspace_runme.cs
new file mode 100644
index 000000000..6ed13a6ff
--- /dev/null
+++ b/Examples/test-suite/csharp/multiple_inheritance_nspace_runme.cs
@@ -0,0 +1,246 @@
+using System;
+using multiple_inheritance_nspaceNamespace;
+using multiple_inheritance_nspaceNamespace.Space;
+
+public class multiple_inheritance_nspace_runme {
+
+ //Test base class as a parameter in C#
+ int jcbase1b(CBase1SwigInterface cb1){
+ return cb1.cbase1y();
+ }
+ int jabase1(ABase1SwigInterface ab1){
+ return ab1.abase1();
+ }
+ int jcbase2(CBase2SwigInterface cb2){
+ return cb2.cbase2();
+ }
+
+ public static void check(bool fail, string msg) {
+ if (fail)
+ throw new Exception(msg);
+ }
+
+ public static void Main() {
+ //Test Derived1
+ Derived1 d1=new Derived1();
+ check(d1.cbase1y()!=3, "Derived1::cbase1y() failed");
+ check(d1.cbase2()!=4, "Derived1::cbase2() failed");
+
+ //Test Derived2
+ Derived2 d2=new Derived2();
+ check(d2.cbase1y()!=6, "Derived2::cbase1y() failed");
+ check(d2.abase1()!=5, "Derived2::abase1() failed");
+
+ //Test Derived3
+ Derived3 d3=new Derived3();
+ check(d3.cbase1y()!=7, "Derived3::cbase1y() failed");
+ check(d3.cbase2()!=8, "Derived3::cbase2() failed");
+ check(d3.abase1()!=9, "Derived3::abase1() failed");
+
+ //Test Bottom1
+ Bottom1 b1=new Bottom1();
+ check(b1.cbase1y()!=103, "Bottom1::cbase1y() failed");
+ check(b1.cbase2()!=104, "Bottom1::cbase2() failed");
+
+ //Test Bottom2
+ Bottom2 b2=new Bottom2();
+ check(b2.cbase1y()!=206, "Bottom2::cbase1y() failed");
+ check(b2.abase1()!=205, "Bottom2::abase1() failed");
+
+ //Test Bottom3
+ Bottom3 b3=new Bottom3();
+ check(b3.cbase1y()!=307, "Bottom3::cbase1y() failed");
+ check(b3.cbase2()!=308, "Bottom3::cbase2() failed");
+ check(b3.abase1()!=309, "Bottom3::abase1() failed");
+
+ //Test interfaces from c++ classes
+ CBase1SwigInterface cb1=new CBase1();
+ CBase2SwigInterface cb2=new CBase2();
+ check(cb1.cbase1y()!=1, "CBase1::cbase1y() failed");
+ check(cb2.cbase2()!=2, "CBase2::cbase2() failed");
+
+ //Test nspace class as return value
+ ABase1SwigInterface ab1=d3.cloneit();
+ check(ab1.abase1()!=9, "Derived3::abase1() through ABase1 failed");
+
+ //Test concrete base class as return value
+ CBase1SwigInterface cb6=d2.cloneit();
+ CBase2SwigInterface cb7=d1.cloneit();
+ check(cb6.cbase1y()!=6, "Derived2::cbase1y() through CBase1 failed");
+ check(cb7.cbase2()!=4, "Derived1:cbase2() through ABase1 failed");
+
+ //Test multi inheritance
+ CBase1SwigInterface cb3=new Derived1();
+ CBase1SwigInterface cb4=new Derived3();
+ CBase2SwigInterface cb5=new Derived3();
+ ABase1SwigInterface ab6=new Derived2();
+ check(cb3.cbase1y()!=3, "Derived1::cbase1y() through CBase1 failed");
+ check(cb4.cbase1y()!=7, "Derived3::cbase1y() through CBase1 failed");
+ check(cb5.cbase2()!=8, "Derived3::cbase2() through CBase2 failed");
+ check(ab6.abase1()!=5, "Derived2::abase1() through ABase1 failed");
+
+ //Test base classes as parameter in C#
+ multiple_inheritance_nspace_runme mhar=new multiple_inheritance_nspace_runme();
+ check(mhar.jcbase1b(d1)!=3, "jcbase1b() through Derived1 as parameter failed");
+ check(mhar.jcbase1b(d2)!=6, "jcbase1b() through Derived2 as parameter failed");
+ check(mhar.jcbase1b(d3)!=7, "jcbase1b() through Derived3 as parameter failed");
+ check(mhar.jcbase2(d1)!=4, "jcbase2() through Derived1 as parameter failed");
+ check(mhar.jcbase2(d3)!=8, "jcbase2() through Derived3 as parameter failed");
+ check(mhar.jabase1(d2)!=5, "jabase1() through Derived2 as parameter failed");
+ check(mhar.jabase1(d3)!=9, "jabase1() through Derived3 as parameter failed");
+
+ //Value parameters
+ //Test CBase1 CBase2 as parameters (note slicing for Derived and Bottom classes)
+ check(multiple_inheritance_nspace.InputValCBase1(d1)!=1, "InputValCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase1(d2)!=1, "InputValCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase1(d3)!=1, "InputValCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase2(d3)!=2, "InputValCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase2(d1)!=2, "InputValCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase1(cb1)!=1, "InputValCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase2(cb2)!=2, "InputValCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase1(b1)!=1, "InputValCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase1(b2)!=1, "InputValCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase1(b3)!=1, "InputValCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase2(b3)!=2, "InputValCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase2(b1)!=2, "InputValCBase2(), Bottom1 as a parameter failed");
+
+ //Pointer parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_nspace.InputPtrABase1(d2)!=5, "InputPtrABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrABase1(d3)!=9, "InputPtrABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrABase1(b2)!=205, "InputPtrABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrABase1(b3)!=309, "InputPtrABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_nspace.InputPtrCBase1(d1)!=3, "InputPtrCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase1(d2)!=6, "InputPtrCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase1(d3)!=7, "InputPtrCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase2(d3)!=8, "InputPtrCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase2(d1)!=4, "InputPtrCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase1(cb1)!=1, "InputPtrCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase2(cb2)!=2, "InputPtrCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase1(b1)!=103, "InputPtrCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase1(b2)!=206, "InputPtrCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase1(b3)!=307, "InputPtrCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase2(b3)!=308, "InputPtrCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase2(b1)!=104, "InputPtrCBase2(), Bottom1 as a parameter failed");
+
+ //Reference parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_nspace.InputRefABase1(d2)!=5, "InputRefABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefABase1(d3)!=9, "InputRefABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefABase1(b2)!=205, "InputRefABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefABase1(b3)!=309, "InputRefABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_nspace.InputRefCBase1(d1)!=3, "InputRefCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase1(d2)!=6, "InputRefCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase1(d3)!=7, "InputRefCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase2(d3)!=8, "InputRefCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase2(d1)!=4, "InputRefCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase1(cb1)!=1, "InputRefCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase2(cb2)!=2, "InputRefCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase1(b1)!=103, "InputRefCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase1(b2)!=206, "InputRefCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase1(b3)!=307, "InputRefCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase2(b3)!=308, "InputRefCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase2(b1)!=104, "InputRefCBase2(), Bottom1 as a parameter failed");
+
+ //Const reference pointer parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_nspace.InputCPtrRefABase1(d2)!=5, "InputCPtrRefABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefABase1(d3)!=9, "InputCPtrRefABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefABase1(b2)!=205, "InputCPtrRefABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefABase1(b3)!=309, "InputCPtrRefABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_nspace.InputCPtrRefCBase1(d1)!=3, "InputCPtrRefCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase1(d2)!=6, "InputCPtrRefCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase1(d3)!=7, "InputCPtrRefCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase2(d3)!=8, "InputCPtrRefCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase2(d1)!=4, "InputCPtrRefCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase1(cb1)!=1, "InputCPtrRefCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase2(cb2)!=2, "InputCPtrRefCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase1(b1)!=103, "InputCPtrRefCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase1(b2)!=206, "InputCPtrRefCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase1(b3)!=307, "InputCPtrRefCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase2(b3)!=308, "InputCPtrRefCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase2(b1)!=104, "InputCPtrRefCBase2(), Bottom1 as a parameter failed");
+
+ //Derived classes as parameters
+ check(multiple_inheritance_nspace.InputValDerived1(d1)!=3+4, "InputValDerived1() failed");
+ check(multiple_inheritance_nspace.InputValDerived2(d2)!=6+5, "InputValDerived2() failed");
+ check(multiple_inheritance_nspace.InputValDerived3(d3)!=7+8+9, "InputValDerived3() failed");
+
+ check(multiple_inheritance_nspace.InputRefDerived1(d1)!=3+4, "InputRefDerived1() failed");
+ check(multiple_inheritance_nspace.InputRefDerived2(d2)!=6+5, "InputRefDerived2() failed");
+ check(multiple_inheritance_nspace.InputRefDerived3(d3)!=7+8+9, "InputRefDerived3() failed");
+
+ check(multiple_inheritance_nspace.InputPtrDerived1(d1)!=3+4, "InputPtrDerived1() failed");
+ check(multiple_inheritance_nspace.InputPtrDerived2(d2)!=6+5, "InputPtrDerived2() failed");
+ check(multiple_inheritance_nspace.InputPtrDerived3(d3)!=7+8+9, "InputPtrDerived3() failed");
+
+ check(multiple_inheritance_nspace.InputCPtrRefDerived1(d1)!=3+4, "InputCPtrRefDerived1() failed");
+ check(multiple_inheritance_nspace.InputCPtrRefDerived2(d2)!=6+5, "InputCPtrRefDerived2() failed");
+ check(multiple_inheritance_nspace.InputCPtrRefDerived3(d3)!=7+8+9, "InputCPtrRefDerived3() failed");
+
+ //Bottom classes as Derived parameters
+ check(multiple_inheritance_nspace.InputValDerived1(b1)!=3+4, "InputValDerived1() failed");
+ check(multiple_inheritance_nspace.InputValDerived2(b2)!=6+5, "InputValDerived2() failed");
+ check(multiple_inheritance_nspace.InputValDerived3(b3)!=7+8+9, "InputValDerived3() failed");
+
+ check(multiple_inheritance_nspace.InputRefDerived1(b1)!=103+104, "InputRefDerived1() failed");
+ check(multiple_inheritance_nspace.InputRefDerived2(b2)!=206+205, "InputRefDerived2() failed");
+ check(multiple_inheritance_nspace.InputRefDerived3(b3)!=307+308+309, "InputRefDerived3() failed");
+
+ check(multiple_inheritance_nspace.InputPtrDerived1(b1)!=103+104, "InputPtrDerived1() failed");
+ check(multiple_inheritance_nspace.InputPtrDerived2(b2)!=206+205, "InputPtrDerived2() failed");
+ check(multiple_inheritance_nspace.InputPtrDerived3(b3)!=307+308+309, "InputPtrDerived3() failed");
+
+ check(multiple_inheritance_nspace.InputCPtrRefDerived1(b1)!=103+104, "InputCPtrRefDerived1() failed");
+ check(multiple_inheritance_nspace.InputCPtrRefDerived2(b2)!=206+205, "InputCPtrRefDerived2() failed");
+ check(multiple_inheritance_nspace.InputCPtrRefDerived3(b3)!=307+308+309, "InputCPtrRefDerived3() failed");
+
+ //Bottom classes as Bottom parameters
+ check(multiple_inheritance_nspace.InputValBottom1(b1)!=103+104, "InputValBottom1() failed");
+ check(multiple_inheritance_nspace.InputValBottom2(b2)!=206+205, "InputValBottom2() failed");
+ check(multiple_inheritance_nspace.InputValBottom3(b3)!=307+308+309, "InputValBottom3() failed");
+
+ check(multiple_inheritance_nspace.InputRefBottom1(b1)!=103+104, "InputRefBottom1() failed");
+ check(multiple_inheritance_nspace.InputRefBottom2(b2)!=206+205, "InputRefBottom2() failed");
+ check(multiple_inheritance_nspace.InputRefBottom3(b3)!=307+308+309, "InputRefBottom3() failed");
+
+ check(multiple_inheritance_nspace.InputPtrBottom1(b1)!=103+104, "InputPtrBottom1() failed");
+ check(multiple_inheritance_nspace.InputPtrBottom2(b2)!=206+205, "InputPtrBottom2() failed");
+ check(multiple_inheritance_nspace.InputPtrBottom3(b3)!=307+308+309, "InputPtrBottom3() failed");
+
+ check(multiple_inheritance_nspace.InputCPtrRefBottom1(b1)!=103+104, "InputCPtrRefBottom1() failed");
+ check(multiple_inheritance_nspace.InputCPtrRefBottom2(b2)!=206+205, "InputCPtrRefBottom2() failed");
+ check(multiple_inheritance_nspace.InputCPtrRefBottom3(b3)!=307+308+309, "InputCPtrRefBottom3() failed");
+ // Return pointers
+ check(multiple_inheritance_nspace.MakePtrDerived1_CBase1().cbase1y()!=3, "MakePtrDerived1_CBase1 failed");
+ check(multiple_inheritance_nspace.MakePtrDerived1_CBase2().cbase2()!=4, "MakePtrDerived1_CBase2 failed");
+ check(multiple_inheritance_nspace.MakePtrDerived2_CBase1().cbase1y()!=6, "MakePtrDerived2_CBase1 failed");
+ check(multiple_inheritance_nspace.MakePtrDerived2_ABase1().abase1()!=5, "MakePtrDerived2_ABase1 failed");
+ check(multiple_inheritance_nspace.MakePtrDerived3_ABase1().abase1()!=9, "MakePtrDerived3_ABase1 failed");
+ check(multiple_inheritance_nspace.MakePtrDerived3_CBase1().cbase1y()!=7, "MakePtrDerived3_CBase1 failed");
+ check(multiple_inheritance_nspace.MakePtrDerived3_CBase2().cbase2()!=8, "MakePtrDerived3_CBase2 failed");
+
+ // Return references
+ check(multiple_inheritance_nspace.MakeRefDerived1_CBase1().cbase1y()!=3, "MakeRefDerived1_CBase1 failed");
+ check(multiple_inheritance_nspace.MakeRefDerived1_CBase2().cbase2()!=4, "MakeRefDerived1_CBase2 failed");
+ check(multiple_inheritance_nspace.MakeRefDerived2_CBase1().cbase1y()!=6, "MakeRefDerived2_CBase1 failed");
+ check(multiple_inheritance_nspace.MakeRefDerived2_ABase1().abase1()!=5, "MakeRefDerived2_ABase1 failed");
+ check(multiple_inheritance_nspace.MakeRefDerived3_ABase1().abase1()!=9, "MakeRefDerived3_ABase1 failed");
+ check(multiple_inheritance_nspace.MakeRefDerived3_CBase1().cbase1y()!=7, "MakeRefDerived3_CBase1 failed");
+ check(multiple_inheritance_nspace.MakeRefDerived3_CBase2().cbase2()!=8, "MakeRefDerived3_CBase2 failed");
+
+ // Return by value (sliced objects)
+ check(multiple_inheritance_nspace.MakeValDerived1_CBase1().cbase1y()!=1, "MakeValDerived1_CBase1 failed");
+ check(multiple_inheritance_nspace.MakeValDerived1_CBase2().cbase2()!=2, "MakeValDerived1_CBase2 failed");
+ check(multiple_inheritance_nspace.MakeValDerived2_CBase1().cbase1y()!=1, "MakeValDerived2_CBase1 failed");
+ check(multiple_inheritance_nspace.MakeValDerived3_CBase1().cbase1y()!=1, "MakeValDerived3_CBase1 failed");
+ check(multiple_inheritance_nspace.MakeValDerived3_CBase2().cbase2()!=2, "MakeValDerived3_CBase2 failed");
+
+ }
+}
diff --git a/Examples/test-suite/csharp/multiple_inheritance_shared_ptr_runme.cs b/Examples/test-suite/csharp/multiple_inheritance_shared_ptr_runme.cs
new file mode 100644
index 000000000..13ffc62a4
--- /dev/null
+++ b/Examples/test-suite/csharp/multiple_inheritance_shared_ptr_runme.cs
@@ -0,0 +1,329 @@
+using System;
+using multiple_inheritance_shared_ptrNamespace;
+
+public class multiple_inheritance_shared_ptr_runme {
+
+ //Test base class as a parameter in C#
+ int jcbase1b(CBase1 cb1){
+ return cb1.cbase1y();
+ }
+ int jabase1(ABase1 ab1){
+ return ab1.abase1();
+ }
+ int jcbase2(CBase2 cb2){
+ return cb2.cbase2();
+ }
+
+ public static void check(bool fail, string msg) {
+ if (fail)
+ throw new Exception(msg);
+ }
+
+ public static void Main() {
+ //Test Derived1
+ Derived1 d1=new Derived1();
+ check(d1.cbase1y()!=3, "Derived1::cbase1y() failed");
+ check(d1.cbase2()!=4, "Derived1::cbase2() failed");
+
+ //Test Derived2
+ Derived2 d2=new Derived2();
+ check(d2.cbase1y()!=6, "Derived2::cbase1y() failed");
+ check(d2.abase1()!=5, "Derived2::abase1() failed");
+
+ //Test Derived3
+ Derived3 d3=new Derived3();
+ check(d3.cbase1y()!=7, "Derived3::cbase1y() failed");
+ check(d3.cbase2()!=8, "Derived3::cbase2() failed");
+ check(d3.abase1()!=9, "Derived3::abase1() failed");
+
+ //Test Bottom1
+ Bottom1 b1=new Bottom1();
+ check(b1.cbase1y()!=103, "Bottom1::cbase1y() failed");
+ check(b1.cbase2()!=104, "Bottom1::cbase2() failed");
+
+ //Test Bottom2
+ Bottom2 b2=new Bottom2();
+ check(b2.cbase1y()!=206, "Bottom2::cbase1y() failed");
+ check(b2.abase1()!=205, "Bottom2::abase1() failed");
+
+ //Test Bottom3
+ Bottom3 b3=new Bottom3();
+ check(b3.cbase1y()!=307, "Bottom3::cbase1y() failed");
+ check(b3.cbase2()!=308, "Bottom3::cbase2() failed");
+ check(b3.abase1()!=309, "Bottom3::abase1() failed");
+
+ //Test interfaces from c++ classes
+ CBase1 cb1=new CBase1SwigImpl();
+ CBase2 cb2=new CBase2SwigImpl();
+ check(cb1.cbase1y()!=1, "CBase1::cbase1y() failed");
+ check(cb2.cbase2()!=2, "CBase2::cbase2() failed");
+
+ //Test abstract class as return value
+ ABase1 ab1=d3.cloneit();
+ check(ab1.abase1()!=9, "Derived3::abase1() through ABase1 failed");
+
+ //Test concrete base class as return value
+ CBase1 cb6=d2.cloneit();
+ CBase2 cb7=d1.cloneit();
+ check(cb6.cbase1y()!=6, "Derived2::cbase1y() through CBase1 failed");
+ check(cb7.cbase2()!=4, "Derived1:cbase2() through ABase1 failed");
+
+ //Test multi inheritance
+ CBase1 cb3=new Derived1();
+ CBase1 cb4=new Derived3();
+ CBase2 cb5=new Derived3();
+ ABase1 ab6=new Derived2();
+ check(cb3.cbase1y()!=3, "Derived1::cbase1y() through CBase1 failed");
+ check(cb4.cbase1y()!=7, "Derived3::cbase1y() through CBase1 failed");
+ check(cb5.cbase2()!=8, "Derived3::cbase2() through CBase2 failed");
+ check(ab6.abase1()!=5, "Derived2::abase1() through ABase1 failed");
+
+ //Test base classes as parameter in C#
+ multiple_inheritance_shared_ptr_runme mhar=new multiple_inheritance_shared_ptr_runme();
+ check(mhar.jcbase1b(d1)!=3, "jcbase1b() through Derived1 as parameter failed");
+ check(mhar.jcbase1b(d2)!=6, "jcbase1b() through Derived2 as parameter failed");
+ check(mhar.jcbase1b(d3)!=7, "jcbase1b() through Derived3 as parameter failed");
+ check(mhar.jcbase2(d1)!=4, "jcbase2() through Derived1 as parameter failed");
+ check(mhar.jcbase2(d3)!=8, "jcbase2() through Derived3 as parameter failed");
+ check(mhar.jabase1(d2)!=5, "jabase1() through Derived2 as parameter failed");
+ check(mhar.jabase1(d3)!=9, "jabase1() through Derived3 as parameter failed");
+
+ //Value parameters
+ //Test CBase1 CBase2 as parameters (note slicing for Derived and Bottom classes)
+ check(multiple_inheritance_shared_ptr.InputValCBase1(d1)!=1, "InputValCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase1(d2)!=1, "InputValCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase1(d3)!=1, "InputValCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase2(d3)!=2, "InputValCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase2(d1)!=2, "InputValCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase1(cb1)!=1, "InputValCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase2(cb2)!=2, "InputValCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase1(b1)!=1, "InputValCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase1(b2)!=1, "InputValCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase1(b3)!=1, "InputValCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase2(b3)!=2, "InputValCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase2(b1)!=2, "InputValCBase2(), Bottom1 as a parameter failed");
+
+ //Pointer parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_shared_ptr.InputPtrABase1(d2)!=5, "InputPtrABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrABase1(d3)!=9, "InputPtrABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrABase1(b2)!=205, "InputPtrABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrABase1(b3)!=309, "InputPtrABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_shared_ptr.InputPtrCBase1(d1)!=3, "InputPtrCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase1(d2)!=6, "InputPtrCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase1(d3)!=7, "InputPtrCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase2(d3)!=8, "InputPtrCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase2(d1)!=4, "InputPtrCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase1(cb1)!=1, "InputPtrCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase2(cb2)!=2, "InputPtrCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase1(b1)!=103, "InputPtrCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase1(b2)!=206, "InputPtrCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase1(b3)!=307, "InputPtrCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase2(b3)!=308, "InputPtrCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase2(b1)!=104, "InputPtrCBase2(), Bottom1 as a parameter failed");
+
+ //Reference parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_shared_ptr.InputRefABase1(d2)!=5, "InputRefABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefABase1(d3)!=9, "InputRefABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefABase1(b2)!=205, "InputRefABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefABase1(b3)!=309, "InputRefABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_shared_ptr.InputRefCBase1(d1)!=3, "InputRefCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase1(d2)!=6, "InputRefCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase1(d3)!=7, "InputRefCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase2(d3)!=8, "InputRefCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase2(d1)!=4, "InputRefCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase1(cb1)!=1, "InputRefCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase2(cb2)!=2, "InputRefCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase1(b1)!=103, "InputRefCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase1(b2)!=206, "InputRefCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase1(b3)!=307, "InputRefCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase2(b3)!=308, "InputRefCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase2(b1)!=104, "InputRefCBase2(), Bottom1 as a parameter failed");
+
+ //Const reference pointer parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_shared_ptr.InputCPtrRefABase1(d2)!=5, "InputCPtrRefABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefABase1(d3)!=9, "InputCPtrRefABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefABase1(b2)!=205, "InputCPtrRefABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefABase1(b3)!=309, "InputCPtrRefABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase1(d1)!=3, "InputCPtrRefCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase1(d2)!=6, "InputCPtrRefCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase1(d3)!=7, "InputCPtrRefCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase2(d3)!=8, "InputCPtrRefCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase2(d1)!=4, "InputCPtrRefCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase1(cb1)!=1, "InputCPtrRefCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase2(cb2)!=2, "InputCPtrRefCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase1(b1)!=103, "InputCPtrRefCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase1(b2)!=206, "InputCPtrRefCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase1(b3)!=307, "InputCPtrRefCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase2(b3)!=308, "InputCPtrRefCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase2(b1)!=104, "InputCPtrRefCBase2(), Bottom1 as a parameter failed");
+
+ //Shared pointer parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_shared_ptr.InputSharedPtrABase1(d2)!=5, "InputSharedPtrABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrABase1(d3)!=9, "InputSharedPtrABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrABase1(b2)!=205, "InputSharedPtrABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrABase1(b3)!=309, "InputSharedPtrABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase1(d1)!=3, "InputSharedPtrCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase1(d2)!=6, "InputSharedPtrCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase1(d3)!=7, "InputSharedPtrCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase2(d3)!=8, "InputSharedPtrCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase2(d1)!=4, "InputSharedPtrCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase1(cb1)!=1, "InputSharedPtrCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase2(cb2)!=2, "InputSharedPtrCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase1(b1)!=103, "InputSharedPtrCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase1(b2)!=206, "InputSharedPtrCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase1(b3)!=307, "InputSharedPtrCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase2(b3)!=308, "InputSharedPtrCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase2(b1)!=104, "InputSharedPtrCBase2(), Bottom1 as a parameter failed");
+
+ //Shared pointer reference parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefABase1(d2)!=5, "InputSharedPtrRefABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefABase1(d3)!=9, "InputSharedPtrRefABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefABase1(b2)!=205, "InputSharedPtrRefABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefABase1(b3)!=309, "InputSharedPtrRefABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase1(d1)!=3, "InputSharedPtrRefCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase1(d2)!=6, "InputSharedPtrRefCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase1(d3)!=7, "InputSharedPtrRefCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase2(d3)!=8, "InputSharedPtrRefCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase2(d1)!=4, "InputSharedPtrRefCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase1(cb1)!=1, "InputSharedPtrRefCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase2(cb2)!=2, "InputSharedPtrRefCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase1(b1)!=103, "InputSharedPtrRefCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase1(b2)!=206, "InputSharedPtrRefCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase1(b3)!=307, "InputSharedPtrRefCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase2(b3)!=308, "InputSharedPtrRefCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase2(b1)!=104, "InputSharedPtrRefCBase2(), Bottom1 as a parameter failed");
+
+ //Derived classes as parameters
+ check(multiple_inheritance_shared_ptr.InputValDerived1(d1)!=3+4, "InputValDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputValDerived2(d2)!=6+5, "InputValDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputValDerived3(d3)!=7+8+9, "InputValDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputRefDerived1(d1)!=3+4, "InputRefDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputRefDerived2(d2)!=6+5, "InputRefDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputRefDerived3(d3)!=7+8+9, "InputRefDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputPtrDerived1(d1)!=3+4, "InputPtrDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputPtrDerived2(d2)!=6+5, "InputPtrDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputPtrDerived3(d3)!=7+8+9, "InputPtrDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputCPtrRefDerived1(d1)!=3+4, "InputCPtrRefDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefDerived2(d2)!=6+5, "InputCPtrRefDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefDerived3(d3)!=7+8+9, "InputCPtrRefDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputSharedPtrDerived1(d1)!=3+4, "InputSharedPtrDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrDerived2(d2)!=6+5, "InputSharedPtrDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrDerived3(d3)!=7+8+9, "InputSharedPtrDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefDerived1(d1)!=3+4, "InputSharedPtrRefDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefDerived2(d2)!=6+5, "InputSharedPtrRefDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefDerived3(d3)!=7+8+9, "InputSharedPtrRefDerived3() failed");
+
+ //Bottom classes as Derived parameters
+ check(multiple_inheritance_shared_ptr.InputValDerived1(b1)!=3+4, "InputValDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputValDerived2(b2)!=6+5, "InputValDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputValDerived3(b3)!=7+8+9, "InputValDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputRefDerived1(b1)!=103+104, "InputRefDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputRefDerived2(b2)!=206+205, "InputRefDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputRefDerived3(b3)!=307+308+309, "InputRefDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputPtrDerived1(b1)!=103+104, "InputPtrDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputPtrDerived2(b2)!=206+205, "InputPtrDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputPtrDerived3(b3)!=307+308+309, "InputPtrDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputCPtrRefDerived1(b1)!=103+104, "InputCPtrRefDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefDerived2(b2)!=206+205, "InputCPtrRefDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefDerived3(b3)!=307+308+309, "InputCPtrRefDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputSharedPtrDerived1(b1)!=103+104, "InputSharedPtrDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrDerived2(b2)!=206+205, "InputSharedPtrDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrDerived3(b3)!=307+308+309, "InputSharedPtrDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefDerived1(b1)!=103+104, "InputSharedPtrRefDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefDerived2(b2)!=206+205, "InputSharedPtrRefDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefDerived3(b3)!=307+308+309, "InputSharedPtrRefDerived3() failed");
+
+ //Bottom classes as Bottom parameters
+ check(multiple_inheritance_shared_ptr.InputValBottom1(b1)!=103+104, "InputValBottom1() failed");
+ check(multiple_inheritance_shared_ptr.InputValBottom2(b2)!=206+205, "InputValBottom2() failed");
+ check(multiple_inheritance_shared_ptr.InputValBottom3(b3)!=307+308+309, "InputValBottom3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputRefBottom1(b1)!=103+104, "InputRefBottom1() failed");
+ check(multiple_inheritance_shared_ptr.InputRefBottom2(b2)!=206+205, "InputRefBottom2() failed");
+ check(multiple_inheritance_shared_ptr.InputRefBottom3(b3)!=307+308+309, "InputRefBottom3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputPtrBottom1(b1)!=103+104, "InputPtrBottom1() failed");
+ check(multiple_inheritance_shared_ptr.InputPtrBottom2(b2)!=206+205, "InputPtrBottom2() failed");
+ check(multiple_inheritance_shared_ptr.InputPtrBottom3(b3)!=307+308+309, "InputPtrBottom3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputCPtrRefBottom1(b1)!=103+104, "InputCPtrRefBottom1() failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefBottom2(b2)!=206+205, "InputCPtrRefBottom2() failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefBottom3(b3)!=307+308+309, "InputCPtrRefBottom3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputSharedPtrBottom1(b1)!=103+104, "InputSharedPtrBottom1() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrBottom2(b2)!=206+205, "InputSharedPtrBottom2() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrBottom3(b3)!=307+308+309, "InputSharedPtrBottom3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefBottom1(b1)!=103+104, "InputSharedPtrRefBottom1() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefBottom2(b2)!=206+205, "InputSharedPtrRefBottom2() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefBottom3(b3)!=307+308+309, "InputSharedPtrRefBottom3() failed");
+
+ // Return pointers
+ check(multiple_inheritance_shared_ptr.MakePtrDerived1_CBase1().cbase1y()!=3, "MakePtrDerived1_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakePtrDerived1_CBase2().cbase2()!=4, "MakePtrDerived1_CBase2 failed");
+ check(multiple_inheritance_shared_ptr.MakePtrDerived2_CBase1().cbase1y()!=6, "MakePtrDerived2_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakePtrDerived2_ABase1().abase1()!=5, "MakePtrDerived2_ABase1 failed");
+ check(multiple_inheritance_shared_ptr.MakePtrDerived3_ABase1().abase1()!=9, "MakePtrDerived3_ABase1 failed");
+ check(multiple_inheritance_shared_ptr.MakePtrDerived3_CBase1().cbase1y()!=7, "MakePtrDerived3_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakePtrDerived3_CBase2().cbase2()!=8, "MakePtrDerived3_CBase2 failed");
+
+ // Return references
+ check(multiple_inheritance_shared_ptr.MakeRefDerived1_CBase1().cbase1y()!=3, "MakeRefDerived1_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeRefDerived1_CBase2().cbase2()!=4, "MakeRefDerived1_CBase2 failed");
+ check(multiple_inheritance_shared_ptr.MakeRefDerived2_CBase1().cbase1y()!=6, "MakeRefDerived2_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeRefDerived2_ABase1().abase1()!=5, "MakeRefDerived2_ABase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeRefDerived3_ABase1().abase1()!=9, "MakeRefDerived3_ABase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeRefDerived3_CBase1().cbase1y()!=7, "MakeRefDerived3_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeRefDerived3_CBase2().cbase2()!=8, "MakeRefDerived3_CBase2 failed");
+
+ // Return by value (sliced objects)
+ check(multiple_inheritance_shared_ptr.MakeValDerived1_CBase1().cbase1y()!=1, "MakeValDerived1_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeValDerived1_CBase2().cbase2()!=2, "MakeValDerived1_CBase2 failed");
+ check(multiple_inheritance_shared_ptr.MakeValDerived2_CBase1().cbase1y()!=1, "MakeValDerived2_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeValDerived3_CBase1().cbase1y()!=1, "MakeValDerived3_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeValDerived3_CBase2().cbase2()!=2, "MakeValDerived3_CBase2 failed");
+
+ // Return smart pointers
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrDerived1_CBase1().cbase1y()!=3, "MakeSharedPtrDerived1_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrDerived1_CBase2().cbase2()!=4, "MakeSharedPtrDerived1_CBase2 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrDerived2_CBase1().cbase1y()!=6, "MakeSharedPtrDerived2_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrDerived2_ABase1().abase1()!=5, "MakeSharedPtrDerived2_ABase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrDerived3_ABase1().abase1()!=9, "MakeSharedPtrDerived3_ABase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrDerived3_CBase1().cbase1y()!=7, "MakeSharedPtrDerived3_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrDerived3_CBase2().cbase2()!=8, "MakeSharedPtrDerived3_CBase2 failed");
+
+ // Return smart pointers
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrRefDerived1_CBase1().cbase1y()!=3, "MakeSharedPtrRefDerived1_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrRefDerived1_CBase2().cbase2()!=4, "MakeSharedPtrRefDerived1_CBase2 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrRefDerived2_CBase1().cbase1y()!=6, "MakeSharedPtrRefDerived2_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrRefDerived2_ABase1().abase1()!=5, "MakeSharedPtrRefDerived2_ABase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrRefDerived3_ABase1().abase1()!=9, "MakeSharedPtrRefDerived3_ABase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrRefDerived3_CBase1().cbase1y()!=7, "MakeSharedPtrRefDerived3_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrRefDerived3_CBase2().cbase2()!=8, "MakeSharedPtrRefDerived3_CBase2 failed");
+ }
+}
diff --git a/Examples/test-suite/default_args.i b/Examples/test-suite/default_args.i
index d3014d386..02d860765 100644
--- a/Examples/test-suite/default_args.i
+++ b/Examples/test-suite/default_args.i
@@ -77,6 +77,10 @@
// char
char chartest1(char c = 'x') { return c; }
char chartest2(char c = '\0') { return c; }
+ char chartest3(char c = '\1') { return c; }
+ char chartest4(char c = '\n') { return c; }
+ char chartest5(char c = '\102') { return c; } // 'B'
+ char chartest6(char c = '\x43') { return c; } // 'C'
// namespaces
namespace AType {
diff --git a/Examples/test-suite/default_args_c.i b/Examples/test-suite/default_args_c.i
new file mode 100644
index 000000000..e0c0af056
--- /dev/null
+++ b/Examples/test-suite/default_args_c.i
@@ -0,0 +1,14 @@
+%module default_args_c
+
+/* Default arguments for C code */
+int foo1(int x = 42 || 3);
+int foo43(int x = 42 | 3);
+
+%{
+int foo1(int x) {
+ return x;
+}
+int foo43(int x) {
+ return x;
+}
+%}
diff --git a/Examples/test-suite/director_pass_by_value.i b/Examples/test-suite/director_pass_by_value.i
new file mode 100644
index 000000000..31d8ce2d2
--- /dev/null
+++ b/Examples/test-suite/director_pass_by_value.i
@@ -0,0 +1,30 @@
+%module(directors="1") director_pass_by_value
+%director DirectorPassByValueAbstractBase;
+
+%inline %{
+class PassedByValue {
+ int val;
+public:
+ PassedByValue() { val = 0x12345678; }
+ int getVal() { return val; }
+};
+
+int doSomething(int x) {
+ int yy[256];
+ yy[0] =0x9876;
+ return yy[0];
+}
+
+class DirectorPassByValueAbstractBase {
+public:
+ virtual void virtualMethod(PassedByValue pbv) = 0;
+ virtual ~DirectorPassByValueAbstractBase () {}
+};
+
+class Caller {
+public:
+ void call_virtualMethod(DirectorPassByValueAbstractBase &f) {
+ f.virtualMethod(PassedByValue());
+ }
+};
+%}
diff --git a/Examples/test-suite/enum_thorough.i b/Examples/test-suite/enum_thorough.i
index e4624c097..f17a7ee96 100644
--- a/Examples/test-suite/enum_thorough.i
+++ b/Examples/test-suite/enum_thorough.i
@@ -585,7 +585,62 @@ enum {
};
int globalDifferentTypesTest(int n) { return n; }
}
+%}
+
+#if defined(SWIGCSHARP)
+%csconstvalue("1") globalenumchar1;
+%csconstvalue("'B'") globalenumcharB;
+%csconstvalue("1") enumchar1;
+%csconstvalue("'B'") enumcharB;
+#endif
+%inline %{
+#if defined(__clang__)
+#pragma clang diagnostic push
+// Suppress: illegal character encoding in character literal
+#pragma clang diagnostic ignored "-Winvalid-source-encoding"
+#endif
+enum {
+ globalenumchar0 = '\0',
+ globalenumchar1 = '\1',
+ globalenumchar2 = '\n',
+ globalenumcharA = 'A',
+ globalenumcharB = '\102', // B
+ globalenumcharC = '\x43', // C
+ globalenumcharD = 0x44, // D
+ globalenumcharE = 69, // E
+ globalenumcharAE1 = 'Æ', // AE (latin1 encoded)
+ globalenumcharAE2 = '\306', // AE (latin1 encoded)
+ globalenumcharAE3 = '\xC6' // AE (latin1 encoded)
+};
+enum EnumChar {
+ enumchar0 = '\0',
+ enumchar1 = '\1',
+ enumchar2 = '\n',
+ enumcharA = 'A',
+ enumcharB = '\102', // B
+ enumcharC = '\x43', // C
+ enumcharD = 0x44, // D
+ enumcharE = 69, // E
+ enumcharAE1 = 'Æ', // AE (latin1 encoded)
+ enumcharAE2 = '\306', // AE (latin1 encoded)
+ enumcharAE3 = '\xC6' // AE (latin1 encoded)
+};
+struct EnumCharStruct {
+ enum EnumChar {
+ enumchar0 = '\0',
+ enumchar1 = '\1',
+ enumchar2 = '\n',
+ enumcharA = 'A',
+ enumcharB = '\102', // B
+ enumcharC = '\x43', // C
+ enumcharD = 0x44, // D
+ enumcharE = 69, // E
+ enumcharAE1 = 'Æ', // AE (latin1 encoded)
+ enumcharAE2 = '\306', // AE (latin1 encoded)
+ enumcharAE3 = '\xC6' // AE (latin1 encoded)
+ };
+};
%}
#if defined(SWIGJAVA)
@@ -595,6 +650,53 @@ int globalDifferentTypesTest(int n) { return n; }
#endif
%inline %{
+enum {
+ x_globalenumchar0 = '\0',
+ x_globalenumchar1 = '\1',
+ x_globalenumchar2 = '\n',
+ x_globalenumcharA = 'A',
+ x_globalenumcharB = '\102', // B
+ x_globalenumcharC = '\x43', // C
+ x_globalenumcharD = 0x44, // D
+ x_globalenumcharE = 69, // E
+ x_globalenumcharAE1 = 'Æ', // AE (latin1 encoded)
+ x_globalenumcharAE2 = '\306', // AE (latin1 encoded)
+ x_globalenumcharAE3 = '\xC6' // AE (latin1 encoded)
+};
+enum X_EnumChar {
+ x_enumchar0 = '\0',
+ x_enumchar1 = '\1',
+ x_enumchar2 = '\n',
+ x_enumcharA = 'A',
+ x_enumcharB = '\102', // B
+ x_enumcharC = '\x43', // C
+ x_enumcharD = 0x44, // D
+ x_enumcharE = 69, // E
+ x_enumcharAE1 = 'Æ', // AE (latin1 encoded)
+ x_enumcharAE2 = '\306', // AE (latin1 encoded)
+ x_enumcharAE3 = '\xC6' // AE (latin1 encoded)
+};
+struct X_EnumCharStruct {
+ enum X_EnumChar {
+ enumchar0 = '\0',
+ enumchar1 = '\1',
+ enumchar2 = '\n',
+ enumcharA = 'A',
+ enumcharB = '\102', // B
+ enumcharC = '\x43', // C
+ enumcharD = 0x44, // D
+ enumcharE = 69, // E
+ enumcharAE1 = 'Æ', // AE (latin1 encoded)
+ enumcharAE2 = '\306', // AE (latin1 encoded)
+ enumcharAE3 = '\xC6' // AE (latin1 encoded)
+ };
+};
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#endif
+%}
+
+%inline %{
namespace DifferentSpace {
enum DifferentTypesNoConst {
typeint_noconst = 10,
@@ -614,5 +716,4 @@ enum {
global_typedefaultint_noconst
};
}
-
%}
diff --git a/Examples/test-suite/errors/c_default_error.i b/Examples/test-suite/errors/c_default_error.i
deleted file mode 100644
index f6220e11d..000000000
--- a/Examples/test-suite/errors/c_default_error.i
+++ /dev/null
@@ -1,4 +0,0 @@
-%module xxx
-
-int foo(int x = 42 || 3);
-
diff --git a/Examples/test-suite/errors/c_default_error.stderr b/Examples/test-suite/errors/c_default_error.stderr
deleted file mode 100644
index e69de29bb..000000000
--- a/Examples/test-suite/errors/c_default_error.stderr
+++ /dev/null
diff --git a/Examples/test-suite/errors/c_varargs.i b/Examples/test-suite/errors/c_varargs.i
deleted file mode 100644
index 88f9c2e7d..000000000
--- a/Examples/test-suite/errors/c_varargs.i
+++ /dev/null
@@ -1,3 +0,0 @@
-%module xxx
-
-int foo(int x, ...);
diff --git a/Examples/test-suite/errors/c_varargs.stderr b/Examples/test-suite/errors/c_varargs.stderr
deleted file mode 100644
index e69de29bb..000000000
--- a/Examples/test-suite/errors/c_varargs.stderr
+++ /dev/null
diff --git a/Examples/test-suite/errors/cpp_inherit_ignored.i b/Examples/test-suite/errors/cpp_inherit_ignored.i
new file mode 100644
index 000000000..fdc1c83e3
--- /dev/null
+++ b/Examples/test-suite/errors/cpp_inherit_ignored.i
@@ -0,0 +1,19 @@
+%module xxx
+
+// Only non-ignored classes should warn about Ignored base classes
+%ignore ActualClass;
+%ignore ActualClassNoTemplates;
+
+%{
+struct BaseClassNoTemplates {};
+%}
+%inline %{
+template<typename T>
+class TemplateClass {};
+
+class ActualClass : public TemplateClass<int> {};
+class AktuelKlass : public TemplateClass<int> {};
+
+class ActualClassNoTemplates : public BaseClassNoTemplates {};
+class AktuelKlassNoTemplates : public BaseClassNoTemplates {};
+%}
diff --git a/Examples/test-suite/errors/cpp_inherit_ignored.stderr b/Examples/test-suite/errors/cpp_inherit_ignored.stderr
new file mode 100644
index 000000000..360c1f9fc
--- /dev/null
+++ b/Examples/test-suite/errors/cpp_inherit_ignored.stderr
@@ -0,0 +1,3 @@
+cpp_inherit_ignored.i:15: Warning 401: Nothing known about base class 'TemplateClass< int >'. Ignored.
+cpp_inherit_ignored.i:15: Warning 401: Maybe you forgot to instantiate 'TemplateClass< int >' using %template.
+cpp_inherit_ignored.i:18: Warning 401: Nothing known about base class 'BaseClassNoTemplates'. Ignored.
diff --git a/Examples/test-suite/errors/cpp_overload.i b/Examples/test-suite/errors/cpp_overload.i
deleted file mode 100644
index 34fa3cc25..000000000
--- a/Examples/test-suite/errors/cpp_overload.i
+++ /dev/null
@@ -1,15 +0,0 @@
-%module xxx
-int foo(int x);
-int foo(double x);
-
-class Foo {
-public:
- int bar(int);
- int bar(double);
-};
-
-class Spam {
-public:
- Spam();
- Spam(int);
-};
diff --git a/Examples/test-suite/errors/cpp_overload.stderr b/Examples/test-suite/errors/cpp_overload.stderr
deleted file mode 100644
index e69de29bb..000000000
--- a/Examples/test-suite/errors/cpp_overload.stderr
+++ /dev/null
diff --git a/Examples/test-suite/errors/cpp_private_defvalue.i b/Examples/test-suite/errors/cpp_private_defvalue.i
deleted file mode 100644
index 15542c7bc..000000000
--- a/Examples/test-suite/errors/cpp_private_defvalue.i
+++ /dev/null
@@ -1,7 +0,0 @@
-%module xxx
-
-class foo {
-static const int BAR = 42;
-public:
- int blah(int x = BAR);
-};
diff --git a/Examples/test-suite/errors/cpp_private_defvalue.stderr b/Examples/test-suite/errors/cpp_private_defvalue.stderr
deleted file mode 100644
index e69de29bb..000000000
--- a/Examples/test-suite/errors/cpp_private_defvalue.stderr
+++ /dev/null
diff --git a/Examples/test-suite/errors/cpp_template_argname.i b/Examples/test-suite/errors/cpp_template_argname.i
deleted file mode 100644
index b87c115c1..000000000
--- a/Examples/test-suite/errors/cpp_template_argname.i
+++ /dev/null
@@ -1,8 +0,0 @@
-%module xxx
-
-template<T> T blah(T x);
-
-
-
-
-
diff --git a/Examples/test-suite/errors/cpp_template_argname.stderr b/Examples/test-suite/errors/cpp_template_argname.stderr
deleted file mode 100644
index e69de29bb..000000000
--- a/Examples/test-suite/errors/cpp_template_argname.stderr
+++ /dev/null
diff --git a/Examples/test-suite/errors/cpp_template_repeat.i b/Examples/test-suite/errors/cpp_template_repeat.i
index e63ffe8d9..f170080b7 100644
--- a/Examples/test-suite/errors/cpp_template_repeat.i
+++ b/Examples/test-suite/errors/cpp_template_repeat.i
@@ -4,4 +4,4 @@ template<class T> T blah(T x) { };
%template(iblah) blah<int>;
%template(iiblah) blah<int>;
-
+// The second %template instantiation above should surely be ignored with a warning, but doesn't atm
diff --git a/Examples/test-suite/errors/cpp_using_type_aliasing.stderr b/Examples/test-suite/errors/cpp_using_type_aliasing.stderr
index 3f256652f..e69de29bb 100644
--- a/Examples/test-suite/errors/cpp_using_type_aliasing.stderr
+++ b/Examples/test-suite/errors/cpp_using_type_aliasing.stderr
@@ -1,3 +0,0 @@
-cpp_using_type_aliasing.i:8: Warning 341: The 'using' keyword in type aliasing is not fully supported yet.
-cpp_using_type_aliasing.i:8: Warning 315: Nothing known about 'Okay< int >'.
-cpp_using_type_aliasing.i:8: Warning 315: Nothing known about 'Okay< int >'.
diff --git a/Examples/test-suite/errors/pp_macro_args.i b/Examples/test-suite/errors/pp_macro_args.i
deleted file mode 100644
index 8bbbfb104..000000000
--- a/Examples/test-suite/errors/pp_macro_args.i
+++ /dev/null
@@ -1,7 +0,0 @@
-%module xxx
-
-#define foo(a,x) a x
-
-#if foo
-#endif
-
diff --git a/Examples/test-suite/errors/pp_macro_args.stderr b/Examples/test-suite/errors/pp_macro_args.stderr
deleted file mode 100644
index e69de29bb..000000000
--- a/Examples/test-suite/errors/pp_macro_args.stderr
+++ /dev/null
diff --git a/Examples/test-suite/exception_classname.i b/Examples/test-suite/exception_classname.i
index a5a76e24d..6900581cf 100644
--- a/Examples/test-suite/exception_classname.i
+++ b/Examples/test-suite/exception_classname.i
@@ -1,6 +1,9 @@
%module exception_classname
%warnfilter(SWIGWARN_RUBY_WRONG_NAME);
+#ifdef SWIGPHP
+%rename(ExceptionClass) Exception;
+#endif
%inline %{
class Exception {
diff --git a/Examples/test-suite/funcptr_cpp.i b/Examples/test-suite/funcptr_cpp.i
index 015164ed9..b63749dc1 100644
--- a/Examples/test-suite/funcptr_cpp.i
+++ b/Examples/test-suite/funcptr_cpp.i
@@ -20,7 +20,7 @@ int call3(int & (*d)(const int &, int), int a, int b) { return d(a, b); }
%constant int (*ADD_BY_VALUE)(const int &, int) = addByValue;
%constant int * (*ADD_BY_POINTER)(const int &, int) = addByPointer;
%constant int & (*ADD_BY_REFERENCE)(const int &, int) = addByReference;
-
+%constant int (* const ADD_BY_VALUE_C)(const int &, int) = addByValue;
%inline %{
typedef int AddByValueTypedef(const int &a, int b);
diff --git a/Examples/test-suite/go/go_inout_runme.go b/Examples/test-suite/go/go_inout_runme.go
index 13c429b87..9aa0cd0c5 100644
--- a/Examples/test-suite/go/go_inout_runme.go
+++ b/Examples/test-suite/go/go_inout_runme.go
@@ -40,4 +40,14 @@ func main() {
fmt.Println("got", a, "want", dwant)
panic(a)
}
+
+ c2 := go_inout.NewC2()
+ pm := c2.M()
+ want = map[string]interface{}{
+ "ID": float64(1),
+ }
+ if !reflect.DeepEqual(*pm, want) {
+ fmt.Println("for c2.M got", pm, "want", want)
+ panic(pm)
+ }
}
diff --git a/Examples/test-suite/go_inout.i b/Examples/test-suite/go_inout.i
index 57e7bf2fb..0bcb979ef 100644
--- a/Examples/test-suite/go_inout.i
+++ b/Examples/test-suite/go_inout.i
@@ -23,7 +23,7 @@ struct RetStruct {
// Write a typemap that calls C++ by converting in and out of JSON.
-%go_import("encoding/json", "bytes", "encoding/binary")
+%go_import("encoding/json", "bytes", "encoding/binary", "reflect", "unsafe")
%insert(go_header)
%{
@@ -68,6 +68,26 @@ type In json.Marshaler
}
%}
+%typemap(gotype) RetStruct* "*map[string]interface{}"
+
+%typemap(imtype) RetStruct* "*string"
+
+%typemap(out,fragment="AllocateString") RetStruct*
+%{
+ $result = (_gostring_*)malloc(sizeof(_gostring_));
+ *$result = Swig_AllocateString($1->str.data(), $1->str.length());
+%}
+
+%typemap(goout,fragment="CopyString") RetStruct*
+%{
+ defer Swig_free(uintptr(unsafe.Pointer($1)))
+ var rm map[string]interface{}
+ if err := json.Unmarshal([]byte(swigCopyString(*$1)), &rm); err != nil {
+ panic(err)
+ }
+ $result = &rm
+%}
+
%inline
%{
@@ -87,6 +107,10 @@ struct MyArray {
std::vector<std::string> strings;
};
+void* Allocate(int n) {
+ return new char[n];
+}
+
static uint64_t getuint64(const char* s) {
uint64_t ret = 0;
for (int i = 0; i < 8; i++, s++) {
@@ -121,7 +145,12 @@ static void putuint64(std::string *s, size_t off, uint64_t v) {
buf.Write(b[:])
buf.WriteString(s)
}
- str := buf.String()
+ bb := buf.Bytes()
+ p := Allocate(len(bb))
+ copy((*[1<<15]byte)(unsafe.Pointer(p))[:len(bb)], bb)
+ var str string
+ (*reflect.StringHeader)(unsafe.Pointer(&str)).Data = uintptr(unsafe.Pointer(p))
+ (*reflect.StringHeader)(unsafe.Pointer(&str)).Len = len(bb)
$result = &str
}
%}
@@ -197,3 +226,18 @@ void DoubleArray(MyArray* v) {
}
}
%}
+
+%inline
+%{
+class C1 {
+ public:
+ RetStruct* M() {
+ RetStruct* r = new RetStruct;
+ r->str = "{\"ID\":1}";
+ return r;
+ }
+};
+
+class C2 : public C1 {
+};
+%}
diff --git a/Examples/test-suite/insert_directive.i b/Examples/test-suite/insert_directive.i
index 8ad966a99..36c3af6c6 100644
--- a/Examples/test-suite/insert_directive.i
+++ b/Examples/test-suite/insert_directive.i
@@ -34,5 +34,5 @@ int inserted_wrapper(int i) { return inserted_header3(i); }
%init %{
// %inserted code %init
-int inserted_init_value = inserted_wrapper(0);
+int SWIGUNUSED inserted_init_value = inserted_wrapper(0);
%}
diff --git a/Examples/test-suite/java/Makefile.in b/Examples/test-suite/java/Makefile.in
index 3dc6555ef..e69964352 100644
--- a/Examples/test-suite/java/Makefile.in
+++ b/Examples/test-suite/java/Makefile.in
@@ -5,7 +5,7 @@
LANGUAGE = java
JAVA = @JAVA@
JAVAC = @JAVAC@
-JAVAFLAGS = -Xcheck:jni
+JAVAFLAGS = @JAVAFLAGS@
SCRIPTSUFFIX = _runme.java
srcdir = @srcdir@
@@ -38,7 +38,7 @@ CPP_TEST_CASES = \
java_prepost \
java_throws \
java_typemaps_proxy \
- java_typemaps_typewrapper
+ java_typemaps_typewrapper \
# li_boost_intrusive_ptr
CPP11_TEST_CASES = \
@@ -53,12 +53,13 @@ JAVA_PACKAGEOPT = -package $(JAVA_PACKAGE)
SWIGOPT += $(JAVA_PACKAGEOPT)
# Custom tests - tests with additional commandline options
-java_nspacewithoutpackage.%: JAVA_PACKAGEOPT =
+director_nspace.%: JAVA_PACKAGE = $*Package
+director_nspace_director_name_collision.%: JAVA_PACKAGE = $*Package
java_director_exception_feature_nspace.%: JAVA_PACKAGE = $*Package
+java_nspacewithoutpackage.%: JAVA_PACKAGEOPT =
+multiple_inheritance_nspace.%: JAVA_PACKAGE = $*Package
nspace.%: JAVA_PACKAGE = $*Package
nspace_extend.%: JAVA_PACKAGE = $*Package
-director_nspace.%: JAVA_PACKAGE = $*Package
-director_nspace_director_name_collision.%: JAVA_PACKAGE = $*Package
# Rules for the different types of tests
%.cpptest:
diff --git a/Examples/test-suite/java/constant_directive_runme.java b/Examples/test-suite/java/constant_directive_runme.java
index b5135a499..4b5c3c3d0 100644
--- a/Examples/test-suite/java/constant_directive_runme.java
+++ b/Examples/test-suite/java/constant_directive_runme.java
@@ -18,5 +18,9 @@ public class constant_directive_runme {
throw new RuntimeException("fail");
if (constant_directive.TYPE1_CONSTANT3.getVal() != 3)
throw new RuntimeException("fail");
+ if (constant_directive.TYPE1CONST_CONSTANT1.getVal() != 1)
+ throw new RuntimeException("fail");
+ if (constant_directive.TYPE1CPTR_CONSTANT1.getVal() != 1)
+ throw new RuntimeException("fail");
}
}
diff --git a/Examples/test-suite/java/cpp11_li_std_array_runme.java b/Examples/test-suite/java/cpp11_li_std_array_runme.java
new file mode 100644
index 000000000..2e2a20138
--- /dev/null
+++ b/Examples/test-suite/java/cpp11_li_std_array_runme.java
@@ -0,0 +1,82 @@
+import cpp11_li_std_array.*;
+
+public class cpp11_li_std_array_runme {
+
+ static {
+ try {
+ System.loadLibrary("cpp11_li_std_array");
+ } catch (UnsatisfiedLinkError e) {
+ System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
+ System.exit(1);
+ }
+ }
+
+ private static ArrayInt6 ToArray6(int [] a) {
+ ArrayInt6 ai = new ArrayInt6();
+ if (a.length != 6)
+ throw new RuntimeException("a is incorrect size");
+ for (int i=0; i<6; ++i)
+ ai.set(i, a[i]);
+ return ai;
+ }
+
+ private static void compareContainers(ArrayInt6 actual, int[] expected) {
+ if (actual.size() != expected.length)
+ throw new RuntimeException("Sizes are different: " + actual.size() + " " + expected.length);
+ for (int i=0; i<actual.size(); ++i) {
+ int actualValue = actual.get(i);
+ int expectedValue = expected[i];
+ if (actualValue != expectedValue)
+ throw new RuntimeException("Value is wrong for element " + i + ". Expected " + expectedValue + " got: " + actualValue);
+ }
+ if (actual.isEmpty())
+ throw new RuntimeException("ai should not be empty");
+ }
+
+ public static void main(String argv[]) {
+ ArrayInt6 ai = new ArrayInt6();
+ compareContainers(ai, new int[] {0, 0, 0, 0, 0, 0});
+
+ int[] vals = {10, 20, 30, 40, 50, 60};
+ for (int i=0; i<ai.size(); ++i)
+ ai.set(i, vals[i]);
+ compareContainers(ai, vals);
+
+ // Check return
+ compareContainers(cpp11_li_std_array.arrayOutVal(), new int[] {-2, -1, 0, 0, 1, 2});
+ compareContainers(cpp11_li_std_array.arrayOutConstRef(), new int[] {-2, -1, 0, 0, 1, 2});
+ compareContainers(cpp11_li_std_array.arrayOutRef(), new int[] {-2, -1, 0, 0, 1, 2});
+ compareContainers(cpp11_li_std_array.arrayOutPtr(), new int[] {-2, -1, 0, 0, 1, 2});
+
+ // Check passing arguments
+ ai = cpp11_li_std_array.arrayInVal(ToArray6(new int[] {9, 8, 7, 6, 5, 4}));
+ compareContainers(ai, new int[] {90, 80, 70, 60, 50, 40});
+
+ ai = cpp11_li_std_array.arrayInConstRef(ToArray6(new int[] {9, 8, 7, 6, 5, 4}));
+ compareContainers(ai, new int[] {90, 80, 70, 60, 50, 40});
+
+ ai = new ArrayInt6(ToArray6(new int[] {9, 8, 7, 6, 5, 4}));
+ cpp11_li_std_array.arrayInRef(ai);
+ compareContainers(ai, new int[] {90, 80, 70, 60, 50, 40});
+
+ ai = new ArrayInt6(ToArray6(new int[] {9, 8, 7, 6, 5, 4}));
+ cpp11_li_std_array.arrayInPtr(ai);
+ compareContainers(ai, new int[] {90, 80, 70, 60, 50, 40});
+
+ // fill
+ ai.fill(111);
+ compareContainers(ai, new int[] {111, 111, 111, 111, 111, 111});
+
+ // out of range errors
+ try {
+ ai.set((int)ai.size(), 0);
+ throw new RuntimeException("Out of range exception not caught");
+ } catch(IndexOutOfBoundsException e) {
+ }
+ try {
+ ai.set(-1, 0);
+ throw new RuntimeException("Out of range exception not caught");
+ } catch(IndexOutOfBoundsException e) {
+ }
+ }
+}
diff --git a/Examples/test-suite/java/director_classes_runme.java b/Examples/test-suite/java/director_classes_runme.java
index 013bdc75b..5fbb9ea35 100644
--- a/Examples/test-suite/java/director_classes_runme.java
+++ b/Examples/test-suite/java/director_classes_runme.java
@@ -140,7 +140,7 @@ public class director_classes_runme {
Package packag = klass.getPackage();
String simpleName = null;
if (packag != null)
- simpleName = fullName.replaceAll(packag.getName() + ".", "");
+ simpleName = fullName.replaceAll(packag.getName() + "\\.", "");
else
simpleName = fullName;
return simpleName;
diff --git a/Examples/test-suite/java/director_pass_by_value_runme.java b/Examples/test-suite/java/director_pass_by_value_runme.java
new file mode 100644
index 000000000..24ded2ccf
--- /dev/null
+++ b/Examples/test-suite/java/director_pass_by_value_runme.java
@@ -0,0 +1,48 @@
+
+import director_pass_by_value.*;
+
+public class director_pass_by_value_runme {
+
+ static {
+ try {
+ System.loadLibrary("director_pass_by_value");
+ } catch (UnsatisfiedLinkError e) {
+ System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
+ System.exit(1);
+ }
+ }
+
+ private static void WaitForGC() {
+ System.gc();
+ System.runFinalization();
+ try {
+ java.lang.Thread.sleep(10);
+ } catch (java.lang.InterruptedException e) {
+ }
+ }
+
+ public static void main(String argv[]) {
+ Caller caller = new Caller();
+ caller.call_virtualMethod(new director_pass_by_value_Derived());
+ {
+ int countdown = 5;
+ while (true) {
+ WaitForGC();
+ if (--countdown == 0)
+ break;
+ };
+ }
+ // bug was the passByVal 'global' object was destroyed after the call to virtualMethod had finished.
+ int ret = director_pass_by_value_runme.passByVal.getVal();
+ if (ret != 0x12345678)
+ throw new RuntimeException("Bad return value, got " + Integer.toHexString(ret));
+ }
+
+ static PassedByValue passByVal;
+}
+
+class director_pass_by_value_Derived extends DirectorPassByValueAbstractBase {
+ public void virtualMethod(PassedByValue pbv) {
+ director_pass_by_value_runme.passByVal = pbv;
+ }
+}
diff --git a/Examples/test-suite/java/long_long_runme.java b/Examples/test-suite/java/long_long_runme.java
index 3a967f7a7..76aa0705d 100644
--- a/Examples/test-suite/java/long_long_runme.java
+++ b/Examples/test-suite/java/long_long_runme.java
@@ -3,7 +3,8 @@
// unsigned long long types map correctly to long and BigInteger respectively.
import long_long.*;
-import java.math.*;
+import java.math.BigInteger;
+import java.util.ArrayList;
public class long_long_runme {
@@ -54,12 +55,57 @@ public class long_long_runme {
check_ull(testNumber);
testNumber = testNumber.add(BigInteger.ONE);
}
-
+
try {
long_long.setUll(null);
throw new RuntimeException("null check failed");
} catch (NullPointerException e) {
}
+
+ // UnsignedToSigned - checks that a cast from unsigned long long to long long in C
+ // gives expected value (including -ve numbers)
+
+ long[] nums = {
+ 0x00,
+ 0xFF, 0x80, 0x7F, 0x01,
+ -0xFF, -0x80, -0x7F, -0x01,
+ 0x100, 0x10000,
+ -0x100, -0x10000,
+ 0xFFFF, 0xFF80, 0xFF7F, 0xFF01, 0xFF00,
+ -0xFFFF, -0xFF80, -0xFF7F, -0xFF01, -0xFF00,
+ 0x7FFF, 0x7F80, 0x7F7F, 0x7F01, 0x7F00,
+ -0x7FFF, -0x7F80, -0x7F7F, -0x7F01, -0x7F00,
+ 0x80FF, 0x8080, 0x807F, 0x8001, 0x8000,
+ -0x80FF, -0x8080, -0x807F, -0x8001, -0x8000,
+ Integer.MAX_VALUE, Integer.MIN_VALUE,
+ Integer.MAX_VALUE+1, Integer.MIN_VALUE-1,
+ Long.MAX_VALUE, Long.MIN_VALUE,
+ };
+
+ ArrayList<BigInteger> bigIntegers = new ArrayList<BigInteger>();
+ for (int i=0; i<nums.length; ++i) {
+ BigInteger bi = new BigInteger(new Long(nums[i]).toString());
+ bigIntegers.add(bi);
+ }
+
+ {
+ BigInteger bi = new BigInteger(new Long(Long.MAX_VALUE).toString());
+ bigIntegers.add(bi.add(BigInteger.ONE));
+ bi = new BigInteger(new Long(Long.MIN_VALUE).toString());
+ bigIntegers.add(bi.subtract(BigInteger.ONE));
+ }
+
+ boolean failed = false;
+ for (int i=0; i<bigIntegers.size(); ++i) {
+ BigInteger bi = (BigInteger)bigIntegers.get(i);
+ long longReturn = long_long.UnsignedToSigned(bi);
+ if (bi.longValue() != longReturn) {
+ System.err.println("Conversion to long failed, in:" + bi + " out:" + longReturn);
+ failed = true;
+ }
+ }
+ if (failed)
+ throw new RuntimeException("There were UnsignedToSigned failures");
}
public static void check_ll(long ll) {
diff --git a/Examples/test-suite/java/multiple_inheritance_abstract_runme.java b/Examples/test-suite/java/multiple_inheritance_abstract_runme.java
new file mode 100644
index 000000000..1489d92a7
--- /dev/null
+++ b/Examples/test-suite/java/multiple_inheritance_abstract_runme.java
@@ -0,0 +1,253 @@
+import multiple_inheritance_abstract.*;
+
+public class multiple_inheritance_abstract_runme {
+
+ static {
+ try {
+ System.loadLibrary("multiple_inheritance_abstract");
+ } catch (UnsatisfiedLinkError e) {
+ System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
+ System.exit(1);
+ }
+ }
+
+ //Test base class as a parameter in java
+ int jcbase1b(CBase1 cb1){
+ return cb1.cbase1y();
+ }
+ int jabase1(ABase1 ab1){
+ return ab1.abase1();
+ }
+ int jcbase2(CBase2 cb2){
+ return cb2.cbase2();
+ }
+
+ public static void check(boolean fail, String msg) {
+ if (fail)
+ throw new RuntimeException(msg);
+ }
+
+ public static void main(String argv[]) {
+ //Test Derived1
+ Derived1 d1=new Derived1();
+ check(d1.cbase1y()!=3, "Derived1::cbase1y() failed");
+ check(d1.cbase2()!=4, "Derived1::cbase2() failed");
+
+ //Test Derived2
+ Derived2 d2=new Derived2();
+ check(d2.cbase1y()!=6, "Derived2::cbase1y() failed");
+ check(d2.abase1()!=5, "Derived2::abase1() failed");
+
+ //Test Derived3
+ Derived3 d3=new Derived3();
+ check(d3.cbase1y()!=7, "Derived3::cbase1y() failed");
+ check(d3.cbase2()!=8, "Derived3::cbase2() failed");
+ check(d3.abase1()!=9, "Derived3::abase1() failed");
+
+ //Test Bottom1
+ Bottom1 b1=new Bottom1();
+ check(b1.cbase1y()!=103, "Bottom1::cbase1y() failed");
+ check(b1.cbase2()!=104, "Bottom1::cbase2() failed");
+
+ //Test Bottom2
+ Bottom2 b2=new Bottom2();
+ check(b2.cbase1y()!=206, "Bottom2::cbase1y() failed");
+ check(b2.abase1()!=205, "Bottom2::abase1() failed");
+
+ //Test Bottom3
+ Bottom3 b3=new Bottom3();
+ check(b3.cbase1y()!=307, "Bottom3::cbase1y() failed");
+ check(b3.cbase2()!=308, "Bottom3::cbase2() failed");
+ check(b3.abase1()!=309, "Bottom3::abase1() failed");
+
+ //Test interfaces from c++ classes
+ CBase1 cb1=new CBase1SwigImpl();
+ CBase2 cb2=new CBase2SwigImpl();
+ check(cb1.cbase1y()!=1, "CBase1::cbase1y() failed");
+ check(cb2.cbase2()!=2, "CBase2::cbase2() failed");
+
+ //Test abstract class as return value
+ ABase1 ab1=d3.cloneit();
+ check(ab1.abase1()!=9, "Derived3::abase1() through ABase1 failed");
+
+ //Test concrete base class as return value
+ CBase1 cb6=d2.cloneit();
+ CBase2 cb7=d1.cloneit();
+ check(cb6.cbase1y()!=6, "Derived2::cbase1y() through CBase1 failed");
+ check(cb7.cbase2()!=4, "Derived1:cbase2() through ABase1 failed");
+
+ //Test multi inheritance
+ CBase1 cb3=new Derived1();
+ CBase1 cb4=new Derived3();
+ CBase2 cb5=new Derived3();
+ ABase1 ab6=new Derived2();
+ check(cb3.cbase1y()!=3, "Derived1::cbase1y() through CBase1 failed");
+ check(cb4.cbase1y()!=7, "Derived3::cbase1y() through CBase1 failed");
+ check(cb5.cbase2()!=8, "Derived3::cbase2() through CBase2 failed");
+ check(ab6.abase1()!=5, "Derived2::abase1() through ABase1 failed");
+
+ //Test base classes as parameter in java
+ multiple_inheritance_abstract_runme mhar=new multiple_inheritance_abstract_runme();
+ check(mhar.jcbase1b(d1)!=3, "jcbase1b() through Derived1 as parameter failed");
+ check(mhar.jcbase1b(d2)!=6, "jcbase1b() through Derived2 as parameter failed");
+ check(mhar.jcbase1b(d3)!=7, "jcbase1b() through Derived3 as parameter failed");
+ check(mhar.jcbase2(d1)!=4, "jcbase2() through Derived1 as parameter failed");
+ check(mhar.jcbase2(d3)!=8, "jcbase2() through Derived3 as parameter failed");
+ check(mhar.jabase1(d2)!=5, "jabase1() through Derived2 as parameter failed");
+ check(mhar.jabase1(d3)!=9, "jabase1() through Derived3 as parameter failed");
+
+ //Value parameters
+ //Test CBase1 CBase2 as parameters (note slicing for Derived and Bottom classes)
+ check(multiple_inheritance_abstract.InputValCBase1(d1)!=1, "InputValCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase1(d2)!=1, "InputValCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase1(d3)!=1, "InputValCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase2(d3)!=2, "InputValCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase2(d1)!=2, "InputValCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase1(cb1)!=1, "InputValCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase2(cb2)!=2, "InputValCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase1(b1)!=1, "InputValCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase1(b2)!=1, "InputValCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase1(b3)!=1, "InputValCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase2(b3)!=2, "InputValCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputValCBase2(b1)!=2, "InputValCBase2(), Bottom1 as a parameter failed");
+
+ //Pointer parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_abstract.InputPtrABase1(d2)!=5, "InputPtrABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrABase1(d3)!=9, "InputPtrABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrABase1(b2)!=205, "InputPtrABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrABase1(b3)!=309, "InputPtrABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_abstract.InputPtrCBase1(d1)!=3, "InputPtrCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase1(d2)!=6, "InputPtrCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase1(d3)!=7, "InputPtrCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase2(d3)!=8, "InputPtrCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase2(d1)!=4, "InputPtrCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase1(cb1)!=1, "InputPtrCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase2(cb2)!=2, "InputPtrCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase1(b1)!=103, "InputPtrCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase1(b2)!=206, "InputPtrCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase1(b3)!=307, "InputPtrCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase2(b3)!=308, "InputPtrCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputPtrCBase2(b1)!=104, "InputPtrCBase2(), Bottom1 as a parameter failed");
+
+ //Reference parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_abstract.InputRefABase1(d2)!=5, "InputRefABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefABase1(d3)!=9, "InputRefABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefABase1(b2)!=205, "InputRefABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefABase1(b3)!=309, "InputRefABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_abstract.InputRefCBase1(d1)!=3, "InputRefCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase1(d2)!=6, "InputRefCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase1(d3)!=7, "InputRefCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase2(d3)!=8, "InputRefCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase2(d1)!=4, "InputRefCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase1(cb1)!=1, "InputRefCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase2(cb2)!=2, "InputRefCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase1(b1)!=103, "InputRefCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase1(b2)!=206, "InputRefCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase1(b3)!=307, "InputRefCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase2(b3)!=308, "InputRefCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputRefCBase2(b1)!=104, "InputRefCBase2(), Bottom1 as a parameter failed");
+
+ //Const reference pointer parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_abstract.InputCPtrRefABase1(d2)!=5, "InputCPtrRefABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefABase1(d3)!=9, "InputCPtrRefABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefABase1(b2)!=205, "InputCPtrRefABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefABase1(b3)!=309, "InputCPtrRefABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_abstract.InputCPtrRefCBase1(d1)!=3, "InputCPtrRefCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase1(d2)!=6, "InputCPtrRefCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase1(d3)!=7, "InputCPtrRefCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase2(d3)!=8, "InputCPtrRefCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase2(d1)!=4, "InputCPtrRefCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase1(cb1)!=1, "InputCPtrRefCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase2(cb2)!=2, "InputCPtrRefCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase1(b1)!=103, "InputCPtrRefCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase1(b2)!=206, "InputCPtrRefCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase1(b3)!=307, "InputCPtrRefCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase2(b3)!=308, "InputCPtrRefCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_abstract.InputCPtrRefCBase2(b1)!=104, "InputCPtrRefCBase2(), Bottom1 as a parameter failed");
+
+ //Derived classes as parameters
+ check(multiple_inheritance_abstract.InputValDerived1(d1)!=3+4, "InputValDerived1() failed");
+ check(multiple_inheritance_abstract.InputValDerived2(d2)!=6+5, "InputValDerived2() failed");
+ check(multiple_inheritance_abstract.InputValDerived3(d3)!=7+8+9, "InputValDerived3() failed");
+
+ check(multiple_inheritance_abstract.InputRefDerived1(d1)!=3+4, "InputRefDerived1() failed");
+ check(multiple_inheritance_abstract.InputRefDerived2(d2)!=6+5, "InputRefDerived2() failed");
+ check(multiple_inheritance_abstract.InputRefDerived3(d3)!=7+8+9, "InputRefDerived3() failed");
+
+ check(multiple_inheritance_abstract.InputPtrDerived1(d1)!=3+4, "InputPtrDerived1() failed");
+ check(multiple_inheritance_abstract.InputPtrDerived2(d2)!=6+5, "InputPtrDerived2() failed");
+ check(multiple_inheritance_abstract.InputPtrDerived3(d3)!=7+8+9, "InputPtrDerived3() failed");
+
+ check(multiple_inheritance_abstract.InputCPtrRefDerived1(d1)!=3+4, "InputCPtrRefDerived1() failed");
+ check(multiple_inheritance_abstract.InputCPtrRefDerived2(d2)!=6+5, "InputCPtrRefDerived2() failed");
+ check(multiple_inheritance_abstract.InputCPtrRefDerived3(d3)!=7+8+9, "InputCPtrRefDerived3() failed");
+
+ //Bottom classes as Derived parameters
+ check(multiple_inheritance_abstract.InputValDerived1(b1)!=3+4, "InputValDerived1() failed");
+ check(multiple_inheritance_abstract.InputValDerived2(b2)!=6+5, "InputValDerived2() failed");
+ check(multiple_inheritance_abstract.InputValDerived3(b3)!=7+8+9, "InputValDerived3() failed");
+
+ check(multiple_inheritance_abstract.InputRefDerived1(b1)!=103+104, "InputRefDerived1() failed");
+ check(multiple_inheritance_abstract.InputRefDerived2(b2)!=206+205, "InputRefDerived2() failed");
+ check(multiple_inheritance_abstract.InputRefDerived3(b3)!=307+308+309, "InputRefDerived3() failed");
+
+ check(multiple_inheritance_abstract.InputPtrDerived1(b1)!=103+104, "InputPtrDerived1() failed");
+ check(multiple_inheritance_abstract.InputPtrDerived2(b2)!=206+205, "InputPtrDerived2() failed");
+ check(multiple_inheritance_abstract.InputPtrDerived3(b3)!=307+308+309, "InputPtrDerived3() failed");
+
+ check(multiple_inheritance_abstract.InputCPtrRefDerived1(b1)!=103+104, "InputCPtrRefDerived1() failed");
+ check(multiple_inheritance_abstract.InputCPtrRefDerived2(b2)!=206+205, "InputCPtrRefDerived2() failed");
+ check(multiple_inheritance_abstract.InputCPtrRefDerived3(b3)!=307+308+309, "InputCPtrRefDerived3() failed");
+
+ //Bottom classes as Bottom parameters
+ check(multiple_inheritance_abstract.InputValBottom1(b1)!=103+104, "InputValBottom1() failed");
+ check(multiple_inheritance_abstract.InputValBottom2(b2)!=206+205, "InputValBottom2() failed");
+ check(multiple_inheritance_abstract.InputValBottom3(b3)!=307+308+309, "InputValBottom3() failed");
+
+ check(multiple_inheritance_abstract.InputRefBottom1(b1)!=103+104, "InputRefBottom1() failed");
+ check(multiple_inheritance_abstract.InputRefBottom2(b2)!=206+205, "InputRefBottom2() failed");
+ check(multiple_inheritance_abstract.InputRefBottom3(b3)!=307+308+309, "InputRefBottom3() failed");
+
+ check(multiple_inheritance_abstract.InputPtrBottom1(b1)!=103+104, "InputPtrBottom1() failed");
+ check(multiple_inheritance_abstract.InputPtrBottom2(b2)!=206+205, "InputPtrBottom2() failed");
+ check(multiple_inheritance_abstract.InputPtrBottom3(b3)!=307+308+309, "InputPtrBottom3() failed");
+
+ check(multiple_inheritance_abstract.InputCPtrRefBottom1(b1)!=103+104, "InputCPtrRefBottom1() failed");
+ check(multiple_inheritance_abstract.InputCPtrRefBottom2(b2)!=206+205, "InputCPtrRefBottom2() failed");
+ check(multiple_inheritance_abstract.InputCPtrRefBottom3(b3)!=307+308+309, "InputCPtrRefBottom3() failed");
+ // Return pointers
+ check(multiple_inheritance_abstract.MakePtrDerived1_CBase1().cbase1y()!=3, "MakePtrDerived1_CBase1 failed");
+ check(multiple_inheritance_abstract.MakePtrDerived1_CBase2().cbase2()!=4, "MakePtrDerived1_CBase2 failed");
+ check(multiple_inheritance_abstract.MakePtrDerived2_CBase1().cbase1y()!=6, "MakePtrDerived2_CBase1 failed");
+ check(multiple_inheritance_abstract.MakePtrDerived2_ABase1().abase1()!=5, "MakePtrDerived2_ABase1 failed");
+ check(multiple_inheritance_abstract.MakePtrDerived3_ABase1().abase1()!=9, "MakePtrDerived3_ABase1 failed");
+ check(multiple_inheritance_abstract.MakePtrDerived3_CBase1().cbase1y()!=7, "MakePtrDerived3_CBase1 failed");
+ check(multiple_inheritance_abstract.MakePtrDerived3_CBase2().cbase2()!=8, "MakePtrDerived3_CBase2 failed");
+
+ // Return references
+ check(multiple_inheritance_abstract.MakeRefDerived1_CBase1().cbase1y()!=3, "MakeRefDerived1_CBase1 failed");
+ check(multiple_inheritance_abstract.MakeRefDerived1_CBase2().cbase2()!=4, "MakeRefDerived1_CBase2 failed");
+ check(multiple_inheritance_abstract.MakeRefDerived2_CBase1().cbase1y()!=6, "MakeRefDerived2_CBase1 failed");
+ check(multiple_inheritance_abstract.MakeRefDerived2_ABase1().abase1()!=5, "MakeRefDerived2_ABase1 failed");
+ check(multiple_inheritance_abstract.MakeRefDerived3_ABase1().abase1()!=9, "MakeRefDerived3_ABase1 failed");
+ check(multiple_inheritance_abstract.MakeRefDerived3_CBase1().cbase1y()!=7, "MakeRefDerived3_CBase1 failed");
+ check(multiple_inheritance_abstract.MakeRefDerived3_CBase2().cbase2()!=8, "MakeRefDerived3_CBase2 failed");
+
+ // Return by value (sliced objects)
+ check(multiple_inheritance_abstract.MakeValDerived1_CBase1().cbase1y()!=1, "MakeValDerived1_CBase1 failed");
+ check(multiple_inheritance_abstract.MakeValDerived1_CBase2().cbase2()!=2, "MakeValDerived1_CBase2 failed");
+ check(multiple_inheritance_abstract.MakeValDerived2_CBase1().cbase1y()!=1, "MakeValDerived2_CBase1 failed");
+ check(multiple_inheritance_abstract.MakeValDerived3_CBase1().cbase1y()!=1, "MakeValDerived3_CBase1 failed");
+ check(multiple_inheritance_abstract.MakeValDerived3_CBase2().cbase2()!=2, "MakeValDerived3_CBase2 failed");
+
+ }
+}
diff --git a/Examples/test-suite/java/multiple_inheritance_interfaces_runme.java b/Examples/test-suite/java/multiple_inheritance_interfaces_runme.java
new file mode 100644
index 000000000..3f2b00000
--- /dev/null
+++ b/Examples/test-suite/java/multiple_inheritance_interfaces_runme.java
@@ -0,0 +1,78 @@
+import multiple_inheritance_interfaces.*;
+import java.util.Arrays;
+
+public class multiple_inheritance_interfaces_runme {
+
+ static {
+ try {
+ System.loadLibrary("multiple_inheritance_interfaces");
+ } catch (UnsatisfiedLinkError e) {
+ System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
+ System.exit(1);
+ }
+ }
+
+ private static void checkBaseAndInterfaces(Class cls, boolean interfaceExpected, String base, String[] interfaces) {
+ String[] expectedInterfaces = new String[interfaces.length];
+ for (int i=0; i<interfaces.length; ++i)
+ expectedInterfaces[i] = "interface multiple_inheritance_interfaces." + interfaces[i];
+ Class[] actualInterfaces = cls.getInterfaces();
+ String expectedInterfacesString = Arrays.toString(expectedInterfaces);
+ String actualInterfacesString = Arrays.toString(actualInterfaces);
+ if (!expectedInterfacesString.equals(actualInterfacesString))
+ throw new RuntimeException("Expected interfaces for " + cls.getName() + ": \n" + expectedInterfacesString + "\n" + "Actual interfaces: \n" + actualInterfacesString);
+
+ String expectedBaseString = null;
+ if (interfaceExpected) {
+ // expecting an interface
+ if (!cls.isInterface())
+ throw new RuntimeException(cls.getName() + " should be an interface but is not");
+ expectedBaseString = base.isEmpty() ? "" : "multiple_inheritance_interfaces." + base;
+ } else {
+ // expecting a class
+ if (cls.isInterface())
+ throw new RuntimeException(cls.getName() + " is an interface but it should not be");
+ expectedBaseString = base.isEmpty() ? "java.lang.Object" : "multiple_inheritance_interfaces." + base;
+ }
+
+ String actualBaseString = cls.getSuperclass() == null ? "" : cls.getSuperclass().getName();
+ if (!expectedBaseString.equals(actualBaseString))
+ throw new RuntimeException("Expected base for " + cls.getName() + ": [" + expectedBaseString + "]" + " Actual base: [" + actualBaseString + "]");
+ }
+
+ public static void main(String argv[]) {
+ checkBaseAndInterfaces(IA.class, true, "", new String[] {});
+ checkBaseAndInterfaces(IB.class, true, "", new String[] {});
+ checkBaseAndInterfaces(IC.class, true, "", new String[] {"IA", "IB"});
+ checkBaseAndInterfaces(A.class, false, "", new String[] {"IA"});
+ checkBaseAndInterfaces(B.class, false, "", new String[] {"IB"});
+ checkBaseAndInterfaces(C.class, false, "", new String[] {"IA", "IB", "IC"});
+ checkBaseAndInterfaces(D.class, false, "", new String[] {"IA", "IB", "IC"});
+ checkBaseAndInterfaces(E.class, false, "D", new String[] {});
+
+ checkBaseAndInterfaces(IJ.class, true, "", new String[] {});
+ checkBaseAndInterfaces(IK.class, true, "", new String[] {"IJ"});
+ checkBaseAndInterfaces(IL.class, true, "", new String[] {"IK"});
+ checkBaseAndInterfaces(J.class, false, "", new String[] {"IJ"});
+ checkBaseAndInterfaces(K.class, false, "", new String[] {"IJ", "IK"});
+ checkBaseAndInterfaces(L.class, false, "", new String[] {"IJ", "IK", "IL"});
+ checkBaseAndInterfaces(M.class, false, "", new String[] {"IJ", "IK", "IL"});
+
+ checkBaseAndInterfaces(P.class, false, "", new String[] {});
+ checkBaseAndInterfaces(IQ.class, true, "", new String[] {});
+ checkBaseAndInterfaces(Q.class, false, "", new String[] {"IQ"});
+ checkBaseAndInterfaces(R.class, false, "P", new String[] {"IQ"});
+ checkBaseAndInterfaces(S.class, false, "P", new String[] {"IQ"});
+ checkBaseAndInterfaces(T.class, false, "", new String[] {"IQ"});
+ checkBaseAndInterfaces(U.class, false, "R", new String[] {});
+ checkBaseAndInterfaces(V.class, false, "S", new String[] {});
+ checkBaseAndInterfaces(W.class, false, "T", new String[] {});
+
+ // overloaded methods check
+ D d = new D();
+ d.ia();
+ d.ia(10);
+ d.ia("bye");
+ d.ia("bye", false);
+ }
+}
diff --git a/Examples/test-suite/java/multiple_inheritance_nspace_runme.java b/Examples/test-suite/java/multiple_inheritance_nspace_runme.java
new file mode 100644
index 000000000..461c7a131
--- /dev/null
+++ b/Examples/test-suite/java/multiple_inheritance_nspace_runme.java
@@ -0,0 +1,255 @@
+import multiple_inheritance_nspacePackage.multiple_inheritance_nspace;
+import multiple_inheritance_nspacePackage.multiple_inheritance_nspaceJNI;
+import multiple_inheritance_nspacePackage.Space.*;
+
+public class multiple_inheritance_nspace_runme {
+
+ static {
+ try {
+ System.loadLibrary("multiple_inheritance_nspace");
+ } catch (UnsatisfiedLinkError e) {
+ System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
+ System.exit(1);
+ }
+ }
+
+ //Test base class as a parameter in java
+ int jcbase1b(CBase1SwigInterface cb1){
+ return cb1.cbase1y();
+ }
+ int jabase1(ABase1SwigInterface ab1){
+ return ab1.abase1();
+ }
+ int jcbase2(CBase2SwigInterface cb2){
+ return cb2.cbase2();
+ }
+
+ public static void check(boolean fail, String msg) {
+ if (fail)
+ throw new RuntimeException(msg);
+ }
+
+ public static void main(String argv[]) {
+ //Test Derived1
+ Derived1 d1=new Derived1();
+ check(d1.cbase1y()!=3, "Derived1::cbase1y() failed");
+ check(d1.cbase2()!=4, "Derived1::cbase2() failed");
+
+ //Test Derived2
+ Derived2 d2=new Derived2();
+ check(d2.cbase1y()!=6, "Derived2::cbase1y() failed");
+ check(d2.abase1()!=5, "Derived2::abase1() failed");
+
+ //Test Derived3
+ Derived3 d3=new Derived3();
+ check(d3.cbase1y()!=7, "Derived3::cbase1y() failed");
+ check(d3.cbase2()!=8, "Derived3::cbase2() failed");
+ check(d3.abase1()!=9, "Derived3::abase1() failed");
+
+ //Test Bottom1
+ Bottom1 b1=new Bottom1();
+ check(b1.cbase1y()!=103, "Bottom1::cbase1y() failed");
+ check(b1.cbase2()!=104, "Bottom1::cbase2() failed");
+
+ //Test Bottom2
+ Bottom2 b2=new Bottom2();
+ check(b2.cbase1y()!=206, "Bottom2::cbase1y() failed");
+ check(b2.abase1()!=205, "Bottom2::abase1() failed");
+
+ //Test Bottom3
+ Bottom3 b3=new Bottom3();
+ check(b3.cbase1y()!=307, "Bottom3::cbase1y() failed");
+ check(b3.cbase2()!=308, "Bottom3::cbase2() failed");
+ check(b3.abase1()!=309, "Bottom3::abase1() failed");
+
+ //Test interfaces from c++ classes
+ CBase1SwigInterface cb1=new CBase1();
+ CBase2SwigInterface cb2=new CBase2();
+ check(cb1.cbase1y()!=1, "CBase1::cbase1y() failed");
+ check(cb2.cbase2()!=2, "CBase2::cbase2() failed");
+
+ //Test nspace class as return value
+ ABase1SwigInterface ab1=d3.cloneit();
+ check(ab1.abase1()!=9, "Derived3::abase1() through ABase1 failed");
+
+ //Test concrete base class as return value
+ CBase1SwigInterface cb6=d2.cloneit();
+ CBase2SwigInterface cb7=d1.cloneit();
+ check(cb6.cbase1y()!=6, "Derived2::cbase1y() through CBase1 failed");
+ check(cb7.cbase2()!=4, "Derived1:cbase2() through ABase1 failed");
+
+ //Test multi inheritance
+ CBase1SwigInterface cb3=new Derived1();
+ CBase1SwigInterface cb4=new Derived3();
+ CBase2SwigInterface cb5=new Derived3();
+ ABase1SwigInterface ab6=new Derived2();
+ check(cb3.cbase1y()!=3, "Derived1::cbase1y() through CBase1 failed");
+ check(cb4.cbase1y()!=7, "Derived3::cbase1y() through CBase1 failed");
+ check(cb5.cbase2()!=8, "Derived3::cbase2() through CBase2 failed");
+ check(ab6.abase1()!=5, "Derived2::abase1() through ABase1 failed");
+
+ //Test base classes as parameter in java
+ multiple_inheritance_nspace_runme mhar=new multiple_inheritance_nspace_runme();
+ check(mhar.jcbase1b(d1)!=3, "jcbase1b() through Derived1 as parameter failed");
+ check(mhar.jcbase1b(d2)!=6, "jcbase1b() through Derived2 as parameter failed");
+ check(mhar.jcbase1b(d3)!=7, "jcbase1b() through Derived3 as parameter failed");
+ check(mhar.jcbase2(d1)!=4, "jcbase2() through Derived1 as parameter failed");
+ check(mhar.jcbase2(d3)!=8, "jcbase2() through Derived3 as parameter failed");
+ check(mhar.jabase1(d2)!=5, "jabase1() through Derived2 as parameter failed");
+ check(mhar.jabase1(d3)!=9, "jabase1() through Derived3 as parameter failed");
+
+ //Value parameters
+ //Test CBase1 CBase2 as parameters (note slicing for Derived and Bottom classes)
+ check(multiple_inheritance_nspace.InputValCBase1(d1)!=1, "InputValCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase1(d2)!=1, "InputValCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase1(d3)!=1, "InputValCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase2(d3)!=2, "InputValCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase2(d1)!=2, "InputValCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase1(cb1)!=1, "InputValCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase2(cb2)!=2, "InputValCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase1(b1)!=1, "InputValCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase1(b2)!=1, "InputValCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase1(b3)!=1, "InputValCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase2(b3)!=2, "InputValCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputValCBase2(b1)!=2, "InputValCBase2(), Bottom1 as a parameter failed");
+
+ //Pointer parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_nspace.InputPtrABase1(d2)!=5, "InputPtrABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrABase1(d3)!=9, "InputPtrABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrABase1(b2)!=205, "InputPtrABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrABase1(b3)!=309, "InputPtrABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_nspace.InputPtrCBase1(d1)!=3, "InputPtrCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase1(d2)!=6, "InputPtrCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase1(d3)!=7, "InputPtrCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase2(d3)!=8, "InputPtrCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase2(d1)!=4, "InputPtrCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase1(cb1)!=1, "InputPtrCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase2(cb2)!=2, "InputPtrCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase1(b1)!=103, "InputPtrCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase1(b2)!=206, "InputPtrCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase1(b3)!=307, "InputPtrCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase2(b3)!=308, "InputPtrCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputPtrCBase2(b1)!=104, "InputPtrCBase2(), Bottom1 as a parameter failed");
+
+ //Reference parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_nspace.InputRefABase1(d2)!=5, "InputRefABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefABase1(d3)!=9, "InputRefABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefABase1(b2)!=205, "InputRefABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefABase1(b3)!=309, "InputRefABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_nspace.InputRefCBase1(d1)!=3, "InputRefCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase1(d2)!=6, "InputRefCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase1(d3)!=7, "InputRefCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase2(d3)!=8, "InputRefCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase2(d1)!=4, "InputRefCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase1(cb1)!=1, "InputRefCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase2(cb2)!=2, "InputRefCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase1(b1)!=103, "InputRefCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase1(b2)!=206, "InputRefCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase1(b3)!=307, "InputRefCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase2(b3)!=308, "InputRefCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputRefCBase2(b1)!=104, "InputRefCBase2(), Bottom1 as a parameter failed");
+
+ //Const reference pointer parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_nspace.InputCPtrRefABase1(d2)!=5, "InputCPtrRefABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefABase1(d3)!=9, "InputCPtrRefABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefABase1(b2)!=205, "InputCPtrRefABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefABase1(b3)!=309, "InputCPtrRefABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_nspace.InputCPtrRefCBase1(d1)!=3, "InputCPtrRefCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase1(d2)!=6, "InputCPtrRefCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase1(d3)!=7, "InputCPtrRefCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase2(d3)!=8, "InputCPtrRefCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase2(d1)!=4, "InputCPtrRefCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase1(cb1)!=1, "InputCPtrRefCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase2(cb2)!=2, "InputCPtrRefCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase1(b1)!=103, "InputCPtrRefCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase1(b2)!=206, "InputCPtrRefCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase1(b3)!=307, "InputCPtrRefCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase2(b3)!=308, "InputCPtrRefCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_nspace.InputCPtrRefCBase2(b1)!=104, "InputCPtrRefCBase2(), Bottom1 as a parameter failed");
+
+ //Derived classes as parameters
+ check(multiple_inheritance_nspace.InputValDerived1(d1)!=3+4, "InputValDerived1() failed");
+ check(multiple_inheritance_nspace.InputValDerived2(d2)!=6+5, "InputValDerived2() failed");
+ check(multiple_inheritance_nspace.InputValDerived3(d3)!=7+8+9, "InputValDerived3() failed");
+
+ check(multiple_inheritance_nspace.InputRefDerived1(d1)!=3+4, "InputRefDerived1() failed");
+ check(multiple_inheritance_nspace.InputRefDerived2(d2)!=6+5, "InputRefDerived2() failed");
+ check(multiple_inheritance_nspace.InputRefDerived3(d3)!=7+8+9, "InputRefDerived3() failed");
+
+ check(multiple_inheritance_nspace.InputPtrDerived1(d1)!=3+4, "InputPtrDerived1() failed");
+ check(multiple_inheritance_nspace.InputPtrDerived2(d2)!=6+5, "InputPtrDerived2() failed");
+ check(multiple_inheritance_nspace.InputPtrDerived3(d3)!=7+8+9, "InputPtrDerived3() failed");
+
+ check(multiple_inheritance_nspace.InputCPtrRefDerived1(d1)!=3+4, "InputCPtrRefDerived1() failed");
+ check(multiple_inheritance_nspace.InputCPtrRefDerived2(d2)!=6+5, "InputCPtrRefDerived2() failed");
+ check(multiple_inheritance_nspace.InputCPtrRefDerived3(d3)!=7+8+9, "InputCPtrRefDerived3() failed");
+
+ //Bottom classes as Derived parameters
+ check(multiple_inheritance_nspace.InputValDerived1(b1)!=3+4, "InputValDerived1() failed");
+ check(multiple_inheritance_nspace.InputValDerived2(b2)!=6+5, "InputValDerived2() failed");
+ check(multiple_inheritance_nspace.InputValDerived3(b3)!=7+8+9, "InputValDerived3() failed");
+
+ check(multiple_inheritance_nspace.InputRefDerived1(b1)!=103+104, "InputRefDerived1() failed");
+ check(multiple_inheritance_nspace.InputRefDerived2(b2)!=206+205, "InputRefDerived2() failed");
+ check(multiple_inheritance_nspace.InputRefDerived3(b3)!=307+308+309, "InputRefDerived3() failed");
+
+ check(multiple_inheritance_nspace.InputPtrDerived1(b1)!=103+104, "InputPtrDerived1() failed");
+ check(multiple_inheritance_nspace.InputPtrDerived2(b2)!=206+205, "InputPtrDerived2() failed");
+ check(multiple_inheritance_nspace.InputPtrDerived3(b3)!=307+308+309, "InputPtrDerived3() failed");
+
+ check(multiple_inheritance_nspace.InputCPtrRefDerived1(b1)!=103+104, "InputCPtrRefDerived1() failed");
+ check(multiple_inheritance_nspace.InputCPtrRefDerived2(b2)!=206+205, "InputCPtrRefDerived2() failed");
+ check(multiple_inheritance_nspace.InputCPtrRefDerived3(b3)!=307+308+309, "InputCPtrRefDerived3() failed");
+
+ //Bottom classes as Bottom parameters
+ check(multiple_inheritance_nspace.InputValBottom1(b1)!=103+104, "InputValBottom1() failed");
+ check(multiple_inheritance_nspace.InputValBottom2(b2)!=206+205, "InputValBottom2() failed");
+ check(multiple_inheritance_nspace.InputValBottom3(b3)!=307+308+309, "InputValBottom3() failed");
+
+ check(multiple_inheritance_nspace.InputRefBottom1(b1)!=103+104, "InputRefBottom1() failed");
+ check(multiple_inheritance_nspace.InputRefBottom2(b2)!=206+205, "InputRefBottom2() failed");
+ check(multiple_inheritance_nspace.InputRefBottom3(b3)!=307+308+309, "InputRefBottom3() failed");
+
+ check(multiple_inheritance_nspace.InputPtrBottom1(b1)!=103+104, "InputPtrBottom1() failed");
+ check(multiple_inheritance_nspace.InputPtrBottom2(b2)!=206+205, "InputPtrBottom2() failed");
+ check(multiple_inheritance_nspace.InputPtrBottom3(b3)!=307+308+309, "InputPtrBottom3() failed");
+
+ check(multiple_inheritance_nspace.InputCPtrRefBottom1(b1)!=103+104, "InputCPtrRefBottom1() failed");
+ check(multiple_inheritance_nspace.InputCPtrRefBottom2(b2)!=206+205, "InputCPtrRefBottom2() failed");
+ check(multiple_inheritance_nspace.InputCPtrRefBottom3(b3)!=307+308+309, "InputCPtrRefBottom3() failed");
+ // Return pointers
+ check(multiple_inheritance_nspace.MakePtrDerived1_CBase1().cbase1y()!=3, "MakePtrDerived1_CBase1 failed");
+ check(multiple_inheritance_nspace.MakePtrDerived1_CBase2().cbase2()!=4, "MakePtrDerived1_CBase2 failed");
+ check(multiple_inheritance_nspace.MakePtrDerived2_CBase1().cbase1y()!=6, "MakePtrDerived2_CBase1 failed");
+ check(multiple_inheritance_nspace.MakePtrDerived2_ABase1().abase1()!=5, "MakePtrDerived2_ABase1 failed");
+ check(multiple_inheritance_nspace.MakePtrDerived3_ABase1().abase1()!=9, "MakePtrDerived3_ABase1 failed");
+ check(multiple_inheritance_nspace.MakePtrDerived3_CBase1().cbase1y()!=7, "MakePtrDerived3_CBase1 failed");
+ check(multiple_inheritance_nspace.MakePtrDerived3_CBase2().cbase2()!=8, "MakePtrDerived3_CBase2 failed");
+
+ // Return references
+ check(multiple_inheritance_nspace.MakeRefDerived1_CBase1().cbase1y()!=3, "MakeRefDerived1_CBase1 failed");
+ check(multiple_inheritance_nspace.MakeRefDerived1_CBase2().cbase2()!=4, "MakeRefDerived1_CBase2 failed");
+ check(multiple_inheritance_nspace.MakeRefDerived2_CBase1().cbase1y()!=6, "MakeRefDerived2_CBase1 failed");
+ check(multiple_inheritance_nspace.MakeRefDerived2_ABase1().abase1()!=5, "MakeRefDerived2_ABase1 failed");
+ check(multiple_inheritance_nspace.MakeRefDerived3_ABase1().abase1()!=9, "MakeRefDerived3_ABase1 failed");
+ check(multiple_inheritance_nspace.MakeRefDerived3_CBase1().cbase1y()!=7, "MakeRefDerived3_CBase1 failed");
+ check(multiple_inheritance_nspace.MakeRefDerived3_CBase2().cbase2()!=8, "MakeRefDerived3_CBase2 failed");
+
+ // Return by value (sliced objects)
+ check(multiple_inheritance_nspace.MakeValDerived1_CBase1().cbase1y()!=1, "MakeValDerived1_CBase1 failed");
+ check(multiple_inheritance_nspace.MakeValDerived1_CBase2().cbase2()!=2, "MakeValDerived1_CBase2 failed");
+ check(multiple_inheritance_nspace.MakeValDerived2_CBase1().cbase1y()!=1, "MakeValDerived2_CBase1 failed");
+ check(multiple_inheritance_nspace.MakeValDerived3_CBase1().cbase1y()!=1, "MakeValDerived3_CBase1 failed");
+ check(multiple_inheritance_nspace.MakeValDerived3_CBase2().cbase2()!=2, "MakeValDerived3_CBase2 failed");
+
+ }
+}
diff --git a/Examples/test-suite/java/multiple_inheritance_shared_ptr_runme.java b/Examples/test-suite/java/multiple_inheritance_shared_ptr_runme.java
new file mode 100644
index 000000000..6472a911e
--- /dev/null
+++ b/Examples/test-suite/java/multiple_inheritance_shared_ptr_runme.java
@@ -0,0 +1,337 @@
+import multiple_inheritance_shared_ptr.*;
+
+public class multiple_inheritance_shared_ptr_runme {
+
+ static {
+ try {
+ System.loadLibrary("multiple_inheritance_shared_ptr");
+ } catch (UnsatisfiedLinkError e) {
+ System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
+ System.exit(1);
+ }
+ }
+
+ //Test base class as a parameter in java
+ int jcbase1b(CBase1 cb1){
+ return cb1.cbase1y();
+ }
+ int jabase1(ABase1 ab1){
+ return ab1.abase1();
+ }
+ int jcbase2(CBase2 cb2){
+ return cb2.cbase2();
+ }
+
+ public static void check(boolean fail, String msg) {
+ if (fail)
+ throw new RuntimeException(msg);
+ }
+
+ public static void main(String argv[]) {
+ //Test Derived1
+ Derived1 d1=new Derived1();
+ check(d1.cbase1y()!=3, "Derived1::cbase1y() failed");
+ check(d1.cbase2()!=4, "Derived1::cbase2() failed");
+
+ //Test Derived2
+ Derived2 d2=new Derived2();
+ check(d2.cbase1y()!=6, "Derived2::cbase1y() failed");
+ check(d2.abase1()!=5, "Derived2::abase1() failed");
+
+ //Test Derived3
+ Derived3 d3=new Derived3();
+ check(d3.cbase1y()!=7, "Derived3::cbase1y() failed");
+ check(d3.cbase2()!=8, "Derived3::cbase2() failed");
+ check(d3.abase1()!=9, "Derived3::abase1() failed");
+
+ //Test Bottom1
+ Bottom1 b1=new Bottom1();
+ check(b1.cbase1y()!=103, "Bottom1::cbase1y() failed");
+ check(b1.cbase2()!=104, "Bottom1::cbase2() failed");
+
+ //Test Bottom2
+ Bottom2 b2=new Bottom2();
+ check(b2.cbase1y()!=206, "Bottom2::cbase1y() failed");
+ check(b2.abase1()!=205, "Bottom2::abase1() failed");
+
+ //Test Bottom3
+ Bottom3 b3=new Bottom3();
+ check(b3.cbase1y()!=307, "Bottom3::cbase1y() failed");
+ check(b3.cbase2()!=308, "Bottom3::cbase2() failed");
+ check(b3.abase1()!=309, "Bottom3::abase1() failed");
+
+ //Test interfaces from c++ classes
+ CBase1 cb1=new CBase1SwigImpl();
+ CBase2 cb2=new CBase2SwigImpl();
+ check(cb1.cbase1y()!=1, "CBase1::cbase1y() failed");
+ check(cb2.cbase2()!=2, "CBase2::cbase2() failed");
+
+ //Test abstract class as return value
+ ABase1 ab1=d3.cloneit();
+ check(ab1.abase1()!=9, "Derived3::abase1() through ABase1 failed");
+
+ //Test concrete base class as return value
+ CBase1 cb6=d2.cloneit();
+ CBase2 cb7=d1.cloneit();
+ check(cb6.cbase1y()!=6, "Derived2::cbase1y() through CBase1 failed");
+ check(cb7.cbase2()!=4, "Derived1:cbase2() through ABase1 failed");
+
+ //Test multi inheritance
+ CBase1 cb3=new Derived1();
+ CBase1 cb4=new Derived3();
+ CBase2 cb5=new Derived3();
+ ABase1 ab6=new Derived2();
+ check(cb3.cbase1y()!=3, "Derived1::cbase1y() through CBase1 failed");
+ check(cb4.cbase1y()!=7, "Derived3::cbase1y() through CBase1 failed");
+ check(cb5.cbase2()!=8, "Derived3::cbase2() through CBase2 failed");
+ check(ab6.abase1()!=5, "Derived2::abase1() through ABase1 failed");
+
+ //Test base classes as parameter in java
+ multiple_inheritance_shared_ptr_runme mhar=new multiple_inheritance_shared_ptr_runme();
+ check(mhar.jcbase1b(d1)!=3, "jcbase1b() through Derived1 as parameter failed");
+ check(mhar.jcbase1b(d2)!=6, "jcbase1b() through Derived2 as parameter failed");
+ check(mhar.jcbase1b(d3)!=7, "jcbase1b() through Derived3 as parameter failed");
+ check(mhar.jcbase2(d1)!=4, "jcbase2() through Derived1 as parameter failed");
+ check(mhar.jcbase2(d3)!=8, "jcbase2() through Derived3 as parameter failed");
+ check(mhar.jabase1(d2)!=5, "jabase1() through Derived2 as parameter failed");
+ check(mhar.jabase1(d3)!=9, "jabase1() through Derived3 as parameter failed");
+
+ //Value parameters
+ //Test CBase1 CBase2 as parameters (note slicing for Derived and Bottom classes)
+ check(multiple_inheritance_shared_ptr.InputValCBase1(d1)!=1, "InputValCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase1(d2)!=1, "InputValCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase1(d3)!=1, "InputValCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase2(d3)!=2, "InputValCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase2(d1)!=2, "InputValCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase1(cb1)!=1, "InputValCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase2(cb2)!=2, "InputValCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase1(b1)!=1, "InputValCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase1(b2)!=1, "InputValCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase1(b3)!=1, "InputValCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase2(b3)!=2, "InputValCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputValCBase2(b1)!=2, "InputValCBase2(), Bottom1 as a parameter failed");
+
+ //Pointer parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_shared_ptr.InputPtrABase1(d2)!=5, "InputPtrABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrABase1(d3)!=9, "InputPtrABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrABase1(b2)!=205, "InputPtrABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrABase1(b3)!=309, "InputPtrABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_shared_ptr.InputPtrCBase1(d1)!=3, "InputPtrCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase1(d2)!=6, "InputPtrCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase1(d3)!=7, "InputPtrCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase2(d3)!=8, "InputPtrCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase2(d1)!=4, "InputPtrCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase1(cb1)!=1, "InputPtrCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase2(cb2)!=2, "InputPtrCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase1(b1)!=103, "InputPtrCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase1(b2)!=206, "InputPtrCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase1(b3)!=307, "InputPtrCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase2(b3)!=308, "InputPtrCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputPtrCBase2(b1)!=104, "InputPtrCBase2(), Bottom1 as a parameter failed");
+
+ //Reference parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_shared_ptr.InputRefABase1(d2)!=5, "InputRefABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefABase1(d3)!=9, "InputRefABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefABase1(b2)!=205, "InputRefABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefABase1(b3)!=309, "InputRefABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_shared_ptr.InputRefCBase1(d1)!=3, "InputRefCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase1(d2)!=6, "InputRefCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase1(d3)!=7, "InputRefCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase2(d3)!=8, "InputRefCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase2(d1)!=4, "InputRefCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase1(cb1)!=1, "InputRefCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase2(cb2)!=2, "InputRefCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase1(b1)!=103, "InputRefCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase1(b2)!=206, "InputRefCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase1(b3)!=307, "InputRefCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase2(b3)!=308, "InputRefCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputRefCBase2(b1)!=104, "InputRefCBase2(), Bottom1 as a parameter failed");
+
+ //Const reference pointer parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_shared_ptr.InputCPtrRefABase1(d2)!=5, "InputCPtrRefABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefABase1(d3)!=9, "InputCPtrRefABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefABase1(b2)!=205, "InputCPtrRefABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefABase1(b3)!=309, "InputCPtrRefABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase1(d1)!=3, "InputCPtrRefCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase1(d2)!=6, "InputCPtrRefCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase1(d3)!=7, "InputCPtrRefCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase2(d3)!=8, "InputCPtrRefCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase2(d1)!=4, "InputCPtrRefCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase1(cb1)!=1, "InputCPtrRefCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase2(cb2)!=2, "InputCPtrRefCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase1(b1)!=103, "InputCPtrRefCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase1(b2)!=206, "InputCPtrRefCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase1(b3)!=307, "InputCPtrRefCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase2(b3)!=308, "InputCPtrRefCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefCBase2(b1)!=104, "InputCPtrRefCBase2(), Bottom1 as a parameter failed");
+
+ //Shared pointer parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_shared_ptr.InputSharedPtrABase1(d2)!=5, "InputSharedPtrABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrABase1(d3)!=9, "InputSharedPtrABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrABase1(b2)!=205, "InputSharedPtrABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrABase1(b3)!=309, "InputSharedPtrABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase1(d1)!=3, "InputSharedPtrCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase1(d2)!=6, "InputSharedPtrCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase1(d3)!=7, "InputSharedPtrCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase2(d3)!=8, "InputSharedPtrCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase2(d1)!=4, "InputSharedPtrCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase1(cb1)!=1, "InputSharedPtrCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase2(cb2)!=2, "InputSharedPtrCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase1(b1)!=103, "InputSharedPtrCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase1(b2)!=206, "InputSharedPtrCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase1(b3)!=307, "InputSharedPtrCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase2(b3)!=308, "InputSharedPtrCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrCBase2(b1)!=104, "InputSharedPtrCBase2(), Bottom1 as a parameter failed");
+
+ //Shared pointer reference parameters
+ //Test ABase1 as a parameter
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefABase1(d2)!=5, "InputSharedPtrRefABase1() through Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefABase1(d3)!=9, "InputSharedPtrRefABase1() through Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefABase1(b2)!=205, "InputSharedPtrRefABase1() through Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefABase1(b3)!=309, "InputSharedPtrRefABase1() through Bottom3 as a parameter failed");
+
+ //Test CBase1 CBase2 as parameters
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase1(d1)!=3, "InputSharedPtrRefCBase1(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase1(d2)!=6, "InputSharedPtrRefCBase1(), Derived2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase1(d3)!=7, "InputSharedPtrRefCBase1(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase2(d3)!=8, "InputSharedPtrRefCBase2(), Derived3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase2(d1)!=4, "InputSharedPtrRefCBase2(), Derived1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase1(cb1)!=1, "InputSharedPtrRefCBase1(), CBase1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase2(cb2)!=2, "InputSharedPtrRefCBase2(), CBase2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase1(b1)!=103, "InputSharedPtrRefCBase1(), Bottom1 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase1(b2)!=206, "InputSharedPtrRefCBase1(), Bottom2 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase1(b3)!=307, "InputSharedPtrRefCBase1(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase2(b3)!=308, "InputSharedPtrRefCBase2(), Bottom3 as a parameter failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefCBase2(b1)!=104, "InputSharedPtrRefCBase2(), Bottom1 as a parameter failed");
+
+ //Derived classes as parameters
+ check(multiple_inheritance_shared_ptr.InputValDerived1(d1)!=3+4, "InputValDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputValDerived2(d2)!=6+5, "InputValDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputValDerived3(d3)!=7+8+9, "InputValDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputRefDerived1(d1)!=3+4, "InputRefDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputRefDerived2(d2)!=6+5, "InputRefDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputRefDerived3(d3)!=7+8+9, "InputRefDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputPtrDerived1(d1)!=3+4, "InputPtrDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputPtrDerived2(d2)!=6+5, "InputPtrDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputPtrDerived3(d3)!=7+8+9, "InputPtrDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputCPtrRefDerived1(d1)!=3+4, "InputCPtrRefDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefDerived2(d2)!=6+5, "InputCPtrRefDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefDerived3(d3)!=7+8+9, "InputCPtrRefDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputSharedPtrDerived1(d1)!=3+4, "InputSharedPtrDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrDerived2(d2)!=6+5, "InputSharedPtrDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrDerived3(d3)!=7+8+9, "InputSharedPtrDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefDerived1(d1)!=3+4, "InputSharedPtrRefDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefDerived2(d2)!=6+5, "InputSharedPtrRefDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefDerived3(d3)!=7+8+9, "InputSharedPtrRefDerived3() failed");
+
+ //Bottom classes as Derived parameters
+ check(multiple_inheritance_shared_ptr.InputValDerived1(b1)!=3+4, "InputValDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputValDerived2(b2)!=6+5, "InputValDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputValDerived3(b3)!=7+8+9, "InputValDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputRefDerived1(b1)!=103+104, "InputRefDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputRefDerived2(b2)!=206+205, "InputRefDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputRefDerived3(b3)!=307+308+309, "InputRefDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputPtrDerived1(b1)!=103+104, "InputPtrDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputPtrDerived2(b2)!=206+205, "InputPtrDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputPtrDerived3(b3)!=307+308+309, "InputPtrDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputCPtrRefDerived1(b1)!=103+104, "InputCPtrRefDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefDerived2(b2)!=206+205, "InputCPtrRefDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefDerived3(b3)!=307+308+309, "InputCPtrRefDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputSharedPtrDerived1(b1)!=103+104, "InputSharedPtrDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrDerived2(b2)!=206+205, "InputSharedPtrDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrDerived3(b3)!=307+308+309, "InputSharedPtrDerived3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefDerived1(b1)!=103+104, "InputSharedPtrRefDerived1() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefDerived2(b2)!=206+205, "InputSharedPtrRefDerived2() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefDerived3(b3)!=307+308+309, "InputSharedPtrRefDerived3() failed");
+
+ //Bottom classes as Bottom parameters
+ check(multiple_inheritance_shared_ptr.InputValBottom1(b1)!=103+104, "InputValBottom1() failed");
+ check(multiple_inheritance_shared_ptr.InputValBottom2(b2)!=206+205, "InputValBottom2() failed");
+ check(multiple_inheritance_shared_ptr.InputValBottom3(b3)!=307+308+309, "InputValBottom3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputRefBottom1(b1)!=103+104, "InputRefBottom1() failed");
+ check(multiple_inheritance_shared_ptr.InputRefBottom2(b2)!=206+205, "InputRefBottom2() failed");
+ check(multiple_inheritance_shared_ptr.InputRefBottom3(b3)!=307+308+309, "InputRefBottom3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputPtrBottom1(b1)!=103+104, "InputPtrBottom1() failed");
+ check(multiple_inheritance_shared_ptr.InputPtrBottom2(b2)!=206+205, "InputPtrBottom2() failed");
+ check(multiple_inheritance_shared_ptr.InputPtrBottom3(b3)!=307+308+309, "InputPtrBottom3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputCPtrRefBottom1(b1)!=103+104, "InputCPtrRefBottom1() failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefBottom2(b2)!=206+205, "InputCPtrRefBottom2() failed");
+ check(multiple_inheritance_shared_ptr.InputCPtrRefBottom3(b3)!=307+308+309, "InputCPtrRefBottom3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputSharedPtrBottom1(b1)!=103+104, "InputSharedPtrBottom1() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrBottom2(b2)!=206+205, "InputSharedPtrBottom2() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrBottom3(b3)!=307+308+309, "InputSharedPtrBottom3() failed");
+
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefBottom1(b1)!=103+104, "InputSharedPtrRefBottom1() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefBottom2(b2)!=206+205, "InputSharedPtrRefBottom2() failed");
+ check(multiple_inheritance_shared_ptr.InputSharedPtrRefBottom3(b3)!=307+308+309, "InputSharedPtrRefBottom3() failed");
+
+ // Return pointers
+ check(multiple_inheritance_shared_ptr.MakePtrDerived1_CBase1().cbase1y()!=3, "MakePtrDerived1_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakePtrDerived1_CBase2().cbase2()!=4, "MakePtrDerived1_CBase2 failed");
+ check(multiple_inheritance_shared_ptr.MakePtrDerived2_CBase1().cbase1y()!=6, "MakePtrDerived2_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakePtrDerived2_ABase1().abase1()!=5, "MakePtrDerived2_ABase1 failed");
+ check(multiple_inheritance_shared_ptr.MakePtrDerived3_ABase1().abase1()!=9, "MakePtrDerived3_ABase1 failed");
+ check(multiple_inheritance_shared_ptr.MakePtrDerived3_CBase1().cbase1y()!=7, "MakePtrDerived3_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakePtrDerived3_CBase2().cbase2()!=8, "MakePtrDerived3_CBase2 failed");
+
+ // Return references
+ check(multiple_inheritance_shared_ptr.MakeRefDerived1_CBase1().cbase1y()!=3, "MakeRefDerived1_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeRefDerived1_CBase2().cbase2()!=4, "MakeRefDerived1_CBase2 failed");
+ check(multiple_inheritance_shared_ptr.MakeRefDerived2_CBase1().cbase1y()!=6, "MakeRefDerived2_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeRefDerived2_ABase1().abase1()!=5, "MakeRefDerived2_ABase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeRefDerived3_ABase1().abase1()!=9, "MakeRefDerived3_ABase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeRefDerived3_CBase1().cbase1y()!=7, "MakeRefDerived3_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeRefDerived3_CBase2().cbase2()!=8, "MakeRefDerived3_CBase2 failed");
+
+ // Return by value (sliced objects)
+ check(multiple_inheritance_shared_ptr.MakeValDerived1_CBase1().cbase1y()!=1, "MakeValDerived1_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeValDerived1_CBase2().cbase2()!=2, "MakeValDerived1_CBase2 failed");
+ check(multiple_inheritance_shared_ptr.MakeValDerived2_CBase1().cbase1y()!=1, "MakeValDerived2_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeValDerived3_CBase1().cbase1y()!=1, "MakeValDerived3_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeValDerived3_CBase2().cbase2()!=2, "MakeValDerived3_CBase2 failed");
+
+ // Return smart pointers
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrDerived1_CBase1().cbase1y()!=3, "MakeSharedPtrDerived1_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrDerived1_CBase2().cbase2()!=4, "MakeSharedPtrDerived1_CBase2 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrDerived2_CBase1().cbase1y()!=6, "MakeSharedPtrDerived2_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrDerived2_ABase1().abase1()!=5, "MakeSharedPtrDerived2_ABase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrDerived3_ABase1().abase1()!=9, "MakeSharedPtrDerived3_ABase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrDerived3_CBase1().cbase1y()!=7, "MakeSharedPtrDerived3_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrDerived3_CBase2().cbase2()!=8, "MakeSharedPtrDerived3_CBase2 failed");
+
+ // Return smart pointers references
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrRefDerived1_CBase1().cbase1y()!=3, "MakeSharedPtrRefDerived1_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrRefDerived1_CBase2().cbase2()!=4, "MakeSharedPtrRefDerived1_CBase2 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrRefDerived2_CBase1().cbase1y()!=6, "MakeSharedPtrRefDerived2_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrRefDerived2_ABase1().abase1()!=5, "MakeSharedPtrRefDerived2_ABase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrRefDerived3_ABase1().abase1()!=9, "MakeSharedPtrRefDerived3_ABase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrRefDerived3_CBase1().cbase1y()!=7, "MakeSharedPtrRefDerived3_CBase1 failed");
+ check(multiple_inheritance_shared_ptr.MakeSharedPtrRefDerived3_CBase2().cbase2()!=8, "MakeSharedPtrRefDerived3_CBase2 failed");
+ }
+}
diff --git a/Examples/test-suite/java/smart_pointer_ignore_runme.java b/Examples/test-suite/java/smart_pointer_ignore_runme.java
new file mode 100644
index 000000000..f02bf536a
--- /dev/null
+++ b/Examples/test-suite/java/smart_pointer_ignore_runme.java
@@ -0,0 +1,19 @@
+import smart_pointer_ignore.*;
+
+public class smart_pointer_ignore_runme {
+
+ static {
+ try {
+ System.loadLibrary("smart_pointer_ignore");
+ } catch (UnsatisfiedLinkError e) {
+ System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
+ System.exit(1);
+ }
+ }
+
+ public static void main(String argv[]) {
+ DerivedPtr d = smart_pointer_ignore.makeDerived();
+ d.base();
+ d.derived();
+ }
+}
diff --git a/Examples/test-suite/javascript/Makefile.in b/Examples/test-suite/javascript/Makefile.in
index c68dd22b2..b430f236f 100644
--- a/Examples/test-suite/javascript/Makefile.in
+++ b/Examples/test-suite/javascript/Makefile.in
@@ -66,18 +66,18 @@ ifeq (node,$(JSENGINE))
$(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile SRCDIR='$(SRCDIR)' \
SWIG_LIB_DIR='$(SWIG_LIB_DIR)' SWIGEXE='$(SWIGEXE)' \
SWIGOPT='-javascript $(SWIGOPT) -o $*_wrap.cxx $(srcdir)/../$*.i' swiginvoke && \
- $(NODEGYP) --loglevel=silent --directory $* configure build 1>>/dev/null
+ $(COMPILETOOL) $(NODEGYP) --loglevel=silent --directory $* configure build 1>>/dev/null
swig_and_compile_cpp = \
$(setup_node) && \
$(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile SRCDIR='$(SRCDIR)' \
SWIG_LIB_DIR='$(SWIG_LIB_DIR)' SWIGEXE='$(SWIGEXE)' \
SWIGOPT='-c++ -javascript $(SWIGOPT) $(srcdir)/../$*.i' swiginvoke && \
- $(NODEGYP) --loglevel=silent --directory $* configure build 1>>/dev/null
+ $(COMPILETOOL) $(NODEGYP) --loglevel=silent --directory $* configure build 1>>/dev/null
run_testcase = \
if [ -f $(srcdir)/$*$(SCRIPTSUFFIX) ]; then \
- env NODE_PATH=$$PWD:$(srcdir) $(NODEJS) $(srcdir)/$*$(SCRIPTSUFFIX); \
+ env NODE_PATH=$$PWD:$(srcdir) $(RUNTOOL) $(NODEJS) $(srcdir)/$*$(SCRIPTSUFFIX); \
fi
diff --git a/Examples/test-suite/li_boost_array.i b/Examples/test-suite/li_boost_array.i
index be51d15e0..e18140a50 100644
--- a/Examples/test-suite/li_boost_array.i
+++ b/Examples/test-suite/li_boost_array.i
@@ -25,6 +25,8 @@ namespace boost {
using std::array;
}
+%ignore std::array::fill; // Some older versions of boost don't have this function
+
%include <std_array.i>
%template(ArrayInt6) std::array<int, 6>;
diff --git a/Examples/test-suite/li_boost_shared_ptr_template.i b/Examples/test-suite/li_boost_shared_ptr_template.i
index e3b735c24..3965a976e 100644
--- a/Examples/test-suite/li_boost_shared_ptr_template.i
+++ b/Examples/test-suite/li_boost_shared_ptr_template.i
@@ -67,7 +67,7 @@ INTEGER bar_getter(Base<INTEGER>& foo) {
// 2nd test - templates with default template parameters
#if defined(SHARED_PTR_WRAPPERS_IMPLEMENTED)
-%shared_ptr(Space::BaseDefault<short>)
+%shared_ptr(Space::BaseDefault<short, int>)
%shared_ptr(Space::DerivedDefault<short>)
%shared_ptr(Space::DerivedDefault2<short>)
diff --git a/Examples/test-suite/li_std_vector.i b/Examples/test-suite/li_std_vector.i
index 9c76659df..b728c55af 100644
--- a/Examples/test-suite/li_std_vector.i
+++ b/Examples/test-suite/li_std_vector.i
@@ -130,3 +130,13 @@ namespace aa {
std::vector< ::aa::Holder > vec1(std::vector< ::aa::Holder > x) { return x; }
%}
#endif
+
+// exercising vectors of strings
+%inline %{
+std::vector<std::string> RevStringVec (const std::vector<std::string> &In)
+ {
+ std::vector<std::string> result(In);
+ std::reverse(result.begin(), result.end());
+ return(result);
+ }
+%}
diff --git a/Examples/test-suite/long_long.i b/Examples/test-suite/long_long.i
index 74dd87a15..47acc15c6 100644
--- a/Examples/test-suite/long_long.i
+++ b/Examples/test-suite/long_long.i
@@ -38,3 +38,9 @@ unsigned long long ull;
#define lconst5 987654321LL
#define lconst6 987654321ULL
+
+%inline %{
+long long UnsignedToSigned(unsigned long long ull) {
+ return (long long)ull;
+}
+%}
diff --git a/Examples/test-suite/lua/Makefile.in b/Examples/test-suite/lua/Makefile.in
index 7be59214b..7a77bbb9e 100644
--- a/Examples/test-suite/lua/Makefile.in
+++ b/Examples/test-suite/lua/Makefile.in
@@ -14,6 +14,7 @@ top_builddir = @top_builddir@
CPP_TEST_CASES += \
lua_no_module_global \
+ lua_inherit_getitem \
C_TEST_CASES += \
diff --git a/Examples/test-suite/lua/funcptr_cpp_runme.lua b/Examples/test-suite/lua/funcptr_cpp_runme.lua
index 3b8469348..d814e059a 100644
--- a/Examples/test-suite/lua/funcptr_cpp_runme.lua
+++ b/Examples/test-suite/lua/funcptr_cpp_runme.lua
@@ -16,3 +16,4 @@ assert(fc.addByValue(5,10) == 15)
assert(fc.call1(fc.ADD_BY_VALUE, 5, 10) == 15)
assert(fc.call2(fc.ADD_BY_POINTER, 7, 9) == 16)
assert(fc.call3(fc.ADD_BY_REFERENCE, 8, 9) == 17)
+assert(fc.call1(fc.ADD_BY_VALUE_C, 2, 3) == 5)
diff --git a/Examples/test-suite/lua/lua_inherit_getitem_runme.lua b/Examples/test-suite/lua/lua_inherit_getitem_runme.lua
new file mode 100644
index 000000000..21c4796f8
--- /dev/null
+++ b/Examples/test-suite/lua/lua_inherit_getitem_runme.lua
@@ -0,0 +1,12 @@
+require("import") -- the import fn
+import("lua_inherit_getitem") -- import lib
+
+local t = lua_inherit_getitem;
+local base = t.CBase()
+local derived = t.CDerived()
+
+assert(base.Foo ~= nil)
+assert(base:Foo() == "CBase::Foo")
+assert(derived.Foo == base.Foo)
+assert(derived:Foo() == "CBase::Foo")
+
diff --git a/Examples/test-suite/lua_inherit_getitem.i b/Examples/test-suite/lua_inherit_getitem.i
new file mode 100644
index 000000000..82c055dd1
--- /dev/null
+++ b/Examples/test-suite/lua_inherit_getitem.i
@@ -0,0 +1,19 @@
+%module lua_inherit_getitem
+
+%inline %{
+
+class CBase {
+public:
+ const char* Foo(void) {
+ return "CBase::Foo";
+ }
+};
+
+class CDerived : public CBase {
+public:
+ void *__getitem(const char *name) const {
+ return NULL;
+ }
+};
+
+%}
diff --git a/Examples/test-suite/multiple_inheritance_abstract.i b/Examples/test-suite/multiple_inheritance_abstract.i
new file mode 100644
index 000000000..b54a37dea
--- /dev/null
+++ b/Examples/test-suite/multiple_inheritance_abstract.i
@@ -0,0 +1,328 @@
+// This is a copy of the multiple_inheritance_abstract test
+%module multiple_inheritance_abstract
+
+%warnfilter(SWIGWARN_RUBY_MULTIPLE_INHERITANCE,
+ SWIGWARN_D_MULTIPLE_INHERITANCE,
+ SWIGWARN_PHP_MULTIPLE_INHERITANCE); /* languages not supporting multiple inheritance or %interface */
+
+#if defined(SWIGJAVA) || defined(SWIGCSHARP)
+%include "swiginterface.i"
+%interface_impl(Space::ABase1)
+%interface_impl(Space::CBase1)
+%interface_impl(Space::CBase2)
+#endif
+
+#if defined(SWIGD)
+// Missing multiple inheritance support results in incorrect use of override
+%ignore CBase1;
+%ignore CBase2;
+#endif
+
+%inline %{
+namespace Space {
+ struct CBase1 {
+ virtual void cbase1x() {
+ return;
+ }
+ virtual int cbase1y() {
+ return 1;
+ }
+ int cbase1z() {
+ return 10;
+ }
+ virtual ~CBase1() {
+ }
+ };
+
+ struct CBase2 {
+ virtual int cbase2() {
+ return 2;
+ }
+ virtual ~CBase2() {
+ }
+ };
+
+ struct ABase1 {
+ virtual int abase1() = 0;
+ virtual ~ABase1() {
+ }
+ };
+
+ struct Derived1 : CBase2, CBase1 {
+ virtual void cbase1x() {
+ return;
+ }
+ virtual int cbase1y() {
+ return 3;
+ }
+ virtual int cbase2() {
+ return 4;
+ }
+ virtual CBase2 *cloneit() {
+ return new Derived1(*this);
+ }
+ void derived1() {
+ }
+ };
+
+ struct Derived2 : CBase1, ABase1 {
+ virtual void cbase1x() {
+ return;
+ }
+ virtual int cbase1y() {
+ return 6;
+ }
+ virtual int abase1() {
+ return 5;
+ }
+ virtual CBase1 *cloneit() {
+ return new Derived2(*this);
+ }
+ void derived2() {
+ }
+ };
+
+ struct Derived3 : ABase1, CBase1, CBase2 {
+ virtual int cbase1y() {
+ return 7;
+ }
+ virtual int cbase2() {
+ return 8;
+ }
+ virtual int abase1() {
+ return 9;
+ }
+ virtual void cbase1x() {
+ }
+ virtual ABase1 *cloneit() {
+ return new Derived3(*this);
+ }
+ void derived3() {
+ }
+ };
+
+ struct Bottom1 : Derived1 {
+ virtual void cbase1x() {
+ return;
+ }
+ virtual int cbase1y() {
+ return 103;
+ }
+ virtual int cbase2() {
+ return 104;
+ }
+ };
+
+ struct Bottom2 : Derived2 {
+ virtual int cbase1y() {
+ return 206;
+ }
+ virtual int abase1() {
+ return 205;
+ }
+ };
+
+ struct Bottom3 : Derived3 {
+ virtual int cbase1y() {
+ return 307;
+ }
+ virtual int cbase2() {
+ return 308;
+ }
+ virtual int abase1() {
+ return 309;
+ }
+ };
+
+ // Base classes as input
+ int InputValCBase1(CBase1 cb1) {
+ return cb1.cbase1y();
+ }
+ int InputValCBase2(CBase2 cb2) {
+ return cb2.cbase2();
+ }
+
+ int InputPtrABase1(ABase1 *pab1) {
+ return pab1->abase1();
+ }
+ int InputPtrCBase1(CBase1 *pcb1) {
+ return pcb1->cbase1y();
+ }
+ int InputPtrCBase2(CBase2 *pcb2) {
+ return pcb2->cbase2();
+ }
+
+ int InputRefABase1(ABase1 &rab1) {
+ return rab1.abase1();
+ }
+ int InputRefCBase1(CBase1 &rcb1) {
+ return rcb1.cbase1y();
+ }
+ int InputRefCBase2(CBase2 &rcb2) {
+ return rcb2.cbase2();
+ }
+
+ int InputCPtrRefABase1(ABase1 *const& pab1) {
+ return pab1->abase1();
+ }
+ int InputCPtrRefCBase1(CBase1 *const& pcb1) {
+ return pcb1->cbase1y();
+ }
+ int InputCPtrRefCBase2(CBase2 *const& pcb2) {
+ return pcb2->cbase2();
+ }
+
+ // Derived classes as input
+ int InputValDerived1(Derived1 d) {
+ return d.cbase1y() + d.cbase2();
+ }
+ int InputValDerived2(Derived2 d) {
+ return d.cbase1y() + d.abase1();
+ }
+ int InputValDerived3(Derived3 d) {
+ return d.cbase1y() + d.cbase2() + d.abase1();
+ }
+
+ int InputRefDerived1(Derived1 &d) {
+ return d.cbase1y() + d.cbase2();
+ }
+ int InputRefDerived2(Derived2 &d) {
+ return d.cbase1y() + d.abase1();
+ }
+ int InputRefDerived3(Derived3 &d) {
+ return d.cbase1y() + d.cbase2() + d.abase1();
+ }
+
+ int InputPtrDerived1(Derived1 *d) {
+ return d->cbase1y() + d->cbase2();
+ }
+ int InputPtrDerived2(Derived2 *d) {
+ return d->cbase1y() + d->abase1();
+ }
+ int InputPtrDerived3(Derived3 *d) {
+ return d->cbase1y() + d->cbase2() + d->abase1();
+ }
+
+ int InputCPtrRefDerived1(Derived1 *const& d) {
+ return d->cbase1y() + d->cbase2();
+ }
+ int InputCPtrRefDerived2(Derived2 *const& d) {
+ return d->cbase1y() + d->abase1();
+ }
+ int InputCPtrRefDerived3(Derived3 *const& d) {
+ return d->cbase1y() + d->cbase2() + d->abase1();
+ }
+
+ // Bottom classes as input
+ int InputValBottom1(Bottom1 d) {
+ return d.cbase1y() + d.cbase2();
+ }
+ int InputValBottom2(Bottom2 d) {
+ return d.cbase1y() + d.abase1();
+ }
+ int InputValBottom3(Bottom3 d) {
+ return d.cbase1y() + d.cbase2() + d.abase1();
+ }
+
+ int InputRefBottom1(Bottom1 &d) {
+ return d.cbase1y() + d.cbase2();
+ }
+ int InputRefBottom2(Bottom2 &d) {
+ return d.cbase1y() + d.abase1();
+ }
+ int InputRefBottom3(Bottom3 &d) {
+ return d.cbase1y() + d.cbase2() + d.abase1();
+ }
+
+ int InputPtrBottom1(Bottom1 *d) {
+ return d->cbase1y() + d->cbase2();
+ }
+ int InputPtrBottom2(Bottom2 *d) {
+ return d->cbase1y() + d->abase1();
+ }
+ int InputPtrBottom3(Bottom3 *d) {
+ return d->cbase1y() + d->cbase2() + d->abase1();
+ }
+
+ int InputCPtrRefBottom1(Bottom1 *const& d) {
+ return d->cbase1y() + d->cbase2();
+ }
+ int InputCPtrRefBottom2(Bottom2 *const& d) {
+ return d->cbase1y() + d->abase1();
+ }
+ int InputCPtrRefBottom3(Bottom3 *const& d) {
+ return d->cbase1y() + d->cbase2() + d->abase1();
+ }
+
+ // Return pointers
+ CBase1 *MakePtrDerived1_CBase1() {
+ return new Derived1();
+ }
+ CBase2 *MakePtrDerived1_CBase2() {
+ return new Derived1();
+ }
+ CBase1 *MakePtrDerived2_CBase1() {
+ return new Derived2();
+ }
+ ABase1 *MakePtrDerived2_ABase1() {
+ return new Derived2();
+ }
+ ABase1 *MakePtrDerived3_ABase1() {
+ return new Derived3();
+ }
+ CBase1 *MakePtrDerived3_CBase1() {
+ return new Derived3();
+ }
+ CBase2 *MakePtrDerived3_CBase2() {
+ return new Derived3();
+ }
+
+ // Return references
+ CBase1 &MakeRefDerived1_CBase1() {
+ static Derived1 d;
+ return d;
+ }
+ CBase2 &MakeRefDerived1_CBase2() {
+ static Derived1 d;
+ return d;
+ }
+ CBase1 &MakeRefDerived2_CBase1() {
+ static Derived2 d;
+ return d;
+ }
+ ABase1 &MakeRefDerived2_ABase1() {
+ static Derived2 d;
+ return d;
+ }
+ ABase1 &MakeRefDerived3_ABase1() {
+ static Derived3 d;
+ return d;
+ }
+ CBase1 &MakeRefDerived3_CBase1() {
+ static Derived3 d;
+ return d;
+ }
+ CBase2 &MakeRefDerived3_CBase2() {
+ static Derived3 d;
+ return d;
+ }
+
+ // Return by value (sliced objects)
+ CBase1 MakeValDerived1_CBase1() {
+ return Derived1();
+ }
+ CBase2 MakeValDerived1_CBase2() {
+ return Derived1();
+ }
+ CBase1 MakeValDerived2_CBase1() {
+ return Derived2();
+ }
+ CBase1 MakeValDerived3_CBase1() {
+ return Derived3();
+ }
+ CBase2 MakeValDerived3_CBase2() {
+ return Derived3();
+ }
+}
+
+%}
diff --git a/Examples/test-suite/multiple_inheritance_interfaces.i b/Examples/test-suite/multiple_inheritance_interfaces.i
new file mode 100644
index 000000000..2972922fb
--- /dev/null
+++ b/Examples/test-suite/multiple_inheritance_interfaces.i
@@ -0,0 +1,66 @@
+%module multiple_inheritance_interfaces
+
+%warnfilter(SWIGWARN_RUBY_MULTIPLE_INHERITANCE,
+ SWIGWARN_D_MULTIPLE_INHERITANCE,
+ SWIGWARN_PHP_MULTIPLE_INHERITANCE); /* languages not supporting multiple inheritance or %interface */
+
+#if defined(SWIGJAVA) || defined(SWIGCSHARP)
+%include "swiginterface.i"
+%interface_custom("A", "IA", IA)
+%interface_custom("B", "IB", IB)
+%interface_custom("%(strip:[I])s", "I%s", IC) // same as %interface_custom("C", "IC", IC)
+#endif
+
+%inline %{
+struct IA {
+ virtual void ia() {};
+ virtual void ia(const char *s, bool b = true) {}
+ virtual void ia(int i) {}
+ virtual ~IA() {}
+};
+struct IB { virtual ~IB() {} virtual void ib() {} };
+struct IC : IA, IB {};
+struct D : IC {};
+struct E : D {};
+%}
+
+#if defined(SWIGJAVA) || defined(SWIGCSHARP)
+%interface_custom("J", "IJ", IJ)
+%interface_custom("K", "IK", IK)
+%interface_custom("L", "IL", IL)
+#endif
+%inline %{
+struct IJ { virtual ~IJ() {}; virtual void ij() {} };
+struct IK : IJ {};
+struct IL : IK {};
+struct M : IL {};
+%}
+
+#if defined(SWIGJAVA) || defined(SWIGCSHARP)
+%interface_custom("Q", "IQ", IQ)
+#endif
+%inline %{
+struct P { virtual ~P() {} virtual void p() {} };
+struct IQ { virtual ~IQ() {} virtual void iq() {} };
+struct R : IQ, P {};
+struct S : P, IQ {};
+struct T : IQ {};
+struct U : R {};
+struct V : S {};
+struct W : T {};
+%}
+
+#if defined(SWIGJAVA) || defined(SWIGCSHARP)
+%interface_impl(BaseOverloaded);
+#endif
+%inline %{
+struct BaseOverloaded {
+ typedef P PTypedef;
+ virtual ~BaseOverloaded() {}
+ virtual void identical_overload(int i, const PTypedef &pp = PTypedef()) {}
+};
+
+struct DerivedOverloaded : public BaseOverloaded {
+ virtual void identical_overload(int i, const PTypedef &p = PTypedef()) {}
+};
+%}
diff --git a/Examples/test-suite/multiple_inheritance_nspace.i b/Examples/test-suite/multiple_inheritance_nspace.i
new file mode 100644
index 000000000..4faef5749
--- /dev/null
+++ b/Examples/test-suite/multiple_inheritance_nspace.i
@@ -0,0 +1,338 @@
+// This is a copy of the multiple_inheritance_abstract test
+%module multiple_inheritance_nspace
+
+%warnfilter(SWIGWARN_RUBY_MULTIPLE_INHERITANCE,
+ SWIGWARN_D_MULTIPLE_INHERITANCE,
+ SWIGWARN_PHP_MULTIPLE_INHERITANCE); /* languages not supporting multiple inheritance or %interface */
+
+// nspace feature only supported by these languages
+#if defined(SWIGJAVA) || defined(SWIGCSHARP) || defined(SWIGD) || defined(SWIGLUA) || defined(SWIGJAVASCRIPT)
+%nspace;
+#endif
+
+#if defined(SWIGJAVA) || defined(SWIGCSHARP)
+%include "swiginterface.i"
+%interface(Space::ABase1)
+%interface(Space::CBase1)
+%interface(Space::CBase2)
+#endif
+
+#if defined(SWIGD)
+// Missing multiple inheritance support results in incorrect use of override
+%ignore CBase1;
+%ignore CBase2;
+#endif
+
+#if defined(SWIGJAVA)
+SWIG_JAVABODY_PROXY(public, public, SWIGTYPE)
+#endif
+
+%inline %{
+namespace Space {
+ struct CBase1 {
+ virtual void cbase1x() {
+ return;
+ }
+ virtual int cbase1y() {
+ return 1;
+ }
+ int cbase1z() {
+ return 10;
+ }
+ virtual ~CBase1() {
+ }
+ };
+
+ struct CBase2 {
+ virtual int cbase2() {
+ return 2;
+ }
+ virtual ~CBase2() {
+ }
+ };
+
+ struct ABase1 {
+ virtual int abase1() = 0;
+ virtual ~ABase1() {
+ }
+ };
+
+ struct Derived1 : CBase2, CBase1 {
+ virtual void cbase1x() {
+ return;
+ }
+ virtual int cbase1y() {
+ return 3;
+ }
+ virtual int cbase2() {
+ return 4;
+ }
+ virtual CBase2 *cloneit() {
+ return new Derived1(*this);
+ }
+ void derived1() {
+ }
+ };
+
+ struct Derived2 : CBase1, ABase1 {
+ virtual void cbase1x() {
+ return;
+ }
+ virtual int cbase1y() {
+ return 6;
+ }
+ virtual int abase1() {
+ return 5;
+ }
+ virtual CBase1 *cloneit() {
+ return new Derived2(*this);
+ }
+ void derived2() {
+ }
+ };
+
+ struct Derived3 : ABase1, CBase1, CBase2 {
+ virtual int cbase1y() {
+ return 7;
+ }
+ virtual int cbase2() {
+ return 8;
+ }
+ virtual int abase1() {
+ return 9;
+ }
+ virtual void cbase1x() {
+ }
+ virtual ABase1 *cloneit() {
+ return new Derived3(*this);
+ }
+ void derived3() {
+ }
+ };
+
+ struct Bottom1 : Derived1 {
+ virtual void cbase1x() {
+ return;
+ }
+ virtual int cbase1y() {
+ return 103;
+ }
+ virtual int cbase2() {
+ return 104;
+ }
+ };
+
+ struct Bottom2 : Derived2 {
+ virtual int cbase1y() {
+ return 206;
+ }
+ virtual int abase1() {
+ return 205;
+ }
+ };
+
+ struct Bottom3 : Derived3 {
+ virtual int cbase1y() {
+ return 307;
+ }
+ virtual int cbase2() {
+ return 308;
+ }
+ virtual int abase1() {
+ return 309;
+ }
+ };
+
+ // Base classes as input
+ int InputValCBase1(CBase1 cb1) {
+ return cb1.cbase1y();
+ }
+ int InputValCBase2(CBase2 cb2) {
+ return cb2.cbase2();
+ }
+
+ int InputPtrABase1(ABase1 *pab1) {
+ return pab1->abase1();
+ }
+ int InputPtrCBase1(CBase1 *pcb1) {
+ return pcb1->cbase1y();
+ }
+ int InputPtrCBase2(CBase2 *pcb2) {
+ return pcb2->cbase2();
+ }
+
+ int InputRefABase1(ABase1 &rab1) {
+ return rab1.abase1();
+ }
+ int InputRefCBase1(CBase1 &rcb1) {
+ return rcb1.cbase1y();
+ }
+ int InputRefCBase2(CBase2 &rcb2) {
+ return rcb2.cbase2();
+ }
+
+ int InputCPtrRefABase1(ABase1 *const& pab1) {
+ return pab1->abase1();
+ }
+ int InputCPtrRefCBase1(CBase1 *const& pcb1) {
+ return pcb1->cbase1y();
+ }
+ int InputCPtrRefCBase2(CBase2 *const& pcb2) {
+ return pcb2->cbase2();
+ }
+
+ // Derived classes as input
+ int InputValDerived1(Derived1 d) {
+ return d.cbase1y() + d.cbase2();
+ }
+ int InputValDerived2(Derived2 d) {
+ return d.cbase1y() + d.abase1();
+ }
+ int InputValDerived3(Derived3 d) {
+ return d.cbase1y() + d.cbase2() + d.abase1();
+ }
+
+ int InputRefDerived1(Derived1 &d) {
+ return d.cbase1y() + d.cbase2();
+ }
+ int InputRefDerived2(Derived2 &d) {
+ return d.cbase1y() + d.abase1();
+ }
+ int InputRefDerived3(Derived3 &d) {
+ return d.cbase1y() + d.cbase2() + d.abase1();
+ }
+
+ int InputPtrDerived1(Derived1 *d) {
+ return d->cbase1y() + d->cbase2();
+ }
+ int InputPtrDerived2(Derived2 *d) {
+ return d->cbase1y() + d->abase1();
+ }
+ int InputPtrDerived3(Derived3 *d) {
+ return d->cbase1y() + d->cbase2() + d->abase1();
+ }
+
+ int InputCPtrRefDerived1(Derived1 *const& d) {
+ return d->cbase1y() + d->cbase2();
+ }
+ int InputCPtrRefDerived2(Derived2 *const& d) {
+ return d->cbase1y() + d->abase1();
+ }
+ int InputCPtrRefDerived3(Derived3 *const& d) {
+ return d->cbase1y() + d->cbase2() + d->abase1();
+ }
+
+ // Bottom classes as input
+ int InputValBottom1(Bottom1 d) {
+ return d.cbase1y() + d.cbase2();
+ }
+ int InputValBottom2(Bottom2 d) {
+ return d.cbase1y() + d.abase1();
+ }
+ int InputValBottom3(Bottom3 d) {
+ return d.cbase1y() + d.cbase2() + d.abase1();
+ }
+
+ int InputRefBottom1(Bottom1 &d) {
+ return d.cbase1y() + d.cbase2();
+ }
+ int InputRefBottom2(Bottom2 &d) {
+ return d.cbase1y() + d.abase1();
+ }
+ int InputRefBottom3(Bottom3 &d) {
+ return d.cbase1y() + d.cbase2() + d.abase1();
+ }
+
+ int InputPtrBottom1(Bottom1 *d) {
+ return d->cbase1y() + d->cbase2();
+ }
+ int InputPtrBottom2(Bottom2 *d) {
+ return d->cbase1y() + d->abase1();
+ }
+ int InputPtrBottom3(Bottom3 *d) {
+ return d->cbase1y() + d->cbase2() + d->abase1();
+ }
+
+ int InputCPtrRefBottom1(Bottom1 *const& d) {
+ return d->cbase1y() + d->cbase2();
+ }
+ int InputCPtrRefBottom2(Bottom2 *const& d) {
+ return d->cbase1y() + d->abase1();
+ }
+ int InputCPtrRefBottom3(Bottom3 *const& d) {
+ return d->cbase1y() + d->cbase2() + d->abase1();
+ }
+
+ // Return pointers
+ CBase1 *MakePtrDerived1_CBase1() {
+ return new Derived1();
+ }
+ CBase2 *MakePtrDerived1_CBase2() {
+ return new Derived1();
+ }
+ CBase1 *MakePtrDerived2_CBase1() {
+ return new Derived2();
+ }
+ ABase1 *MakePtrDerived2_ABase1() {
+ return new Derived2();
+ }
+ ABase1 *MakePtrDerived3_ABase1() {
+ return new Derived3();
+ }
+ CBase1 *MakePtrDerived3_CBase1() {
+ return new Derived3();
+ }
+ CBase2 *MakePtrDerived3_CBase2() {
+ return new Derived3();
+ }
+
+ // Return references
+ CBase1 &MakeRefDerived1_CBase1() {
+ static Derived1 d;
+ return d;
+ }
+ CBase2 &MakeRefDerived1_CBase2() {
+ static Derived1 d;
+ return d;
+ }
+ CBase1 &MakeRefDerived2_CBase1() {
+ static Derived2 d;
+ return d;
+ }
+ ABase1 &MakeRefDerived2_ABase1() {
+ static Derived2 d;
+ return d;
+ }
+ ABase1 &MakeRefDerived3_ABase1() {
+ static Derived3 d;
+ return d;
+ }
+ CBase1 &MakeRefDerived3_CBase1() {
+ static Derived3 d;
+ return d;
+ }
+ CBase2 &MakeRefDerived3_CBase2() {
+ static Derived3 d;
+ return d;
+ }
+
+ // Return by value (sliced objects)
+ CBase1 MakeValDerived1_CBase1() {
+ return Derived1();
+ }
+ CBase2 MakeValDerived1_CBase2() {
+ return Derived1();
+ }
+ CBase1 MakeValDerived2_CBase1() {
+ return Derived2();
+ }
+ CBase1 MakeValDerived3_CBase1() {
+ return Derived3();
+ }
+ CBase2 MakeValDerived3_CBase2() {
+ return Derived3();
+ }
+}
+
+%}
+
diff --git a/Examples/test-suite/multiple_inheritance_shared_ptr.i b/Examples/test-suite/multiple_inheritance_shared_ptr.i
new file mode 100644
index 000000000..5a08e5e6e
--- /dev/null
+++ b/Examples/test-suite/multiple_inheritance_shared_ptr.i
@@ -0,0 +1,499 @@
+// This is a copy of the multiple_inheritance_abstract test and extended for testing %shared_ptr and %interface_impl
+%module multiple_inheritance_shared_ptr
+
+%warnfilter(SWIGWARN_RUBY_MULTIPLE_INHERITANCE,
+ SWIGWARN_D_MULTIPLE_INHERITANCE,
+ SWIGWARN_PHP_MULTIPLE_INHERITANCE); /* languages not supporting multiple inheritance or %interface */
+
+// Typemap changes required to mix %shared_ptr and %interface_impl
+// Note we don't have a way to use $javainterfacename/$csinterfacename (yet),
+// so we improvise somewhat by adding the SwigImpl suffix
+%define SWIG_SHARED_PTR_INTERFACE_TYPEMAPS(CONST, TYPE...)
+#if defined(SWIGJAVA)
+%typemap(javain) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
+ SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &,
+ SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *,
+ SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& "($javainput == null) ? 0 : $javainput.$typemap(jstype, TYPE)_GetInterfaceCPtr()"
+%typemap(javaout) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
+ SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &,
+ SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *,
+ SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& {
+ long cPtr = $jnicall;
+ return (cPtr == 0) ? null : ($typemap(jstype, TYPE))new $typemap(jstype, TYPE)SwigImpl(cPtr, true);
+ }
+#elif defined(SWIGCSHARP)
+%typemap(csin) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
+ SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &,
+ SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *,
+ SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& "$csinput == null ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : $csinput.GetInterfaceCPtr()"
+%typemap(csout, excode=SWIGEXCODE) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
+ SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &,
+ SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *,
+ SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& {
+ global::System.IntPtr cPtr = $imcall;
+ $typemap(cstype, TYPE) ret = (cPtr == global::System.IntPtr.Zero) ? null : new $typemap(cstype, TYPE)SwigImpl(cPtr, true);$excode
+ return ret;
+ }
+#endif
+%enddef
+
+#if defined(SWIGJAVA) || defined(SWIGCSHARP)
+%include <boost_shared_ptr.i>
+%shared_ptr(Space::ABase1)
+%shared_ptr(Space::CBase1)
+%shared_ptr(Space::CBase2)
+%shared_ptr(Space::Derived1)
+%shared_ptr(Space::Derived2)
+%shared_ptr(Space::Derived3)
+%shared_ptr(Space::Bottom1)
+%shared_ptr(Space::Bottom2)
+%shared_ptr(Space::Bottom3)
+
+%include "swiginterface.i"
+SWIG_SHARED_PTR_INTERFACE_TYPEMAPS(SWIGEMPTYHACK, Space::ABase1)
+SWIG_SHARED_PTR_INTERFACE_TYPEMAPS(SWIGEMPTYHACK, Space::CBase1)
+SWIG_SHARED_PTR_INTERFACE_TYPEMAPS(SWIGEMPTYHACK, Space::CBase2)
+%interface_impl(Space::ABase1)
+%interface_impl(Space::CBase1)
+%interface_impl(Space::CBase2)
+#endif
+
+#if defined(SWIGD)
+// Missing multiple inheritance support results in incorrect use of override
+%ignore CBase1;
+%ignore CBase2;
+#endif
+
+%inline %{
+#include <boost/shared_ptr.hpp>
+
+namespace Space {
+ struct CBase1 {
+ virtual void cbase1x() {
+ return;
+ }
+ virtual int cbase1y() {
+ return 1;
+ }
+ int cbase1z() {
+ return 10;
+ }
+ virtual ~CBase1() {
+ }
+ };
+
+ struct CBase2 {
+ virtual int cbase2() {
+ return 2;
+ }
+ virtual ~CBase2() {
+ }
+ };
+
+ struct ABase1 {
+ virtual int abase1() = 0;
+ virtual ~ABase1() {
+ }
+ };
+
+ struct Derived1 : CBase2, CBase1 {
+ virtual void cbase1x() {
+ return;
+ }
+ virtual int cbase1y() {
+ return 3;
+ }
+ virtual int cbase2() {
+ return 4;
+ }
+ virtual CBase2 *cloneit() {
+ return new Derived1(*this);
+ }
+ void derived1() {
+ }
+ };
+
+ struct Derived2 : CBase1, ABase1 {
+ virtual void cbase1x() {
+ return;
+ }
+ virtual int cbase1y() {
+ return 6;
+ }
+ virtual int abase1() {
+ return 5;
+ }
+ virtual CBase1 *cloneit() {
+ return new Derived2(*this);
+ }
+ void derived2() {
+ }
+ };
+
+ struct Derived3 : ABase1, CBase1, CBase2 {
+ virtual int cbase1y() {
+ return 7;
+ }
+ virtual int cbase2() {
+ return 8;
+ }
+ virtual int abase1() {
+ return 9;
+ }
+ virtual void cbase1x() {
+ }
+ virtual ABase1 *cloneit() {
+ return new Derived3(*this);
+ }
+ void derived3() {
+ }
+ };
+
+ struct Bottom1 : Derived1 {
+ virtual void cbase1x() {
+ return;
+ }
+ virtual int cbase1y() {
+ return 103;
+ }
+ virtual int cbase2() {
+ return 104;
+ }
+ };
+
+ struct Bottom2 : Derived2 {
+ virtual int cbase1y() {
+ return 206;
+ }
+ virtual int abase1() {
+ return 205;
+ }
+ };
+
+ struct Bottom3 : Derived3 {
+ virtual int cbase1y() {
+ return 307;
+ }
+ virtual int cbase2() {
+ return 308;
+ }
+ virtual int abase1() {
+ return 309;
+ }
+ };
+
+ typedef boost::shared_ptr<ABase1> ABase1_SharedPtr;
+ typedef boost::shared_ptr<CBase1> CBase1_SharedPtr;
+ typedef boost::shared_ptr<CBase2> CBase2_SharedPtr;
+ typedef boost::shared_ptr<Derived1> Derived1_SharedPtr;
+ typedef boost::shared_ptr<Derived2> Derived2_SharedPtr;
+ typedef boost::shared_ptr<Derived3> Derived3_SharedPtr;
+ typedef boost::shared_ptr<Bottom1> Bottom1_SharedPtr;
+ typedef boost::shared_ptr<Bottom2> Bottom2_SharedPtr;
+ typedef boost::shared_ptr<Bottom3> Bottom3_SharedPtr;
+
+ // Base classes as input
+ int InputValCBase1(CBase1 cb1) {
+ return cb1.cbase1y();
+ }
+ int InputValCBase2(CBase2 cb2) {
+ return cb2.cbase2();
+ }
+
+ int InputPtrABase1(ABase1 *pab1) {
+ return pab1->abase1();
+ }
+ int InputPtrCBase1(CBase1 *pcb1) {
+ return pcb1->cbase1y();
+ }
+ int InputPtrCBase2(CBase2 *pcb2) {
+ return pcb2->cbase2();
+ }
+
+ int InputRefABase1(ABase1 &rab1) {
+ return rab1.abase1();
+ }
+ int InputRefCBase1(CBase1 &rcb1) {
+ return rcb1.cbase1y();
+ }
+ int InputRefCBase2(CBase2 &rcb2) {
+ return rcb2.cbase2();
+ }
+
+ int InputCPtrRefABase1(ABase1 *const& pab1) {
+ return pab1->abase1();
+ }
+ int InputCPtrRefCBase1(CBase1 *const& pcb1) {
+ return pcb1->cbase1y();
+ }
+ int InputCPtrRefCBase2(CBase2 *const& pcb2) {
+ return pcb2->cbase2();
+ }
+
+ int InputSharedPtrABase1(ABase1_SharedPtr pab1) {
+ return pab1->abase1();
+ }
+ int InputSharedPtrCBase1(CBase1_SharedPtr pcb1) {
+ return pcb1->cbase1y();
+ }
+ int InputSharedPtrCBase2(CBase2_SharedPtr pcb2) {
+ return pcb2->cbase2();
+ }
+
+ int InputSharedPtrRefABase1(ABase1_SharedPtr &pab1) {
+ return pab1->abase1();
+ }
+ int InputSharedPtrRefCBase1(CBase1_SharedPtr &pcb1) {
+ return pcb1->cbase1y();
+ }
+ int InputSharedPtrRefCBase2(CBase2_SharedPtr &pcb2) {
+ return pcb2->cbase2();
+ }
+
+ // Derived classes as input
+ int InputValDerived1(Derived1 d) {
+ return d.cbase1y() + d.cbase2();
+ }
+ int InputValDerived2(Derived2 d) {
+ return d.cbase1y() + d.abase1();
+ }
+ int InputValDerived3(Derived3 d) {
+ return d.cbase1y() + d.cbase2() + d.abase1();
+ }
+
+ int InputRefDerived1(Derived1 &d) {
+ return d.cbase1y() + d.cbase2();
+ }
+ int InputRefDerived2(Derived2 &d) {
+ return d.cbase1y() + d.abase1();
+ }
+ int InputRefDerived3(Derived3 &d) {
+ return d.cbase1y() + d.cbase2() + d.abase1();
+ }
+
+ int InputPtrDerived1(Derived1 *d) {
+ return d->cbase1y() + d->cbase2();
+ }
+ int InputPtrDerived2(Derived2 *d) {
+ return d->cbase1y() + d->abase1();
+ }
+ int InputPtrDerived3(Derived3 *d) {
+ return d->cbase1y() + d->cbase2() + d->abase1();
+ }
+
+ int InputCPtrRefDerived1(Derived1 *const& d) {
+ return d->cbase1y() + d->cbase2();
+ }
+ int InputCPtrRefDerived2(Derived2 *const& d) {
+ return d->cbase1y() + d->abase1();
+ }
+ int InputCPtrRefDerived3(Derived3 *const& d) {
+ return d->cbase1y() + d->cbase2() + d->abase1();
+ }
+
+ int InputSharedPtrDerived1(Derived1_SharedPtr d) {
+ return d->cbase1y() + d->cbase2();
+ }
+ int InputSharedPtrDerived2(Derived2_SharedPtr d) {
+ return d->cbase1y() + d->abase1();
+ }
+ int InputSharedPtrDerived3(Derived3_SharedPtr d) {
+ return d->cbase1y() + d->cbase2() + d->abase1();
+ }
+
+ int InputSharedPtrRefDerived1(Derived1_SharedPtr &d) {
+ return d->cbase1y() + d->cbase2();
+ }
+ int InputSharedPtrRefDerived2(Derived2_SharedPtr &d) {
+ return d->cbase1y() + d->abase1();
+ }
+ int InputSharedPtrRefDerived3(Derived3_SharedPtr &d) {
+ return d->cbase1y() + d->cbase2() + d->abase1();
+ }
+
+ // Bottom classes as input
+ int InputValBottom1(Bottom1 d) {
+ return d.cbase1y() + d.cbase2();
+ }
+ int InputValBottom2(Bottom2 d) {
+ return d.cbase1y() + d.abase1();
+ }
+ int InputValBottom3(Bottom3 d) {
+ return d.cbase1y() + d.cbase2() + d.abase1();
+ }
+
+ int InputRefBottom1(Bottom1 &d) {
+ return d.cbase1y() + d.cbase2();
+ }
+ int InputRefBottom2(Bottom2 &d) {
+ return d.cbase1y() + d.abase1();
+ }
+ int InputRefBottom3(Bottom3 &d) {
+ return d.cbase1y() + d.cbase2() + d.abase1();
+ }
+
+ int InputPtrBottom1(Bottom1 *d) {
+ return d->cbase1y() + d->cbase2();
+ }
+ int InputPtrBottom2(Bottom2 *d) {
+ return d->cbase1y() + d->abase1();
+ }
+ int InputPtrBottom3(Bottom3 *d) {
+ return d->cbase1y() + d->cbase2() + d->abase1();
+ }
+
+ int InputCPtrRefBottom1(Bottom1 *const& d) {
+ return d->cbase1y() + d->cbase2();
+ }
+ int InputCPtrRefBottom2(Bottom2 *const& d) {
+ return d->cbase1y() + d->abase1();
+ }
+ int InputCPtrRefBottom3(Bottom3 *const& d) {
+ return d->cbase1y() + d->cbase2() + d->abase1();
+ }
+
+ int InputSharedPtrBottom1(Bottom1_SharedPtr d) {
+ return d->cbase1y() + d->cbase2();
+ }
+ int InputSharedPtrBottom2(Bottom2_SharedPtr d) {
+ return d->cbase1y() + d->abase1();
+ }
+ int InputSharedPtrBottom3(Bottom3_SharedPtr d) {
+ return d->cbase1y() + d->cbase2() + d->abase1();
+ }
+
+ int InputSharedPtrRefBottom1(Bottom1_SharedPtr &d) {
+ return d->cbase1y() + d->cbase2();
+ }
+ int InputSharedPtrRefBottom2(Bottom2_SharedPtr &d) {
+ return d->cbase1y() + d->abase1();
+ }
+ int InputSharedPtrRefBottom3(Bottom3_SharedPtr &d) {
+ return d->cbase1y() + d->cbase2() + d->abase1();
+ }
+
+ // Return pointers
+ CBase1 *MakePtrDerived1_CBase1() {
+ return new Derived1();
+ }
+ CBase2 *MakePtrDerived1_CBase2() {
+ return new Derived1();
+ }
+ CBase1 *MakePtrDerived2_CBase1() {
+ return new Derived2();
+ }
+ ABase1 *MakePtrDerived2_ABase1() {
+ return new Derived2();
+ }
+ ABase1 *MakePtrDerived3_ABase1() {
+ return new Derived3();
+ }
+ CBase1 *MakePtrDerived3_CBase1() {
+ return new Derived3();
+ }
+ CBase2 *MakePtrDerived3_CBase2() {
+ return new Derived3();
+ }
+
+ // Return references
+ CBase1 &MakeRefDerived1_CBase1() {
+ static Derived1 d;
+ return d;
+ }
+ CBase2 &MakeRefDerived1_CBase2() {
+ static Derived1 d;
+ return d;
+ }
+ CBase1 &MakeRefDerived2_CBase1() {
+ static Derived2 d;
+ return d;
+ }
+ ABase1 &MakeRefDerived2_ABase1() {
+ static Derived2 d;
+ return d;
+ }
+ ABase1 &MakeRefDerived3_ABase1() {
+ static Derived3 d;
+ return d;
+ }
+ CBase1 &MakeRefDerived3_CBase1() {
+ static Derived3 d;
+ return d;
+ }
+ CBase2 &MakeRefDerived3_CBase2() {
+ static Derived3 d;
+ return d;
+ }
+
+ // Return by value (sliced objects)
+ CBase1 MakeValDerived1_CBase1() {
+ return Derived1();
+ }
+ CBase2 MakeValDerived1_CBase2() {
+ return Derived1();
+ }
+ CBase1 MakeValDerived2_CBase1() {
+ return Derived2();
+ }
+ CBase1 MakeValDerived3_CBase1() {
+ return Derived3();
+ }
+ CBase2 MakeValDerived3_CBase2() {
+ return Derived3();
+ }
+
+ // Return smart pointers
+ CBase1_SharedPtr MakeSharedPtrDerived1_CBase1() {
+ return CBase1_SharedPtr(new Derived1());
+ }
+ CBase2_SharedPtr MakeSharedPtrDerived1_CBase2() {
+ return CBase2_SharedPtr(new Derived1());
+ }
+ CBase1_SharedPtr MakeSharedPtrDerived2_CBase1() {
+ return CBase1_SharedPtr(new Derived2());
+ }
+ ABase1_SharedPtr MakeSharedPtrDerived2_ABase1() {
+ return ABase1_SharedPtr(new Derived2());
+ }
+ ABase1_SharedPtr MakeSharedPtrDerived3_ABase1() {
+ return ABase1_SharedPtr(new Derived3());
+ }
+ CBase1_SharedPtr MakeSharedPtrDerived3_CBase1() {
+ return CBase1_SharedPtr(new Derived3());
+ }
+ CBase2_SharedPtr MakeSharedPtrDerived3_CBase2() {
+ return CBase2_SharedPtr(new Derived3());
+ }
+
+ // Return smart pointer references
+ CBase1_SharedPtr MakeSharedPtrRefDerived1_CBase1() {
+ static CBase1_SharedPtr s(new Derived1());
+ return s;
+ }
+ CBase2_SharedPtr MakeSharedPtrRefDerived1_CBase2() {
+ static CBase2_SharedPtr s(new Derived1());
+ return s;
+ }
+ CBase1_SharedPtr MakeSharedPtrRefDerived2_CBase1() {
+ static CBase1_SharedPtr s(new Derived2());
+ return s;
+ }
+ ABase1_SharedPtr MakeSharedPtrRefDerived2_ABase1() {
+ static ABase1_SharedPtr s(new Derived2());
+ return s;
+ }
+ ABase1_SharedPtr MakeSharedPtrRefDerived3_ABase1() {
+ static ABase1_SharedPtr s(new Derived3());
+ return s;
+ }
+ CBase1_SharedPtr MakeSharedPtrRefDerived3_CBase1() {
+ static CBase1_SharedPtr s(new Derived3());
+ return s;
+ }
+ CBase2_SharedPtr MakeSharedPtrRefDerived3_CBase2() {
+ static CBase2_SharedPtr s(new Derived3());
+ return s;
+ }
+}
+
+%}
diff --git a/Examples/test-suite/namespace_typemap.i b/Examples/test-suite/namespace_typemap.i
index 8ead78c6c..7f474bd9c 100644
--- a/Examples/test-suite/namespace_typemap.i
+++ b/Examples/test-suite/namespace_typemap.i
@@ -109,7 +109,11 @@ namespace test {
#ifdef SWIGGO
%typemap(gotype) string_class * "string"
%typemap(in) string_class * {
- $1 = new string_class($input.p);
+ char* buf = new char[$input.n + 1];
+ memcpy(buf, $input.p, $input.n);
+ buf[$input.n] = '\0';
+ $1 = new string_class(buf);
+ delete[] buf;
}
%typemap(freearg) string_class * {
delete $1;
diff --git a/Examples/test-suite/nested_extend_c.i b/Examples/test-suite/nested_extend_c.i
index 8fde075a4..032619f8e 100644
--- a/Examples/test-suite/nested_extend_c.i
+++ b/Examples/test-suite/nested_extend_c.i
@@ -98,5 +98,9 @@ typedef struct {
static struct {
int i;
} THING;
+
+int useThing() {
+ return THING.i;
+}
%}
diff --git a/Examples/test-suite/nested_ignore.i b/Examples/test-suite/nested_ignore.i
new file mode 100644
index 000000000..e271eca7d
--- /dev/null
+++ b/Examples/test-suite/nested_ignore.i
@@ -0,0 +1,24 @@
+%module nested_ignore
+%warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) B::C::D;
+
+%rename($ignore) B::C;
+
+%inline %{
+namespace B {
+ class C {
+ public:
+ struct D {
+ };
+ };
+
+ class E {
+ public:
+ typedef C::D D;
+ };
+
+ struct F
+ {
+ const E::D foo(){ return E::D(); }
+ };
+}
+%}
diff --git a/Examples/test-suite/operator_overload.i b/Examples/test-suite/operator_overload.i
index 90f767a84..af884e5b4 100644
--- a/Examples/test-suite/operator_overload.i
+++ b/Examples/test-suite/operator_overload.i
@@ -73,6 +73,10 @@ see bottom for a set of possible tests
%rename(OrOperator) operator ||;
#endif
+#if defined(SWIGPYTHON)
+%feature("python:slot", "tp_str", functype="reprfunc") Op::__str__;
+#endif
+
#ifdef SWIGD
// Due to the way operator overloading is implemented in D1 and D2, the prefix
// increment/decrement operators (D1) resp. the postfix ones (D2) are ignored.
@@ -89,8 +93,6 @@ see bottom for a set of possible tests
#include <iso646.h> /* for named logical operator, eg 'operator or' */
#endif
-#include <assert.h>
-
class Op {
public:
int i;
@@ -109,11 +111,11 @@ public:
return *this;
}
// +=,-=... are member fns
- void operator+=(const Op& o){ i+=o.i;}
- void operator-=(const Op& o){ i-=o.i;}
- void operator*=(const Op& o){ i*=o.i;}
- void operator/=(const Op& o){ i/=o.i;}
- void operator%=(const Op& o){ i%=o.i;}
+ Op &operator+=(const Op& o){ i+=o.i; return *this; }
+ Op &operator-=(const Op& o){ i-=o.i; return *this; }
+ Op &operator*=(const Op& o){ i*=o.i; return *this; }
+ Op &operator/=(const Op& o){ i/=o.i; return *this; }
+ Op &operator%=(const Op& o){ i%=o.i; return *this; }
// the +,-,*,... are friends
// (just to make life harder)
friend Op operator+(const Op& a,const Op& b){return Op(a.i+b.i);}
@@ -245,8 +247,8 @@ public:
%{
-
-#include <assert.h>
+#include <stdexcept>
+#define ASSERT(X) { if (!(X)) { throw std::runtime_error(#X); } }
void Op::sanity_check()
{
@@ -258,66 +260,66 @@ void Op::sanity_check()
Op dd=d; // assignment operator
// test equality
- assert(a!=b);
- assert(b==c);
- assert(a!=d);
- assert(d==dd);
+ ASSERT(a!=b);
+ ASSERT(b==c);
+ ASSERT(a!=d);
+ ASSERT(d==dd);
// test <
- assert(a<b);
- assert(a<=b);
- assert(b<=c);
- assert(b>=c);
- assert(b>d);
- assert(b>=d);
+ ASSERT(a<b);
+ ASSERT(a<=b);
+ ASSERT(b<=c);
+ ASSERT(b>=c);
+ ASSERT(b>d);
+ ASSERT(b>=d);
// test +=
Op e=3;
e+=d;
- assert(e==b);
+ ASSERT(e==b);
e-=c;
- assert(e==a);
+ ASSERT(e==a);
e=Op(1);
e*=b;
- assert(e==c);
+ ASSERT(e==c);
e/=d;
- assert(e==d);
+ ASSERT(e==d);
e%=c;
- assert(e==d);
+ ASSERT(e==d);
// test +
Op f(1),g(1);
- assert(f+g==Op(2));
- assert(f-g==Op(0));
- assert(f*g==Op(1));
- assert(f/g==Op(1));
- assert(f%g==Op(0));
+ ASSERT(f+g==Op(2));
+ ASSERT(f-g==Op(0));
+ ASSERT(f*g==Op(1));
+ ASSERT(f/g==Op(1));
+ ASSERT(f%g==Op(0));
// test unary operators
- assert(!a==true);
- assert(!b==false);
- assert(-a==a);
- assert(-b==Op(-5));
+ ASSERT(!a==true);
+ ASSERT(!b==false);
+ ASSERT(-a==a);
+ ASSERT(-b==Op(-5));
// test []
Op h=3;
- assert(h[0]==3);
- assert(h[1]==0);
+ ASSERT(h[0]==3);
+ ASSERT(h[1]==0);
h[0]=2; // set
- assert(h[0]==2);
+ ASSERT(h[0]==2);
h[1]=2; // ignored
- assert(h[0]==2);
- assert(h[1]==0);
+ ASSERT(h[0]==2);
+ ASSERT(h[1]==0);
// test ()
Op i=3;
- assert(i()==3);
- assert(i(1)==4);
- assert(i(1,2)==6);
+ ASSERT(i()==3);
+ ASSERT(i(1)==4);
+ ASSERT(i(1,2)==6);
// plus add some code to check the __str__ fn
- //assert(str(Op(1))=="Op(1)");
- //assert(str(Op(-3))=="Op(-3)");
+ //ASSERT(str(Op(1))=="Op(1)");
+ //ASSERT(str(Op(-3))=="Op(-3)");
// test ++ and --
Op j(100);
@@ -325,36 +327,36 @@ void Op::sanity_check()
{
Op newOp = j++;
int newInt = original++;
- assert(j.i == original);
- assert(newOp.i == newInt);
+ ASSERT(j.i == original);
+ ASSERT(newOp.i == newInt);
}
{
Op newOp = j--;
int newInt = original--;
- assert(j.i == original);
- assert(newOp.i == newInt);
+ ASSERT(j.i == original);
+ ASSERT(newOp.i == newInt);
}
{
Op newOp = ++j;
int newInt = ++original;
- assert(j.i == original);
- assert(newOp.i == newInt);
+ ASSERT(j.i == original);
+ ASSERT(newOp.i == newInt);
}
{
Op newOp = --j;
int newInt = --original;
- assert(j.i == original);
- assert(newOp.i == newInt);
+ ASSERT(j.i == original);
+ ASSERT(newOp.i == newInt);
}
// cast operators
Op k=3;
int check_k = k;
- assert (check_k == 3);
+ ASSERT (check_k == 3);
Op l=4;
double check_l = l;
- assert (check_l == 4);
+ ASSERT (check_l == 4);
}
%}
diff --git a/Examples/test-suite/php/director_pass_by_value_runme.php b/Examples/test-suite/php/director_pass_by_value_runme.php
new file mode 100644
index 000000000..8a8b84d67
--- /dev/null
+++ b/Examples/test-suite/php/director_pass_by_value_runme.php
@@ -0,0 +1,24 @@
+<?php
+
+require "tests.php";
+require "director_pass_by_value.php";
+
+$passByVal = null;
+
+class director_pass_by_value_Derived extends DirectorPassByValueAbstractBase {
+ function virtualMethod($b) {
+ global $passByVal;
+ $passByVal = $b;
+ }
+}
+
+# bug was the passByVal global object was destroyed after the call to virtualMethod had finished.
+$caller = new Caller();
+$caller->call_virtualMethod(new director_pass_by_value_Derived());
+$ret = $passByVal->getVal();
+if ($ret != 0x12345678) {
+ check::fail("Bad return value, got " . dechex($ret));
+}
+
+check::done();
+?>
diff --git a/Examples/test-suite/preproc_defined.i b/Examples/test-suite/preproc_defined.i
index 0a91bd98a..e1958515d 100644
--- a/Examples/test-suite/preproc_defined.i
+++ b/Examples/test-suite/preproc_defined.i
@@ -102,6 +102,7 @@ ANOTHER_MACRO(int)
void another_macro_checking(void) {
struct Defined d;
d.defined = 10;
+ (void)d;
thing(10);
stuff(10);
bumpf(10);
diff --git a/Examples/test-suite/primitive_types.i b/Examples/test-suite/primitive_types.i
index 8eb2a13f2..b9b973a2b 100644
--- a/Examples/test-suite/primitive_types.i
+++ b/Examples/test-suite/primitive_types.i
@@ -2,6 +2,7 @@
%module(directors="1") primitive_types
#if defined(SWIGSCILAB)
+%warnfilter(SWIGWARN_LANG_OVERLOAD_SHADOW) ovr_str;
%warnfilter(SWIGWARN_LANG_OVERLOAD_SHADOW) ovr_val;
%rename(TestDir) TestDirector;
#endif
diff --git a/Examples/test-suite/python/Makefile.in b/Examples/test-suite/python/Makefile.in
index 0c47d19ce..a7993b0b8 100644
--- a/Examples/test-suite/python/Makefile.in
+++ b/Examples/test-suite/python/Makefile.in
@@ -130,11 +130,11 @@ py2_runme = $(SCRIPTPREFIX)$*$(PY2SCRIPTSUFFIX)
py3_runme = $(SCRIPTPREFIX)$*$(PY3SCRIPTSUFFIX)
ifneq (,$(PEP8))
-check_pep8 = $(PEP8) $(PEP8_FLAGS) $(SCRIPTPREFIX)$*.py
+check_pep8 = $(COMPILETOOL) $(PEP8) $(PEP8_FLAGS) $(SCRIPTPREFIX)$*.py
check_pep8_multi_cpp = \
for f in `cat $(top_srcdir)/$(EXAMPLES)/$(TEST_SUITE)/$*.list` ; do \
- $(PEP8) $(PEP8_FLAGS) $$f.py; \
+ $(COMPILETOOL) $(PEP8) $(PEP8_FLAGS) $$f.py; \
done
endif
diff --git a/Examples/test-suite/python/autodoc_runme.py b/Examples/test-suite/python/autodoc_runme.py
index ce0aae0eb..af04c8c0e 100644
--- a/Examples/test-suite/python/autodoc_runme.py
+++ b/Examples/test-suite/python/autodoc_runme.py
@@ -15,11 +15,19 @@ def check(got, expected, expected_builtin=None, skip=False):
def is_new_style_class(cls):
return hasattr(cls, "__class__")
+def is_fastproxy(module):
+ return "new_instancemethod" in module
+
if not is_new_style_class(A):
# Missing static methods make this hard to test... skip if -classic is
# used!
sys.exit(0)
+if is_fastproxy(dir()):
+ # Detect when -fastproxy is specified and skip test as it changes the function names making it
+ # hard to test... skip until the number of options are reduced in SWIG-3.1 and autodoc is improved
+ sys.exit(0)
+
# skip builtin check - the autodoc is missing, but it probably should not be
skip = True
diff --git a/Examples/test-suite/python/compactdefaultargs_runme.py b/Examples/test-suite/python/compactdefaultargs_runme.py
index e81c8d173..1096619f4 100644
--- a/Examples/test-suite/python/compactdefaultargs_runme.py
+++ b/Examples/test-suite/python/compactdefaultargs_runme.py
@@ -17,3 +17,6 @@ if defaults2.ret(10.0) != 10.0:
if defaults2.ret() != -1.0:
raise RuntimeError
+
+if defaults2.nodefault(-2) != -2:
+ raise RuntimeError
diff --git a/Examples/test-suite/python/constant_directive_runme.py b/Examples/test-suite/python/constant_directive_runme.py
index a7ed82b8b..e223cd261 100644
--- a/Examples/test-suite/python/constant_directive_runme.py
+++ b/Examples/test-suite/python/constant_directive_runme.py
@@ -18,3 +18,11 @@ if constant_directive.TYPE1_CONSTANT2.val != 2:
if constant_directive.TYPE1_CONSTANT3.val != 3:
raise RuntimeError("constant_directive.TYPE1_CONSTANT3.val is %r (should be 3)" %
constant_directive.TYPE1_CONSTANT3.val)
+
+if constant_directive.TYPE1CONST_CONSTANT1.val != 1:
+ raise RuntimeError("constant_directive.TYPE1CONST_CONSTANT1.val is %r (should be 1)" %
+ constant_directive.TYPE1CONST_CONSTANT1.val)
+
+if constant_directive.TYPE1CPTR_CONSTANT1.val != 1:
+ raise RuntimeError("constant_directive.TYPE1CPTR_CONSTANT1.val is %r (should be 1)" %
+ constant_directive.TYPE1CPTR_CONSTANT1.val)
diff --git a/Examples/test-suite/python/cpp11_type_aliasing_runme.py b/Examples/test-suite/python/cpp11_type_aliasing_runme.py
new file mode 100644
index 000000000..52cc81d1c
--- /dev/null
+++ b/Examples/test-suite/python/cpp11_type_aliasing_runme.py
@@ -0,0 +1,32 @@
+from cpp11_type_aliasing import *
+
+if get_host_target().bits != 32:
+ raise RuntimeError("get_host_target().bits should return 32")
+
+if mult2(10) != 20:
+ raise RuntimeError("mult2(10) should return 20")
+
+int_ptr = allocate_int()
+inplace_mult2(int_ptr)
+if read_int(int_ptr) != 24:
+ raise RuntimeError("read_int should return 24")
+free_int(int_ptr)
+
+pair = PairSubclass(3, 4)
+if pair.first() != 3:
+ raise RuntimeError("pair.first() should return 3")
+
+if pair.second() != 4:
+ raise RuntimeError("pair.second() should return 4")
+
+if pair.a != 3:
+ raise RuntimeError("pair.a should be 3")
+
+if plus1(5) != 6:
+ raise RuntimeError("plus1(5) should return 6")
+
+if call(mult2_cb, 7) != 14:
+ raise RuntimeError("call(mult2_cb, 7) should return 14")
+
+if call(get_callback(), 7) != 14:
+ raise RuntimeError("call(get_callback(), 7) should return 14")
diff --git a/Examples/test-suite/python/cpp_static_runme.py b/Examples/test-suite/python/cpp_static_runme.py
index b742de285..1c7705f3e 100644
--- a/Examples/test-suite/python/cpp_static_runme.py
+++ b/Examples/test-suite/python/cpp_static_runme.py
@@ -14,4 +14,5 @@ else:
StaticFunctionTest().static_func_2(1)
StaticFunctionTest().static_func_3(1, 2)
StaticMemberTest.static_int = 10
-assert StaticMemberTest.static_int == 10
+if not StaticMemberTest.static_int == 10:
+ raise RuntimeError("static_int not 10")
diff --git a/Examples/test-suite/python/default_args_c_runme.py b/Examples/test-suite/python/default_args_c_runme.py
new file mode 100644
index 000000000..5985fd75c
--- /dev/null
+++ b/Examples/test-suite/python/default_args_c_runme.py
@@ -0,0 +1,6 @@
+import default_args_c
+
+if default_args_c.foo1() != 1:
+ raise RuntimeError("failed")
+if default_args_c.foo43() != 43:
+ raise RuntimeError("failed")
diff --git a/Examples/test-suite/python/default_args_runme.py b/Examples/test-suite/python/default_args_runme.py
index 6610a4ec4..9d275e4a1 100644
--- a/Examples/test-suite/python/default_args_runme.py
+++ b/Examples/test-suite/python/default_args_runme.py
@@ -136,5 +136,23 @@ def run(module_name):
if default_args.CDA().cdefaultargs_test2() != 1:
raise RuntimeError
+ if default_args.chartest1() != 'x':
+ raise RuntimeError
+
+ if default_args.chartest2() != '\0':
+ raise RuntimeError
+
+ if default_args.chartest3() != '\1':
+ raise RuntimeError
+
+ if default_args.chartest4() != '\n':
+ raise RuntimeError
+
+ if default_args.chartest5() != 'B':
+ raise RuntimeError
+
+ if default_args.chartest6() != 'C':
+ raise RuntimeError
+
if __name__ == "__main__":
run('default_args')
diff --git a/Examples/test-suite/python/director_pass_by_value_runme.py b/Examples/test-suite/python/director_pass_by_value_runme.py
new file mode 100644
index 000000000..7744db962
--- /dev/null
+++ b/Examples/test-suite/python/director_pass_by_value_runme.py
@@ -0,0 +1,13 @@
+import director_pass_by_value
+
+passByVal = None
+class director_pass_by_value_Derived(director_pass_by_value.DirectorPassByValueAbstractBase):
+ def virtualMethod(self, b):
+ global passByVal
+ passByVal = b
+
+# bug was the passByVal global object was destroyed after the call to virtualMethod had finished.
+director_pass_by_value.Caller().call_virtualMethod(director_pass_by_value_Derived())
+ret = passByVal.getVal();
+if ret != 0x12345678:
+ raise RuntimeError("Bad return value, got " + hex(ret))
diff --git a/Examples/test-suite/python/exception_classname_runme.py b/Examples/test-suite/python/exception_classname_runme.py
index c78f4e68b..9a82c9105 100644
--- a/Examples/test-suite/python/exception_classname_runme.py
+++ b/Examples/test-suite/python/exception_classname_runme.py
@@ -1,4 +1,5 @@
import exception_classname
a = exception_classname.Exception()
-assert a.testfunc() == 42
+if a.testfunc() != 42:
+ raise RuntimeError("Not 42!")
diff --git a/Examples/test-suite/python/funcptr_cpp_runme.py b/Examples/test-suite/python/funcptr_cpp_runme.py
index 08e85ad7b..eb113d226 100644
--- a/Examples/test-suite/python/funcptr_cpp_runme.py
+++ b/Examples/test-suite/python/funcptr_cpp_runme.py
@@ -6,3 +6,5 @@ if call2(ADD_BY_POINTER, 12, 13) != 25:
raise RuntimeError
if call3(ADD_BY_REFERENCE, 14, 15) != 29:
raise RuntimeError
+if call1(ADD_BY_VALUE_C, 2, 3) != 5:
+ raise RuntimeError
diff --git a/Examples/test-suite/python/li_attribute_runme.py b/Examples/test-suite/python/li_attribute_runme.py
index 13a01c97d..80e793618 100644
--- a/Examples/test-suite/python/li_attribute_runme.py
+++ b/Examples/test-suite/python/li_attribute_runme.py
@@ -71,3 +71,13 @@ if myStringyClass.ReadWriteString != "changed string":
raise RuntimeError
if myStringyClass.ReadOnlyString != "changed string":
raise RuntimeError
+
+# Check a proper AttributeError is raised for non-existent attributes, old versions used to raise unhelpful error:
+# AttributeError: type object 'object' has no attribute '__getattr__'
+try:
+ x = myFoo.does_not_exist
+ raise RuntimeError
+except AttributeError, e:
+ if str(e).find("does_not_exist") == -1:
+ raise RuntimeError
+
diff --git a/Examples/test-suite/python/li_boost_shared_ptr_template_runme.py b/Examples/test-suite/python/li_boost_shared_ptr_template_runme.py
index 6b56ec479..eab7e282a 100644
--- a/Examples/test-suite/python/li_boost_shared_ptr_template_runme.py
+++ b/Examples/test-suite/python/li_boost_shared_ptr_template_runme.py
@@ -8,9 +8,8 @@ if d.bar() != 2:
raise RuntimeError
if bar_getter(b) != 1:
raise RuntimeError
-# Fix reverted in rev 12953
-# if bar_getter(d) != 2:
-# raise RuntimeError
+if bar_getter(d) != 2:
+ raise RuntimeError
b = BaseDefaultInt()
d = DerivedDefaultInt()
@@ -23,8 +22,11 @@ if d2.bar2() != 4:
raise RuntimeError
if bar2_getter(b) != 3:
raise RuntimeError
-# Fix reverted in rev 12953
-# if bar2_getter(d) != 4:
-# raise RuntimeError
-# if bar2_getter(d2) != 4:
-# raise RuntimeError
+# SWIG fix reverted in Subversion rev 12953
+# Testcase has now been modified to mask the problem by providing the default parameter 'int' in:
+# %shared_ptr(Space::BaseDefault<short, int>)
+# If this is not done then d fails to convert to BaseDefault<short>&
+if bar2_getter(d) != 4:
+ raise RuntimeError
+if bar2_getter(d2) != 4:
+ raise RuntimeError
diff --git a/Examples/test-suite/python/operator_overload_runme.py b/Examples/test-suite/python/operator_overload_runme.py
new file mode 100644
index 000000000..cf4277f35
--- /dev/null
+++ b/Examples/test-suite/python/operator_overload_runme.py
@@ -0,0 +1,77 @@
+from operator_overload import *
+
+# first check all the operators are implemented correctly from pure C++ code
+Op_sanity_check()
+
+pop = Op(6)/Op(3)
+
+# test routine:
+a=Op()
+b=Op(5)
+c=Op(b) # copy construct
+d=Op(2)
+dd=d # assignment operator
+
+# test equality
+if not a!=b:
+ raise RuntimeError("a!=b")
+if not b==c:
+ raise RuntimeError("b==c")
+if not a!=d:
+ raise RuntimeError("a!=d")
+if not d==dd:
+ raise RuntimeError("d==dd")
+
+# test <
+if not a<b:
+ raise RuntimeError("a<b")
+if not a<=b:
+ raise RuntimeError("a<=b")
+if not b<=c:
+ raise RuntimeError("b<=c")
+if not b>=c:
+ raise RuntimeError("b>=c")
+if not b>d:
+ raise RuntimeError("b>d")
+if not b>=d:
+ raise RuntimeError("b>=d")
+
+# test +=
+e=Op(3)
+e+=d
+if not e==b:
+ raise RuntimeError("e==b (%s==%s)" % (e.i, b.i))
+e-=c
+if not e==a:
+ raise RuntimeError("e==a")
+e=Op(1)
+e*=b
+if not e==c:
+ raise RuntimeError("e==c")
+e/=d
+if not e==d:
+ raise RuntimeError("e==d")
+e%=c;
+if not e==d:
+ raise RuntimeError("e==d")
+
+# test +
+f=Op(1)
+g=Op(1)
+if not f+g==Op(2):
+ raise RuntimeError("f+g==Op(2)")
+if not f-g==Op(0):
+ raise RuntimeError("f-g==Op(0)")
+if not f*g==Op(1):
+ raise RuntimeError("f*g==Op(1)")
+if not f/g==Op(1):
+ raise RuntimeError("f/g==Op(1)")
+if not f%g==Op(0):
+ raise RuntimeError("f%g==Op(0)")
+
+# test unary operators
+if not -a==a:
+ raise RuntimeError("-a==a")
+if not -b==Op(-5):
+ raise RuntimeError("-b==Op(-5)")
+
diff --git a/Examples/test-suite/python/operbool_runme.py b/Examples/test-suite/python/operbool_runme.py
index 708dea786..cdef85abc 100644
--- a/Examples/test-suite/python/operbool_runme.py
+++ b/Examples/test-suite/python/operbool_runme.py
@@ -1,3 +1,4 @@
#!/usr/bin/env python
import operbool
-assert not operbool.Test()
+if operbool.Test():
+ raise RuntimeError("operbool failed")
diff --git a/Examples/test-suite/python/python_abstractbase_runme3.py b/Examples/test-suite/python/python_abstractbase_runme3.py
index b4a20f085..4fdc79935 100644
--- a/Examples/test-suite/python/python_abstractbase_runme3.py
+++ b/Examples/test-suite/python/python_abstractbase_runme3.py
@@ -6,6 +6,10 @@ from collections import *
if is_python_builtin():
exit(0)
+# Python abc is only turned on when -py3 option is passed to SWIG
+if not is_swig_py3:
+ exit(0)
+
assert issubclass(Mapii, MutableMapping)
assert issubclass(Multimapii, MutableMapping)
assert issubclass(IntSet, MutableSet)
diff --git a/Examples/test-suite/python/python_destructor_exception_runme.py b/Examples/test-suite/python/python_destructor_exception_runme.py
index 671eff3cc..ee71ab33b 100644
--- a/Examples/test-suite/python/python_destructor_exception_runme.py
+++ b/Examples/test-suite/python/python_destructor_exception_runme.py
@@ -26,8 +26,10 @@ def test1():
sys.stderr.flush()
sys.stderr = stderr_saved
- assert attributeErrorOccurred
- assert buffer.getvalue().count("I am the ClassWithThrowingDestructor dtor doing bad things") >= 1
+ if not attributeErrorOccurred:
+ raise RuntimeError("attributeErrorOccurred failed")
+ if not buffer.getvalue().count("I am the ClassWithThrowingDestructor dtor doing bad things") >= 1:
+ raise RuntimeError("ClassWithThrowingDestructor dtor doing bad things failed")
class VectorHolder(object):
def __init__(self, v):
diff --git a/Examples/test-suite/python/rename_rstrip_encoder_runme.py b/Examples/test-suite/python/rename_rstrip_encoder_runme.py
new file mode 100644
index 000000000..84072f7f2
--- /dev/null
+++ b/Examples/test-suite/python/rename_rstrip_encoder_runme.py
@@ -0,0 +1,5 @@
+from rename_rstrip_encoder import *
+
+s = SomeThing()
+a = AnotherThing()
+a.DoClsX()
diff --git a/Examples/test-suite/python/template_default_arg_overloaded_extend_runme.py b/Examples/test-suite/python/template_default_arg_overloaded_extend_runme.py
new file mode 100644
index 000000000..1f71066cb
--- /dev/null
+++ b/Examples/test-suite/python/template_default_arg_overloaded_extend_runme.py
@@ -0,0 +1,20 @@
+from template_default_arg_overloaded_extend import *
+
+def check(flag):
+ if not flag:
+ raise RuntimeError("failed")
+
+rs = ResultSet()
+
+check(rs.go_get_method(0, SearchPoint()) == -1)
+check(rs.go_get_method(0, SearchPoint(), 100) == 100)
+
+check(rs.go_get_template(0, SearchPoint()) == -2)
+check(rs.go_get_template(0, SearchPoint(), 100) == 100)
+
+check(rs.over() == "over(int)")
+check(rs.over(10) == "over(int)")
+check(rs.over(SearchPoint()) == "over(giai2::SearchPoint, int)")
+check(rs.over(SearchPoint(), 10) == "over(giai2::SearchPoint, int)")
+check(rs.over(True, SearchPoint()) == "over(bool, gaia2::SearchPoint, int)")
+check(rs.over(True, SearchPoint(), 10) == "over(bool, gaia2::SearchPoint, int)")
diff --git a/Examples/test-suite/python/unicode_strings_runme.py b/Examples/test-suite/python/unicode_strings_runme.py
index 3ce98bcdb..fa9c51437 100644
--- a/Examples/test-suite/python/unicode_strings_runme.py
+++ b/Examples/test-suite/python/unicode_strings_runme.py
@@ -13,11 +13,15 @@ if sys.version_info[0:2] >= (3, 1):
if unicode_strings.non_utf8_std_string() != test_string:
raise ValueError('Test comparison mismatch')
+def check(s1, s2):
+ if s1 != s2:
+ raise RuntimeError("{} != {}".format(s1, s2))
+
# Testing SWIG_PYTHON_2_UNICODE flag which allows unicode strings to be passed to C
if sys.version_info[0:2] < (3, 0):
- assert unicode_strings.charstring("hello1") == "hello1"
- assert unicode_strings.charstring(str(u"hello2")) == "hello2"
- assert unicode_strings.charstring(u"hello3") == "hello3"
- assert unicode_strings.charstring(unicode("hello4")) == "hello4"
+ check(unicode_strings.charstring("hello1"), "hello1")
+ check(unicode_strings.charstring(str(u"hello2")), "hello2")
+ check(unicode_strings.charstring(u"hello3"), "hello3")
+ check(unicode_strings.charstring(unicode("hello4")), "hello4")
unicode_strings.charstring(u"hell\xb05")
unicode_strings.charstring(u"hell\u00f66")
diff --git a/Examples/test-suite/python_abstractbase.i b/Examples/test-suite/python_abstractbase.i
index 65f3d9931..2146e758e 100644
--- a/Examples/test-suite/python_abstractbase.i
+++ b/Examples/test-suite/python_abstractbase.i
@@ -24,3 +24,9 @@ bool is_python_builtin() { return true; }
bool is_python_builtin() { return false; }
#endif
%}
+
+#ifdef SWIGPYTHON_PY3 // set when using -py3
+#define is_swig_py3 1
+#else
+#define is_swig_py3 0
+#endif
diff --git a/Examples/test-suite/r/Makefile.in b/Examples/test-suite/r/Makefile.in
index 312834a51..bc12ba671 100644
--- a/Examples/test-suite/r/Makefile.in
+++ b/Examples/test-suite/r/Makefile.in
@@ -5,7 +5,8 @@
LANGUAGE = r
SCRIPTSUFFIX = _runme.R
WRAPSUFFIX = .R
-RUNR = R CMD BATCH --no-save --no-restore '--args $(SCRIPTDIR)'
+R_OPT = --quiet --no-save --no-restore
+RUNR = R CMD BATCH $(R_OPT) '--args $(SCRIPTDIR)'
srcdir = @srcdir@
top_srcdir = @top_srcdir@
@@ -51,18 +52,17 @@ include $(srcdir)/../common.mk
# check for syntactic correctness
run_testcase = \
if [ -f $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \
- env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH PATH=.:"$$PATH" $(RUNTOOL) $(RUNR) $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \
+ env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH PATH=.:"$$PATH" $(RUNTOOL) $(RUNR) $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) || (cat $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX)out ; false); \
else \
- $(RUNTOOL) $(RUNR) ./$(SCRIPTPREFIX)$*$(WRAPSUFFIX); \
+ $(RUNTOOL) $(RUNR) ./$(SCRIPTPREFIX)$*$(WRAPSUFFIX) || (cat ./$(SCRIPTPREFIX)$*$(WRAPSUFFIX)out ; false); \
fi
run_multitestcase = \
for f in `cat $(top_srcdir)/$(EXAMPLES)/$(TEST_SUITE)/$*.list` ; do \
if [ -f $(SCRIPTDIR)/$(SCRIPTPREFIX)$${f}$(SCRIPTSUFFIX) ]; then \
- env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH PATH=.:"$$PATH" \
- $(RUNTOOL) $(RUNR) $(SCRIPTDIR)/$(SCRIPTPREFIX)$${f}$(SCRIPTSUFFIX); \
+ env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH PATH=.:"$$PATH" $(RUNTOOL) $(RUNR) $(SCRIPTDIR)/$(SCRIPTPREFIX)$${f}$(SCRIPTSUFFIX) || (cat $(SCRIPTDIR)/$(SCRIPTPREFIX)$${f}$(SCRIPTSUFFIX)out ; false); \
else \
- $(RUNTOOL) $(RUNR) ./$(SCRIPTPREFIX)$${f}$(WRAPSUFFIX); \
+ $(RUNTOOL) $(RUNR) ./$(SCRIPTPREFIX)$${f}$(WRAPSUFFIX) || (cat ./$(SCRIPTPREFIX)$${f}$(WRAPSUFFIX)out ; false); \
fi; \
done
# Clean
diff --git a/Examples/test-suite/r/li_std_vector_runme.R b/Examples/test-suite/r/li_std_vector_runme.R
new file mode 100644
index 000000000..bd02d840a
--- /dev/null
+++ b/Examples/test-suite/r/li_std_vector_runme.R
@@ -0,0 +1,19 @@
+clargs <- commandArgs(trailing=TRUE)
+source(file.path(clargs[1], "unittest.R"))
+
+dyn.load(paste("li_std_vector", .Platform$dynlib.ext, sep=""))
+source("li_std_vector.R")
+cacheMetaData(1)
+
+testvec <- c(1, 2, 3)
+
+unittest(half(testvec), testvec/2)
+unittest(average(testvec), mean(testvec))
+## string vector test
+vlen <- 13
+stringvec <- paste(letters[1:vlen], as.character(rnorm(vlen)))
+unittest(rev(stringvec), RevStringVec(stringvec))
+q(save="no")
+
+
+
diff --git a/Examples/test-suite/r/unittest.R b/Examples/test-suite/r/unittest.R
index 0633c7715..b55b4a3f3 100644
--- a/Examples/test-suite/r/unittest.R
+++ b/Examples/test-suite/r/unittest.R
@@ -1,5 +1,5 @@
unittest <- function (x,y) {
- if (x==y) {
+ if (all(x==y)) {
print("PASS")
} else {
print("FAIL")
@@ -8,7 +8,7 @@ unittest <- function (x,y) {
}
unittesttol <- function(x,y,z) {
- if (abs(x-y) < z) {
+ if (all(abs(x-y) < z)) {
print("PASS")
} else {
print("FAIL")
diff --git a/Examples/test-suite/rename_rstrip_encoder.i b/Examples/test-suite/rename_rstrip_encoder.i
new file mode 100644
index 000000000..4ecbe129f
--- /dev/null
+++ b/Examples/test-suite/rename_rstrip_encoder.i
@@ -0,0 +1,15 @@
+%module rename_rstrip_encoder
+
+// strip the Cls suffix from all identifiers
+%rename("%(rstrip:[Cls])s") "";
+
+%inline %{
+
+class SomeThingCls {
+};
+
+struct AnotherThingCls {
+ void DoClsXCls() {}
+};
+
+%}
diff --git a/Examples/test-suite/ruby/Makefile.in b/Examples/test-suite/ruby/Makefile.in
index 847c95919..d94ac7061 100644
--- a/Examples/test-suite/ruby/Makefile.in
+++ b/Examples/test-suite/ruby/Makefile.in
@@ -30,7 +30,8 @@ CPP_TEST_CASES = \
# stl_new
C_TEST_CASES += \
- li_cstring
+ li_cstring \
+ ruby_manual_proxy \
include $(srcdir)/../common.mk
diff --git a/Examples/test-suite/ruby/ruby_manual_proxy_runme.rb b/Examples/test-suite/ruby/ruby_manual_proxy_runme.rb
new file mode 100644
index 000000000..c1cee2d13
--- /dev/null
+++ b/Examples/test-suite/ruby/ruby_manual_proxy_runme.rb
@@ -0,0 +1,49 @@
+#!/usr/bin/env ruby
+#
+# The Subversion bindings use this manually written proxy class approach
+# to the Ruby bindings. Note that in C the struct svn_fs_t is an
+# opaque pointer and the Ruby FileSystem proxy class is hand written around it.
+# This testcase tests this and the C close function and subsequent error
+# handling.
+
+require 'swig_assert'
+require 'ruby_manual_proxy'
+
+module Svn
+ module Fs
+ module_function
+ def create(path)
+ f = Ruby_manual_proxy::svn_fs_create(path)
+ return f
+ end
+
+ FileSystem = SWIG::TYPE_p_svn_fs_t
+ class FileSystem
+ class << self
+ def create(*args)
+ Fs.create(*args)
+ end
+ end
+ def path
+ Ruby_manual_proxy::svn_fs_path(self)
+ end
+ end
+ end
+end
+
+f = Svn::Fs::FileSystem.create("/tmp/myfile")
+path = f.path
+f.close
+begin
+ # regression in swig-3.0.8 meant ObjectPreviouslyDeleted error was thrown instead
+ path = f.path
+ raise RuntimeError.new("IOError (1) not thrown")
+rescue IOError
+end
+
+file = nil
+begin
+ path = Ruby_manual_proxy::svn_fs_path(file)
+ raise RuntimeError.new("IOError (2) not thrown")
+rescue IOError
+end
diff --git a/Examples/test-suite/ruby_manual_proxy.i b/Examples/test-suite/ruby_manual_proxy.i
new file mode 100644
index 000000000..2cb154e6a
--- /dev/null
+++ b/Examples/test-suite/ruby_manual_proxy.i
@@ -0,0 +1,66 @@
+%module ruby_manual_proxy
+
+
+%typemap(in, numinputs=0) SWIGTYPE ** ($*1_ltype temp) "$1 = &temp;";
+
+%typemap(argout) SWIGTYPE **OUTPARAM {
+ $result = SWIG_Ruby_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
+}
+
+%apply SWIGTYPE **OUTPARAM {
+ svn_fs_t **
+};
+
+%typemap(check) svn_fs_t * {
+ if (!$1) {
+ svn_swig_rb_raise_svn_fs_already_close();
+ }
+}
+
+%{
+typedef struct svn_fs_t {
+ char path[256];
+} svn_fs_t;
+
+void svn_fs_create(svn_fs_t **fs_p, const char *path) {
+ svn_fs_t *fs = (svn_fs_t *)malloc(sizeof(svn_fs_t));
+ strncpy(fs->path, path, 256);
+ *fs_p = fs;
+}
+const char *svn_fs_path(svn_fs_t *fs) {
+ return fs->path;
+}
+%}
+
+typedef struct svn_fs_t svn_fs_t;
+void svn_fs_create(svn_fs_t **fs_p, const char *path);
+const char *svn_fs_path(svn_fs_t *fs);
+
+%{
+static void svn_swig_rb_raise_svn_fs_already_close(void) {
+ rb_raise(rb_eIOError, "already closed");
+}
+
+static VALUE svn_fs_swig_rb_close(VALUE self) {
+ if (!DATA_PTR(self)) {
+ svn_swig_rb_raise_svn_fs_already_close();
+ }
+
+ DATA_PTR(self) = NULL;
+
+ return Qnil;
+}
+
+static VALUE svn_fs_swig_rb_closed(VALUE self) {
+ return DATA_PTR(self) ? Qfalse : Qtrue;
+}
+%}
+
+%insert("init") %{
+ {
+ VALUE cSvnfs;
+ cSvnfs = rb_const_get(_mSWIG, rb_intern("TYPE_p_svn_fs_t"));
+ rb_define_method(cSvnfs, "close",
+ VALUEFUNC(svn_fs_swig_rb_close), 0);
+ }
+%}
diff --git a/Examples/test-suite/scilab/funcptr_cpp_runme.sci b/Examples/test-suite/scilab/funcptr_cpp_runme.sci
index cb4c3cd0d..2065fb1df 100644
--- a/Examples/test-suite/scilab/funcptr_cpp_runme.sci
+++ b/Examples/test-suite/scilab/funcptr_cpp_runme.sci
@@ -3,5 +3,6 @@ exec("swigtest.start", -1);
checkequal(call1(ADD_BY_VALUE_get(), 10, 11), 21, "ADD_BY_VALUE");
checkequal(call2(ADD_BY_POINTER_get(), 12, 13), 25, "ADD_BY_POINTER");
checkequal(call3(ADD_BY_REFERENCE_get(), 14, 15), 29, "ADD_BY_REFERENCE");
+checkequal(call1(ADD_BY_VALUE_C_get(), 2, 3), 5, "ADD_BY_VALUE_C");
exec("swigtest.quit", -1);
diff --git a/Examples/test-suite/scilab/overload_polymorphic_runme.sci b/Examples/test-suite/scilab/overload_polymorphic_runme.sci
new file mode 100644
index 000000000..cae65405c
--- /dev/null
+++ b/Examples/test-suite/scilab/overload_polymorphic_runme.sci
@@ -0,0 +1,11 @@
+exec("swigtest.start", -1);
+
+derived = new_Derived();
+
+checkequal(test(derived), 0, "test(derived)");
+checkequal(test2(derived), 1, "test2(derived)");
+
+delete_Derived(derived);
+
+exec("swigtest.quit", -1);
+
diff --git a/Examples/test-suite/scilab/overload_simple_runme.sci b/Examples/test-suite/scilab/overload_simple_runme.sci
index 23be43db9..ad353e847 100644
--- a/Examples/test-suite/scilab/overload_simple_runme.sci
+++ b/Examples/test-suite/scilab/overload_simple_runme.sci
@@ -1,16 +1,17 @@
exec("swigtest.start", -1);
+f = new_Foo();
+b = new_Bar();
+v = malloc_void(32);
+
// Functions
checkequal(foo(int32(3)), "foo:int", "foo(int)");
checkequal(foo(3), "foo:double", "foo(double)");
checkequal(foo("hello"), "foo:char *", "foo(char* )");
-f = new_Foo();
checkequal(foo(f), "foo:Foo *", "foo(Foo *)");
-//b = new_Bar();
-//checkequal(foo(b), "foo:Bar *", "foo(Bar *)");
-//v = malloc_void(32);
-//checkequal(foo(v), "foo:void *", "foo(void *)");
+checkequal(foo(b), "foo:Bar *", "foo(Bar *)");
+checkequal(foo(v), "foo:void *", "foo(void *)");
// Class methods
@@ -19,8 +20,8 @@ checkequal(Spam_foo(s, int32(3)), "foo:int", "Spam::foo(int)");
checkequal(Spam_foo(s, 3), "foo:double", "Spam::foo(double)");
checkequal(Spam_foo(s, "hello"), "foo:char *", "Spam::foo(char *)");
checkequal(Spam_foo(s, f), "foo:Foo *", "Spam::foo(Foo *)");
-//checkequal(Spam_foo(s, b), "foo:Bar *", "Spam::foo(Bar *)");
-//checkequal(Spam_foo(s, v), "foo:void *", "Spam::foo(void *)");
+checkequal(Spam_foo(s, b), "foo:Bar *", "Spam::foo(Bar *)");
+checkequal(Spam_foo(s, v), "foo:void *", "Spam::foo(void *)");
delete_Spam(s);
// Static class methods
@@ -29,8 +30,8 @@ checkequal(Spam_bar(int32(3)), "bar:int", "Spam::bar(int)");
checkequal(Spam_bar(3.1), "bar:double", "Spam::bar(double)");
checkequal(Spam_bar("hello"), "bar:char *", "Spam::bar(char *)");
checkequal(Spam_bar(f), "bar:Foo *", "Spam::bar(Foo *)");
-//checkequal(Spam_bar(b), "bar:Bar *", "Spam::bar(Bar *)");
-//checkequal(Spam_bar(b), "bar:void *", "Spam::bar(void *)");
+checkequal(Spam_bar(b), "bar:Bar *", "Spam::bar(Bar *)");
+checkequal(Spam_bar(v), "bar:void *", "Spam::bar(void *)");
// Constructors
@@ -54,20 +55,21 @@ s = new_Spam(f);
checkequal(Spam_type_get(s), "Foo *", "Spam::Spam(Foo *)");
delete_Spam(s);
-//s = new_Spam(b);
-//checkequal(Spam_type_get(s), "Bar *", "Spam::Spam(Bar *)");
-//delete_Spam(s);
+s = new_Spam(b);
+checkequal(Spam_type_get(s), "Bar *", "Spam::Spam(Bar *)");
+delete_Spam(s);
-//s = new_Spam(v);
-//checkequal(Spam_type_get(s), "void *", "Spam::Spam(void *)");
-//delete_Spam(s);
+s = new_Spam(v);
+checkequal(Spam_type_get(s), "void *", "Spam::Spam(void *)");
+delete_Spam(s);
delete_Foo(f);
-//delete_Bar(b);
-//free_void(v);
+delete_Bar(b);
+free_void(v);
a = new_ClassA();
b = ClassA_method1(a, 1);
+delete_ClassA(a);
exec("swigtest.quit", -1);
diff --git a/Examples/test-suite/scilab/overload_subtype_runme.sci b/Examples/test-suite/scilab/overload_subtype_runme.sci
new file mode 100644
index 000000000..e644f56b9
--- /dev/null
+++ b/Examples/test-suite/scilab/overload_subtype_runme.sci
@@ -0,0 +1,13 @@
+exec("swigtest.start", -1);
+
+f = new_Foo();
+b = new_Bar();
+
+checkequal(spam(f), 1, "spam(f)");
+checkequal(spam(b), 2, "spam(b)");
+
+delete_Foo(f);
+delete_Bar(b);
+
+exec("swigtest.quit", -1);
+
diff --git a/Examples/test-suite/scilab/template_rename_runme.sci b/Examples/test-suite/scilab/template_rename_runme.sci
index 9c9512930..7b6b0de84 100644
--- a/Examples/test-suite/scilab/template_rename_runme.sci
+++ b/Examples/test-suite/scilab/template_rename_runme.sci
@@ -6,7 +6,7 @@ checkequal(iFoo_spam_test(i, 5), 5, "iFoo_spam_test(i, 5) test fails");
checkequal(iFoo_groki_test(i, 6), 6, "iFoo_groki_test(i, 6) test fails");
delete_iFoo(i);
-d = new_iFoo();
+d = new_dFoo();
checkequal(dFoo_blah_test(d, 4), 4, "dFoo_blah_test(d, 4) test fails");
checkequal(dFoo_spam(d, 5), 5, "dFoo_spam_test(d, 5) test fails");
checkequal(dFoo_grok_test(d, 6), 6, "dFoo_groki_test(d, 6) test fails");
diff --git a/Examples/test-suite/smart_pointer_ignore.i b/Examples/test-suite/smart_pointer_ignore.i
new file mode 100644
index 000000000..f369de782
--- /dev/null
+++ b/Examples/test-suite/smart_pointer_ignore.i
@@ -0,0 +1,33 @@
+%module smart_pointer_ignore
+
+
+%ignore Derived;
+
+%inline %{
+class Base {
+ public:
+ void base() {}
+};
+
+class Derived : public Base {
+ public:
+ void derived() {}
+};
+
+template <class T>
+class Ptr {
+public:
+ Ptr(T *t) : ptr(t) {}
+ T * operator->() const { return ptr; }
+private:
+ T *ptr;
+};
+%}
+
+%template(DerivedPtr) Ptr<Derived>;
+
+%inline %{
+Ptr<Derived> makeDerived() {
+ return Ptr<Derived>(new Derived());
+}
+%}
diff --git a/Examples/test-suite/string_constants.i b/Examples/test-suite/string_constants.i
new file mode 100644
index 000000000..60f8c1859
--- /dev/null
+++ b/Examples/test-suite/string_constants.i
@@ -0,0 +1,44 @@
+%module string_constants
+// Test unusual string constants
+
+%warnfilter(SWIGWARN_TYPEMAP_CHARLEAK);
+
+#if defined(SWIGCSHARP)
+%csconst(1);
+%csconstvalue("\"AEIOU\\n\"") SS1;
+%csconstvalue("\"AEIOU\\n\"") SS2;
+#endif
+#if defined(SWIGJAVA)
+%javaconst(1);
+#endif
+%inline %{
+#define SS1 "ÆÎOU\n"
+#define AA1 "A\rB\nC"
+#define EE1 "\124\125\126"
+#define XX1 "\x57\x58\x59"
+#define ZS1 "\0"
+#define ES1 ""
+%}
+%constant SS2="ÆÎOU\n";
+%constant AA2="A\rB\nC";
+%constant EE2="\124\125\126";
+%constant XX2="\x57\x58\x59";
+%constant ZS2="\0";
+%constant ES2="";
+
+%inline %{
+static const char *SS3 = "ÆÎOU\n";
+static const char *AA3 = "A\rB\nC";
+static const char *EE3 = "\124\125\126";
+static const char *XX3 = "\x57\x58\x59";
+static const char *ZS3 = "\0";
+static const char *ES3 = "";
+struct things {
+ const char * defarguments1(const char *SS4 = "ÆÎOU\n") { return SS4; }
+ const char * defarguments2(const char *AA4 = "A\rB\nC") { return AA4; }
+ const char * defarguments3(const char *EE4 = "\124\125\126") { return EE4; }
+ const char * defarguments4(const char *XX4 = "\x57\x58\x59") { return XX4; }
+ const char * defarguments5(const char *ZS4 = "\0") { return ZS4; }
+ const char * defarguments6(const char *ES4 = "") { return ES4; }
+};
+%}
diff --git a/Examples/test-suite/template_default_arg_overloaded_extend.i b/Examples/test-suite/template_default_arg_overloaded_extend.i
new file mode 100644
index 000000000..67d66c2fa
--- /dev/null
+++ b/Examples/test-suite/template_default_arg_overloaded_extend.i
@@ -0,0 +1,44 @@
+%module template_default_arg_overloaded_extend
+
+%inline %{
+namespace gaia2 {
+
+struct Filter {};
+struct SearchPoint {};
+struct DataSet {};
+
+template <typename SearchPointType, typename DataSetType>
+class BaseSearchSpace {};
+
+template <typename SearchPointType, typename DataSetType>
+class BaseResultSet {
+public:
+ const char *over(int i = 0) {
+ return "over(int)";
+ }
+};
+}
+%}
+
+// Specialized template extend
+%extend gaia2::BaseResultSet<gaia2::SearchPoint, gaia2::DataSet> {
+ int go_get_method(int n, gaia2::SearchPoint, int offset = -1) {
+ return offset;
+ }
+ const char *over(gaia2::SearchPoint, int x = 0) {
+ return "over(giai2::SearchPoint, int)";
+ }
+}
+
+// Generic extend for all template instantiations
+%extend gaia2::BaseResultSet {
+ int go_get_template(int n, SearchPointType sss, int offset = -2) {
+ return offset;
+ }
+ const char *over(bool b, SearchPointType, int x = 0) {
+ return "over(bool, SearchPointType, int)";
+ }
+}
+
+%template(ResultSet) gaia2::BaseResultSet<gaia2::SearchPoint, gaia2::DataSet>;
+
diff --git a/Examples/test-suite/typemap_manyargs.i b/Examples/test-suite/typemap_manyargs.i
index d26e97714..426fcca1b 100644
--- a/Examples/test-suite/typemap_manyargs.i
+++ b/Examples/test-suite/typemap_manyargs.i
@@ -13,6 +13,7 @@
$9 = &temp9;
$10 = &temp10; // the code generated for this was arg20 = &temp10; and arg20 does not exist.
int $10_ptr = 0; // Was arg20_ptr
+ (void)$10_ptr;
}
%inline %{
diff --git a/Examples/test-suite/typemap_subst.i b/Examples/test-suite/typemap_subst.i
index 91ac62020..946384840 100644
--- a/Examples/test-suite/typemap_subst.i
+++ b/Examples/test-suite/typemap_subst.i
@@ -27,12 +27,14 @@
(void)c;
(void)d;
(void)e;
+ (void)f;
}
{ /* Test locals */
basetemp.member = 0;
startemp = &basetemp;
temp = &startemp;
amptemp = &temp;
+ (void)amptemp;
}
{ /* Test descriptors */
void *desc = $descriptor;