From fac550cc82d295c7a28b7bb6931349c488d800f8 Mon Sep 17 00:00:00 2001 From: Tully Foote Date: Thu, 17 Dec 2015 19:39:04 -0800 Subject: [PATCH] adding coverage and an epsilon --- rclcpp/test/test_rate.cpp | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/rclcpp/test/test_rate.cpp b/rclcpp/test/test_rate.cpp index f17abf6..af68f2a 100644 --- a/rclcpp/test/test_rate.cpp +++ b/rclcpp/test/test_rate.cpp @@ -24,61 +24,77 @@ TEST(TestRate, rate_basics) { auto period = std::chrono::milliseconds(100); auto offset = std::chrono::milliseconds(50); + auto epsilon = std::chrono::milliseconds(1); double overrun_ratio = 1.5; auto start = std::chrono::system_clock::now(); rclcpp::rate::Rate r(period); ASSERT_FALSE(r.is_steady()); - r.sleep(); + ASSERT_TRUE(r.sleep()); auto one = std::chrono::system_clock::now(); auto delta = one - start; ASSERT_TRUE(period < delta); ASSERT_TRUE(period * overrun_ratio > delta); rclcpp::utilities::sleep_for(offset); - r.sleep(); + ASSERT_TRUE(r.sleep()); auto two = std::chrono::system_clock::now(); delta = two - one; - ASSERT_TRUE(period < delta); + ASSERT_TRUE(period < delta + epsilon); ASSERT_TRUE(period * overrun_ratio > delta); rclcpp::utilities::sleep_for(offset); auto two_offset = std::chrono::system_clock::now(); r.reset(); - r.sleep(); + ASSERT_TRUE(r.sleep()); auto three = std::chrono::system_clock::now(); delta = three - two_offset; ASSERT_TRUE(period < delta); ASSERT_TRUE(period * overrun_ratio > delta); + + rclcpp::utilities::sleep_for(offset + period); + auto four = std::chrono::system_clock::now(); + ASSERT_FALSE(r.sleep()); + auto five = std::chrono::system_clock::now(); + delta = five - four; + ASSERT_TRUE(epsilon > delta); } -TEST(TestRate, wallrate_basics) { +TEST(TestRate, wall_rate_basics) { auto period = std::chrono::milliseconds(100); auto offset = std::chrono::milliseconds(50); + auto epsilon = std::chrono::milliseconds(1); double overrun_ratio = 1.5; auto start = std::chrono::system_clock::now(); rclcpp::rate::WallRate r(period); ASSERT_TRUE(r.is_steady()); - r.sleep(); + ASSERT_TRUE(r.sleep()); auto one = std::chrono::system_clock::now(); auto delta = one - start; ASSERT_TRUE(period < delta); ASSERT_TRUE(period * overrun_ratio > delta); rclcpp::utilities::sleep_for(offset); - r.sleep(); + ASSERT_TRUE(r.sleep()); auto two = std::chrono::system_clock::now(); delta = two - one; - ASSERT_TRUE(period < delta); + ASSERT_TRUE(period < delta + epsilon); ASSERT_TRUE(period * overrun_ratio > delta); rclcpp::utilities::sleep_for(offset); auto two_offset = std::chrono::system_clock::now(); r.reset(); - r.sleep(); + ASSERT_TRUE(r.sleep()); auto three = std::chrono::system_clock::now(); delta = three - two_offset; ASSERT_TRUE(period < delta); ASSERT_TRUE(period * overrun_ratio > delta); + + rclcpp::utilities::sleep_for(offset + period); + auto four = std::chrono::system_clock::now(); + ASSERT_FALSE(r.sleep()); + auto five = std::chrono::system_clock::now(); + delta = five - four; + ASSERT_TRUE(epsilon > delta); }