test_barrier_post.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright Oliver Kowalke 2013.
  2. // Distributed under the Boost Software License, Version 1.0.
  3. // (See accompanying file LICENSE_1_0.txt or copy at
  4. // http://www.boost.org/LICENSE_1_0.txt)
  5. //
  6. // This test is based on the tests of Boost.Thread
  7. #include <sstream>
  8. #include <string>
  9. #include <boost/test/unit_test.hpp>
  10. #include <boost/fiber/all.hpp>
  11. int value1 = 0;
  12. int value2 = 0;
  13. void fn1( boost::fibers::barrier & b) {
  14. ++value1;
  15. boost::this_fiber::yield();
  16. b.wait();
  17. ++value1;
  18. boost::this_fiber::yield();
  19. ++value1;
  20. boost::this_fiber::yield();
  21. ++value1;
  22. boost::this_fiber::yield();
  23. ++value1;
  24. }
  25. void fn2( boost::fibers::barrier & b) {
  26. ++value2;
  27. boost::this_fiber::yield();
  28. ++value2;
  29. boost::this_fiber::yield();
  30. ++value2;
  31. boost::this_fiber::yield();
  32. b.wait();
  33. ++value2;
  34. boost::this_fiber::yield();
  35. ++value2;
  36. }
  37. void test_barrier() {
  38. value1 = 0;
  39. value2 = 0;
  40. boost::fibers::barrier b( 2);
  41. boost::fibers::fiber f1( boost::fibers::launch::post, fn1, std::ref( b) );
  42. boost::fibers::fiber f2( boost::fibers::launch::post, fn2, std::ref( b) );
  43. f1.join();
  44. f2.join();
  45. BOOST_CHECK_EQUAL( 5, value1);
  46. BOOST_CHECK_EQUAL( 5, value2);
  47. }
  48. boost::unit_test::test_suite * init_unit_test_suite( int, char* []) {
  49. boost::unit_test::test_suite * test =
  50. BOOST_TEST_SUITE("Boost.Fiber: barrier test suite");
  51. test->add( BOOST_TEST_CASE( & test_barrier) );
  52. return test;
  53. }