| 58 | |
| 59 | typedef priority_queue<queue_data *, 3> my_priority_queue; |
| 60 | TEST(core, priority_queue) |
| 61 | { |
| 62 | my_priority_queue q("my_priority_queue_name"); |
| 63 | ASSERT_EQ("my_priority_queue_name", q.get_name()); |
| 64 | ASSERT_EQ(0, q.count()); |
| 65 | ASSERT_EQ(nullptr, q.dequeue()); |
| 66 | |
| 67 | std::vector<queue_data> datas; |
| 68 | datas.push_back(queue_data(0, 1)); |
| 69 | datas.push_back(queue_data(2, 1)); |
| 70 | datas.push_back(queue_data(1, 1)); |
| 71 | datas.push_back(queue_data(1, 2)); |
| 72 | datas.push_back(queue_data(2, 2)); |
| 73 | datas.push_back(queue_data(0, 2)); |
| 74 | datas.push_back(queue_data(1, 3)); |
| 75 | datas.push_back(queue_data(0, 3)); |
| 76 | datas.push_back(queue_data(2, 3)); |
| 77 | |
| 78 | for (int i = 0; i < datas.size(); ++i) { |
| 79 | ASSERT_EQ(i, q.count()); |
| 80 | queue_data *d = &datas[i]; |
| 81 | ASSERT_EQ(i + 1, q.enqueue(d, d->priority)); |
| 82 | ASSERT_EQ(i + 1, q.count()); |
| 83 | } |
| 84 | |
| 85 | std::vector<queue_data> sort_datas(datas); |
| 86 | std::sort(sort_datas.begin(), sort_datas.end(), [](const queue_data &l, const queue_data &r) { |
| 87 | return l.priority > r.priority || |
| 88 | (l.priority == r.priority && l.queue_index < r.queue_index); |
| 89 | }); |
| 90 | |
| 91 | int count = sort_datas.size(); |
| 92 | for (int i = 0; i < count; ++i) { |
| 93 | ASSERT_EQ(count, q.count()); |
| 94 | queue_data *d = nullptr; |
| 95 | if (i % 2 == 0) { |
| 96 | d = q.dequeue(); |
| 97 | } else { |
| 98 | long ct; |
| 99 | d = q.dequeue(ct); |
| 100 | ASSERT_EQ(count - 1, ct); |
| 101 | } |
| 102 | ASSERT_EQ(sort_datas[i].priority, d->priority); |
| 103 | ASSERT_EQ(sort_datas[i].queue_index, d->queue_index); |
| 104 | ASSERT_EQ(count - 1, q.count()); |
| 105 | count--; |
| 106 | } |
| 107 | } |
| 108 | |
| 109 | typedef blocking_priority_queue<queue_data *, 3> my_blocking_priority_queue; |
| 110 | TEST(core, blocking_priority_queue) |
nothing calls this directly
no test coverage detected