#define XXX
#if defined(XXX)
#define _VER BUILDX
#elif defined(YYY)
#define _VER BUILDY
#endif
#define _TEST_SUITE_NAME_PACKAGE(Suite,Package) Suite##_##Package
#define TEST_SUITE_NAME_PACKAGE(Suite,Package) _TEST_SUITE_NAME_PACKAGE(Suite,Package)
#define TEST_SUITE_NAME(Suite) TEST_SUITE_NAME_PACKAGE(Suite,_VER)
#define GTEST_TEST_(test_case_name, test_name, parent_class)\
struct test_case_name ## test_name {};
#define GTEST_TEST(test_case_name, test_name)\
GTEST_TEST_(test_case_name, test_name)
#define TEST(test_case_name, test_name) \
GTEST_TEST(TEST_SUITE_NAME(test_case_name), test_name)
#define TEST_F_I(test_fixture, test_name, original_name) \
GTEST_TEST_(test_fixture, test_name, original_name)
#define TEST_F(test_fixture, test_name) \
TEST_F_I(TEST_SUITE_NAME(test_fixture), test_name, test_fixture)
#define TEST_F_YOUR_INVALID_MACRO(test_fixture, test_name) \
GTEST_TEST_(TEST_SUITE_NAME(test_fixture), test_name, test_fixture)
// Tests:
// TEST_F_YOUR_INVALID_MACRO(ABC, DEF)
TEST_F(GHI, JKL)
TEST_F(MNO, PQR)
int main()
{
GHI_BUILDXJKL a;
MNO_BUILDXPQR b;
return 0;
}
I2RlZmluZSBYWFgKCiNpZiBkZWZpbmVkKFhYWCkKICAgICNkZWZpbmUgX1ZFUiBCVUlMRFgKI2VsaWYgZGVmaW5lZChZWVkpCiAgICAjZGVmaW5lIF9WRVIgQlVJTERZCiNlbmRpZgoKI2RlZmluZSBfVEVTVF9TVUlURV9OQU1FX1BBQ0tBR0UoU3VpdGUsUGFja2FnZSkgU3VpdGUjI18jI1BhY2thZ2UKI2RlZmluZSBURVNUX1NVSVRFX05BTUVfUEFDS0FHRShTdWl0ZSxQYWNrYWdlKSBfVEVTVF9TVUlURV9OQU1FX1BBQ0tBR0UoU3VpdGUsUGFja2FnZSkKI2RlZmluZSBURVNUX1NVSVRFX05BTUUoU3VpdGUpIFRFU1RfU1VJVEVfTkFNRV9QQUNLQUdFKFN1aXRlLF9WRVIpCgojZGVmaW5lIEdURVNUX1RFU1RfKHRlc3RfY2FzZV9uYW1lLCB0ZXN0X25hbWUsIHBhcmVudF9jbGFzcylcCnN0cnVjdCB0ZXN0X2Nhc2VfbmFtZSAjIyB0ZXN0X25hbWUge307CgojZGVmaW5lIEdURVNUX1RFU1QodGVzdF9jYXNlX25hbWUsIHRlc3RfbmFtZSlcCiAgICBHVEVTVF9URVNUXyh0ZXN0X2Nhc2VfbmFtZSwgdGVzdF9uYW1lKQoKI2RlZmluZSBURVNUKHRlc3RfY2FzZV9uYW1lLCB0ZXN0X25hbWUpIFwKICAgIEdURVNUX1RFU1QoVEVTVF9TVUlURV9OQU1FKHRlc3RfY2FzZV9uYW1lKSwgdGVzdF9uYW1lKQoKI2RlZmluZSBURVNUX0ZfSSh0ZXN0X2ZpeHR1cmUsIHRlc3RfbmFtZSwgb3JpZ2luYWxfbmFtZSkgXAogICAgR1RFU1RfVEVTVF8odGVzdF9maXh0dXJlLCB0ZXN0X25hbWUsIG9yaWdpbmFsX25hbWUpCgojZGVmaW5lIFRFU1RfRih0ZXN0X2ZpeHR1cmUsIHRlc3RfbmFtZSkgXAogICAgVEVTVF9GX0koVEVTVF9TVUlURV9OQU1FKHRlc3RfZml4dHVyZSksIHRlc3RfbmFtZSwgdGVzdF9maXh0dXJlKQoKI2RlZmluZSBURVNUX0ZfWU9VUl9JTlZBTElEX01BQ1JPKHRlc3RfZml4dHVyZSwgdGVzdF9uYW1lKSBcCiAgICBHVEVTVF9URVNUXyhURVNUX1NVSVRFX05BTUUodGVzdF9maXh0dXJlKSwgdGVzdF9uYW1lLCB0ZXN0X2ZpeHR1cmUpCgovLyBUZXN0czoKCi8vIFRFU1RfRl9ZT1VSX0lOVkFMSURfTUFDUk8oQUJDLCBERUYpCgpURVNUX0YoR0hJLCBKS0wpCgpURVNUX0YoTU5PLCBQUVIpCgppbnQgbWFpbigpCnsKICAgIEdISV9CVUlMRFhKS0wgYTsKICAgIE1OT19CVUlMRFhQUVIgYjsKCiAgICByZXR1cm4gMDsKfQo=