test_thread_id.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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. #define BOOST_TEST_MODULE Boost.Threads: thread::get_id test suite
  6. #include <boost/thread/thread_only.hpp>
  7. #include <boost/test/unit_test.hpp>
  8. #include <boost/bind.hpp>
  9. void do_nothing()
  10. {}
  11. BOOST_AUTO_TEST_CASE(test_thread_id_for_default_constructed_thread_is_default_constructed_id)
  12. {
  13. boost::thread t;
  14. BOOST_CHECK(t.get_id()==boost::thread::id());
  15. }
  16. BOOST_AUTO_TEST_CASE(test_thread_id_for_running_thread_is_not_default_constructed_id)
  17. {
  18. boost::thread t(&do_nothing);
  19. BOOST_CHECK(t.get_id()!=boost::thread::id());
  20. t.join();
  21. }
  22. BOOST_AUTO_TEST_CASE(test_different_threads_have_different_ids)
  23. {
  24. boost::thread t(do_nothing);
  25. boost::thread t2(do_nothing);
  26. BOOST_CHECK(t.get_id()!=t2.get_id());
  27. t.join();
  28. t2.join();
  29. }
  30. BOOST_AUTO_TEST_CASE(test_thread_ids_have_a_total_order)
  31. {
  32. boost::thread t(do_nothing);
  33. boost::thread t2(do_nothing);
  34. boost::thread t3(do_nothing);
  35. BOOST_CHECK(t.get_id()!=t2.get_id());
  36. BOOST_CHECK(t.get_id()!=t3.get_id());
  37. BOOST_CHECK(t2.get_id()!=t3.get_id());
  38. BOOST_CHECK((t.get_id()<t2.get_id()) != (t2.get_id()<t.get_id()));
  39. BOOST_CHECK((t.get_id()<t3.get_id()) != (t3.get_id()<t.get_id()));
  40. BOOST_CHECK((t2.get_id()<t3.get_id()) != (t3.get_id()<t2.get_id()));
  41. BOOST_CHECK((t.get_id()>t2.get_id()) != (t2.get_id()>t.get_id()));
  42. BOOST_CHECK((t.get_id()>t3.get_id()) != (t3.get_id()>t.get_id()));
  43. BOOST_CHECK((t2.get_id()>t3.get_id()) != (t3.get_id()>t2.get_id()));
  44. BOOST_CHECK((t.get_id()<t2.get_id()) == (t2.get_id()>t.get_id()));
  45. BOOST_CHECK((t2.get_id()<t.get_id()) == (t.get_id()>t2.get_id()));
  46. BOOST_CHECK((t.get_id()<t3.get_id()) == (t3.get_id()>t.get_id()));
  47. BOOST_CHECK((t3.get_id()<t.get_id()) == (t.get_id()>t3.get_id()));
  48. BOOST_CHECK((t2.get_id()<t3.get_id()) == (t3.get_id()>t2.get_id()));
  49. BOOST_CHECK((t3.get_id()<t2.get_id()) == (t2.get_id()>t3.get_id()));
  50. BOOST_CHECK((t.get_id()<t2.get_id()) == (t2.get_id()>=t.get_id()));
  51. BOOST_CHECK((t2.get_id()<t.get_id()) == (t.get_id()>=t2.get_id()));
  52. BOOST_CHECK((t.get_id()<t3.get_id()) == (t3.get_id()>=t.get_id()));
  53. BOOST_CHECK((t3.get_id()<t.get_id()) == (t.get_id()>=t3.get_id()));
  54. BOOST_CHECK((t2.get_id()<t3.get_id()) == (t3.get_id()>=t2.get_id()));
  55. BOOST_CHECK((t3.get_id()<t2.get_id()) == (t2.get_id()>=t3.get_id()));
  56. BOOST_CHECK((t.get_id()<=t2.get_id()) == (t2.get_id()>t.get_id()));
  57. BOOST_CHECK((t2.get_id()<=t.get_id()) == (t.get_id()>t2.get_id()));
  58. BOOST_CHECK((t.get_id()<=t3.get_id()) == (t3.get_id()>t.get_id()));
  59. BOOST_CHECK((t3.get_id()<=t.get_id()) == (t.get_id()>t3.get_id()));
  60. BOOST_CHECK((t2.get_id()<=t3.get_id()) == (t3.get_id()>t2.get_id()));
  61. BOOST_CHECK((t3.get_id()<=t2.get_id()) == (t2.get_id()>t3.get_id()));
  62. if((t.get_id()<t2.get_id()) && (t2.get_id()<t3.get_id()))
  63. {
  64. BOOST_CHECK(t.get_id()<t3.get_id());
  65. }
  66. else if((t.get_id()<t3.get_id()) && (t3.get_id()<t2.get_id()))
  67. {
  68. BOOST_CHECK(t.get_id()<t2.get_id());
  69. }
  70. else if((t2.get_id()<t3.get_id()) && (t3.get_id()<t.get_id()))
  71. {
  72. BOOST_CHECK(t2.get_id()<t.get_id());
  73. }
  74. else if((t2.get_id()<t.get_id()) && (t.get_id()<t3.get_id()))
  75. {
  76. BOOST_CHECK(t2.get_id()<t3.get_id());
  77. }
  78. else if((t3.get_id()<t.get_id()) && (t.get_id()<t2.get_id()))
  79. {
  80. BOOST_CHECK(t3.get_id()<t2.get_id());
  81. }
  82. else if((t3.get_id()<t2.get_id()) && (t2.get_id()<t.get_id()))
  83. {
  84. BOOST_CHECK(t3.get_id()<t.get_id());
  85. }
  86. else
  87. {
  88. BOOST_CHECK(false);
  89. }
  90. boost::thread::id default_id;
  91. BOOST_CHECK(default_id < t.get_id());
  92. BOOST_CHECK(default_id < t2.get_id());
  93. BOOST_CHECK(default_id < t3.get_id());
  94. BOOST_CHECK(default_id <= t.get_id());
  95. BOOST_CHECK(default_id <= t2.get_id());
  96. BOOST_CHECK(default_id <= t3.get_id());
  97. BOOST_CHECK(!(default_id > t.get_id()));
  98. BOOST_CHECK(!(default_id > t2.get_id()));
  99. BOOST_CHECK(!(default_id > t3.get_id()));
  100. BOOST_CHECK(!(default_id >= t.get_id()));
  101. BOOST_CHECK(!(default_id >= t2.get_id()));
  102. BOOST_CHECK(!(default_id >= t3.get_id()));
  103. t.join();
  104. t2.join();
  105. t3.join();
  106. }
  107. void get_thread_id(boost::thread::id* id)
  108. {
  109. *id=boost::this_thread::get_id();
  110. }
  111. BOOST_AUTO_TEST_CASE(test_thread_id_of_running_thread_returned_by_this_thread_get_id)
  112. {
  113. boost::thread::id id;
  114. boost::thread t(boost::bind(get_thread_id,&id));
  115. boost::thread::id t_id=t.get_id();
  116. t.join();
  117. BOOST_CHECK(id==t_id);
  118. }