// 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 #include "platform/list_queue.h" #include "vm/unit_test.h" namespace dart { void ExpectContentsToBe(const ListQueue& actual, const std::vector& 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 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::kInitialCapacity; ListQueue 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(kInitialCapacity + 4, 123)); } } // namespace dart