Cleanup producer_consumer_queue_unittest

Uses EXPECT_NEAR for comparison with an acceptable error bound. Also
increases error bound to 50ms.

Change-Id: I8fc61b3b915a50f8fe33b9ea72e123aefee25a80
This commit is contained in:
KongQun Yang 2015-10-01 09:47:56 -07:00
parent 2080973f17
commit 3677042a7c
1 changed files with 17 additions and 18 deletions

View File

@ -17,12 +17,11 @@ namespace {
const size_t kCapacity = 10u; const size_t kCapacity = 10u;
const int64_t kTimeout = 100; // 0.1s. const int64_t kTimeout = 100; // 0.1s.
// Check that the |delta| is approximately |time_in_milliseconds|. // Verify that the |delta| is approximately |expected_time_in_milliseconds|.
bool CheckTimeApproxEqual(int64_t time_in_milliseconds, void ExpectTimeApproxEqual(int64_t expected_time_in_milliseconds,
const base::TimeDelta& delta) { const base::TimeDelta& delta) {
const int64_t kOverhead = 10; // 0.01s. const int64_t kOverhead = 50; // 0.05s.
return delta.InMilliseconds() >= time_in_milliseconds && EXPECT_NEAR(delta.InMilliseconds(), expected_time_in_milliseconds, kOverhead);
delta.InMilliseconds() <= time_in_milliseconds + kOverhead;
} }
} // namespace } // namespace
@ -96,13 +95,13 @@ TEST(ProducerConsumerQueueTest, PushWithTimeout) {
timer.reset(new base::ElapsedTimer()); timer.reset(new base::ElapsedTimer());
ASSERT_OK(queue.Push(i, kTimeout)); ASSERT_OK(queue.Push(i, kTimeout));
// Expect Push to return instantly without waiting. // Expect Push to return instantly without waiting.
EXPECT_TRUE(CheckTimeApproxEqual(0, timer->Elapsed())); ExpectTimeApproxEqual(0, timer->Elapsed());
} }
timer.reset(new base::ElapsedTimer()); timer.reset(new base::ElapsedTimer());
ASSERT_EQ(error::TIME_OUT, queue.Push(0, kTimeout).error_code()); ASSERT_EQ(error::TIME_OUT, queue.Push(0, kTimeout).error_code());
// Expect elapsed time exceeds defined timeout. // Expect elapsed time exceeds defined timeout.
EXPECT_TRUE(CheckTimeApproxEqual(kTimeout, timer->Elapsed())); ExpectTimeApproxEqual(kTimeout, timer->Elapsed());
} }
TEST(ProducerConsumerQueueTest, PopWithTimeout) { TEST(ProducerConsumerQueueTest, PopWithTimeout) {
@ -117,14 +116,14 @@ TEST(ProducerConsumerQueueTest, PopWithTimeout) {
timer.reset(new base::ElapsedTimer()); timer.reset(new base::ElapsedTimer());
ASSERT_OK(queue.Pop(&val, kTimeout)); ASSERT_OK(queue.Pop(&val, kTimeout));
// Expect Pop to return instantly without waiting. // Expect Pop to return instantly without waiting.
EXPECT_TRUE(CheckTimeApproxEqual(0, timer->Elapsed())); ExpectTimeApproxEqual(0, timer->Elapsed());
EXPECT_EQ(i, val); EXPECT_EQ(i, val);
} }
timer.reset(new base::ElapsedTimer()); timer.reset(new base::ElapsedTimer());
ASSERT_EQ(error::TIME_OUT, queue.Pop(&val, kTimeout).error_code()); ASSERT_EQ(error::TIME_OUT, queue.Pop(&val, kTimeout).error_code());
// Expect elapsed time exceeds defined timeout. // Expect elapsed time exceeds defined timeout.
EXPECT_TRUE(CheckTimeApproxEqual(kTimeout, timer->Elapsed())); ExpectTimeApproxEqual(kTimeout, timer->Elapsed());
} }
TEST(ProducerConsumerQueueTest, PeekWithTimeout) { TEST(ProducerConsumerQueueTest, PeekWithTimeout) {
@ -139,13 +138,13 @@ TEST(ProducerConsumerQueueTest, PeekWithTimeout) {
ASSERT_EQ(error::TIME_OUT, ASSERT_EQ(error::TIME_OUT,
queue.Peek(kCapacity, &val, kTimeout).error_code()); queue.Peek(kCapacity, &val, kTimeout).error_code());
// Expect elapsed time exceeds defined timeout. // Expect elapsed time exceeds defined timeout.
EXPECT_TRUE(CheckTimeApproxEqual(kTimeout, timer->Elapsed())); ExpectTimeApproxEqual(kTimeout, timer->Elapsed());
for (size_t i = kCapacity / 2; i < kCapacity; ++i) { for (size_t i = kCapacity / 2; i < kCapacity; ++i) {
timer.reset(new base::ElapsedTimer()); timer.reset(new base::ElapsedTimer());
ASSERT_OK(queue.Peek(i, &val, kTimeout)); ASSERT_OK(queue.Peek(i, &val, kTimeout));
// Expect Peek to return instantly without waiting. // Expect Peek to return instantly without waiting.
EXPECT_TRUE(CheckTimeApproxEqual(0, timer->Elapsed())); ExpectTimeApproxEqual(0, timer->Elapsed());
EXPECT_EQ(i, val); EXPECT_EQ(i, val);
} }
} }
@ -163,20 +162,20 @@ TEST(ProducerConsumerQueueTest, CheckStop) {
timer.reset(new base::ElapsedTimer()); timer.reset(new base::ElapsedTimer());
EXPECT_EQ(error::STOPPED, queue.Push(0, kTimeout).error_code()); EXPECT_EQ(error::STOPPED, queue.Push(0, kTimeout).error_code());
// Expect Push to return instantly without waiting. // Expect Push to return instantly without waiting.
EXPECT_TRUE(CheckTimeApproxEqual(0, timer->Elapsed())); ExpectTimeApproxEqual(0, timer->Elapsed());
int val; int val;
EXPECT_EQ(error::STOPPED, queue.Pop(&val, kInfiniteTimeout).error_code()); EXPECT_EQ(error::STOPPED, queue.Pop(&val, kInfiniteTimeout).error_code());
timer.reset(new base::ElapsedTimer()); timer.reset(new base::ElapsedTimer());
EXPECT_EQ(error::STOPPED, queue.Pop(&val, kTimeout).error_code()); EXPECT_EQ(error::STOPPED, queue.Pop(&val, kTimeout).error_code());
// Expect Pop to return instantly without waiting. // Expect Pop to return instantly without waiting.
EXPECT_TRUE(CheckTimeApproxEqual(0, timer->Elapsed())); ExpectTimeApproxEqual(0, timer->Elapsed());
EXPECT_EQ(error::STOPPED, queue.Peek(0, &val, kInfiniteTimeout).error_code()); EXPECT_EQ(error::STOPPED, queue.Peek(0, &val, kInfiniteTimeout).error_code());
timer.reset(new base::ElapsedTimer()); timer.reset(new base::ElapsedTimer());
EXPECT_EQ(error::STOPPED, queue.Peek(0, &val, kTimeout).error_code()); EXPECT_EQ(error::STOPPED, queue.Peek(0, &val, kTimeout).error_code());
// Expect Pop to return instantly without waiting. // Expect Pop to return instantly without waiting.
EXPECT_TRUE(CheckTimeApproxEqual(0, timer->Elapsed())); ExpectTimeApproxEqual(0, timer->Elapsed());
} }
class MultiThreadProducerConsumerQueueTest : public ::testing::Test { class MultiThreadProducerConsumerQueueTest : public ::testing::Test {
@ -282,11 +281,11 @@ TEST_F(MultiThreadProducerConsumerQueueTest, PeekOnLargePosition) {
size_t val; size_t val;
ASSERT_EQ(error::TIME_OUT, ASSERT_EQ(error::TIME_OUT,
queue_.Peek(kVeryLargePosition, &val, 0).error_code()); queue_.Peek(kVeryLargePosition, &val, 0).error_code());
EXPECT_TRUE(CheckTimeApproxEqual(0, timer.Elapsed())); ExpectTimeApproxEqual(0, timer.Elapsed());
ASSERT_EQ(error::TIME_OUT, ASSERT_EQ(error::TIME_OUT,
queue_.Peek(kVeryLargePosition, &val, kTimeout).error_code()); queue_.Peek(kVeryLargePosition, &val, kTimeout).error_code());
EXPECT_TRUE(CheckTimeApproxEqual(kTimeout, timer.Elapsed())); ExpectTimeApproxEqual(kTimeout, timer.Elapsed());
queue_.Stop(); queue_.Stop();
} }
@ -355,7 +354,7 @@ TEST_P(MultiThreadProducerConsumerQueueStopTest, StopTests) {
queue_.Stop(); queue_.Stop();
event_.Wait(); event_.Wait();
// Expect Stop to stop the operations immediately. // Expect Stop to stop the operations immediately.
EXPECT_TRUE(CheckTimeApproxEqual(0, timer.Elapsed())); ExpectTimeApproxEqual(0, timer.Elapsed());
thread.Join(); thread.Join();
} }