Quick help with a macro (preprocessor)

Started by
2 comments, last by TheComet 10 years, 1 month ago

I'm using gtest (google's testing framework), and use the following code for my test fixtures:


#define TEST_NAME test_foo

TEST( TEST_NAME, bar )
{
    reset_ports();
    /* test body begins here */
}

The function reset_ports is part of some very primitive micro controller hardware emulation code, and I'd like it to be called between every test fixture to ensure a clean state. I tried writing a small macro for doing this for me, but I can't get it to work:


#define BEGIN(x) (TEST((TEST_NAME), (x)) { reset_ports();)
#define END }

BEGIN( bar )
    /* test body begins here */
END

The errors I'm getting are:


error: pasting ")" and "_" does not give a valid preprocessing token|
error: pasting "_" and "(" does not give a valid preprocessing token|
error: pasting ")" and "_Test" does not give a valid preprocessing token|
error: pasting ")" and "_" does not give a valid preprocessing token|
error: pasting "_" and "(" does not give a valid preprocessing token|
error: pasting ")" and "_Test" does not give a valid preprocessing token|
error: pasting ")" and "_" does not give a valid preprocessing token|
...

Any help? I've not practiced my preprocessor-voodoo enough to understand what's wrong.

"I would try to find halo source code by bungie best fps engine ever created, u see why call of duty loses speed due to its detail." -- GettingNifty
Advertisement

UPDATE

The following appears to be closer to solving the problem:


#define TEST_NAME test_regulator_getters_and_setters
#define BEGIN(x) (TEST(TEST_NAME, x)) { reset_ports();
#define END }

Now I'm only getting two errors:


error: expected unqualified-id before 'class'|
error: expected ')' before 'class'|

Also some more helpful information: the TEST macro is defined as:


#define GTEST_TEST(test_case_name, test_name)\
  GTEST_TEST_(test_case_name, test_name, \
              ::testing::Test, ::testing::internal::GetTestTypeId())

#if !GTEST_DONT_DEFINE_TEST
# define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name)
#endif
"I would try to find halo source code by bungie best fps engine ever created, u see why call of duty loses speed due to its detail." -- GettingNifty

Looks to me like you're trying to reinvent, using a 1960's era text processor, what's already available in the test fixture SetUp() and TearDown() function. Have you tried using those to set up and tear down your fixture instead?

Stephen M. Webb
Professional Free Software Developer

Exactly what I was looking for, thanks!

"I would try to find halo source code by bungie best fps engine ever created, u see why call of duty loses speed due to its detail." -- GettingNifty

This topic is closed to new replies.

Advertisement