OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #ifndef PLATFORM_ASSERT_H_ | 5 #ifndef PLATFORM_ASSERT_H_ |
6 #define PLATFORM_ASSERT_H_ | 6 #define PLATFORM_ASSERT_H_ |
7 | 7 |
8 // TODO(5411406): include sstream for now, once we have a Utils::toString() | 8 // TODO(5411406): include sstream for now, once we have a Utils::toString() |
9 // implemented for all the primitive types we can replace the usage of | 9 // implemented for all the primitive types we can replace the usage of |
10 // sstream by Utils::toString() | 10 // sstream by Utils::toString() |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 | 267 |
268 #define DEBUG_ASSERT(cond) | 268 #define DEBUG_ASSERT(cond) |
269 | 269 |
270 #endif // if defined(DEBUG) | 270 #endif // if defined(DEBUG) |
271 | 271 |
272 | 272 |
273 // The COMPILE_ASSERT macro can be used to verify that a compile time | 273 // The COMPILE_ASSERT macro can be used to verify that a compile time |
274 // expression is true. For example, you could use it to verify the | 274 // expression is true. For example, you could use it to verify the |
275 // size of a static array: | 275 // size of a static array: |
276 // | 276 // |
277 // COMPILE_ASSERT(ARRAYSIZE(content_type_names) == CONTENT_NUM_TYPES, | 277 // COMPILE_ASSERT(ARRAYSIZE(content_type_names) == CONTENT_NUM_TYPES); |
278 // content_type_names_incorrect_size); | |
279 // | 278 // |
280 // or to make sure a struct is smaller than a certain size: | 279 // or to make sure a struct is smaller than a certain size: |
281 // | 280 // |
282 // COMPILE_ASSERT(sizeof(foo) < 128, foo_too_large); | 281 // COMPILE_ASSERT(sizeof(foo) < 128); |
283 // | 282 // |
284 // The second argument to the macro is the name of the variable. If | |
285 // the expression is false, most compilers will issue a warning/error | |
286 // containing the name of the variable. | |
287 | 283 |
288 template <bool> | 284 template <bool> |
289 struct CompileAssert { | 285 struct CompileAssert { |
290 }; | 286 }; |
291 | 287 // Macro to concatenate two tokens. The helper is need to proper expansion |
292 #define COMPILE_ASSERT(expr, msg) \ | 288 // in case an argument is a macro itself. |
| 289 #define COMPILE_ASSERT_JOIN(a, b) COMPILE_ASSERT_JOIN_HELPER(a, b) |
| 290 #define COMPILE_ASSERT_JOIN_HELPER(a, b) a##b |
| 291 #define COMPILE_ASSERT(expr) \ |
293 DART_UNUSED typedef CompileAssert<(static_cast<bool>(expr))> \ | 292 DART_UNUSED typedef CompileAssert<(static_cast<bool>(expr))> \ |
294 msg[static_cast<bool>(expr) ? 1 : -1] | 293 COMPILE_ASSERT_JOIN(CompileAssertTypeDef, __LINE__)[static_cast<bool>(expr) \ |
295 | 294 ? 1 : -1] |
296 | 295 |
297 #if defined(TESTING) | 296 #if defined(TESTING) |
298 | 297 |
299 // EXPECT and FAIL are equivalent to ASSERT and FATAL except that they do not | 298 // EXPECT and FAIL are equivalent to ASSERT and FATAL except that they do not |
300 // cause early termination of the unit test. This allows testing to proceed | 299 // cause early termination of the unit test. This allows testing to proceed |
301 // further to be able to report other failures before reporting the overall | 300 // further to be able to report other failures before reporting the overall |
302 // unit tests as failing. | 301 // unit tests as failing. |
303 | 302 |
304 #define EXPECT(condition) \ | 303 #define EXPECT(condition) \ |
305 if (!(condition)) { \ | 304 if (!(condition)) { \ |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
344 | 343 |
345 #define FAIL1(format, p1) \ | 344 #define FAIL1(format, p1) \ |
346 dart::Expect(__FILE__, __LINE__).Fail(format, (p1)) | 345 dart::Expect(__FILE__, __LINE__).Fail(format, (p1)) |
347 | 346 |
348 #define FAIL2(format, p1, p2) \ | 347 #define FAIL2(format, p1, p2) \ |
349 dart::Expect(__FILE__, __LINE__).Fail(format, (p1), (p2)) | 348 dart::Expect(__FILE__, __LINE__).Fail(format, (p1), (p2)) |
350 | 349 |
351 #endif // defined(TESTING) | 350 #endif // defined(TESTING) |
352 | 351 |
353 #endif // PLATFORM_ASSERT_H_ | 352 #endif // PLATFORM_ASSERT_H_ |
OLD | NEW |