| // Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| #include <vector> | |
| #include "platform/list_queue.h" | |
| #include "vm/unit_test.h" | |
| namespace dart { | |
| void ExpectContentsToBe(const ListQueue<intptr_t>& actual, | |
| const std::vector<intptr_t>& expected) { | |
| intptr_t i = 0; | |
| actual.ForEach([&expected, &i](intptr_t actual_element) { | |
| EXPECT(actual_element == expected[i]); | |
| ++i; | |
| }); | |
| } | |
| VM_UNIT_TEST_CASE(ListQueue_PublicMethods) { | |
| ListQueue<intptr_t> l; | |
| intptr_t front = -1; | |
| l.PushBack(1); | |
| ExpectContentsToBe(l, {1}); | |
| EXPECT(l.Length() == 1); | |
| front = l.PopFront(); | |
| EXPECT(front == 1); | |
| ExpectContentsToBe(l, {}); | |
| EXPECT(l.Length() == 0); | |
| l.PushBack(2); | |
| ExpectContentsToBe(l, {2}); | |
| EXPECT(l.Length() == 1); | |
| l.PushBack(3); | |
| ExpectContentsToBe(l, {2, 3}); | |
| EXPECT(l.Length() == 2); | |
| front = l.PopFront(); | |
| EXPECT(front == 2); | |
| ExpectContentsToBe(l, {3}); | |
| EXPECT(l.Length() == 1); | |
| l.PushBack(4); | |
| ExpectContentsToBe(l, {3, 4}); | |
| EXPECT(l.Length() == 2); | |
| } | |
| VM_UNIT_TEST_CASE(ListQueue_Grow) { | |
| const intptr_t kInitialCapacity = ListQueue<intptr_t>::kInitialCapacity; | |
| ListQueue<intptr_t> l; | |
| l.PushBack(1); | |
| ExpectContentsToBe(l, {1}); | |
| l.PopFront(); | |
| ExpectContentsToBe(l, {}); | |
| // Force |l| to grow by adding more than |kInitialCapacity| elements to it. | |
| for (intptr_t i = 0; i <= kInitialCapacity + 3; ++i) { | |
| l.PushBack(123); | |
| } | |
| ExpectContentsToBe(l, std::vector<intptr_t>(kInitialCapacity + 4, 123)); | |
| } | |
| } // namespace dart |