| struct st |
| { |
| const char *m_filename; |
| int m_line; |
| const char *m_function; |
| }; |
| |
| extern void debug (struct st *); |
| |
| #define TEST_x_1(NAME) \ |
| do \ |
| { \ |
| static struct st NAME = { __FILE__, __LINE__, __func__ }; \ |
| debug (&NAME); \ |
| } \ |
| while (0) |
| |
| #define TEST_x_10(PREFIX) \ |
| do \ |
| { \ |
| TEST_x_1(PREFIX ## _1); \ |
| TEST_x_1(PREFIX ## _2); \ |
| TEST_x_1(PREFIX ## _3); \ |
| TEST_x_1(PREFIX ## _4); \ |
| TEST_x_1(PREFIX ## _5); \ |
| TEST_x_1(PREFIX ## _6); \ |
| TEST_x_1(PREFIX ## _7); \ |
| TEST_x_1(PREFIX ## _8); \ |
| TEST_x_1(PREFIX ## _9); \ |
| TEST_x_1(PREFIX ## _10); \ |
| } \ |
| while(0) |
| |
| #define TEST_x_100(PREFIX) \ |
| do \ |
| { \ |
| TEST_x_10(PREFIX ## _1); \ |
| TEST_x_10(PREFIX ## _2); \ |
| TEST_x_10(PREFIX ## _3); \ |
| TEST_x_10(PREFIX ## _4); \ |
| TEST_x_10(PREFIX ## _5); \ |
| TEST_x_10(PREFIX ## _6); \ |
| TEST_x_10(PREFIX ## _7); \ |
| TEST_x_10(PREFIX ## _8); \ |
| TEST_x_10(PREFIX ## _9); \ |
| TEST_x_10(PREFIX ## _10); \ |
| } \ |
| while(0) |
| |
| #define TEST_x_1000(PREFIX) \ |
| do \ |
| { \ |
| TEST_x_100(PREFIX ## _1); \ |
| TEST_x_100(PREFIX ## _2); \ |
| TEST_x_100(PREFIX ## _3); \ |
| TEST_x_100(PREFIX ## _4); \ |
| TEST_x_100(PREFIX ## _5); \ |
| TEST_x_100(PREFIX ## _6); \ |
| TEST_x_100(PREFIX ## _7); \ |
| TEST_x_100(PREFIX ## _8); \ |
| TEST_x_100(PREFIX ## _9); \ |
| TEST_x_100(PREFIX ## _10); \ |
| } \ |
| while(0) |
| |
| void test_many (void) |
| { |
| TEST_x_1000(s); |
| } |