Unordered: Improved exception test thing.

Allows repetition of exception tests + separate running the tests so that
different tests types or configurations can be mixed up.

[SVN r81030]
This commit is contained in:
Daniel James
2012-10-21 00:20:07 +00:00
parent d1a6e948e3
commit 2e26534659
8 changed files with 37 additions and 16 deletions

View File

@@ -105,7 +105,8 @@ struct assign_test5 : assign_base<T>
assign_test5() : assign_base<T>(5, 60, 0, 0, 1.0, 0.1) {} assign_test5() : assign_base<T>(5, 60, 0, 0, 1.0, 0.1) {}
}; };
RUN_EXCEPTION_TESTS( EXCEPTION_TESTS(
(self_assign_test1)(self_assign_test2) (self_assign_test1)(self_assign_test2)
(assign_test1)(assign_test2)(assign_test3)(assign_test4)(assign_test5), (assign_test1)(assign_test2)(assign_test3)(assign_test4)(assign_test5),
CONTAINER_SEQ) CONTAINER_SEQ)
RUN_TESTS()

View File

@@ -159,7 +159,7 @@ struct copy_range_construct_test : public range<T>, objects
} }
}; };
RUN_EXCEPTION_TESTS( EXCEPTION_TESTS(
(construct_test1) (construct_test1)
(construct_test2) (construct_test2)
(construct_test3) (construct_test3)
@@ -174,3 +174,4 @@ RUN_EXCEPTION_TESTS(
(input_range_construct_test) (input_range_construct_test)
(copy_range_construct_test), (copy_range_construct_test),
CONTAINER_SEQ) CONTAINER_SEQ)
RUN_TESTS()

View File

@@ -64,6 +64,7 @@ struct copy_with_allocator_test : public test::exception_base
} }
}; };
RUN_EXCEPTION_TESTS( EXCEPTION_TESTS(
(copy_test1)(copy_test2)(copy_test3)(copy_with_allocator_test), (copy_test1)(copy_test2)(copy_test3)(copy_with_allocator_test),
CONTAINER_SEQ) CONTAINER_SEQ)
RUN_TESTS()

View File

@@ -49,6 +49,7 @@ struct erase_by_key_test1 : public erase_test_base<T>
} }
}; };
RUN_EXCEPTION_TESTS( EXCEPTION_TESTS(
(erase_by_key_test1), (erase_by_key_test1),
CONTAINER_SEQ) CONTAINER_SEQ)
RUN_TESTS()

View File

@@ -243,4 +243,5 @@ struct insert_test_rehash3 : public insert_test_base<T>
#endif #endif
RUN_EXCEPTION_TESTS(ALL_TESTS, CONTAINER_SEQ) EXCEPTION_TESTS(ALL_TESTS, CONTAINER_SEQ)
RUN_TESTS()

View File

@@ -79,7 +79,7 @@ struct rehash_test4 : rehash_test_base<T>
void run(T& x) const { x.rehash(0); } void run(T& x) const { x.rehash(0); }
}; };
RUN_EXCEPTION_TESTS( EXCEPTION_TESTS(
(rehash_test0)(rehash_test1)(rehash_test2)(rehash_test3)(rehash_test4), (rehash_test0)(rehash_test1)(rehash_test2)(rehash_test3)(rehash_test4),
CONTAINER_SEQ) CONTAINER_SEQ)
RUN_TESTS()

View File

@@ -118,7 +118,8 @@ struct swap_test4 : swap_base<T>
swap_test4() : swap_base<T>(10, 10, 1, 2) {} swap_test4() : swap_base<T>(10, 10, 1, 2) {}
}; };
RUN_EXCEPTION_TESTS( EXCEPTION_TESTS(
(self_swap_test1)(self_swap_test2) (self_swap_test1)(self_swap_test2)
(swap_test1)(swap_test2)(swap_test3)(swap_test4), (swap_test1)(swap_test2)(swap_test3)(swap_test4),
CONTAINER_SEQ) CONTAINER_SEQ)
RUN_TESTS()

View File

@@ -20,22 +20,37 @@
fixture, BOOST_STRINGIZE(test_func<type>)); \ fixture, BOOST_STRINGIZE(test_func<type>)); \
} \ } \
# define UNORDERED_EXCEPTION_TEST_CASE_REPEAT(name, test_func, n, type) \
UNORDERED_AUTO_TEST(name) \
{ \
for (unsigned i = 0; i < n; ++i) { \
test_func< type > fixture; \
::test::lightweight::exception_safety( \
fixture, BOOST_STRINGIZE(test_func<type>)); \
} \
} \
# define UNORDERED_EPOINT_IMPL ::test::lightweight::epoint # define UNORDERED_EPOINT_IMPL ::test::lightweight::epoint
#define UNORDERED_EXCEPTION_TEST_POSTFIX RUN_TESTS() #define UNORDERED_EXCEPTION_TEST_POSTFIX RUN_TESTS()
#define RUN_EXCEPTION_TESTS(test_seq, param_seq) \ #define EXCEPTION_TESTS(test_seq, param_seq) \
BOOST_PP_SEQ_FOR_EACH_PRODUCT(RUN_EXCEPTION_TESTS_OP, \ BOOST_PP_SEQ_FOR_EACH_PRODUCT(EXCEPTION_TESTS_OP, \
(test_seq)(param_seq)) \ (test_seq)((1))(param_seq))
RUN_TESTS() \
#define RUN_EXCEPTION_TESTS_OP(r, product) \ #define EXCEPTION_TESTS_REPEAT(n, test_seq, param_seq) \
UNORDERED_EXCEPTION_TEST_CASE( \ BOOST_PP_SEQ_FOR_EACH_PRODUCT(EXCEPTION_TESTS_OP, \
(test_seq)((n))(param_seq))
#define EXCEPTION_TESTS_OP(r, product) \
UNORDERED_EXCEPTION_TEST_CASE_REPEAT( \
BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(0, product), \ BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(0, product), \
BOOST_PP_CAT(_, BOOST_PP_SEQ_ELEM(1, product)) \ BOOST_PP_CAT(_, BOOST_PP_SEQ_ELEM(2, product)) \
), \ ), \
BOOST_PP_SEQ_ELEM(0, product), \ BOOST_PP_SEQ_ELEM(0, product), \
BOOST_PP_SEQ_ELEM(1, product) \ BOOST_PP_SEQ_ELEM(1, product), \
BOOST_PP_SEQ_ELEM(2, product) \
) \ ) \
#define UNORDERED_SCOPE(scope_name) \ #define UNORDERED_SCOPE(scope_name) \