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 
7 using namespace wibble;
8 
9 #if __cplusplus >= 201103L
10 enum class A : unsigned char { X = 1, Y = 2, Z = 4 };
11 enum class B : unsigned short { X = 1, Y = 2, Z = 4 };
12 enum class C : unsigned { X = 1, Y = 2, Z = 4 };
13 enum 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
42  Test regression() {
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 
50  Test enum_uchar() { testEnum< A >(); }
51  Test enum_ushort() { testEnum< B >(); }
52  Test enum_uint() { testEnum< C >(); }
53  Test enum_ulong() { testEnum< D >(); }
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: strongenumflags.h:19
constexpr bool has(Self x) const noexcept
Definition: strongenumflags.h:60
void Test
Definition: test.h:178
#define assert(x)
Definition: test.h:30