Enhance cpp11_strongly_typed_enumerations testcase and turn it on

This commit is contained in:
William S Fulton 2014-11-20 20:11:41 +00:00
commit f72b9f99a4
2 changed files with 62 additions and 34 deletions

View file

@ -525,6 +525,7 @@ CPP11_TEST_CASES = \
cpp11_rvalue_reference3 \ cpp11_rvalue_reference3 \
cpp11_sizeof_object \ cpp11_sizeof_object \
cpp11_static_assert \ cpp11_static_assert \
cpp11_strongly_typed_enumerations \
cpp11_thread_local \ cpp11_thread_local \
cpp11_template_double_brackets \ cpp11_template_double_brackets \
cpp11_template_explicit \ cpp11_template_explicit \
@ -537,7 +538,6 @@ CPP11_TEST_CASES = \
# Broken C++11 test cases. # Broken C++11 test cases.
CPP11_TEST_BROKEN = \ CPP11_TEST_BROKEN = \
# cpp11_hash_tables \ # not fully implemented yet # cpp11_hash_tables \ # not fully implemented yet
# cpp11_strongly_typed_enumerations \ # SWIG not quite getting this right yet in all langs
# cpp11_variadic_templates \ # Broken for some languages (such as Java) # cpp11_variadic_templates \ # Broken for some languages (such as Java)
# cpp11_reference_wrapper \ # No typemaps # cpp11_reference_wrapper \ # No typemaps

View file

@ -2,10 +2,6 @@
strongly typed enums. Enums with the same type are comparable. Enum classes strongly typed enums. Enums with the same type are comparable. Enum classes
require support for nested classes. */ require support for nested classes. */
%module cpp11_strongly_typed_enumerations %module cpp11_strongly_typed_enumerations
%warnfilter(302) Val1;
%warnfilter(302) Val2;
%warnfilter(302) Val3;
%warnfilter(302) Val4;
/* Forward declarations (illegally accepted by SWIG - oh well!) */ /* Forward declarations (illegally accepted by SWIG - oh well!) */
enum Enum1 : short; enum Enum1 : short;
@ -17,14 +13,14 @@ enum : unsigned short;
enum class Enum1 { enum class Enum1 {
Val1, Val1,
Val2, Val2,
Val3 = 100, Val3 = 13,
Val4 /* = 101 */ Val4
}; };
enum class Enum2 : short { enum class Enum2 : short {
Val1, Val1,
Val2, Val2,
Val3 = 100, Val3 = 23,
Val4 Val4
}; };
%} %}
@ -39,24 +35,24 @@ enum class Enum5; // Legal in C++11, because enum class declarati
enum class Enum6 : unsigned int; // Legal C++11. enum class Enum6 : unsigned int; // Legal C++11.
enum Enum4 : unsigned int { enum Enum4 : unsigned int {
Val1, Val2, Val3 = 100, Val4 Val1, Val2, Val3 = 43, Val4
}; };
enum class Enum5 { enum class Enum5 {
Val1, Val2, Val3 = 100, Val4 Val1, Val2, Val3 = 53, Val4
}; };
enum class Enum6 : unsigned int { enum class Enum6 : unsigned int {
Val1, Val2, Val3 = 300, Val4 Val1, Val2, Val3 = 63, Val4
}; };
typedef enum class Enum7 : unsigned int { typedef enum class Enum7 : unsigned int {
Val1, Val2, Val3 = 300, Val4 Val1, Val2, Val3 = 73, Val4
} Enum7td; } Enum7td;
// enum inherits from non-primitive type // enum inherits from non-primitive type
enum class Enum8 : size_t { enum class Enum8 : size_t {
Val1, Val2, Val3 = 300, Val4 Val1, Val2, Val3 = 83, Val4
}; };
template <typename T> struct TType { template <typename T> struct TType {
@ -64,7 +60,7 @@ template <typename T> struct TType {
}; };
enum class Enum10 : TType<int>::type_name { enum class Enum10 : TType<int>::type_name {
Val1, Val2, Val3 = 300, Val4 Val1, Val2, Val3 = 103, Val4
}; };
// forward declaration, no definition of enum // forward declaration, no definition of enum
@ -78,34 +74,50 @@ class Class1
public: public:
enum class Enum12 enum class Enum12
{ {
Val1 = 300, Val1 = 1121,
Val2 = 400, Val2 = 1122,
Val3, Val3,
Val4 Val4
}; };
enum Enum13 enum Enum13
{ {
Val1 = 300, Val1 = 1131,
Val2 = 400, Val2 = 1132,
Val3,
Val4
};
enum class Enum14
{
Val1 = 1141,
Val2 = 1142,
Val3, Val3,
Val4 Val4
}; };
struct Struct1 struct Struct1
{ {
enum class Enum14 enum class Enum12
{ {
Val1 = 300, Val1 = 3121,
Val2 = 400, Val2 = 3122,
Val3, Val3,
Val4 Val4
}; };
enum Enum15 enum Enum13
{ {
Val1 = 300, Val1 = 3131,
Val2 = 400, Val2 = 3132,
Val3,
Val4
};
enum class Enum14
{
Val1 = 3141,
Val2 = 3142,
Val3, Val3,
Val4 Val4
}; };
@ -117,34 +129,50 @@ class Class2
public: public:
enum class Enum12 enum class Enum12
{ {
Val1 = 300, Val1 = 2121,
Val2 = 400, Val2 = 2122,
Val3, Val3,
Val4 Val4
}; };
enum Enum13 enum Enum13
{ {
Val1 = 300, Val1 = 2131,
Val2 = 400, Val2 = 2132,
Val3,
Val4
};
enum class Enum14
{
Val1 = 2141,
Val2 = 2142,
Val3, Val3,
Val4 Val4
}; };
struct Struct1 struct Struct1
{ {
enum class Enum14 enum class Enum12
{ {
Val1 = 300, Val1 = 4121,
Val2 = 400, Val2 = 4122,
Val3, Val3,
Val4 Val4
}; };
enum Enum15 enum Enum13
{ {
Val1 = 300, Val1 = 4131,
Val2 = 400, Val2 = 4132,
Val3,
Val4
};
enum class Enum14
{
Val1 = 4141,
Val2 = 4142,
Val3, Val3,
Val4 Val4
}; };