Make test_rate more reliable on Windows and improve error output when it fails (#1146)

Signed-off-by: Ivan Santiago Paunovic <ivanpauno@ekumenlabs.com>
This commit is contained in:
Ivan Santiago Paunovic 2020-06-01 15:02:38 -03:00 committed by GitHub
parent fdf232b7b8
commit ed68b4bde7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -22,9 +22,9 @@
Basic tests for the Rate and WallRate classes. Basic tests for the Rate and WallRate classes.
*/ */
TEST(TestRate, rate_basics) { TEST(TestRate, rate_basics) {
auto period = std::chrono::milliseconds(100); auto period = std::chrono::milliseconds(1000);
auto offset = std::chrono::milliseconds(50); auto offset = std::chrono::milliseconds(500);
auto epsilon = std::chrono::milliseconds(1); auto epsilon = std::chrono::milliseconds(100);
double overrun_ratio = 1.5; double overrun_ratio = 1.5;
auto start = std::chrono::system_clock::now(); auto start = std::chrono::system_clock::now();
@ -33,15 +33,15 @@ TEST(TestRate, rate_basics) {
ASSERT_TRUE(r.sleep()); ASSERT_TRUE(r.sleep());
auto one = std::chrono::system_clock::now(); auto one = std::chrono::system_clock::now();
auto delta = one - start; auto delta = one - start;
ASSERT_TRUE(period < delta); EXPECT_LT(period, delta + epsilon);
ASSERT_TRUE(period * overrun_ratio > delta); EXPECT_GT(period * overrun_ratio, delta);
rclcpp::sleep_for(offset); rclcpp::sleep_for(offset);
ASSERT_TRUE(r.sleep()); ASSERT_TRUE(r.sleep());
auto two = std::chrono::system_clock::now(); auto two = std::chrono::system_clock::now();
delta = two - start; delta = two - start;
ASSERT_TRUE(2 * period < delta); EXPECT_LT(2 * period, delta);
ASSERT_TRUE(2 * period * overrun_ratio > delta); EXPECT_GT(2 * period * overrun_ratio, delta);
rclcpp::sleep_for(offset); rclcpp::sleep_for(offset);
auto two_offset = std::chrono::system_clock::now(); auto two_offset = std::chrono::system_clock::now();
@ -49,8 +49,8 @@ TEST(TestRate, rate_basics) {
ASSERT_TRUE(r.sleep()); ASSERT_TRUE(r.sleep());
auto three = std::chrono::system_clock::now(); auto three = std::chrono::system_clock::now();
delta = three - two_offset; delta = three - two_offset;
ASSERT_TRUE(period < delta); EXPECT_LT(period, delta + epsilon);
ASSERT_TRUE(period * overrun_ratio > delta); EXPECT_GT(period * overrun_ratio, delta);
rclcpp::sleep_for(offset + period); rclcpp::sleep_for(offset + period);
auto four = std::chrono::system_clock::now(); auto four = std::chrono::system_clock::now();
@ -72,15 +72,15 @@ TEST(TestRate, wall_rate_basics) {
ASSERT_TRUE(r.sleep()); ASSERT_TRUE(r.sleep());
auto one = std::chrono::steady_clock::now(); auto one = std::chrono::steady_clock::now();
auto delta = one - start; auto delta = one - start;
ASSERT_TRUE(period < delta); EXPECT_LT(period, delta);
ASSERT_TRUE(period * overrun_ratio > delta); EXPECT_GT(period * overrun_ratio, delta);
rclcpp::sleep_for(offset); rclcpp::sleep_for(offset);
ASSERT_TRUE(r.sleep()); ASSERT_TRUE(r.sleep());
auto two = std::chrono::steady_clock::now(); auto two = std::chrono::steady_clock::now();
delta = two - start; delta = two - start;
ASSERT_TRUE(2 * period < delta + epsilon); EXPECT_LT(2 * period, delta + epsilon);
ASSERT_TRUE(2 * period * overrun_ratio > delta); EXPECT_GT(2 * period * overrun_ratio, delta);
rclcpp::sleep_for(offset); rclcpp::sleep_for(offset);
auto two_offset = std::chrono::steady_clock::now(); auto two_offset = std::chrono::steady_clock::now();
@ -88,13 +88,13 @@ TEST(TestRate, wall_rate_basics) {
ASSERT_TRUE(r.sleep()); ASSERT_TRUE(r.sleep());
auto three = std::chrono::steady_clock::now(); auto three = std::chrono::steady_clock::now();
delta = three - two_offset; delta = three - two_offset;
ASSERT_TRUE(period < delta); EXPECT_LT(period, delta);
ASSERT_TRUE(period * overrun_ratio > delta); EXPECT_GT(period * overrun_ratio, delta);
rclcpp::sleep_for(offset + period); rclcpp::sleep_for(offset + period);
auto four = std::chrono::steady_clock::now(); auto four = std::chrono::steady_clock::now();
ASSERT_FALSE(r.sleep()); ASSERT_FALSE(r.sleep());
auto five = std::chrono::steady_clock::now(); auto five = std::chrono::steady_clock::now();
delta = five - four; delta = five - four;
ASSERT_TRUE(epsilon > delta); EXPECT_GT(epsilon, delta);
} }