gmock-pp_test.cc 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "gmock/internal/gmock-pp.h"
  2. // Static assertions.
  3. namespace testing {
  4. namespace internal {
  5. namespace gmockpp {
  6. static_assert(GMOCK_PP_CAT(1, 4) == 14, "");
  7. static_assert(GMOCK_PP_INTERNAL_INTERNAL_16TH(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
  8. 12, 13, 14, 15, 16, 17, 18) == 16,
  9. "");
  10. static_assert(GMOCK_PP_NARG() == 1, "");
  11. static_assert(GMOCK_PP_NARG(x) == 1, "");
  12. static_assert(GMOCK_PP_NARG(x, y) == 2, "");
  13. static_assert(GMOCK_PP_NARG(x, y, z) == 3, "");
  14. static_assert(GMOCK_PP_NARG(x, y, z, w) == 4, "");
  15. static_assert(!GMOCK_PP_HAS_COMMA(), "");
  16. static_assert(GMOCK_PP_HAS_COMMA(b, ), "");
  17. static_assert(!GMOCK_PP_HAS_COMMA((, )), "");
  18. static_assert(!GMOCK_PP_IS_EMPTY(, ), "");
  19. static_assert(!GMOCK_PP_IS_EMPTY(a), "");
  20. static_assert(!GMOCK_PP_IS_EMPTY(()), "");
  21. static_assert(GMOCK_PP_IF(1, 1, 2) == 1, "");
  22. static_assert(GMOCK_PP_IF(0, 1, 2) == 2, "");
  23. static_assert(GMOCK_PP_NARG0(x) == 1, "");
  24. static_assert(GMOCK_PP_NARG0(x, y) == 2, "");
  25. static_assert(GMOCK_PP_HEAD(1) == 1, "");
  26. static_assert(GMOCK_PP_HEAD(1, 2) == 1, "");
  27. static_assert(GMOCK_PP_HEAD(1, 2, 3) == 1, "");
  28. static_assert(GMOCK_PP_TAIL(1, 2) == 2, "");
  29. static_assert(GMOCK_PP_HEAD(GMOCK_PP_TAIL(1, 2, 3)) == 2, "");
  30. static_assert(!GMOCK_PP_IS_BEGIN_PARENS(sss), "");
  31. static_assert(!GMOCK_PP_IS_BEGIN_PARENS(sss()), "");
  32. static_assert(!GMOCK_PP_IS_BEGIN_PARENS(sss() sss), "");
  33. static_assert(GMOCK_PP_IS_BEGIN_PARENS((sss)), "");
  34. static_assert(GMOCK_PP_IS_BEGIN_PARENS((sss)ss), "");
  35. static_assert(!GMOCK_PP_IS_ENCLOSED_PARENS(sss), "");
  36. static_assert(!GMOCK_PP_IS_ENCLOSED_PARENS(sss()), "");
  37. static_assert(!GMOCK_PP_IS_ENCLOSED_PARENS(sss() sss), "");
  38. static_assert(!GMOCK_PP_IS_ENCLOSED_PARENS((sss)ss), "");
  39. static_assert(GMOCK_PP_REMOVE_PARENS((1 + 1)) * 2 == 3, "");
  40. static_assert(GMOCK_PP_INC(4) == 5, "");
  41. template <class... Args>
  42. struct Test {
  43. static constexpr int kArgs = sizeof...(Args);
  44. };
  45. #define GMOCK_PP_INTERNAL_TYPE_TEST(_i, _Data, _element) \
  46. GMOCK_PP_COMMA_IF(_i) _element
  47. static_assert(Test<GMOCK_PP_FOR_EACH(GMOCK_PP_INTERNAL_TYPE_TEST, ~,
  48. (int, float, double, char))>::kArgs == 4,
  49. "");
  50. #define GMOCK_PP_INTERNAL_VAR_TEST_1(_x) 1
  51. #define GMOCK_PP_INTERNAL_VAR_TEST_2(_x, _y) 2
  52. #define GMOCK_PP_INTERNAL_VAR_TEST_3(_x, _y, _z) 3
  53. #define GMOCK_PP_INTERNAL_VAR_TEST(...) \
  54. GMOCK_PP_VARIADIC_CALL(GMOCK_PP_INTERNAL_VAR_TEST_, __VA_ARGS__)
  55. static_assert(GMOCK_PP_INTERNAL_VAR_TEST(x, y) == 2, "");
  56. static_assert(GMOCK_PP_INTERNAL_VAR_TEST(silly) == 1, "");
  57. static_assert(GMOCK_PP_INTERNAL_VAR_TEST(x, y, z) == 3, "");
  58. // TODO(iserna): The following asserts fail in --config=lexan.
  59. #define GMOCK_PP_INTERNAL_IS_EMPTY_TEST_1
  60. static_assert(GMOCK_PP_IS_EMPTY(GMOCK_PP_INTERNAL_IS_EMPTY_TEST_1), "");
  61. static_assert(GMOCK_PP_IS_EMPTY(), "");
  62. static_assert(GMOCK_PP_IS_ENCLOSED_PARENS((sss)), "");
  63. static_assert(GMOCK_PP_IS_EMPTY(GMOCK_PP_TAIL(1)), "");
  64. static_assert(GMOCK_PP_NARG0() == 0, "");
  65. } // namespace gmockpp
  66. } // namespace internal
  67. } // namespace testing