wibble 1.1
strongenumflags.test.h
Go to the documentation of this file.
1#if __cplusplus >= 201103L
3#endif
4
5#include <wibble/test.h>
6
7using namespace wibble;
8
9#if __cplusplus >= 201103L
10enum class A : unsigned char { X = 1, Y = 2, Z = 4 };
11enum class B : unsigned short { X = 1, Y = 2, Z = 4 };
12enum class C : unsigned { X = 1, Y = 2, Z = 4 };
13enum class D : unsigned long { X = 1, Y = 2, Z = 4 };
14#endif
15
17#if __cplusplus >= 201103L
18 template< typename Enum >
19 void testEnum() {
21 StrongEnumFlags< Enum > e2( Enum::X );
22
23 assert( !e1 );
24 assert( e2 );
25
26 assert( e1 | e2 );
27 assert( Enum::X | Enum::Y );
28 assert( e2 | Enum::Z );
29 assert( e2.has( Enum::X ) );
30
31 assert( e2 & Enum::X );
32 assert( !( Enum::X & Enum::Y ) );
33
34 assert( Enum::X | Enum::Y | Enum::Z );
35 assert( !( Enum::X & Enum::Y & Enum::Z ) );
36 assert( ( Enum::X | Enum::Y | Enum::Z ) & Enum::X );
37 }
38#endif
39
40#if __cplusplus >= 201103L
41 // we don't want to break classical enums and ints by out operators
43 enum Classic { C_X = 1, C_Y = 2, C_Z = 4 };
44
45 assert( C_X | C_Y | C_Z );
46 assert( 1 | 2 | 4 );
47 assert( C_X & 1 );
48 }
49
54#else /* FIXME work around issues with non-C++11 builds */
55 void regression() {}
56 void enum_uchar() {}
57 void enum_ushort() {}
58 void enum_uint() {}
59 void enum_ulong() {}
60#endif
61};
62
Definition amorph.h:17
Definition strongenumflags.test.h:16
void enum_ulong()
Definition strongenumflags.test.h:59
void enum_uint()
Definition strongenumflags.test.h:58
void enum_ushort()
Definition strongenumflags.test.h:57
void regression()
Definition strongenumflags.test.h:55
void enum_uchar()
Definition strongenumflags.test.h:56
Definition amorph.h:30
#define assert(x)
Definition test.h:30