#include <boost/thread/mutex.hpp>
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#include <cassert>
+#include <iostream>
#if defined BOOST_THREAD_USES_CHRONO
void f()
{
- boost::unique_lock<boost::mutex> lk(mut);
- BOOST_TEST(test2 == 0);
- test1 = 1;
- cv.notify_one();
- Clock::time_point t0 = Clock::now();
- Clock::time_point t = t0 + Clock::duration(250);
- bool r = cv.wait_until(lk, t, Pred(test2));
- Clock::time_point t1 = Clock::now();
- if (runs == 0)
- {
- BOOST_TEST(t1 - t0 < Clock::duration(250));
- BOOST_TEST(test2 != 0);
- BOOST_TEST(r);
- }
- else
- {
- BOOST_TEST(t1 - t0 - Clock::duration(250) < Clock::duration(250+2));
- BOOST_TEST(test2 == 0);
- BOOST_TEST(!r);
+ try {
+ boost::unique_lock<boost::mutex> lk(mut);
+ assert(test2 == 0);
+ test1 = 1;
+ cv.notify_one();
+ Clock::time_point t0 = Clock::now();
+ Clock::time_point t = t0 + Clock::duration(250);
+ bool r = cv.wait_until(lk, t, Pred(test2));
+ (void)r;
+ Clock::time_point t1 = Clock::now();
+ if (runs == 0)
+ {
+ assert(t1 - t0 < Clock::duration(250));
+ assert(test2 != 0);
+ assert(r);
+ }
+ else
+ {
+ assert(t1 - t0 - Clock::duration(250) < Clock::duration(250+2));
+ assert(test2 == 0);
+ assert(!r);
+ }
+ ++runs;
+ } catch(...) {
+ std::cout << "ERROR exception" << __LINE__ << std::endl;
+ assert(false);
}
- ++runs;
}
int main()
{
+ try
{
boost::unique_lock<boost::mutex> lk(mut);
boost::thread t(f);
lk.unlock();
cv.notify_one();
t.join();
+ } catch(...) {
+ BOOST_TEST(false);
+ std::cout << "ERROR exception" << __LINE__ << std::endl;
}
test1 = 0;
test2 = 0;
+ try
{
boost::unique_lock<boost::mutex> lk(mut);
boost::thread t(f);
BOOST_TEST(test1 != 0);
lk.unlock();
t.join();
+ } catch(...) {
+ BOOST_TEST(false);
+ std::cout << "ERROR exception" << __LINE__ << std::endl;
}
return boost::report_errors();