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/bind.hpp> 11 do_nothing()12void do_nothing() 13 {} 14 BOOST_AUTO_TEST_CASE(test_thread_id_for_default_constructed_thread_is_default_constructed_id)15BOOST_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 BOOST_AUTO_TEST_CASE(test_thread_id_for_running_thread_is_not_default_constructed_id)21BOOST_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 BOOST_AUTO_TEST_CASE(test_different_threads_have_different_ids)28BOOST_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 BOOST_AUTO_TEST_CASE(test_thread_ids_have_a_total_order)37BOOST_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 get_thread_id(boost::thread::id * id)127void get_thread_id(boost::thread::id* id) 128 { 129 *id=boost::this_thread::get_id(); 130 } 131 BOOST_AUTO_TEST_CASE(test_thread_id_of_running_thread_returned_by_this_thread_get_id)132BOOST_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 } 140