Skip to content

Commit 740de60

Browse files
committed
Avoid relying on timeouts in try_lock_until tests for lock types.
Directly compare the absolute timeouts that are passed to try_lock_until calls with the expected values. This makes the tests more reliable.
1 parent a9ebf55 commit 740de60

3 files changed

Lines changed: 42 additions & 22 deletions

File tree

test/sync/mutual_exclusion/locks/shared_lock/locking/try_lock_until_pass.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@
2222
#include <boost/thread/lock_types.hpp>
2323
#include <boost/thread/shared_mutex.hpp>
2424
#include <boost/core/lightweight_test.hpp>
25+
#include <boost/chrono/time_point.hpp>
26+
#include <boost/chrono/system_clocks.hpp>
27+
28+
typedef boost::chrono::steady_clock clock_type;
29+
clock_type::time_point g_abs_timeout;
2530

2631
bool try_lock_until_called = false;
2732

@@ -30,8 +35,7 @@ struct shared_mutex
3035
template <class Clock, class Duration>
3136
bool try_lock_shared_until(const boost::chrono::time_point<Clock, Duration>& abs_time)
3237
{
33-
typedef boost::chrono::milliseconds ms;
34-
BOOST_TEST(Clock::now() - abs_time < ms(5));
38+
BOOST_TEST(abs_time == g_abs_timeout);
3539
try_lock_until_called = !try_lock_until_called;
3640
return try_lock_until_called;
3741
}
@@ -44,28 +48,31 @@ shared_mutex g_mutex;
4448

4549
int main()
4650
{
47-
typedef boost::chrono::steady_clock Clock;
4851
boost::shared_lock<shared_mutex> lk(g_mutex, boost::defer_lock);
49-
BOOST_TEST(lk.try_lock_until(Clock::now()) == true);
52+
g_abs_timeout = clock_type::now();
53+
BOOST_TEST(lk.try_lock_until((clock_type::time_point)g_abs_timeout) == true);
5054
BOOST_TEST(try_lock_until_called == true);
5155
BOOST_TEST(lk.owns_lock() == true);
5256
try
5357
{
54-
lk.try_lock_until(Clock::now());
58+
g_abs_timeout = clock_type::now();
59+
lk.try_lock_until((clock_type::time_point)g_abs_timeout);
5560
BOOST_TEST(false);
5661
}
5762
catch (boost::system::system_error& e)
5863
{
5964
BOOST_TEST(e.code().value() == boost::system::errc::resource_deadlock_would_occur);
6065
}
6166
lk.unlock();
62-
BOOST_TEST(lk.try_lock_until(Clock::now()) == false);
67+
g_abs_timeout = clock_type::now();
68+
BOOST_TEST(lk.try_lock_until((clock_type::time_point)g_abs_timeout) == false);
6369
BOOST_TEST(try_lock_until_called == false);
6470
BOOST_TEST(lk.owns_lock() == false);
6571
lk.release();
6672
try
6773
{
68-
lk.try_lock_until(Clock::now());
74+
g_abs_timeout = clock_type::now();
75+
lk.try_lock_until((clock_type::time_point)g_abs_timeout);
6976
BOOST_TEST(false);
7077
}
7178
catch (boost::system::system_error& e)

test/sync/mutual_exclusion/locks/unique_lock/locking/try_lock_until_pass.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@
2525

2626
#if defined BOOST_THREAD_USES_CHRONO
2727

28+
#include <boost/chrono/time_point.hpp>
29+
#include <boost/chrono/system_clocks.hpp>
30+
31+
typedef boost::chrono::steady_clock clock_type;
32+
clock_type::time_point g_abs_timeout;
2833

2934
bool try_lock_until_called = false;
3035

@@ -33,8 +38,7 @@ struct mutex
3338
template <class Clock, class Duration>
3439
bool try_lock_until(const boost::chrono::time_point<Clock, Duration>& abs_time)
3540
{
36-
typedef boost::chrono::milliseconds ms;
37-
BOOST_TEST(Clock::now() - abs_time < ms(5));
41+
BOOST_TEST(abs_time == g_abs_timeout);
3842
try_lock_until_called = !try_lock_until_called;
3943
return try_lock_until_called;
4044
}
@@ -47,28 +51,31 @@ mutex g_mutex;
4751

4852
int main()
4953
{
50-
typedef boost::chrono::steady_clock Clock;
5154
boost::unique_lock<mutex> lk(g_mutex, boost::defer_lock);
52-
BOOST_TEST(lk.try_lock_until(Clock::now()) == true);
55+
g_abs_timeout = clock_type::now();
56+
BOOST_TEST(lk.try_lock_until((clock_type::time_point)g_abs_timeout) == true);
5357
BOOST_TEST(try_lock_until_called == true);
5458
BOOST_TEST(lk.owns_lock() == true);
5559
try
5660
{
57-
lk.try_lock_until(Clock::now());
61+
g_abs_timeout = clock_type::now();
62+
lk.try_lock_until((clock_type::time_point)g_abs_timeout);
5863
BOOST_TEST(false);
5964
}
6065
catch (boost::system::system_error& e)
6166
{
6267
BOOST_TEST(e.code().value() == boost::system::errc::resource_deadlock_would_occur);
6368
}
6469
lk.unlock();
65-
BOOST_TEST(lk.try_lock_until(Clock::now()) == false);
70+
g_abs_timeout = clock_type::now();
71+
BOOST_TEST(lk.try_lock_until((clock_type::time_point)g_abs_timeout) == false);
6672
BOOST_TEST(try_lock_until_called == false);
6773
BOOST_TEST(lk.owns_lock() == false);
6874
lk.release();
6975
try
7076
{
71-
lk.try_lock_until(Clock::now());
77+
g_abs_timeout = clock_type::now();
78+
lk.try_lock_until((clock_type::time_point)g_abs_timeout);
7279
BOOST_TEST(false);
7380
}
7481
catch (boost::system::system_error& e)
@@ -81,4 +88,3 @@ int main()
8188
#else
8289
#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
8390
#endif
84-

test/sync/mutual_exclusion/locks/upgrade_lock/locking/try_lock_until_pass.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@
2222
#include <boost/thread/lock_types.hpp>
2323
#include <boost/thread/shared_mutex.hpp>
2424
#include <boost/core/lightweight_test.hpp>
25+
#include <boost/chrono/time_point.hpp>
26+
#include <boost/chrono/system_clocks.hpp>
27+
28+
typedef boost::chrono::steady_clock clock_type;
29+
clock_type::time_point g_abs_timeout;
2530

2631
bool try_lock_until_called = false;
2732

@@ -30,8 +35,7 @@ struct shared_mutex
3035
template <class Clock, class Duration>
3136
bool try_lock_upgrade_until(const boost::chrono::time_point<Clock, Duration>& abs_time)
3237
{
33-
typedef boost::chrono::milliseconds ms;
34-
BOOST_TEST(Clock::now() - abs_time < ms(5));
38+
BOOST_TEST(abs_time == g_abs_timeout);
3539
try_lock_until_called = !try_lock_until_called;
3640
return try_lock_until_called;
3741
}
@@ -44,28 +48,31 @@ shared_mutex g_mutex;
4448

4549
int main()
4650
{
47-
typedef boost::chrono::steady_clock Clock;
4851
boost::upgrade_lock<shared_mutex> lk(g_mutex, boost::defer_lock);
49-
BOOST_TEST(lk.try_lock_until(Clock::now()) == true);
52+
g_abs_timeout = clock_type::now();
53+
BOOST_TEST(lk.try_lock_until((clock_type::time_point)g_abs_timeout) == true);
5054
BOOST_TEST(try_lock_until_called == true);
5155
BOOST_TEST(lk.owns_lock() == true);
5256
try
5357
{
54-
lk.try_lock_until(Clock::now());
58+
g_abs_timeout = clock_type::now();
59+
lk.try_lock_until((clock_type::time_point)g_abs_timeout);
5560
BOOST_TEST(false);
5661
}
5762
catch (boost::system::system_error& e)
5863
{
5964
BOOST_TEST(e.code().value() == boost::system::errc::resource_deadlock_would_occur);
6065
}
6166
lk.unlock();
62-
BOOST_TEST(lk.try_lock_until(Clock::now()) == false);
67+
g_abs_timeout = clock_type::now();
68+
BOOST_TEST(lk.try_lock_until((clock_type::time_point)g_abs_timeout) == false);
6369
BOOST_TEST(try_lock_until_called == false);
6470
BOOST_TEST(lk.owns_lock() == false);
6571
lk.release();
6672
try
6773
{
68-
lk.try_lock_until(Clock::now());
74+
g_abs_timeout = clock_type::now();
75+
lk.try_lock_until((clock_type::time_point)g_abs_timeout);
6976
BOOST_TEST(false);
7077
}
7178
catch (boost::system::system_error& e)

0 commit comments

Comments
 (0)