21 #define BOOST_TEST_MODULE libjmmcg_tests
22 #include <boost/test/included/unit_test.hpp>
24 #include <boost/mpl/list.hpp>
26 #include "core/factory.hpp"
28 using namespace libjmmcg;
32 BOOST_AUTO_TEST_SUITE(factory_creator_tests)
37 explicit inline A(
const int j)
46 return typename T::created_type(
new A(1
));
51 return typename T::created_type(
new A(2
));
54 BOOST_AUTO_TEST_CASE_TEMPLATE(default_ctor, Mdl, thread_types) {
55 typedef typename factory::creator<
int, A, crt_exception<ppd::platform_api, Mdl> > factory_t;
58 BOOST_CHECK(c.empty());
59 BOOST_CHECK_EQUAL(c.size(),0U);
62 BOOST_AUTO_TEST_CASE_TEMPLATE(fail_to_find_item, Mdl, thread_types) {
63 typedef typename factory::creator<
int, A, crt_exception<ppd::platform_api, Mdl> > factory_t;
66 BOOST_CHECK_EQUAL(c.find(1),
false);
69 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item_and_find_it, Mdl, thread_types) {
70 typedef typename factory::creator<
int, A, crt_exception<ppd::platform_api, Mdl> > factory_t;
73 BOOST_CHECK_EQUAL(c.insert(
typename factory_t::value_type(1,&create_1<factory_t>)),
true);
74 BOOST_CHECK(!c.empty());
75 BOOST_CHECK_EQUAL(c.size(),1U);
76 BOOST_CHECK_EQUAL(c.find(1),
true);
79 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item_and_erase_it, Mdl, thread_types) {
80 typedef typename factory::creator<
int, A, crt_exception<ppd::platform_api, Mdl> > factory_t;
83 BOOST_CHECK_EQUAL(c.insert(
typename factory_t::value_type(1, &create_1<factory_t>)),
true);
84 BOOST_CHECK(!c.empty());
85 BOOST_CHECK_EQUAL(c.size(),1U);
86 BOOST_CHECK_EQUAL(c.find(1),
true);
87 BOOST_CHECK_EQUAL(c.erase(1),1U);
88 BOOST_CHECK(c.empty());
89 BOOST_CHECK_EQUAL(c.size(),0U);
90 BOOST_CHECK_EQUAL(c.find(1),
false);
93 BOOST_AUTO_TEST_CASE_TEMPLATE(add_2_items_and_find_them, Mdl, thread_types) {
94 typedef typename factory::creator<
int, A, crt_exception<ppd::platform_api, Mdl> > factory_t;
97 BOOST_CHECK_EQUAL(c.insert(
typename factory_t::value_type(1, &create_1<factory_t>)),
true);
98 BOOST_CHECK_EQUAL(c.insert(
typename factory_t::value_type(2, &create_2<factory_t>)),
true);
99 BOOST_CHECK(!c.empty());
100 BOOST_CHECK_EQUAL(c.size(),2U);
101 BOOST_CHECK_EQUAL(c.find(1),
true);
102 BOOST_CHECK_EQUAL(c.find(2),
true);
105 BOOST_AUTO_TEST_CASE_TEMPLATE(add_2_items_and_erase_one, Mdl, thread_types) {
106 typedef typename factory::creator<
int, A, crt_exception<ppd::platform_api, Mdl> > factory_t;
109 BOOST_CHECK_EQUAL(c.insert(
typename factory_t::value_type(1, &create_1<factory_t>)),
true);
110 BOOST_CHECK_EQUAL(c.insert(
typename factory_t::value_type(2, &create_2<factory_t>)),
true);
111 BOOST_CHECK_EQUAL(c.erase(1),1U);
112 BOOST_CHECK(!c.empty());
113 BOOST_CHECK_EQUAL(c.size(),1U);
114 BOOST_CHECK_EQUAL(c.find(1),
false);
115 BOOST_CHECK_EQUAL(c.find(2),
true);
118 BOOST_AUTO_TEST_CASE_TEMPLATE(make_an_item, Mdl, thread_types) {
119 typedef typename factory::creator<
int, A, crt_exception<ppd::platform_api, Mdl> > factory_t;
122 c.insert(
typename factory_t::value_type(1, &create_1<factory_t>));
123 BOOST_CHECK_EQUAL(c.make(1)->i,1);
126 BOOST_AUTO_TEST_SUITE_END()
128 BOOST_AUTO_TEST_SUITE(factory_clone_tests)
131 struct A final :
public sp_counter_type<
long, ppd::api_lock_traits<ppd::platform_api, Mdl>> {
136 explicit A(
const int j)
142 ~
A()
noexcept(
true) {}
147 template<
class T,
class Mdl>
typename T::
created_type __fastcall
148 clone_it(
const typename T::mapped_type::first_type::element_type &a) {
149 return typename T::created_type(
new A<Mdl>(a));
152 BOOST_AUTO_TEST_CASE_TEMPLATE(default_ctor, Mdl, thread_types) {
153 typedef typename factory::clone<
int, A<Mdl>, crt_exception<ppd::platform_api, Mdl> > factory_t;
156 BOOST_CHECK(c.empty());
157 BOOST_CHECK_EQUAL(c.size(),0U);
160 BOOST_AUTO_TEST_CASE_TEMPLATE(fail_to_find_item, Mdl, thread_types) {
161 typedef typename factory::clone<
int, A<Mdl>, crt_exception<ppd::platform_api, Mdl> > factory_t;
164 BOOST_CHECK_EQUAL(c.find(1),
false);
167 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item_and_find_it, Mdl, thread_types) {
168 typedef typename factory::clone<
int, A<Mdl>, crt_exception<ppd::platform_api, Mdl> > factory_t;
171 BOOST_CHECK_EQUAL(c.insert(
typename factory_t::value_type(1,
typename factory_t::mapped_type(
typename factory_t::mapped_type::first_type(
new A<Mdl>(1)), &clone_it<factory_t, Mdl>))),
true);
172 BOOST_CHECK(!c.empty());
173 BOOST_CHECK_EQUAL(c.size(),1U);
174 BOOST_CHECK_EQUAL(c.find(1),
true);
177 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item_and_erase_it, Mdl, thread_types) {
178 typedef typename factory::clone<
int, A<Mdl>, crt_exception<ppd::platform_api, Mdl> > factory_t;
181 BOOST_CHECK_EQUAL(c.insert(
typename factory_t::value_type(1,
typename factory_t::mapped_type(
typename factory_t::mapped_type::first_type(
new A<Mdl>(1)), &clone_it<factory_t, Mdl>))),
true);
182 BOOST_CHECK(!c.empty());
183 BOOST_CHECK_EQUAL(c.size(),1U);
184 BOOST_CHECK_EQUAL(c.find(1),
true);
185 BOOST_CHECK_EQUAL(c.erase(1),1U);
186 BOOST_CHECK(c.empty());
187 BOOST_CHECK_EQUAL(c.size(),0U);
188 BOOST_CHECK_EQUAL(c.find(1),
false);
191 BOOST_AUTO_TEST_CASE_TEMPLATE(add_2_items_and_find_them, Mdl, thread_types) {
192 typedef typename factory::clone<
int, A<Mdl>, crt_exception<ppd::platform_api, Mdl> > factory_t;
195 BOOST_CHECK_EQUAL(c.insert(
typename factory_t::value_type(1,
typename factory_t::mapped_type(
typename factory_t::mapped_type::first_type(
new A<Mdl>(1)), &clone_it<factory_t, Mdl>))),
true);
196 BOOST_CHECK_EQUAL(c.insert(
typename factory_t::value_type(2,
typename factory_t::mapped_type(
typename factory_t::mapped_type::first_type(
new A<Mdl>(2)), &clone_it<factory_t, Mdl>))),
true);
197 BOOST_CHECK(!c.empty());
198 BOOST_CHECK_EQUAL(c.size(),2U);
199 BOOST_CHECK_EQUAL(c.find(1),
true);
200 BOOST_CHECK_EQUAL(c.find(2),
true);
203 BOOST_AUTO_TEST_CASE_TEMPLATE(add_2_items_and_erase_one, Mdl, thread_types) {
204 typedef typename factory::clone<
int, A<Mdl>, crt_exception<ppd::platform_api, Mdl> > factory_t;
207 BOOST_CHECK_EQUAL(c.insert(
typename factory_t::value_type(1,
typename factory_t::mapped_type(
typename factory_t::mapped_type::first_type(
new A<Mdl>(1)), &clone_it<factory_t, Mdl>))),
true);
208 BOOST_CHECK_EQUAL(c.insert(
typename factory_t::value_type(2,
typename factory_t::mapped_type(
typename factory_t::mapped_type::first_type(
new A<Mdl>(2)), &clone_it<factory_t, Mdl>))),
true);
209 BOOST_CHECK_EQUAL(c.erase(1), 1U);
210 BOOST_CHECK(!c.empty());
211 BOOST_CHECK_EQUAL(c.size(), 1U);
212 BOOST_CHECK_EQUAL(c.find(1),
false);
213 BOOST_CHECK_EQUAL(c.find(2),
true);
216 BOOST_AUTO_TEST_CASE_TEMPLATE(make_an_item, Mdl, thread_types) {
217 typedef typename factory::clone<
int, A<Mdl>, crt_exception<ppd::platform_api, Mdl> > factory_t;
220 c.insert(
typename factory_t::value_type(1,
typename factory_t::mapped_type(
typename factory_t::mapped_type::first_type(
new A<Mdl>(1)), &clone_it<factory_t, Mdl>)));
221 BOOST_CHECK_EQUAL(c.make(1)->i, 1);
224 BOOST_AUTO_TEST_SUITE_END()