RDFS
The Rice Comp413 2017 class' continuation on the work of the 2016 RDFS.
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
helpers.hpp
1 #ifndef HEADER_TEST_HELPERS_HPP
2 #define HEADER_TEST_HELPERS_HPP
3 
4 #include "common.hpp"
5 
6 #include <utility>
7 
8 template <typename T> static void generic_bool_ops_test(const T& obj)
9 {
10  T null;
11 
12  CHECK(!null);
13  CHECK(obj);
14  CHECK(!!obj);
15 
16 #ifdef _MSC_VER
17 # pragma warning(push)
18 # pragma warning(disable: 4800) // forcing value to bool 'true' or 'false' (performance warning) - we really want to just cast to bool instead of !!
19 #endif
20 
21  bool b1 = null, b2 = obj;
22 
23 #ifdef _MSC_VER
24 # pragma warning(pop)
25 #endif
26 
27  CHECK(!b1);
28  CHECK(b2);
29 
30  CHECK(obj && b2);
31  CHECK(obj || b2);
32  CHECK(obj && obj);
33  CHECK(obj || obj);
34 }
35 
36 template <typename T> static void generic_eq_ops_test(const T& obj1, const T& obj2)
37 {
38  T null = T();
39 
40  // operator==
41  CHECK(null == null);
42  CHECK(obj1 == obj1);
43  CHECK(!(null == obj1));
44  CHECK(!(null == obj2));
45  CHECK(T(null) == null);
46  CHECK(T(obj1) == obj1);
47 
48  // operator!=
49  CHECK(!(null != null));
50  CHECK(!(obj1 != obj1));
51  CHECK(null != obj1);
52  CHECK(null != obj2);
53  CHECK(!(T(null) != null));
54  CHECK(!(T(obj1) != obj1));
55 }
56 
57 template <typename T> static void generic_rel_ops_test(T obj1, T obj2)
58 {
59  T null = T();
60 
61  // obj1 < obj2 (we use operator<, but there is no other choice
62  if (obj1 > obj2)
63  {
64  T temp = obj1;
65  obj1 = obj2;
66  obj2 = temp;
67  }
68 
69  // operator<
70  CHECK(null < obj1);
71  CHECK(null < obj2);
72  CHECK(obj1 < obj2);
73  CHECK(!(null < null));
74  CHECK(!(obj1 < obj1));
75  CHECK(!(obj1 < null));
76  CHECK(!(obj2 < obj1));
77 
78  // operator<=
79  CHECK(null <= obj1);
80  CHECK(null <= obj2);
81  CHECK(obj1 <= obj2);
82  CHECK(null <= null);
83  CHECK(obj1 <= obj1);
84  CHECK(!(obj1 <= null));
85  CHECK(!(obj2 <= obj1));
86 
87  // operator>
88  CHECK(obj1 > null);
89  CHECK(obj2 > null);
90  CHECK(obj2 > obj1);
91  CHECK(!(null > null));
92  CHECK(!(obj1 > obj1));
93  CHECK(!(null > obj1));
94  CHECK(!(obj1 > obj2));
95 
96  // operator>=
97  CHECK(obj1 >= null);
98  CHECK(obj2 >= null);
99  CHECK(obj2 >= obj1);
100  CHECK(null >= null);
101  CHECK(obj1 >= obj1);
102  CHECK(!(null >= obj1));
103  CHECK(!(obj1 >= obj2));
104 }
105 
106 template <typename T> static void generic_empty_test(const T& obj)
107 {
108  T null;
109 
110  CHECK(null.empty());
111  CHECK(!obj.empty());
112 }
113 
114 #endif