root/examples/thread_safe_colln.cpp

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. BOOST_AUTO_TEST_SUITE
  2. BOOST_AUTO_TEST_CASE_TEMPLATE
  3. BOOST_AUTO_TEST_CASE_TEMPLATE
  4. BOOST_AUTO_TEST_CASE_TEMPLATE
  5. BOOST_AUTO_TEST_CASE_TEMPLATE
  6. BOOST_AUTO_TEST_CASE_TEMPLATE
  7. BOOST_AUTO_TEST_CASE_TEMPLATE
  8. BOOST_AUTO_TEST_CASE_TEMPLATE
  9. BOOST_AUTO_TEST_SUITE_END
  10. BOOST_AUTO_TEST_CASE_TEMPLATE
  11. BOOST_AUTO_TEST_CASE_TEMPLATE
  12. BOOST_AUTO_TEST_CASE_TEMPLATE
  13. BOOST_AUTO_TEST_CASE_TEMPLATE
  14. BOOST_AUTO_TEST_SUITE_END
  15. BOOST_AUTO_TEST_CASE_TEMPLATE
  16. BOOST_AUTO_TEST_CASE_TEMPLATE
  17. BOOST_AUTO_TEST_CASE_TEMPLATE
  18. BOOST_AUTO_TEST_CASE_TEMPLATE
  19. BOOST_AUTO_TEST_SUITE_END
  20. BOOST_AUTO_TEST_CASE_TEMPLATE
  21. BOOST_AUTO_TEST_CASE_TEMPLATE
  22. BOOST_AUTO_TEST_CASE_TEMPLATE
  23. BOOST_AUTO_TEST_CASE_TEMPLATE
  24. BOOST_AUTO_TEST_CASE_TEMPLATE
  25. BOOST_AUTO_TEST_CASE_TEMPLATE
  26. BOOST_AUTO_TEST_CASE_TEMPLATE
  27. BOOST_AUTO_TEST_SUITE_END
  28. BOOST_AUTO_TEST_CASE_TEMPLATE
  29. BOOST_AUTO_TEST_CASE_TEMPLATE
  30. BOOST_AUTO_TEST_CASE_TEMPLATE
  31. BOOST_AUTO_TEST_CASE_TEMPLATE
  32. BOOST_AUTO_TEST_CASE_TEMPLATE
  33. BOOST_AUTO_TEST_CASE_TEMPLATE
  34. BOOST_AUTO_TEST_CASE_TEMPLATE

   1 /******************************************************************************

   2 ** $Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/examples/thread_safe_colln.cpp 2185 2017-10-13 10:14:17Z jmmcg $

   3 **

   4 ** Copyright © 2010 by J.M.McGuiness, coder@hussar.me.uk

   5 **

   6 ** This library is free software; you can redistribute it and/or

   7 ** modify it under the terms of the GNU Lesser General Public

   8 ** License as published by the Free Software Foundation; either

   9 ** version 2.1 of the License, or (at your option) any later version.

  10 **

  11 ** This library is distributed in the hope that it will be useful,

  12 ** but WITHOUT ANY WARRANTY; without even the implied warranty of

  13 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

  14 ** Lesser General Public License for more details.

  15 **

  16 ** You should have received a copy of the GNU Lesser General Public

  17 ** License along with this library; if not, write to the Free Software

  18 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

  19 */
  20 
  21 #include "stdafx.h"
  22 
  23 #define BOOST_TEST_MODULE libjmmcg_tests
  24 #include <boost/test/included/unit_test.hpp>
  25 
  26 #include <boost/test/test_case_template.hpp>
  27 #include <boost/mpl/list.hpp>
  28 
  29 #include "core/thread_safe_adaptors.hpp"
  30 #include "core/rw_locking.hpp"
  31 
  32 using namespace jmmcg;
  33 using namespace ppd;
  34 
  35 template<typename Mdl, template<class, class> class Colln>
  36 struct erew_colln_t {
  37         typedef api_lock_traits<platform_api, Mdl> lock_traits;
  38         typedef safe_colln<
  39                 Colln<int, std::allocator<int> >,
  40                 typename lock_traits::critical_section_type
  41         > result;
  42 };
  43 
  44 template<typename Mdl, template<class, class> class Colln>
  45 struct crew_colln_t {
  46         typedef api_lock_traits<platform_api, Mdl> lock_traits;
  47         typedef safe_colln<
  48                 Colln<int, std::allocator<int> >,
  49                 lock::rw::template locker<lock_traits>,
  50                 typename lock::rw::template locker<lock_traits>::decaying_write_lock_type
  51         > result;
  52 };
  53 
  54 template<typename Mdl, template<class, class> class Colln>
  55 struct erew_queue_t {
  56         typedef api_lock_traits<platform_api, Mdl> lock_traits;
  57         typedef queue<
  58                 Colln<int, std::allocator<int> >,
  59                 typename lock_traits::critical_section_type
  60         > result;
  61 };
  62 
  63 template<typename Mdl, template<class, class> class Colln>
  64 struct erew_funky_queue_t {
  65         typedef api_lock_traits<platform_api, Mdl> lock_traits;
  66         typedef funky_queue<
  67                 Colln<int, std::allocator<int> >,
  68                 typename lock_traits::critical_section_type
  69         > result;
  70 };
  71 
  72 typedef boost::mpl::list<
  73         heavyweight_threading,
  74         sequential_mode
  75 > test_types;
  76 
  77 BOOST_AUTO_TEST_SUITE(thread_safe_colln)
  78 
  79 BOOST_AUTO_TEST_SUITE(list_tests)
  80 
  81 BOOST_AUTO_TEST_CASE_TEMPLATE(default_ctor, Mdl, test_types) {
  82         typedef typename erew_colln_t<Mdl, std::list>::result colln_t;
  83 
  84         colln_t s1;
  85         BOOST_CHECK(s1.empty());
  86         BOOST_CHECK_EQUAL(s1.size(), 0U);
  87         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
  88 }
  89 
  90 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor, Mdl, test_types) {
  91         typedef typename erew_colln_t<Mdl, std::list>::result colln_t;
  92 
  93         typename colln_t::container_type src;
  94         colln_t s1(src);
  95         BOOST_CHECK(s1.empty());
  96         BOOST_CHECK_EQUAL(s1.size(), src.size());
  97         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
  98 }
  99 
 100 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor_1, Mdl, test_types) {
 101         typedef typename erew_colln_t<Mdl, std::list>::result colln_t;
 102 
 103         typename colln_t::container_type src;
 104         src.push_back(1);
 105         colln_t s1(src);
 106         BOOST_CHECK(!s1.empty());
 107         BOOST_CHECK_EQUAL(s1.size(), src.size());
 108         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 109 }
 110 
 111 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor_2, Mdl, test_types) {
 112         typedef typename erew_colln_t<Mdl, std::list>::result colln_t;
 113 
 114         typename colln_t::container_type src;
 115         src.push_back(1);
 116         src.push_back(2);
 117         colln_t s1(src);
 118         BOOST_CHECK(!s1.empty());
 119         BOOST_CHECK_EQUAL(s1.size(), src.size());
 120         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 121 }
 122 
 123 BOOST_AUTO_TEST_CASE_TEMPLATE(assignment, Mdl, test_types) {
 124         typedef typename erew_colln_t<Mdl, std::list>::result colln_t;
 125 
 126         colln_t s1,s2;
 127         s1=s2;
 128         BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
 129         BOOST_CHECK_EQUAL(s1.size(), s2.size());
 130         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 131 }
 132 
 133 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item, Mdl, test_types) {
 134         typedef typename erew_colln_t<Mdl, std::list>::result colln_t;
 135 
 136         colln_t s1;
 137         s1.push_back(1);
 138         BOOST_CHECK(!s1.empty());
 139         BOOST_CHECK_EQUAL(s1.size(), 1U);
 140         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 141         BOOST_CHECK_EQUAL(s1.colln().front(), 1);
 142 }
 143 
 144 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item_copy, Mdl, test_types) {
 145         typedef typename erew_colln_t<Mdl, std::list>::result colln_t;
 146 
 147         colln_t s1,s2;
 148         s1.push_back(1);
 149         s2=s1;
 150         BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
 151         BOOST_CHECK_EQUAL(s1.size(), s2.size());
 152         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 153         BOOST_CHECK_EQUAL(s2.colln().front(), 1);
 154 }
 155 
 156 BOOST_AUTO_TEST_CASE_TEMPLATE(clear, Mdl, test_types) {
 157         typedef typename erew_colln_t<Mdl, std::list>::result colln_t;
 158 
 159         colln_t s1;
 160         s1.push_back(1);
 161         s1.clear();
 162         BOOST_CHECK(s1.empty());
 163         BOOST_CHECK_EQUAL(s1.size(), 0U);
 164         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 165 }
 166 
 167 BOOST_AUTO_TEST_SUITE_END()
 168 
 169 BOOST_AUTO_TEST_SUITE(queue_tests)
 170 
 171 BOOST_AUTO_TEST_CASE_TEMPLATE(default_ctor, Mdl, test_types) {
 172         typedef typename erew_queue_t<Mdl, std::list>::result colln_t;
 173 
 174         colln_t s1;
 175         BOOST_CHECK(s1.empty());
 176         BOOST_CHECK_EQUAL(s1.size(), 0U);
 177         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 178 }
 179 
 180 BOOST_AUTO_TEST_CASE_TEMPLATE(assignment, Mdl, test_types) {
 181         typedef typename erew_queue_t<Mdl, std::list>::result colln_t;
 182 
 183         colln_t s1,s2;
 184         s1=s2;
 185         BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
 186         BOOST_CHECK_EQUAL(s1.size(), s2.size());
 187         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 188 }
 189 
 190 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item, Mdl, test_types) {
 191         typedef typename erew_queue_t<Mdl, std::list>::result colln_t;
 192 
 193         colln_t s1;
 194         s1.push_back(1);
 195         BOOST_CHECK(!s1.empty());
 196         BOOST_CHECK_EQUAL(s1.size(), 1U);
 197         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 198         BOOST_CHECK_EQUAL(s1.front(), 1);
 199 }
 200 
 201 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item_copy, Mdl, test_types) {
 202         typedef typename erew_queue_t<Mdl, std::list>::result colln_t;
 203 
 204         colln_t s1,s2;
 205         s1.push_back(1);
 206         s2=s1;
 207         BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
 208         BOOST_CHECK_EQUAL(s1.size(), s2.size());
 209         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 210         BOOST_CHECK_EQUAL(s2.front(), 1);
 211 }
 212 
 213 BOOST_AUTO_TEST_CASE_TEMPLATE(clear, Mdl, test_types) {
 214         typedef typename erew_queue_t<Mdl, std::list>::result colln_t;
 215 
 216         colln_t s1;
 217         s1.push_back(1);
 218         s1.clear();
 219         BOOST_CHECK(s1.empty());
 220         BOOST_CHECK_EQUAL(s1.size(), 0U);
 221         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 222 }
 223 
 224 BOOST_AUTO_TEST_SUITE_END()
 225 
 226 BOOST_AUTO_TEST_SUITE(funky_queue_tests)
 227 
 228 BOOST_AUTO_TEST_CASE_TEMPLATE(default_ctor, Mdl, test_types) {
 229         typedef typename erew_funky_queue_t<Mdl, std::list>::result colln_t;
 230 
 231         colln_t s1;
 232         BOOST_CHECK(s1.empty());
 233         BOOST_CHECK_EQUAL(s1.size(), 0U);
 234 }
 235 
 236 BOOST_AUTO_TEST_CASE_TEMPLATE(assignment, Mdl, test_types) {
 237         typedef typename erew_funky_queue_t<Mdl, std::list>::result colln_t;
 238 
 239         colln_t s1,s2;
 240         s1=s2;
 241         BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
 242         BOOST_CHECK_EQUAL(s1.size(), s2.size());
 243         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 244 }
 245 
 246 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item, Mdl, test_types) {
 247         typedef typename erew_funky_queue_t<Mdl, std::list>::result colln_t;
 248 
 249         colln_t s1;
 250         s1.push_back(1);
 251         BOOST_CHECK(!s1.empty());
 252         BOOST_CHECK_EQUAL(s1.size(), 1U);
 253         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 254         BOOST_CHECK_EQUAL(s1.front(), 1);
 255 }
 256 
 257 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item_copy, Mdl, test_types) {
 258         typedef typename erew_funky_queue_t<Mdl, std::list>::result colln_t;
 259 
 260         colln_t s1,s2;
 261         s1.push_back(1);
 262         s2=s1;
 263         BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
 264         BOOST_CHECK_EQUAL(s1.size(), s2.size());
 265         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 266         BOOST_CHECK_EQUAL(s2.front(), 1);
 267 }
 268 
 269 BOOST_AUTO_TEST_CASE_TEMPLATE(clear, Mdl, test_types) {
 270         typedef typename erew_funky_queue_t<Mdl, std::list>::result colln_t;
 271 
 272         colln_t s1;
 273         s1.push_back(1);
 274         s1.clear();
 275         BOOST_CHECK(s1.empty());
 276         BOOST_CHECK_EQUAL(s1.size(), 0U);
 277         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 278 }
 279 
 280 BOOST_AUTO_TEST_SUITE_END()
 281 
 282 BOOST_AUTO_TEST_SUITE(vector_tests)
 283 
 284 BOOST_AUTO_TEST_CASE_TEMPLATE(default_ctor, Mdl, test_types) {
 285         typedef typename erew_colln_t<Mdl, std::vector>::result colln_t;
 286 
 287         colln_t s1;
 288         BOOST_CHECK(s1.empty());
 289         BOOST_CHECK_EQUAL(s1.size(), 0U);
 290         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 291 }
 292 
 293 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor, Mdl, test_types) {
 294         typedef typename erew_colln_t<Mdl, std::vector>::result colln_t;
 295 
 296         typename colln_t::container_type src;
 297         colln_t s1(src);
 298         BOOST_CHECK(s1.empty());
 299         BOOST_CHECK_EQUAL(s1.size(), src.size());
 300         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 301 }
 302 
 303 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor_1, Mdl, test_types) {
 304         typedef typename erew_colln_t<Mdl, std::vector>::result colln_t;
 305 
 306         typename colln_t::container_type src;
 307         src.push_back(1);
 308         colln_t s1(src);
 309         BOOST_CHECK(!s1.empty());
 310         BOOST_CHECK_EQUAL(s1.size(), src.size());
 311         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 312 }
 313 
 314 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor_2, Mdl, test_types) {
 315         typedef typename erew_colln_t<Mdl, std::vector>::result colln_t;
 316 
 317         typename colln_t::container_type src;
 318         src.push_back(1);
 319         src.push_back(2);
 320         colln_t s1(src);
 321         BOOST_CHECK(!s1.empty());
 322         BOOST_CHECK_EQUAL(s1.size(), src.size());
 323         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 324 }
 325 
 326 BOOST_AUTO_TEST_CASE_TEMPLATE(assignment, Mdl, test_types) {
 327         typedef typename erew_colln_t<Mdl, std::vector>::result colln_t;
 328 
 329         colln_t s1,s2;
 330         s1=s2;
 331         BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
 332         BOOST_CHECK_EQUAL(s1.size(), s2.size());
 333         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 334 }
 335 
 336 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item, Mdl, test_types) {
 337         typedef typename erew_colln_t<Mdl, std::vector>::result colln_t;
 338 
 339         colln_t s1;
 340         s1.push_back(1);
 341         BOOST_CHECK(!s1.empty());
 342         BOOST_CHECK_EQUAL(s1.size(), 1U);
 343         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 344         BOOST_CHECK_EQUAL(s1[0], 1);
 345 }
 346 
 347 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item_copy, Mdl, test_types) {
 348         typedef typename erew_colln_t<Mdl, std::vector>::result colln_t;
 349 
 350         colln_t s1,s2;
 351         s1.push_back(1);
 352         s2=s1;
 353         BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
 354         BOOST_CHECK_EQUAL(s1.size(), s2.size());
 355         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 356         BOOST_CHECK_EQUAL(s2[0], 1);
 357 }
 358 
 359 BOOST_AUTO_TEST_CASE_TEMPLATE(clear, Mdl, test_types) {
 360         typedef typename erew_colln_t<Mdl, std::vector>::result colln_t;
 361 
 362         colln_t s1;
 363         s1.push_back(1);
 364         s1.clear();
 365         BOOST_CHECK(s1.empty());
 366         BOOST_CHECK_EQUAL(s1.size(), 0U);
 367         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 368 }
 369 
 370 BOOST_AUTO_TEST_SUITE_END()
 371 
 372 BOOST_AUTO_TEST_SUITE(vector_rw_lk_tests)
 373 
 374 BOOST_AUTO_TEST_CASE_TEMPLATE(default_ctor, Mdl, test_types) {
 375         typedef typename crew_colln_t<Mdl, std::vector>::result colln_t;
 376 
 377         colln_t s1;
 378         BOOST_CHECK(s1.empty());
 379         BOOST_CHECK_EQUAL(s1.size(), 0U);
 380         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 381 }
 382 
 383 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor, Mdl, test_types) {
 384         typedef typename crew_colln_t<Mdl, std::vector>::result colln_t;
 385 
 386         typename colln_t::container_type src;
 387         colln_t s1(src);
 388         BOOST_CHECK(s1.empty());
 389         BOOST_CHECK_EQUAL(s1.size(), src.size());
 390         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 391 }
 392 
 393 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor_1, Mdl, test_types) {
 394         typedef typename crew_colln_t<Mdl, std::vector>::result colln_t;
 395 
 396         typename colln_t::container_type src;
 397         src.push_back(1);
 398         colln_t s1(src);
 399         BOOST_CHECK(!s1.empty());
 400         BOOST_CHECK_EQUAL(s1.size(), src.size());
 401         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 402 }
 403 
 404 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor_2, Mdl, test_types) {
 405         typedef typename crew_colln_t<Mdl, std::vector>::result colln_t;
 406 
 407         typename colln_t::container_type src;
 408         src.push_back(1);
 409         src.push_back(2);
 410         colln_t s1(src);
 411         BOOST_CHECK(!s1.empty());
 412         BOOST_CHECK_EQUAL(s1.size(), src.size());
 413         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 414 }
 415 
 416 BOOST_AUTO_TEST_CASE_TEMPLATE(assignment, Mdl, test_types) {
 417         typedef typename crew_colln_t<Mdl, std::vector>::result colln_t;
 418 
 419         colln_t s1,s2;
 420         s1=s2;
 421         BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
 422         BOOST_CHECK_EQUAL(s1.size(), s2.size());
 423         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 424 }
 425 
 426 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item, Mdl, test_types) {
 427         typedef typename crew_colln_t<Mdl, std::vector>::result colln_t;
 428 
 429         colln_t s1;
 430         s1.push_back(1);
 431         BOOST_CHECK(!s1.empty());
 432         BOOST_CHECK_EQUAL(s1.size(), 1U);
 433         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 434         BOOST_CHECK_EQUAL(s1[0], 1);
 435 }
 436 
 437 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item_copy, Mdl, test_types) {
 438         typedef typename crew_colln_t<Mdl, std::vector>::result colln_t;
 439 
 440         colln_t s1,s2;
 441         s1.push_back(1);
 442         s2=s1;
 443         BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
 444         BOOST_CHECK_EQUAL(s1.size(), s2.size());
 445         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 446         BOOST_CHECK_EQUAL(s2[0], 1);
 447 }
 448 
 449 BOOST_AUTO_TEST_CASE_TEMPLATE(clear, Mdl, test_types) {
 450         typedef typename crew_colln_t<Mdl, std::vector>::result colln_t;
 451 
 452         colln_t s1;
 453         s1.push_back(1);
 454         s1.clear();
 455         BOOST_CHECK(s1.empty());
 456         BOOST_CHECK_EQUAL(s1.size(), 0U);
 457         BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
 458 }
 459 
 460 BOOST_AUTO_TEST_SUITE_END()
 461 
 462 BOOST_AUTO_TEST_SUITE_END()

/* [<][>][^][v][top][bottom][index][help] */