Path: blob/main/src/vs/base/test/common/linkedList.test.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import assert from 'assert';6import { LinkedList } from '../../common/linkedList.js';7import { ensureNoDisposablesAreLeakedInTestSuite } from './utils.js';89suite('LinkedList', function () {1011ensureNoDisposablesAreLeakedInTestSuite();1213function assertElements<E>(list: LinkedList<E>, ...elements: E[]) {1415// check size16assert.strictEqual(list.size, elements.length);1718// assert toArray19assert.deepStrictEqual(Array.from(list), elements);2021// assert Symbol.iterator (1)22assert.deepStrictEqual([...list], elements);2324// assert Symbol.iterator (2)25for (const item of list) {26assert.strictEqual(item, elements.shift());27}28assert.strictEqual(elements.length, 0);29}3031test('Push/Iter', () => {32const list = new LinkedList<number>();33list.push(0);34list.push(1);35list.push(2);36assertElements(list, 0, 1, 2);37});3839test('Push/Remove', () => {40let list = new LinkedList<number>();41let disp = list.push(0);42list.push(1);43list.push(2);44disp();45assertElements(list, 1, 2);4647list = new LinkedList<number>();48list.push(0);49disp = list.push(1);50list.push(2);51disp();52assertElements(list, 0, 2);5354list = new LinkedList<number>();55list.push(0);56list.push(1);57disp = list.push(2);58disp();59assertElements(list, 0, 1);6061list = new LinkedList<number>();62list.push(0);63list.push(1);64disp = list.push(2);65disp();66disp();67assertElements(list, 0, 1);68});6970test('Push/toArray', () => {71const list = new LinkedList<string>();72list.push('foo');73list.push('bar');74list.push('far');75list.push('boo');7677assertElements(list, 'foo', 'bar', 'far', 'boo');78});7980test('unshift/Iter', () => {81const list = new LinkedList<number>();82list.unshift(0);83list.unshift(1);84list.unshift(2);85assertElements(list, 2, 1, 0);86});8788test('unshift/Remove', () => {89let list = new LinkedList<number>();90let disp = list.unshift(0);91list.unshift(1);92list.unshift(2);93disp();94assertElements(list, 2, 1);9596list = new LinkedList<number>();97list.unshift(0);98disp = list.unshift(1);99list.unshift(2);100disp();101assertElements(list, 2, 0);102103list = new LinkedList<number>();104list.unshift(0);105list.unshift(1);106disp = list.unshift(2);107disp();108assertElements(list, 1, 0);109});110111test('unshift/toArray', () => {112const list = new LinkedList<string>();113list.unshift('foo');114list.unshift('bar');115list.unshift('far');116list.unshift('boo');117assertElements(list, 'boo', 'far', 'bar', 'foo');118});119120test('pop/unshift', function () {121const list = new LinkedList<string>();122list.push('a');123list.push('b');124125assertElements(list, 'a', 'b');126127const a = list.shift();128assert.strictEqual(a, 'a');129assertElements(list, 'b');130131list.unshift('a');132assertElements(list, 'a', 'b');133134const b = list.pop();135assert.strictEqual(b, 'b');136assertElements(list, 'a');137});138});139140141