From 5ecca806e16cfdc4fded849a9782c6988b527b60 Mon Sep 17 00:00:00 2001 From: Snaipe Date: Sun, 20 Sep 2015 03:35:28 -0700 Subject: [PATCH] Changed each section entry to be a pointer to the actual test/suite structure --- include/criterion/criterion.h | 12 ++++++++---- src/runner.c | 26 +++++++++++++------------- src/runner.h | 12 ++++++------ 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/include/criterion/criterion.h b/include/criterion/criterion.h index 82dab63d..f72eba07 100644 --- a/include/criterion/criterion.h +++ b/include/criterion/criterion.h @@ -53,13 +53,15 @@ .line_ = __LINE__, \ __VA_ARGS__ \ )); \ - SECTION_("cr_tst") \ struct criterion_test IDENTIFIER_(Category, Name, meta) = { \ #Name, \ #Category, \ IDENTIFIER_(Category, Name, impl), \ &IDENTIFIER_(Category, Name, extra) \ - } SECTION_SUFFIX_; \ + }; \ + SECTION_("cr_tst") \ + struct criterion_test *IDENTIFIER_(Category, Name, ptr) \ + = &IDENTIFIER_(Category, Name, meta) SECTION_SUFFIX_; \ TEST_PROTOTYPE_(Category, Name) # define TestSuite(...) CR_EXPAND(TestSuite_(__VA_ARGS__, .sentinel_ = 0)) @@ -70,11 +72,13 @@ .line_ = 0, \ __VA_ARGS__ \ )); \ - SECTION_("cr_sts") \ struct criterion_suite SUITE_IDENTIFIER_(Name, meta) = { \ #Name, \ &SUITE_IDENTIFIER_(Name, extra), \ - } SECTION_SUFFIX_ + }; \ + SECTION_("cr_sts") \ + struct criterion_suite *SUITE_IDENTIFIER_(Name, ptr) \ + = &SUITE_IDENTIFIER_(Name, meta) SECTION_SUFFIX_ CR_BEGIN_C_API diff --git a/src/runner.c b/src/runner.c index f149e1d9..ddffccd7 100644 --- a/src/runner.c +++ b/src/runner.c @@ -45,14 +45,14 @@ #endif #ifdef _MSC_VER -struct criterion_test SECTION_START_(cr_tst); -struct criterion_suite SECTION_START_(cr_sts); -struct criterion_test SECTION_END_(cr_tst); -struct criterion_suite SECTION_END_(cr_sts); +struct criterion_test *SECTION_START_(cr_tst); +struct criterion_suite *SECTION_START_(cr_sts); +struct criterion_test *SECTION_END_(cr_tst); +struct criterion_suite *SECTION_END_(cr_sts); #endif -IMPL_SECTION_LIMITS(struct criterion_test, cr_tst); -IMPL_SECTION_LIMITS(struct criterion_suite, cr_sts); +IMPL_SECTION_LIMITS(struct criterion_test*, cr_tst); +IMPL_SECTION_LIMITS(struct criterion_suite*, cr_sts); // This is here to make the test suite & test sections non-empty TestSuite(); @@ -98,11 +98,11 @@ struct criterion_test_set *criterion_init(void) { struct criterion_ordered_set *suites = new_ordered_set(cmp_suite, dtor_suite_set); FOREACH_SUITE_SEC(s) { - if (!s->name) - break; + if (!*s) + continue; struct criterion_suite_set css = { - .suite = *s, + .suite = **s, }; insert_ordered_set(suites, &css, sizeof (css)); } @@ -118,13 +118,13 @@ struct criterion_test_set *criterion_init(void) { }; FOREACH_TEST_SEC(test) { - if (!test->category) - break; + if (!*test) + continue; - if (!*test->category) + if (!(*test)->category) continue; - criterion_register_test(set, test); + criterion_register_test(set, *test); } return set; diff --git a/src/runner.h b/src/runner.h index e78fd96e..3501af01 100644 --- a/src/runner.h +++ b/src/runner.h @@ -27,19 +27,19 @@ # include "criterion/types.h" # include "posix-compat.h" -DECL_SECTION_LIMITS(struct criterion_test, cr_tst); -DECL_SECTION_LIMITS(struct criterion_suite, cr_sts); +DECL_SECTION_LIMITS(struct criterion_test*, cr_tst); +DECL_SECTION_LIMITS(struct criterion_suite*, cr_sts); struct criterion_test_set *criterion_init(void); # define FOREACH_TEST_SEC(Test) \ - for (struct criterion_test *Test = GET_SECTION_START(cr_tst); \ - Test < (struct criterion_test*) GET_SECTION_END(cr_tst); \ + for (struct criterion_test **Test = GET_SECTION_START(cr_tst); \ + Test < (struct criterion_test**) GET_SECTION_END(cr_tst); \ ++Test) # define FOREACH_SUITE_SEC(Suite) \ - for (struct criterion_suite *Suite = GET_SECTION_START(cr_sts); \ - Suite < (struct criterion_suite*) GET_SECTION_END(cr_sts); \ + for (struct criterion_suite **Suite = GET_SECTION_START(cr_sts); \ + Suite < (struct criterion_suite**) GET_SECTION_END(cr_sts); \ ++Suite) #endif /* !CRITERION_RUNNER_H_ */