Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/base/test/common/linkedList.test.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import assert from 'assert';
7
import { LinkedList } from '../../common/linkedList.js';
8
import { ensureNoDisposablesAreLeakedInTestSuite } from './utils.js';
9
10
suite('LinkedList', function () {
11
12
ensureNoDisposablesAreLeakedInTestSuite();
13
14
function assertElements<E>(list: LinkedList<E>, ...elements: E[]) {
15
16
// check size
17
assert.strictEqual(list.size, elements.length);
18
19
// assert toArray
20
assert.deepStrictEqual(Array.from(list), elements);
21
22
// assert Symbol.iterator (1)
23
assert.deepStrictEqual([...list], elements);
24
25
// assert Symbol.iterator (2)
26
for (const item of list) {
27
assert.strictEqual(item, elements.shift());
28
}
29
assert.strictEqual(elements.length, 0);
30
}
31
32
test('Push/Iter', () => {
33
const list = new LinkedList<number>();
34
list.push(0);
35
list.push(1);
36
list.push(2);
37
assertElements(list, 0, 1, 2);
38
});
39
40
test('Push/Remove', () => {
41
let list = new LinkedList<number>();
42
let disp = list.push(0);
43
list.push(1);
44
list.push(2);
45
disp();
46
assertElements(list, 1, 2);
47
48
list = new LinkedList<number>();
49
list.push(0);
50
disp = list.push(1);
51
list.push(2);
52
disp();
53
assertElements(list, 0, 2);
54
55
list = new LinkedList<number>();
56
list.push(0);
57
list.push(1);
58
disp = list.push(2);
59
disp();
60
assertElements(list, 0, 1);
61
62
list = new LinkedList<number>();
63
list.push(0);
64
list.push(1);
65
disp = list.push(2);
66
disp();
67
disp();
68
assertElements(list, 0, 1);
69
});
70
71
test('Push/toArray', () => {
72
const list = new LinkedList<string>();
73
list.push('foo');
74
list.push('bar');
75
list.push('far');
76
list.push('boo');
77
78
assertElements(list, 'foo', 'bar', 'far', 'boo');
79
});
80
81
test('unshift/Iter', () => {
82
const list = new LinkedList<number>();
83
list.unshift(0);
84
list.unshift(1);
85
list.unshift(2);
86
assertElements(list, 2, 1, 0);
87
});
88
89
test('unshift/Remove', () => {
90
let list = new LinkedList<number>();
91
let disp = list.unshift(0);
92
list.unshift(1);
93
list.unshift(2);
94
disp();
95
assertElements(list, 2, 1);
96
97
list = new LinkedList<number>();
98
list.unshift(0);
99
disp = list.unshift(1);
100
list.unshift(2);
101
disp();
102
assertElements(list, 2, 0);
103
104
list = new LinkedList<number>();
105
list.unshift(0);
106
list.unshift(1);
107
disp = list.unshift(2);
108
disp();
109
assertElements(list, 1, 0);
110
});
111
112
test('unshift/toArray', () => {
113
const list = new LinkedList<string>();
114
list.unshift('foo');
115
list.unshift('bar');
116
list.unshift('far');
117
list.unshift('boo');
118
assertElements(list, 'boo', 'far', 'bar', 'foo');
119
});
120
121
test('pop/unshift', function () {
122
const list = new LinkedList<string>();
123
list.push('a');
124
list.push('b');
125
126
assertElements(list, 'a', 'b');
127
128
const a = list.shift();
129
assert.strictEqual(a, 'a');
130
assertElements(list, 'b');
131
132
list.unshift('a');
133
assertElements(list, 'a', 'b');
134
135
const b = list.pop();
136
assert.strictEqual(b, 'b');
137
assertElements(list, 'a');
138
});
139
});
140
141