Imported Upstream version 1.57.0
[platform/upstream/boost.git] / libs / mpi / test / mt_level_test.cpp
1 // Copyright (C) 2013 Alain Miniussi <alain.miniussi@oca.eu>
2
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)
6
7 // test threading::level operations
8
9 #include <boost/mpi/environment.hpp>
10 #include <boost/test/minimal.hpp>
11 #include <iostream>
12 #include <sstream>
13
14 namespace mpi = boost::mpi;
15
16 void
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);
21
22   out << orig;
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);
27   in >> printed;
28   BOOST_CHECK(!in.bad());
29   std::cout << "orig: " << orig << ", printed: " << printed << std::endl;
30   BOOST_CHECK(orig == printed);
31 }
32
33 void
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);
40 }
41
42 void
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);
49   
50   BOOST_CHECK(mt::single != mt::funneled);
51   BOOST_CHECK(mt::single != mt::serialized);
52   BOOST_CHECK(mt::single != mt::multiple);
53
54   BOOST_CHECK(mt::funneled != mt::single);
55   BOOST_CHECK(mt::funneled != mt::serialized);
56   BOOST_CHECK(mt::funneled != mt::multiple);
57
58   BOOST_CHECK(mt::serialized != mt::single);
59   BOOST_CHECK(mt::serialized != mt::funneled);
60   BOOST_CHECK(mt::serialized != mt::multiple);
61
62   BOOST_CHECK(mt::multiple != mt::single);
63   BOOST_CHECK(mt::multiple != mt::funneled);
64   BOOST_CHECK(mt::multiple != mt::serialized);
65
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);
72
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);
77
78   BOOST_CHECK(mt::serialized < mt::multiple);
79   BOOST_CHECK(mt::multiple > mt::serialized);
80
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);
88
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);
94
95   BOOST_CHECK(mt::serialized <= mt::serialized);
96   BOOST_CHECK(mt::serialized <= mt::multiple);
97   BOOST_CHECK(mt::multiple >= mt::serialized);
98
99   BOOST_CHECK(mt::multiple <= mt::multiple);
100 }
101     
102 int
103 test_main(int argc, char* argv[]) {
104   test_threading_levels_io();
105   test_threading_level_cmp();
106   return 0;
107 }