macros_test.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. * Copyright 2010-2023 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. BX_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. );
  16. BX_STATIC_ASSERT(1 == BX_VA_ARGS_COUNT(1) );
  17. BX_STATIC_ASSERT(2 == BX_VA_ARGS_COUNT(1, 2) );
  18. BX_STATIC_ASSERT(3 == BX_VA_ARGS_COUNT(1, 2, 3) );
  19. BX_STATIC_ASSERT(4 == BX_VA_ARGS_COUNT(1, 2, 3, 4) );
  20. BX_STATIC_ASSERT(5 == BX_VA_ARGS_COUNT(1, 2, 3, 4, 5) );
  21. BX_STATIC_ASSERT(6 == BX_VA_ARGS_COUNT(1, 2, 3, 4, 5, 6) );
  22. BX_NO_INLINE void unusedFunction()
  23. {
  24. CHECK(false);
  25. }
  26. TEST(macros)
  27. {
  28. uint32_t unused0;
  29. BX_UNUSED(unused0);
  30. uint32_t unused1;
  31. BX_UNUSED(unused0, unused1);
  32. uint32_t unused2;
  33. BX_UNUSED(unused0, unused1, unused2, unusedFunction() );
  34. CHECK_EQUAL(1, BX_VA_ARGS_COUNT(1) );
  35. CHECK_EQUAL(2, BX_VA_ARGS_COUNT(1, 2) );
  36. CHECK_EQUAL(3, BX_VA_ARGS_COUNT(1, 2, 3) );
  37. CHECK_EQUAL(4, BX_VA_ARGS_COUNT(1, 2, 3, 4) );
  38. CHECK_EQUAL(5, BX_VA_ARGS_COUNT(1, 2, 3, 4, 5) );
  39. CHECK_EQUAL(6, BX_VA_ARGS_COUNT(1, 2, 3, 4, 5, 6) );
  40. CHECK_EQUAL(0, bx::strCmp(BX_STRINGIZE(TEST 1234 %^&*), "TEST 1234 %^&*") );
  41. {
  42. struct PodStruct { int32_t x, y, z; };
  43. CHECK_EQUAL(0, BX_OFFSETOF(PodStruct, x) );
  44. CHECK_EQUAL(4, BX_OFFSETOF(PodStruct, y) );
  45. CHECK_EQUAL(8, BX_OFFSETOF(PodStruct, z) );
  46. }
  47. {
  48. union PodUnion { int32_t x, y, z; };
  49. CHECK_EQUAL(BX_OFFSETOF(PodUnion, x), BX_OFFSETOF(PodUnion, y) );
  50. CHECK_EQUAL(BX_OFFSETOF(PodUnion, y), BX_OFFSETOF(PodUnion, z) );
  51. }
  52. {
  53. struct NonPodStruct { NonPodStruct() { } int32_t x, y, z; };
  54. CHECK_EQUAL(0, BX_OFFSETOF(NonPodStruct, x) );
  55. CHECK_EQUAL(4, BX_OFFSETOF(NonPodStruct, y) );
  56. CHECK_EQUAL(8, BX_OFFSETOF(NonPodStruct, z) );
  57. }
  58. {
  59. union NonPodUnion { NonPodUnion() { } int32_t x, y, z; };
  60. CHECK_EQUAL(BX_OFFSETOF(NonPodUnion, x), BX_OFFSETOF(NonPodUnion, y) );
  61. CHECK_EQUAL(BX_OFFSETOF(NonPodUnion, y), BX_OFFSETOF(NonPodUnion, z) );
  62. }
  63. }