1 // Copyright (C) 2013 Alain Miniussi <alain.miniussi@oca.eu>
3 // Use, modification and distribution is subject to the Boost Software
4 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
7 // test threading::level operations
9 #include <boost/mpi/environment.hpp>
10 #include <boost/test/minimal.hpp>
14 namespace mpi = boost::mpi;
17 test_threading_level_io(mpi::threading::level orig) {
18 std::ostringstream out;
19 namespace mt = boost::mpi::threading;
20 mt::level printed = mt::level(-1);
23 BOOST_CHECK(out.good());
24 std::string orig_str(out.str());
25 std::cout << "orig string:" << orig_str << '\n';
26 std::istringstream in(orig_str);
28 BOOST_CHECK(!in.bad());
29 std::cout << "orig: " << orig << ", printed: " << printed << std::endl;
30 BOOST_CHECK(orig == printed);
34 test_threading_levels_io() {
35 namespace mt = boost::mpi::threading;
36 test_threading_level_io(mt::single);
37 test_threading_level_io(mt::funneled);
38 test_threading_level_io(mt::serialized);
39 test_threading_level_io(mt::multiple);
43 test_threading_level_cmp() {
44 namespace mt = boost::mpi::threading;
45 BOOST_CHECK(mt::single == mt::single);
46 BOOST_CHECK(mt::funneled == mt::funneled);
47 BOOST_CHECK(mt::serialized == mt::serialized);
48 BOOST_CHECK(mt::multiple == mt::multiple);
50 BOOST_CHECK(mt::single != mt::funneled);
51 BOOST_CHECK(mt::single != mt::serialized);
52 BOOST_CHECK(mt::single != mt::multiple);
54 BOOST_CHECK(mt::funneled != mt::single);
55 BOOST_CHECK(mt::funneled != mt::serialized);
56 BOOST_CHECK(mt::funneled != mt::multiple);
58 BOOST_CHECK(mt::serialized != mt::single);
59 BOOST_CHECK(mt::serialized != mt::funneled);
60 BOOST_CHECK(mt::serialized != mt::multiple);
62 BOOST_CHECK(mt::multiple != mt::single);
63 BOOST_CHECK(mt::multiple != mt::funneled);
64 BOOST_CHECK(mt::multiple != mt::serialized);
66 BOOST_CHECK(mt::single < mt::funneled);
67 BOOST_CHECK(mt::funneled > mt::single);
68 BOOST_CHECK(mt::single < mt::serialized);
69 BOOST_CHECK(mt::serialized > mt::single);
70 BOOST_CHECK(mt::single < mt::multiple);
71 BOOST_CHECK(mt::multiple > mt::single);
73 BOOST_CHECK(mt::funneled < mt::serialized);
74 BOOST_CHECK(mt::serialized > mt::funneled);
75 BOOST_CHECK(mt::funneled < mt::multiple);
76 BOOST_CHECK(mt::multiple > mt::funneled);
78 BOOST_CHECK(mt::serialized < mt::multiple);
79 BOOST_CHECK(mt::multiple > mt::serialized);
81 BOOST_CHECK(mt::single <= mt::single);
82 BOOST_CHECK(mt::single <= mt::funneled);
83 BOOST_CHECK(mt::funneled >= mt::single);
84 BOOST_CHECK(mt::single <= mt::serialized);
85 BOOST_CHECK(mt::serialized >= mt::single);
86 BOOST_CHECK(mt::single <= mt::multiple);
87 BOOST_CHECK(mt::multiple >= mt::single);
89 BOOST_CHECK(mt::funneled <= mt::funneled);
90 BOOST_CHECK(mt::funneled <= mt::serialized);
91 BOOST_CHECK(mt::serialized >= mt::funneled);
92 BOOST_CHECK(mt::funneled <= mt::multiple);
93 BOOST_CHECK(mt::multiple >= mt::funneled);
95 BOOST_CHECK(mt::serialized <= mt::serialized);
96 BOOST_CHECK(mt::serialized <= mt::multiple);
97 BOOST_CHECK(mt::multiple >= mt::serialized);
99 BOOST_CHECK(mt::multiple <= mt::multiple);
103 test_main(int argc, char* argv[]) {
104 test_threading_levels_io();
105 test_threading_level_cmp();