test14.cpp (7486B)
1 // This is free and unencumbered software released into the public domain. 2 // 3 // Anyone is free to copy, modify, publish, use, compile, sell, or 4 // distribute this software, either in source code form or as a compiled 5 // binary, for any purpose, commercial or non-commercial, and by any 6 // means. 7 // 8 // In jurisdictions that recognize copyright laws, the author or authors 9 // of this software dedicate any and all copyright interest in the 10 // software to the public domain. We make this dedication for the benefit 11 // of the public at large and to the detriment of our heirs and 12 // successors. We intend this dedication to be an overt act of 13 // relinquishment in perpetuity of all present and future rights to this 14 // software under copyright law. 15 // 16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 // IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 // OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 // OTHER DEALINGS IN THE SOFTWARE. 23 // 24 // For more information, please refer to <http://unlicense.org/> 25 26 #include "utest.h" 27 28 #ifdef _MSC_VER 29 // disable 'conditional expression is constant' - our examples below use this! 30 #pragma warning(disable : 4127) 31 #endif 32 33 UTEST(cpp14, ASSERT_TRUE) { ASSERT_TRUE(1); } 34 35 UTEST(cpp14, ASSERT_FALSE) { ASSERT_FALSE(0); } 36 37 UTEST(cpp14, ASSERT_EQ) { ASSERT_EQ(1, 1); } 38 39 UTEST(cpp14, ASSERT_NE) { ASSERT_NE(1, 2); } 40 41 UTEST(cpp14, ASSERT_LT) { ASSERT_LT(1, 2); } 42 43 UTEST(cpp14, ASSERT_LE) { 44 ASSERT_LE(1, 1); 45 ASSERT_LE(1, 2); 46 } 47 48 UTEST(cpp14, ASSERT_GT) { ASSERT_GT(2, 1); } 49 50 UTEST(cpp14, ASSERT_GE) { 51 ASSERT_GE(1, 1); 52 ASSERT_GE(2, 1); 53 } 54 55 UTEST(cpp14, ASSERT_STREQ) { ASSERT_STREQ("foo", "foo"); } 56 57 UTEST(cpp14, ASSERT_STRNE) { ASSERT_STRNE("foo", "bar"); } 58 59 UTEST(cpp14, ASSERT_STRNEQ) { ASSERT_STRNEQ("foo", "foobar", strlen("foo")); } 60 61 UTEST(cpp14, ASSERT_STRNNE) { ASSERT_STRNNE("foo", "barfoo", strlen("foo")); } 62 63 UTEST(cpp14, EXPECT_TRUE) { EXPECT_TRUE(1); } 64 65 UTEST(cpp14, EXPECT_FALSE) { EXPECT_FALSE(0); } 66 67 UTEST(cpp14, EXPECT_EQ) { EXPECT_EQ(1, 1); } 68 69 UTEST(cpp14, EXPECT_NE) { EXPECT_NE(1, 2); } 70 71 UTEST(cpp14, EXPECT_LT) { EXPECT_LT(1, 2); } 72 73 UTEST(cpp14, EXPECT_LE) { 74 EXPECT_LE(1, 1); 75 EXPECT_LE(1, 2); 76 } 77 78 UTEST(cpp14, EXPECT_GT) { EXPECT_GT(2, 1); } 79 80 UTEST(cpp14, EXPECT_GE) { 81 EXPECT_GE(1, 1); 82 EXPECT_GE(2, 1); 83 } 84 85 UTEST(cpp14, EXPECT_STREQ) { EXPECT_STREQ("foo", "foo"); } 86 87 UTEST(cpp14, EXPECT_STRNE) { EXPECT_STRNE("foo", "bar"); } 88 89 UTEST(cpp14, EXPECT_STRNEQ) { EXPECT_STRNEQ("foo", "foobar", strlen("foo")); } 90 91 UTEST(cpp14, EXPECT_STRNNE) { EXPECT_STRNNE("foo", "barfoo", strlen("foo")); } 92 93 UTEST(cpp14, no_double_eval) { 94 int i = 0; 95 ASSERT_EQ(i++, 0); 96 ASSERT_EQ(i, 1); 97 } 98 99 UTEST(cpp14, bool_eval) { 100 bool i = false; 101 ASSERT_EQ(i, false); 102 i = true; 103 ASSERT_EQ(i, true); 104 } 105 106 struct MyTestF { 107 int foo; 108 }; 109 110 UTEST_F_SETUP(MyTestF) { 111 ASSERT_EQ(0, utest_fixture->foo); 112 utest_fixture->foo = 42; 113 } 114 115 UTEST_F_TEARDOWN(MyTestF) { ASSERT_EQ(13, utest_fixture->foo); } 116 117 UTEST_F(MyTestF, cpp14_1) { 118 ASSERT_EQ(42, utest_fixture->foo); 119 utest_fixture->foo = 13; 120 } 121 122 UTEST_F(MyTestF, cpp14_2) { 123 ASSERT_EQ(42, utest_fixture->foo); 124 utest_fixture->foo = 13; 125 } 126 127 struct MyTestI { 128 size_t foo; 129 size_t bar; 130 }; 131 132 UTEST_I_SETUP(MyTestI) { 133 ASSERT_EQ(0u, utest_fixture->foo); 134 ASSERT_EQ(0u, utest_fixture->bar); 135 utest_fixture->foo = 42; 136 utest_fixture->bar = utest_index; 137 } 138 139 UTEST_I_TEARDOWN(MyTestI) { 140 ASSERT_EQ(13u, utest_fixture->foo); 141 ASSERT_EQ(utest_index, utest_fixture->bar); 142 } 143 144 UTEST_I(MyTestI, cpp14_1, 2) { 145 ASSERT_GT(2u, utest_fixture->bar); 146 utest_fixture->foo = 13; 147 } 148 149 UTEST_I(MyTestI, cpp14_2, 128) { 150 ASSERT_GT(128u, utest_fixture->bar); 151 utest_fixture->foo = 13; 152 } 153 154 UTEST(cpp14, Float) { 155 float a = 1; 156 float b = 2; 157 EXPECT_NE(a, b); 158 ASSERT_NE(a, b); 159 } 160 161 UTEST(cpp14, Double) { 162 double a = 1; 163 double b = 2; 164 EXPECT_NE(a, b); 165 ASSERT_NE(a, b); 166 } 167 168 UTEST(cpp14, LongDouble) { 169 long double a = 1; 170 long double b = 2; 171 EXPECT_NE(a, b); 172 ASSERT_NE(a, b); 173 } 174 175 UTEST(cpp14, Char) { 176 char a = 1; 177 char b = 2; 178 EXPECT_NE(a, b); 179 ASSERT_NE(a, b); 180 } 181 182 UTEST(cpp14, SignedChar) { 183 signed char a = 1; 184 signed char b = 2; 185 EXPECT_NE(a, b); 186 ASSERT_NE(a, b); 187 } 188 189 UTEST(cpp14, UChar) { 190 unsigned char a = 1; 191 unsigned char b = 2; 192 EXPECT_NE(a, b); 193 ASSERT_NE(a, b); 194 } 195 196 UTEST(cpp14, Short) { 197 short a = 1; 198 short b = 2; 199 EXPECT_NE(a, b); 200 ASSERT_NE(a, b); 201 } 202 203 UTEST(cpp14, UShort) { 204 unsigned short a = 1; 205 unsigned short b = 2; 206 EXPECT_NE(a, b); 207 ASSERT_NE(a, b); 208 } 209 210 UTEST(cpp14, Int) { 211 int a = 1; 212 int b = 2; 213 EXPECT_NE(a, b); 214 ASSERT_NE(a, b); 215 } 216 217 UTEST(cpp14, UInt) { 218 unsigned int a = 1; 219 unsigned int b = 2; 220 EXPECT_NE(a, b); 221 ASSERT_NE(a, b); 222 } 223 224 UTEST(cpp14, Long) { 225 long a = 1; 226 long b = 2; 227 EXPECT_NE(a, b); 228 ASSERT_NE(a, b); 229 } 230 231 UTEST(cpp14, ULong) { 232 unsigned long a = 1; 233 unsigned long b = 2; 234 EXPECT_NE(a, b); 235 ASSERT_NE(a, b); 236 } 237 238 #ifdef __clang__ 239 #pragma clang diagnostic push 240 #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" 241 #endif 242 243 UTEST(cpp14, LongLong) { 244 long long a = 1; 245 long long b = 2; 246 EXPECT_NE(a, b); 247 ASSERT_NE(a, b); 248 } 249 250 UTEST(cpp14, ULongLong) { 251 unsigned long long a = 1; 252 unsigned long long b = 2; 253 EXPECT_NE(a, b); 254 ASSERT_NE(a, b); 255 } 256 257 #ifdef __clang__ 258 #pragma clang diagnostic pop 259 #endif 260 261 #if defined(__clang__) 262 #if __has_warning("-Wunsafe-buffer-usage") 263 #pragma clang diagnostic push 264 #pragma clang diagnostic ignored "-Wunsafe-buffer-usage" 265 #endif 266 #endif 267 268 UTEST(cpp14, Ptr) { 269 char foo = 42; 270 EXPECT_NE(&foo, &foo + 1); 271 } 272 273 UTEST(cpp14, VoidPtr) { 274 void *foo = reinterpret_cast<void *>(0); 275 EXPECT_NE(foo, static_cast<char *>(foo) + 1); 276 } 277 278 static const int data[4] = {42, 13, 6, -53}; 279 280 UTEST(cpp14, Array) { EXPECT_NE(data, data + 1); } 281 282 #if defined(__clang__) 283 #if __has_warning("-Wunsafe-buffer-usage") 284 #pragma clang diagnostic pop 285 #endif 286 #endif 287 288 UTEST(cpp14, Near) { 289 float a = 42.0f; 290 float b = 42.01f; 291 EXPECT_NEAR(a, b, 0.01f); 292 ASSERT_NEAR(a, b, 0.01f); 293 } 294 295 // GCC stdlib has a sanitizer bug in exceptions! 296 #if defined(__has_feature) 297 #if __has_feature(memory_sanitizer) 298 #define MEMORY_SANITIZER 299 #endif 300 #endif 301 302 static int foo(int bar) { 303 if (bar == 1) 304 throw std::range_error("bad bar"); 305 return bar + 1; 306 } 307 308 UTEST(cpp14, Exception) { 309 EXPECT_EXCEPTION(foo(1), std::range_error); 310 ASSERT_EXCEPTION(foo(1), std::range_error); 311 } 312 313 #if !defined(MEMORY_SANITIZER) 314 UTEST(cpp14, ExceptionWithMessage) { 315 EXPECT_EXCEPTION_WITH_MESSAGE(foo(1), std::range_error, "bad bar"); 316 ASSERT_EXCEPTION_WITH_MESSAGE(foo(1), std::range_error, "bad bar"); 317 } 318 #endif 319 320 UTEST(cpp14, Todo) { UTEST_SKIP("Not yet implemented!"); } 321 322 enum SomeEnum { SomeEnumFoo, SomeEnumBar }; 323 324 UTEST(cpp14, Enum) { 325 EXPECT_NE(SomeEnumFoo, SomeEnumBar); 326 ASSERT_EQ(SomeEnumFoo, SomeEnumFoo); 327 } 328 329 #if !defined(_MSC_VER) || (_MSC_VER >= 1900) 330 331 #ifdef __clang__ 332 #pragma clang diagnostic push 333 #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" 334 #endif 335 336 enum class SomeEnumClass { Foo, Bar }; 337 338 UTEST(cpp14, EnumClass) { 339 EXPECT_NE(SomeEnumClass::Foo, SomeEnumClass::Bar); 340 ASSERT_EQ(SomeEnumClass::Foo, SomeEnumClass::Foo); 341 } 342 343 #ifdef __clang__ 344 #pragma clang diagnostic pop 345 #endif 346 347 UTEST(cpp14, Null) { 348 EXPECT_EQ(nullptr, nullptr); 349 ASSERT_EQ(nullptr, nullptr); 350 } 351 352 #endif