fork download
  1. #define XXX
  2.  
  3. #if defined(XXX)
  4. #define _VER BUILDX
  5. #elif defined(YYY)
  6. #define _VER BUILDY
  7. #endif
  8.  
  9. #define _TEST_SUITE_NAME_PACKAGE(Suite,Package) Suite##_##Package
  10. #define TEST_SUITE_NAME_PACKAGE(Suite,Package) _TEST_SUITE_NAME_PACKAGE(Suite,Package)
  11. #define TEST_SUITE_NAME(Suite) TEST_SUITE_NAME_PACKAGE(Suite,_VER)
  12.  
  13. #define GTEST_TEST_(test_case_name, test_name, parent_class)\
  14. struct test_case_name ## test_name {};
  15.  
  16. #define GTEST_TEST(test_case_name, test_name)\
  17.   GTEST_TEST_(test_case_name, test_name)
  18.  
  19. #define TEST(test_case_name, test_name) \
  20.   GTEST_TEST(TEST_SUITE_NAME(test_case_name), test_name)
  21.  
  22. #define TEST_F_I(test_fixture, test_name, original_name) \
  23.   GTEST_TEST_(test_fixture, test_name, original_name)
  24.  
  25. #define TEST_F(test_fixture, test_name) \
  26.   TEST_F_I(TEST_SUITE_NAME(test_fixture), test_name, test_fixture)
  27.  
  28. #define TEST_F_YOUR_INVALID_MACRO(test_fixture, test_name) \
  29.   GTEST_TEST_(TEST_SUITE_NAME(test_fixture), test_name, test_fixture)
  30.  
  31. // Tests:
  32.  
  33. TEST_F_YOUR_INVALID_MACRO(ABC, DEF)
  34.  
  35. TEST_F(GHI, JKL)
  36.  
  37. TEST_F(MNO, PQR)
  38.  
  39. int main()
  40. {
  41. GHI_BUILDXJKL a;
  42. MNO_BUILDXPQR b;
  43. ABC_BUILDXDEF c;
  44.  
  45. return 0;
  46. }
  47.  
  48.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:29:45: error: pasting ")" and "DEF" does not give a valid preprocessing token
     GTEST_TEST_(TEST_SUITE_NAME(test_fixture), test_name, test_fixture)
                                             ^
prog.cpp:14:8: note: in definition of macro ‘GTEST_TEST_’
 struct test_case_name ## test_name {};
        ^
prog.cpp:33:1: note: in expansion of macro ‘TEST_F_YOUR_INVALID_MACRO’
 TEST_F_YOUR_INVALID_MACRO(ABC, DEF)
 ^
prog.cpp:33:32: error: variable ‘ABC_BUILDX DEF’ has initializer but incomplete type
 TEST_F_YOUR_INVALID_MACRO(ABC, DEF)
                                ^
prog.cpp:14:26: note: in definition of macro ‘GTEST_TEST_’
 struct test_case_name ## test_name {};
                          ^
prog.cpp:33:1: note: in expansion of macro ‘TEST_F_YOUR_INVALID_MACRO’
 TEST_F_YOUR_INVALID_MACRO(ABC, DEF)
 ^
prog.cpp: In function ‘int main()’:
prog.cpp:43:5: error: ‘ABC_BUILDXDEF’ was not declared in this scope
     ABC_BUILDXDEF c;
     ^
prog.cpp:43:19: error: expected ‘;’ before ‘c’
     ABC_BUILDXDEF c;
                   ^
prog.cpp:41:19: warning: unused variable ‘a’ [-Wunused-variable]
     GHI_BUILDXJKL a;
                   ^
prog.cpp:42:19: warning: unused variable ‘b’ [-Wunused-variable]
     MNO_BUILDXPQR b;
                   ^
stdout
Standard output is empty