blob: e67643ebbb3181de9eccf9032119bd6c489b1fe4 [file] [log] [blame]
// 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