Path: blob/main/contrib/googletest/googlemock/test/gmock-pp_test.cc
48254 views
#include "gmock/internal/gmock-pp.h"12// Used to test MSVC treating __VA_ARGS__ with a comma in it as one value3#define GMOCK_TEST_REPLACE_comma_WITH_COMMA_I_comma ,4#define GMOCK_TEST_REPLACE_comma_WITH_COMMA(x) \5GMOCK_PP_CAT(GMOCK_TEST_REPLACE_comma_WITH_COMMA_I_, x)67// Static assertions.8namespace testing {9namespace internal {10namespace gmockpp {1112static_assert(GMOCK_PP_CAT(1, 4) == 14, "");13static_assert(GMOCK_PP_INTERNAL_INTERNAL_16TH(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,1412, 13, 14, 15, 16, 17, 18) == 16,15"");16static_assert(GMOCK_PP_NARG() == 1, "");17static_assert(GMOCK_PP_NARG(x) == 1, "");18static_assert(GMOCK_PP_NARG(x, y) == 2, "");19static_assert(GMOCK_PP_NARG(x, y, z) == 3, "");20static_assert(GMOCK_PP_NARG(x, y, z, w) == 4, "");21static_assert(!GMOCK_PP_HAS_COMMA(), "");22static_assert(GMOCK_PP_HAS_COMMA(b, ), "");23static_assert(!GMOCK_PP_HAS_COMMA((, )), "");24static_assert(GMOCK_PP_HAS_COMMA(GMOCK_TEST_REPLACE_comma_WITH_COMMA(comma)),25"");26static_assert(27GMOCK_PP_HAS_COMMA(GMOCK_TEST_REPLACE_comma_WITH_COMMA(comma(unrelated))),28"");29static_assert(!GMOCK_PP_IS_EMPTY(, ), "");30static_assert(!GMOCK_PP_IS_EMPTY(a), "");31static_assert(!GMOCK_PP_IS_EMPTY(()), "");32static_assert(GMOCK_PP_IF(1, 1, 2) == 1, "");33static_assert(GMOCK_PP_IF(0, 1, 2) == 2, "");34static_assert(GMOCK_PP_NARG0(x) == 1, "");35static_assert(GMOCK_PP_NARG0(x, y) == 2, "");36static_assert(GMOCK_PP_HEAD(1) == 1, "");37static_assert(GMOCK_PP_HEAD(1, 2) == 1, "");38static_assert(GMOCK_PP_HEAD(1, 2, 3) == 1, "");39static_assert(GMOCK_PP_TAIL(1, 2) == 2, "");40static_assert(GMOCK_PP_HEAD(GMOCK_PP_TAIL(1, 2, 3)) == 2, "");41static_assert(!GMOCK_PP_IS_BEGIN_PARENS(sss), "");42static_assert(!GMOCK_PP_IS_BEGIN_PARENS(sss()), "");43static_assert(!GMOCK_PP_IS_BEGIN_PARENS(sss() sss), "");44static_assert(GMOCK_PP_IS_BEGIN_PARENS((sss)), "");45static_assert(GMOCK_PP_IS_BEGIN_PARENS((sss)ss), "");46static_assert(!GMOCK_PP_IS_ENCLOSED_PARENS(sss), "");47static_assert(!GMOCK_PP_IS_ENCLOSED_PARENS(sss()), "");48static_assert(!GMOCK_PP_IS_ENCLOSED_PARENS(sss() sss), "");49static_assert(!GMOCK_PP_IS_ENCLOSED_PARENS((sss)ss), "");50static_assert(GMOCK_PP_REMOVE_PARENS((1 + 1)) * 2 == 3, "");51static_assert(GMOCK_PP_INC(4) == 5, "");5253template <class... Args>54struct Test {55static constexpr int kArgs = sizeof...(Args);56};57#define GMOCK_PP_INTERNAL_TYPE_TEST(_i, _Data, _element) \58GMOCK_PP_COMMA_IF(_i) _element59static_assert(Test<GMOCK_PP_FOR_EACH(GMOCK_PP_INTERNAL_TYPE_TEST, ~,60(int, float, double, char))>::kArgs == 4,61"");62#define GMOCK_PP_INTERNAL_VAR_TEST_1(_x) 163#define GMOCK_PP_INTERNAL_VAR_TEST_2(_x, _y) 264#define GMOCK_PP_INTERNAL_VAR_TEST_3(_x, _y, _z) 36566#define GMOCK_PP_INTERNAL_VAR_TEST(...) \67GMOCK_PP_VARIADIC_CALL(GMOCK_PP_INTERNAL_VAR_TEST_, __VA_ARGS__)68static_assert(GMOCK_PP_INTERNAL_VAR_TEST(x, y) == 2, "");69static_assert(GMOCK_PP_INTERNAL_VAR_TEST(silly) == 1, "");70static_assert(GMOCK_PP_INTERNAL_VAR_TEST(x, y, z) == 3, "");7172// TODO(iserna): The following asserts fail in --config=lexan.73#define GMOCK_PP_INTERNAL_IS_EMPTY_TEST_174static_assert(GMOCK_PP_IS_EMPTY(GMOCK_PP_INTERNAL_IS_EMPTY_TEST_1), "");75static_assert(GMOCK_PP_IS_EMPTY(), "");76static_assert(GMOCK_PP_IS_ENCLOSED_PARENS((sss)), "");77static_assert(GMOCK_PP_IS_EMPTY(GMOCK_PP_TAIL(1)), "");78static_assert(GMOCK_PP_NARG0() == 0, "");7980} // namespace gmockpp81} // namespace internal82} // namespace testing838485