#include "queue.h" #include "list.h" #include "vector.h" #include <library/cpp/testing/unittest/registar.h> #include <utility> Y_UNIT_TEST_SUITE(TYQueueTest) { Y_UNIT_TEST(ConstructorsAndAssignments) { { using container = TQueue<int>; container c1; UNIT_ASSERT(!c1); c1.push(100); c1.push(200); UNIT_ASSERT(c1); container c2(c1); UNIT_ASSERT_VALUES_EQUAL(2, c1.size()); UNIT_ASSERT_VALUES_EQUAL(2, c2.size()); container c3(std::move(c1)); UNIT_ASSERT_VALUES_EQUAL(0, c1.size()); UNIT_ASSERT_VALUES_EQUAL(2, c3.size()); c2.push(300); c3 = c2; UNIT_ASSERT_VALUES_EQUAL(3, c2.size()); UNIT_ASSERT_VALUES_EQUAL(3, c3.size()); c2.push(400); c3 = std::move(c2); UNIT_ASSERT_VALUES_EQUAL(0, c2.size()); UNIT_ASSERT_VALUES_EQUAL(4, c3.size()); } { using container = TPriorityQueue<int>; container c1; UNIT_ASSERT(!c1); c1.push(100); c1.push(200); UNIT_ASSERT(c1); container c2(c1); UNIT_ASSERT_VALUES_EQUAL(2, c1.size()); UNIT_ASSERT_VALUES_EQUAL(2, c2.size()); container c3(std::move(c1)); UNIT_ASSERT_VALUES_EQUAL(0, c1.size()); UNIT_ASSERT_VALUES_EQUAL(2, c3.size()); c2.push(300); c3 = c2; UNIT_ASSERT_VALUES_EQUAL(3, c2.size()); UNIT_ASSERT_VALUES_EQUAL(3, c3.size()); c2.push(400); c3 = std::move(c2); UNIT_ASSERT_VALUES_EQUAL(0, c2.size()); UNIT_ASSERT_VALUES_EQUAL(4, c3.size()); } } Y_UNIT_TEST(pqueue1) { TPriorityQueue<int, TDeque<int>, TLess<int>> q; q.push(42); q.push(101); q.push(69); UNIT_ASSERT(q.top() == 101); q.pop(); UNIT_ASSERT(q.top() == 69); q.pop(); UNIT_ASSERT(q.top() == 42); q.pop(); UNIT_ASSERT(q.empty()); } Y_UNIT_TEST(pqueue2) { using TPQueue = TPriorityQueue<int, TDeque<int>, TLess<int>>; TPQueue q; { TPQueue qq; qq.push(42); qq.push(101); qq.push(69); qq.swap(q); } UNIT_ASSERT(q.top() == 101); q.pop(); UNIT_ASSERT(q.top() == 69); q.pop(); UNIT_ASSERT(q.top() == 42); q.pop(); UNIT_ASSERT(q.empty()); } Y_UNIT_TEST(pqueue3) { TPriorityQueue<int, TDeque<int>, TLess<int>> q; q.push(42); q.push(101); q.push(69); q.clear(); UNIT_ASSERT(q.empty()); } Y_UNIT_TEST(pqueue4) { TDeque<int> c; c.push_back(42); c.push_back(101); c.push_back(69); TPriorityQueue<int, TDeque<int>, TLess<int>> q(TLess<int>(), std::move(c)); UNIT_ASSERT(c.empty()); UNIT_ASSERT_EQUAL(q.size(), 3); UNIT_ASSERT(q.top() == 101); q.pop(); UNIT_ASSERT(q.top() == 69); q.pop(); UNIT_ASSERT(q.top() == 42); q.pop(); UNIT_ASSERT(q.empty()); } Y_UNIT_TEST(queue1) { TQueue<int, TList<int>> q; q.push(42); q.push(101); q.push(69); UNIT_ASSERT(q.front() == 42); q.pop(); UNIT_ASSERT(q.front() == 101); q.pop(); UNIT_ASSERT(q.front() == 69); q.pop(); UNIT_ASSERT(q.empty()); } Y_UNIT_TEST(queue2) { using TQueueType = TQueue<int>; TQueueType q; { TQueueType qq; qq.push(42); qq.push(101); qq.push(69); qq.swap(q); } UNIT_ASSERT(q.front() == 42); q.pop(); UNIT_ASSERT(q.front() == 101); q.pop(); UNIT_ASSERT(q.front() == 69); q.pop(); UNIT_ASSERT(q.empty()); } Y_UNIT_TEST(queue3) { using TQueueType = TQueue<int>; TQueueType q; q.push(42); q.push(101); q.push(69); q.clear(); UNIT_ASSERT(q.empty()); } }