1 // Copyright (C) 2007 Anthony Williams
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)
6 #define BOOST_TEST_MODULE Boost.Threads: thread::get_id test suite
8 #include <boost/thread/thread_only.hpp>
9 #include <boost/test/unit_test.hpp>
10 #include <boost/bind/bind.hpp>
15 BOOST_AUTO_TEST_CASE(test_thread_id_for_default_constructed_thread_is_default_constructed_id
)
18 BOOST_CHECK(t
.get_id()==boost::thread::id());
21 BOOST_AUTO_TEST_CASE(test_thread_id_for_running_thread_is_not_default_constructed_id
)
23 boost::thread
t(&do_nothing
);
24 BOOST_CHECK(t
.get_id()!=boost::thread::id());
28 BOOST_AUTO_TEST_CASE(test_different_threads_have_different_ids
)
30 boost::thread
t(do_nothing
);
31 boost::thread
t2(do_nothing
);
32 BOOST_CHECK(t
.get_id()!=t2
.get_id());
37 BOOST_AUTO_TEST_CASE(test_thread_ids_have_a_total_order
)
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());
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()));
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()));
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()));
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()));
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()));
75 if((t
.get_id()<t2
.get_id()) && (t2
.get_id()<t3
.get_id()))
77 BOOST_CHECK(t
.get_id()<t3
.get_id());
79 else if((t
.get_id()<t3
.get_id()) && (t3
.get_id()<t2
.get_id()))
81 BOOST_CHECK(t
.get_id()<t2
.get_id());
83 else if((t2
.get_id()<t3
.get_id()) && (t3
.get_id()<t
.get_id()))
85 BOOST_CHECK(t2
.get_id()<t
.get_id());
87 else if((t2
.get_id()<t
.get_id()) && (t
.get_id()<t3
.get_id()))
89 BOOST_CHECK(t2
.get_id()<t3
.get_id());
91 else if((t3
.get_id()<t
.get_id()) && (t
.get_id()<t2
.get_id()))
93 BOOST_CHECK(t3
.get_id()<t2
.get_id());
95 else if((t3
.get_id()<t2
.get_id()) && (t2
.get_id()<t
.get_id()))
97 BOOST_CHECK(t3
.get_id()<t
.get_id());
104 boost::thread::id default_id
;
106 BOOST_CHECK(default_id
< t
.get_id());
107 BOOST_CHECK(default_id
< t2
.get_id());
108 BOOST_CHECK(default_id
< t3
.get_id());
110 BOOST_CHECK(default_id
<= t
.get_id());
111 BOOST_CHECK(default_id
<= t2
.get_id());
112 BOOST_CHECK(default_id
<= t3
.get_id());
114 BOOST_CHECK(!(default_id
> t
.get_id()));
115 BOOST_CHECK(!(default_id
> t2
.get_id()));
116 BOOST_CHECK(!(default_id
> t3
.get_id()));
118 BOOST_CHECK(!(default_id
>= t
.get_id()));
119 BOOST_CHECK(!(default_id
>= t2
.get_id()));
120 BOOST_CHECK(!(default_id
>= t3
.get_id()));
127 void get_thread_id(boost::thread::id
* id
)
129 *id
=boost::this_thread::get_id();
132 BOOST_AUTO_TEST_CASE(test_thread_id_of_running_thread_returned_by_this_thread_get_id
)
134 boost::thread::id id
;
135 boost::thread
t(boost::bind(get_thread_id
,&id
));
136 boost::thread::id t_id
=t
.get_id();
138 BOOST_CHECK(id
==t_id
);