]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/thread/test/test_thread_id.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / thread / test / test_thread_id.cpp
1 // Copyright (C) 2007 Anthony Williams
2 //
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6 #define BOOST_TEST_MODULE Boost.Threads: thread::get_id test suite
7
8 #include <boost/thread/thread_only.hpp>
9 #include <boost/test/unit_test.hpp>
10 #include <boost/bind.hpp>
11
12 void do_nothing()
13 {}
14
15 BOOST_AUTO_TEST_CASE(test_thread_id_for_default_constructed_thread_is_default_constructed_id)
16 {
17 boost::thread t;
18 BOOST_CHECK(t.get_id()==boost::thread::id());
19 }
20
21 BOOST_AUTO_TEST_CASE(test_thread_id_for_running_thread_is_not_default_constructed_id)
22 {
23 boost::thread t(&do_nothing);
24 BOOST_CHECK(t.get_id()!=boost::thread::id());
25 t.join();
26 }
27
28 BOOST_AUTO_TEST_CASE(test_different_threads_have_different_ids)
29 {
30 boost::thread t(do_nothing);
31 boost::thread t2(do_nothing);
32 BOOST_CHECK(t.get_id()!=t2.get_id());
33 t.join();
34 t2.join();
35 }
36
37 BOOST_AUTO_TEST_CASE(test_thread_ids_have_a_total_order)
38 {
39 boost::thread t(do_nothing);
40 boost::thread t2(do_nothing);
41 boost::thread t3(do_nothing);
42 BOOST_CHECK(t.get_id()!=t2.get_id());
43 BOOST_CHECK(t.get_id()!=t3.get_id());
44 BOOST_CHECK(t2.get_id()!=t3.get_id());
45
46 BOOST_CHECK((t.get_id()<t2.get_id()) != (t2.get_id()<t.get_id()));
47 BOOST_CHECK((t.get_id()<t3.get_id()) != (t3.get_id()<t.get_id()));
48 BOOST_CHECK((t2.get_id()<t3.get_id()) != (t3.get_id()<t2.get_id()));
49
50 BOOST_CHECK((t.get_id()>t2.get_id()) != (t2.get_id()>t.get_id()));
51 BOOST_CHECK((t.get_id()>t3.get_id()) != (t3.get_id()>t.get_id()));
52 BOOST_CHECK((t2.get_id()>t3.get_id()) != (t3.get_id()>t2.get_id()));
53
54 BOOST_CHECK((t.get_id()<t2.get_id()) == (t2.get_id()>t.get_id()));
55 BOOST_CHECK((t2.get_id()<t.get_id()) == (t.get_id()>t2.get_id()));
56 BOOST_CHECK((t.get_id()<t3.get_id()) == (t3.get_id()>t.get_id()));
57 BOOST_CHECK((t3.get_id()<t.get_id()) == (t.get_id()>t3.get_id()));
58 BOOST_CHECK((t2.get_id()<t3.get_id()) == (t3.get_id()>t2.get_id()));
59 BOOST_CHECK((t3.get_id()<t2.get_id()) == (t2.get_id()>t3.get_id()));
60
61 BOOST_CHECK((t.get_id()<t2.get_id()) == (t2.get_id()>=t.get_id()));
62 BOOST_CHECK((t2.get_id()<t.get_id()) == (t.get_id()>=t2.get_id()));
63 BOOST_CHECK((t.get_id()<t3.get_id()) == (t3.get_id()>=t.get_id()));
64 BOOST_CHECK((t3.get_id()<t.get_id()) == (t.get_id()>=t3.get_id()));
65 BOOST_CHECK((t2.get_id()<t3.get_id()) == (t3.get_id()>=t2.get_id()));
66 BOOST_CHECK((t3.get_id()<t2.get_id()) == (t2.get_id()>=t3.get_id()));
67
68 BOOST_CHECK((t.get_id()<=t2.get_id()) == (t2.get_id()>t.get_id()));
69 BOOST_CHECK((t2.get_id()<=t.get_id()) == (t.get_id()>t2.get_id()));
70 BOOST_CHECK((t.get_id()<=t3.get_id()) == (t3.get_id()>t.get_id()));
71 BOOST_CHECK((t3.get_id()<=t.get_id()) == (t.get_id()>t3.get_id()));
72 BOOST_CHECK((t2.get_id()<=t3.get_id()) == (t3.get_id()>t2.get_id()));
73 BOOST_CHECK((t3.get_id()<=t2.get_id()) == (t2.get_id()>t3.get_id()));
74
75 if((t.get_id()<t2.get_id()) && (t2.get_id()<t3.get_id()))
76 {
77 BOOST_CHECK(t.get_id()<t3.get_id());
78 }
79 else if((t.get_id()<t3.get_id()) && (t3.get_id()<t2.get_id()))
80 {
81 BOOST_CHECK(t.get_id()<t2.get_id());
82 }
83 else if((t2.get_id()<t3.get_id()) && (t3.get_id()<t.get_id()))
84 {
85 BOOST_CHECK(t2.get_id()<t.get_id());
86 }
87 else if((t2.get_id()<t.get_id()) && (t.get_id()<t3.get_id()))
88 {
89 BOOST_CHECK(t2.get_id()<t3.get_id());
90 }
91 else if((t3.get_id()<t.get_id()) && (t.get_id()<t2.get_id()))
92 {
93 BOOST_CHECK(t3.get_id()<t2.get_id());
94 }
95 else if((t3.get_id()<t2.get_id()) && (t2.get_id()<t.get_id()))
96 {
97 BOOST_CHECK(t3.get_id()<t.get_id());
98 }
99 else
100 {
101 BOOST_CHECK(false);
102 }
103
104 boost::thread::id default_id;
105
106 BOOST_CHECK(default_id < t.get_id());
107 BOOST_CHECK(default_id < t2.get_id());
108 BOOST_CHECK(default_id < t3.get_id());
109
110 BOOST_CHECK(default_id <= t.get_id());
111 BOOST_CHECK(default_id <= t2.get_id());
112 BOOST_CHECK(default_id <= t3.get_id());
113
114 BOOST_CHECK(!(default_id > t.get_id()));
115 BOOST_CHECK(!(default_id > t2.get_id()));
116 BOOST_CHECK(!(default_id > t3.get_id()));
117
118 BOOST_CHECK(!(default_id >= t.get_id()));
119 BOOST_CHECK(!(default_id >= t2.get_id()));
120 BOOST_CHECK(!(default_id >= t3.get_id()));
121
122 t.join();
123 t2.join();
124 t3.join();
125 }
126
127 void get_thread_id(boost::thread::id* id)
128 {
129 *id=boost::this_thread::get_id();
130 }
131
132 BOOST_AUTO_TEST_CASE(test_thread_id_of_running_thread_returned_by_this_thread_get_id)
133 {
134 boost::thread::id id;
135 boost::thread t(boost::bind(get_thread_id,&id));
136 boost::thread::id t_id=t.get_id();
137 t.join();
138 BOOST_CHECK(id==t_id);
139 }