macros_test.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /*
  2. * Copyright 2010-2025 Branimir Karadzic. All rights reserved.
  3. * License: https://github.com/bkaradzic/bx/blob/master/LICENSE
  4. */
  5. #include "test.h"
  6. #include <bx/bx.h>
  7. #include <bx/string.h>
  8. static_assert(false
  9. || BX_CRT_BIONIC
  10. || BX_CRT_GLIBC
  11. || BX_CRT_LIBCXX
  12. || BX_CRT_MINGW
  13. || BX_CRT_MSVC
  14. || BX_CRT_NEWLIB
  15. || BX_CRT_NONE
  16. );
  17. static_assert(1 == BX_VA_ARGS_COUNT(1) );
  18. static_assert(2 == BX_VA_ARGS_COUNT(1, 2) );
  19. static_assert(3 == BX_VA_ARGS_COUNT(1, 2, 3) );
  20. static_assert(4 == BX_VA_ARGS_COUNT(1, 2, 3, 4) );
  21. static_assert(5 == BX_VA_ARGS_COUNT(1, 2, 3, 4, 5) );
  22. static_assert(6 == BX_VA_ARGS_COUNT(1, 2, 3, 4, 5, 6) );
  23. BX_NO_INLINE void unusedFunction()
  24. {
  25. CHECK(false);
  26. }
  27. void testAssert()
  28. {
  29. BX_PRAGMA_DIAGNOSTIC_PUSH();
  30. BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4804); // warning C4804: '%': unsafe use of type 'bool' in operation)
  31. BX_ASSERT(false % 1, "Assert works!");
  32. BX_PRAGMA_DIAGNOSTIC_POP();
  33. }
  34. TEST_CASE("Macros", "")
  35. {
  36. uint32_t unused0;
  37. BX_UNUSED(unused0);
  38. uint32_t unused1;
  39. BX_UNUSED(unused0, unused1);
  40. uint32_t unused2;
  41. BX_UNUSED(unused0, unused1, unused2, unusedFunction() );
  42. REQUIRE(1 == BX_VA_ARGS_COUNT(1) );
  43. REQUIRE(2 == BX_VA_ARGS_COUNT(1, 2) );
  44. REQUIRE(3 == BX_VA_ARGS_COUNT(1, 2, 3) );
  45. REQUIRE(4 == BX_VA_ARGS_COUNT(1, 2, 3, 4) );
  46. REQUIRE(5 == BX_VA_ARGS_COUNT(1, 2, 3, 4, 5) );
  47. REQUIRE(6 == BX_VA_ARGS_COUNT(1, 2, 3, 4, 5, 6) );
  48. REQUIRE(0 == bx::strCmp(BX_STRINGIZE(TEST 1234 % 1 ^&*), "TEST 1234 % 1 ^&*") );
  49. {
  50. struct PodStruct { int32_t x, y, z; };
  51. REQUIRE(0 == BX_OFFSETOF(PodStruct, x) );
  52. REQUIRE(4 == BX_OFFSETOF(PodStruct, y) );
  53. REQUIRE(8 == BX_OFFSETOF(PodStruct, z) );
  54. }
  55. {
  56. union PodUnion { int32_t x, y, z; };
  57. REQUIRE(BX_OFFSETOF(PodUnion, x) == BX_OFFSETOF(PodUnion, y) );
  58. REQUIRE(BX_OFFSETOF(PodUnion, y) == BX_OFFSETOF(PodUnion, z) );
  59. }
  60. {
  61. struct NonPodStruct { NonPodStruct() { } int32_t x, y, z; };
  62. REQUIRE(0 == BX_OFFSETOF(NonPodStruct, x) );
  63. REQUIRE(4 == BX_OFFSETOF(NonPodStruct, y) );
  64. REQUIRE(8 == BX_OFFSETOF(NonPodStruct, z) );
  65. }
  66. {
  67. union NonPodUnion { NonPodUnion() { } int32_t x, y, z; };
  68. REQUIRE(BX_OFFSETOF(NonPodUnion, x) == BX_OFFSETOF(NonPodUnion, y) );
  69. REQUIRE(BX_OFFSETOF(NonPodUnion, y) == BX_OFFSETOF(NonPodUnion, z) );
  70. }
  71. REQUIRE_ASSERTS(testAssert() );
  72. }