| 26 | } |
| 27 | |
| 28 | void test_basic_runqueue() |
| 29 | { |
| 30 | RunQueue<int, 4> q; |
| 31 | // Check empty state. |
| 32 | VERIFY(q.Empty()); |
| 33 | VERIFY_IS_EQUAL(0u, q.Size()); |
| 34 | VERIFY_IS_EQUAL(0, q.PopFront()); |
| 35 | std::vector<int> stolen; |
| 36 | VERIFY_IS_EQUAL(0u, q.PopBackHalf(&stolen)); |
| 37 | VERIFY_IS_EQUAL(0u, stolen.size()); |
| 38 | // Push one front, pop one front. |
| 39 | VERIFY_IS_EQUAL(0, q.PushFront(1)); |
| 40 | VERIFY_IS_EQUAL(1u, q.Size()); |
| 41 | VERIFY_IS_EQUAL(1, q.PopFront()); |
| 42 | VERIFY_IS_EQUAL(0u, q.Size()); |
| 43 | // Push front to overflow. |
| 44 | VERIFY_IS_EQUAL(0, q.PushFront(2)); |
| 45 | VERIFY_IS_EQUAL(1u, q.Size()); |
| 46 | VERIFY_IS_EQUAL(0, q.PushFront(3)); |
| 47 | VERIFY_IS_EQUAL(2u, q.Size()); |
| 48 | VERIFY_IS_EQUAL(0, q.PushFront(4)); |
| 49 | VERIFY_IS_EQUAL(3u, q.Size()); |
| 50 | VERIFY_IS_EQUAL(0, q.PushFront(5)); |
| 51 | VERIFY_IS_EQUAL(4u, q.Size()); |
| 52 | VERIFY_IS_EQUAL(6, q.PushFront(6)); |
| 53 | VERIFY_IS_EQUAL(4u, q.Size()); |
| 54 | VERIFY_IS_EQUAL(5, q.PopFront()); |
| 55 | VERIFY_IS_EQUAL(3u, q.Size()); |
| 56 | VERIFY_IS_EQUAL(4, q.PopFront()); |
| 57 | VERIFY_IS_EQUAL(2u, q.Size()); |
| 58 | VERIFY_IS_EQUAL(3, q.PopFront()); |
| 59 | VERIFY_IS_EQUAL(1u, q.Size()); |
| 60 | VERIFY_IS_EQUAL(2, q.PopFront()); |
| 61 | VERIFY_IS_EQUAL(0u, q.Size()); |
| 62 | VERIFY_IS_EQUAL(0, q.PopFront()); |
| 63 | // Push one back, pop one back. |
| 64 | VERIFY_IS_EQUAL(0, q.PushBack(7)); |
| 65 | VERIFY_IS_EQUAL(1u, q.Size()); |
| 66 | VERIFY_IS_EQUAL(1u, q.PopBackHalf(&stolen)); |
| 67 | VERIFY_IS_EQUAL(1u, stolen.size()); |
| 68 | VERIFY_IS_EQUAL(7, stolen[0]); |
| 69 | VERIFY_IS_EQUAL(0u, q.Size()); |
| 70 | stolen.clear(); |
| 71 | // Push back to overflow. |
| 72 | VERIFY_IS_EQUAL(0, q.PushBack(8)); |
| 73 | VERIFY_IS_EQUAL(1u, q.Size()); |
| 74 | VERIFY_IS_EQUAL(0, q.PushBack(9)); |
| 75 | VERIFY_IS_EQUAL(2u, q.Size()); |
| 76 | VERIFY_IS_EQUAL(0, q.PushBack(10)); |
| 77 | VERIFY_IS_EQUAL(3u, q.Size()); |
| 78 | VERIFY_IS_EQUAL(0, q.PushBack(11)); |
| 79 | VERIFY_IS_EQUAL(4u, q.Size()); |
| 80 | VERIFY_IS_EQUAL(12, q.PushBack(12)); |
| 81 | VERIFY_IS_EQUAL(4u, q.Size()); |
| 82 | // Pop back in halves. |
| 83 | VERIFY_IS_EQUAL(2u, q.PopBackHalf(&stolen)); |
| 84 | VERIFY_IS_EQUAL(2u, stolen.size()); |
| 85 | VERIFY_IS_EQUAL(10, stolen[0]); |
no test coverage detected