summaryrefslogtreecommitdiff
path: root/Examples/test-suite/cpp11_strongly_typed_enumerations.i
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/cpp11_strongly_typed_enumerations.i')
-rw-r--r--Examples/test-suite/cpp11_strongly_typed_enumerations.i183
1 files changed, 157 insertions, 26 deletions
diff --git a/Examples/test-suite/cpp11_strongly_typed_enumerations.i b/Examples/test-suite/cpp11_strongly_typed_enumerations.i
index ed466369e..3a4ee107a 100644
--- a/Examples/test-suite/cpp11_strongly_typed_enumerations.i
+++ b/Examples/test-suite/cpp11_strongly_typed_enumerations.i
@@ -1,11 +1,9 @@
-/* This testcase checks whether SWIG produces the correct wrapper for the
- strongly typed enums. Enums with the same type are comparable. Enum classes
- require support for nested classes. */
+// This testcase checks whether SWIG produces the correct wrappers for strongly typed enums.
+
%module cpp11_strongly_typed_enumerations
-%warnfilter(302) Val1;
-%warnfilter(302) Val2;
-%warnfilter(302) Val3;
-%warnfilter(302) Val4;
+
+%warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Class1::Struct1;
+%warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Class2::Struct1;
/* Forward declarations (illegally accepted by SWIG - oh well!) */
enum Enum1 : short;
@@ -17,15 +15,19 @@ enum : unsigned short;
enum class Enum1 {
Val1,
Val2,
- Val3 = 100,
- Val4 /* = 101 */
+ Val3 = 13,
+ Val4,
+ Val5a = 13,
+ Val6a
};
enum class Enum2 : short {
Val1,
Val2,
- Val3 = 100,
- Val4
+ Val3 = 23,
+ Val4,
+ Val5b = 23,
+ Val6b
};
%}
@@ -39,24 +41,24 @@ enum class Enum5; // Legal in C++11, because enum class declarati
enum class Enum6 : unsigned int; // Legal C++11.
enum Enum4 : unsigned int {
- Val1, Val2, Val3 = 100, Val4
+ Val1, Val2, Val3 = 43, Val4
};
enum class Enum5 {
- Val1, Val2, Val3 = 100, Val4
+ Val1, Val2, Val3 = 53, Val4
};
enum class Enum6 : unsigned int {
- Val1, Val2, Val3 = 300, Val4
+ Val1, Val2, Val3 = 63, Val4
};
typedef enum class Enum7 : unsigned int {
- Val1, Val2, Val3 = 300, Val4
+ Val1, Val2, Val3 = 73, Val4
} Enum7td;
// enum inherits from non-primitive type
enum class Enum8 : size_t {
- Val1, Val2, Val3 = 300, Val4
+ Val1, Val2, Val3 = 83, Val4
};
template <typename T> struct TType {
@@ -64,7 +66,7 @@ template <typename T> struct TType {
};
enum class Enum10 : TType<int>::type_name {
- Val1, Val2, Val3 = 300, Val4
+ Val1, Val2, Val3 = 103, Val4
};
// forward declaration, no definition of enum
@@ -73,15 +75,144 @@ struct UseEnum11 {
Enum11 myenum11;
};
-/*
-TODO
-enum class MyClass {AAA, BBB, CCC};
-namespace Space {
-enum MyEnum {XXX, YYY, ZZZ};
-}
-struct SSS {
- MyClass m;
+class Class1
+{
+public:
+ enum class Enum12
+ {
+ Val1 = 1121,
+ Val2 = 1122,
+ Val3,
+ Val4,
+ Val5c = 1121,
+ Val6c
+ };
+
+ enum Enum13
+ {
+ Val1 = 1131,
+ Val2 = 1132,
+ Val3,
+ Val4,
+ Val5d = 1131,
+ Val6d
+ };
+
+ enum class Enum14
+ {
+ Val1 = 1141,
+ Val2 = 1142,
+ Val3,
+ Val4,
+ Val5e = 1141,
+ Val6e
+ };
+
+ struct Struct1
+ {
+ enum class Enum12
+ {
+ Val1 = 3121,
+ Val2 = 3122,
+ Val3,
+ Val4,
+ Val5f = 3121,
+ Val6f
+ };
+
+ enum Enum13
+ {
+ Val1 = 3131,
+ Val2 = 3132,
+ Val3,
+ Val4,
+ };
+
+ enum class Enum14
+ {
+ Val1 = 3141,
+ Val2 = 3142,
+ Val3,
+ Val4,
+ Val5g = 3141,
+ Val6g
+ };
+ };
+ Enum1 class1Test1(Enum1 e) { return e; }
+ Enum12 class1Test2(Enum12 e) { return e; }
+ Struct1::Enum12 class1Test3(Struct1::Enum12 e) { return e; }
+};
+
+class Class2
+{
+public:
+ enum class Enum12
+ {
+ Val1 = 2121,
+ Val2 = 2122,
+ Val3,
+ Val4,
+ Val5h = 2121,
+ Val6h
+ };
+
+ enum Enum13
+ {
+ Val1 = 2131,
+ Val2 = 2132,
+ Val3,
+ Val4,
+ Val5i = 2131,
+ Val6i
+ };
+
+ enum class Enum14
+ {
+ Val1 = 2141,
+ Val2 = 2142,
+ Val3,
+ Val4,
+ Val5j = 2141,
+ Val6j
+ };
+
+ struct Struct1
+ {
+ enum class Enum12
+ {
+ Val1 = 4121,
+ Val2 = 4122,
+ Val3,
+ Val4,
+ Val5k = 4121,
+ Val6k
+ };
+
+ enum Enum13
+ {
+ Val1 = 4131,
+ Val2 = 4132,
+ Val3,
+ Val4,
+ Val5l = 4131,
+ Val6l
+ };
+
+ enum class Enum14
+ {
+ Val1 = 4141,
+ Val2 = 4142,
+ Val3,
+ Val4,
+ Val5m = 4141,
+ Val6m
+ };
+ };
};
-*/
+
+Enum1 globalTest1(Enum1 e) { return e; }
+Class1::Enum12 globalTest2(Class1::Enum12 e) { return e; }
+Class1::Struct1::Enum12 globalTest3(Class1::Struct1::Enum12 e) { return e; }
+
%}