From 630dd272294c228ca7e00dada96a31d14a68550a Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Fri, 20 May 2016 15:22:56 -0700 Subject: [PATCH] common/: fix tests for prioritized_queue and wpq Introduced: 27b6ec40b93c05fbaa228783e11e2fac8f1a1ee1 Signed-off-by: Samuel Just --- src/test/common/test_prioritized_queue.cc | 18 +++++++---- .../common/test_weighted_priority_queue.cc | 30 ++++++++++++------- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/test/common/test_prioritized_queue.cc b/src/test/common/test_prioritized_queue.cc index 84ccf9ea613cb..7b29413ac57ba 100644 --- a/src/test/common/test_prioritized_queue.cc +++ b/src/test/common/test_prioritized_queue.cc @@ -164,10 +164,17 @@ TEST_F(PrioritizedQueueTest, fairness_by_class) { template struct Greater { const T rhs; - explicit Greater(const T& v) : rhs(v) + std::list *removed; + explicit Greater(const T& v, std::list *removed) : rhs(v), removed(removed) {} - bool operator()(const T& lhs) const { - return lhs > rhs; + bool operator()(const T& lhs) { + if (lhs > rhs) { + if (removed) + removed->push_back(lhs); + return true; + } else { + return false; + } } }; @@ -176,7 +183,7 @@ TEST_F(PrioritizedQueueTest, remove_by_filter) { const unsigned max_tokens_per_subqueue = 50; PQ pq(max_tokens_per_subqueue, min_cost); - const Greater pred(item_size/2); + Greater pred(item_size/2, nullptr); unsigned num_to_remove = 0; for (unsigned i = 0; i < item_size; i++) { const Item& item = items[i]; @@ -186,7 +193,8 @@ TEST_F(PrioritizedQueueTest, remove_by_filter) { } } std::list removed; - pq.remove_by_filter(pred, &removed); + Greater pred2(item_size/2, &removed); + pq.remove_by_filter(pred2); // see if the removed items are expected ones. for (std::list::iterator it = removed.begin(); diff --git a/src/test/common/test_weighted_priority_queue.cc b/src/test/common/test_weighted_priority_queue.cc index f94af71e97edd..558b80c6e4fa2 100644 --- a/src/test/common/test_weighted_priority_queue.cc +++ b/src/test/common/test_weighted_priority_queue.cc @@ -200,9 +200,16 @@ TEST_F(WeightedPriorityQueueTest, wpq_test_random) { template struct Greater { const T rhs; - Greater(const T &v) : rhs(v) {} - bool operator()(const T &lhs) const { - return std::get<2>(lhs) > std::get<2>(rhs); + std::list *removed; + Greater(const T &v, std::list *removed) : rhs(v), removed(removed) {} + bool operator()(const T &lhs) { + if (std::get<2>(lhs) > std::get<2>(rhs)) { + if (removed) + removed->push_back(lhs); + return true; + } else { + return false; + } } }; @@ -212,9 +219,9 @@ TEST_F(WeightedPriorityQueueTest, wpq_test_remove_by_filter_null) { unsigned num_items = 100; fill_queue(wq, strictq, normq, num_items); // Pick a value that we didn't enqueue - const Greater pred(std::make_tuple(0, 0, 1 << 17)); Removed wq_removed; - wq.remove_by_filter(pred, &wq_removed); + Greater pred(std::make_tuple(0, 0, 1 << 17), &wq_removed); + wq.remove_by_filter(pred); EXPECT_EQ(0u, wq_removed.size()); } @@ -223,7 +230,7 @@ TEST_F(WeightedPriorityQueueTest, wpq_test_remove_by_filter) { LQ strictq, normq; unsigned num_items = 1000; fill_queue(wq, strictq, normq, num_items); - const Greater pred(std::make_tuple(0, 0, (1 << 16) - (1 << 16)/10)); + Greater pred2(std::make_tuple(0, 0, (1 << 16) - (1 << 16)/10), nullptr); Removed r_strictq, r_normq; unsigned num_to_remove = 0; // Figure out from what has been queued what we @@ -234,7 +241,7 @@ TEST_F(WeightedPriorityQueueTest, wpq_test_remove_by_filter) { ki != pi->second.end(); ++ki) { for (ItemList::iterator li = ki->second.begin(); li != ki->second.end(); ++li) { - if (pred(li->second)) { + if (pred2(li->second)) { ++num_to_remove; } } @@ -246,18 +253,21 @@ TEST_F(WeightedPriorityQueueTest, wpq_test_remove_by_filter) { ki != pi->second.end(); ++ki) { for (ItemList::iterator li = ki->second.begin(); li != ki->second.end(); ++li) { - if (pred(li->second)) { + if (pred2(li->second)) { ++num_to_remove; } } } } Removed wq_removed; - wq.remove_by_filter(pred, &wq_removed); + Greater pred( + std::make_tuple(0, 0, (1 << 16) - (1 << 16)/10), + &wq_removed); + wq.remove_by_filter(pred); // Check that what was removed was correct for (Removed::iterator it = wq_removed.begin(); it != wq_removed.end(); ++it) { - EXPECT_TRUE(pred(*it)); + EXPECT_TRUE(pred2(*it)); } EXPECT_EQ(num_to_remove, wq_removed.size()); EXPECT_EQ(num_items - num_to_remove, wq.length()); -- 2.39.5