mt_level_test.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // Copyright (C) 2013 Alain Miniussi <alain.miniussi@oca.eu>
  2. // Use, modification and distribution is subject to the Boost Software
  3. // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  4. // http://www.boost.org/LICENSE_1_0.txt)
  5. // test threading::level operations
  6. #include <boost/mpi/environment.hpp>
  7. #include <iostream>
  8. #include <sstream>
  9. #define BOOST_TEST_MODULE mpi_level_test
  10. #include <boost/test/included/unit_test.hpp>
  11. namespace mpi = boost::mpi;
  12. void
  13. test_threading_level_io(mpi::threading::level orig) {
  14. std::ostringstream out;
  15. namespace mt = boost::mpi::threading;
  16. mt::level printed = mt::level(-1);
  17. out << orig;
  18. BOOST_CHECK(out.good());
  19. std::string orig_str(out.str());
  20. std::cout << "orig string:" << orig_str << '\n';
  21. std::istringstream in(orig_str);
  22. in >> printed;
  23. BOOST_CHECK(!in.bad());
  24. std::cout << "orig: " << orig << ", printed: " << printed << std::endl;
  25. BOOST_CHECK(orig == printed);
  26. }
  27. void
  28. test_threading_levels_io() {
  29. namespace mt = boost::mpi::threading;
  30. test_threading_level_io(mt::single);
  31. test_threading_level_io(mt::funneled);
  32. test_threading_level_io(mt::serialized);
  33. test_threading_level_io(mt::multiple);
  34. }
  35. void
  36. test_threading_level_cmp() {
  37. namespace mt = boost::mpi::threading;
  38. BOOST_CHECK(mt::single == mt::single);
  39. BOOST_CHECK(mt::funneled == mt::funneled);
  40. BOOST_CHECK(mt::serialized == mt::serialized);
  41. BOOST_CHECK(mt::multiple == mt::multiple);
  42. BOOST_CHECK(mt::single != mt::funneled);
  43. BOOST_CHECK(mt::single != mt::serialized);
  44. BOOST_CHECK(mt::single != mt::multiple);
  45. BOOST_CHECK(mt::funneled != mt::single);
  46. BOOST_CHECK(mt::funneled != mt::serialized);
  47. BOOST_CHECK(mt::funneled != mt::multiple);
  48. BOOST_CHECK(mt::serialized != mt::single);
  49. BOOST_CHECK(mt::serialized != mt::funneled);
  50. BOOST_CHECK(mt::serialized != mt::multiple);
  51. BOOST_CHECK(mt::multiple != mt::single);
  52. BOOST_CHECK(mt::multiple != mt::funneled);
  53. BOOST_CHECK(mt::multiple != mt::serialized);
  54. BOOST_CHECK(mt::single < mt::funneled);
  55. BOOST_CHECK(mt::funneled > mt::single);
  56. BOOST_CHECK(mt::single < mt::serialized);
  57. BOOST_CHECK(mt::serialized > mt::single);
  58. BOOST_CHECK(mt::single < mt::multiple);
  59. BOOST_CHECK(mt::multiple > mt::single);
  60. BOOST_CHECK(mt::funneled < mt::serialized);
  61. BOOST_CHECK(mt::serialized > mt::funneled);
  62. BOOST_CHECK(mt::funneled < mt::multiple);
  63. BOOST_CHECK(mt::multiple > mt::funneled);
  64. BOOST_CHECK(mt::serialized < mt::multiple);
  65. BOOST_CHECK(mt::multiple > mt::serialized);
  66. BOOST_CHECK(mt::single <= mt::single);
  67. BOOST_CHECK(mt::single <= mt::funneled);
  68. BOOST_CHECK(mt::funneled >= mt::single);
  69. BOOST_CHECK(mt::single <= mt::serialized);
  70. BOOST_CHECK(mt::serialized >= mt::single);
  71. BOOST_CHECK(mt::single <= mt::multiple);
  72. BOOST_CHECK(mt::multiple >= mt::single);
  73. BOOST_CHECK(mt::funneled <= mt::funneled);
  74. BOOST_CHECK(mt::funneled <= mt::serialized);
  75. BOOST_CHECK(mt::serialized >= mt::funneled);
  76. BOOST_CHECK(mt::funneled <= mt::multiple);
  77. BOOST_CHECK(mt::multiple >= mt::funneled);
  78. BOOST_CHECK(mt::serialized <= mt::serialized);
  79. BOOST_CHECK(mt::serialized <= mt::multiple);
  80. BOOST_CHECK(mt::multiple >= mt::serialized);
  81. BOOST_CHECK(mt::multiple <= mt::multiple);
  82. }
  83. BOOST_AUTO_TEST_CASE(mt_level)
  84. {
  85. test_threading_levels_io();
  86. test_threading_level_cmp();
  87. }