CountBarrierTest.cc 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include <boost/detail/atomic_count.hpp>
  2. #include <boost/date_time.hpp>
  3. #include <boost/shared_ptr.hpp>
  4. #include <boost/make_shared.hpp>
  5. #include <boost/ref.hpp>
  6. #include <boost/foreach.hpp>
  7. #include <boost/bind.hpp>
  8. #include <gtest/gtest.h>
  9. #include "Base/Marcos.h"
  10. #include "Thread/CountBarrier.h"
  11. namespace Egametang {
  12. class CountBarrierTest: public testing::Test
  13. {
  14. };
  15. TEST_F(CountBarrierTest, Count)
  16. {
  17. CountBarrier barrier(10);
  18. ASSERT_EQ(10, barrier.Count());
  19. }
  20. static void Signal(CountBarrier& barrier, boost::detail::atomic_count& count)
  21. {
  22. boost::this_thread::sleep(boost::posix_time::milliseconds(1000));
  23. ++count;
  24. barrier.Signal();
  25. }
  26. TEST_F(CountBarrierTest, WaitAndSignal)
  27. {
  28. boost::detail::atomic_count count(0);
  29. CountBarrier barrier(10);
  30. std::vector< boost::shared_ptr<boost::thread> > v(10);
  31. for (int i = 0; i < 10; ++i)
  32. {
  33. v[i].reset(new boost::thread(boost::bind(&Signal, boost::ref(barrier), boost::ref(count))));
  34. }
  35. barrier.Wait();
  36. ASSERT_EQ(10, count);
  37. }
  38. } // namespace Egametang
  39. int main(int argc, char* argv[])
  40. {
  41. testing::InitGoogleTest(&argc, argv);
  42. return RUN_ALL_TESTS();
  43. }