Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/editor/test/common/viewModel/prefixSumComputer.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 { toUint32 } from '../../../../base/common/uint.js';
8
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';
9
import { PrefixSumComputer, PrefixSumIndexOfResult } from '../../../common/model/prefixSumComputer.js';
10
11
function toUint32Array(arr: number[]): Uint32Array {
12
const len = arr.length;
13
const r = new Uint32Array(len);
14
for (let i = 0; i < len; i++) {
15
r[i] = toUint32(arr[i]);
16
}
17
return r;
18
}
19
20
suite('Editor ViewModel - PrefixSumComputer', () => {
21
22
ensureNoDisposablesAreLeakedInTestSuite();
23
24
test('PrefixSumComputer', () => {
25
let indexOfResult: PrefixSumIndexOfResult;
26
27
const psc = new PrefixSumComputer(toUint32Array([1, 1, 2, 1, 3]));
28
assert.strictEqual(psc.getTotalSum(), 8);
29
assert.strictEqual(psc.getPrefixSum(-1), 0);
30
assert.strictEqual(psc.getPrefixSum(0), 1);
31
assert.strictEqual(psc.getPrefixSum(1), 2);
32
assert.strictEqual(psc.getPrefixSum(2), 4);
33
assert.strictEqual(psc.getPrefixSum(3), 5);
34
assert.strictEqual(psc.getPrefixSum(4), 8);
35
indexOfResult = psc.getIndexOf(0);
36
assert.strictEqual(indexOfResult.index, 0);
37
assert.strictEqual(indexOfResult.remainder, 0);
38
indexOfResult = psc.getIndexOf(1);
39
assert.strictEqual(indexOfResult.index, 1);
40
assert.strictEqual(indexOfResult.remainder, 0);
41
indexOfResult = psc.getIndexOf(2);
42
assert.strictEqual(indexOfResult.index, 2);
43
assert.strictEqual(indexOfResult.remainder, 0);
44
indexOfResult = psc.getIndexOf(3);
45
assert.strictEqual(indexOfResult.index, 2);
46
assert.strictEqual(indexOfResult.remainder, 1);
47
indexOfResult = psc.getIndexOf(4);
48
assert.strictEqual(indexOfResult.index, 3);
49
assert.strictEqual(indexOfResult.remainder, 0);
50
indexOfResult = psc.getIndexOf(5);
51
assert.strictEqual(indexOfResult.index, 4);
52
assert.strictEqual(indexOfResult.remainder, 0);
53
indexOfResult = psc.getIndexOf(6);
54
assert.strictEqual(indexOfResult.index, 4);
55
assert.strictEqual(indexOfResult.remainder, 1);
56
indexOfResult = psc.getIndexOf(7);
57
assert.strictEqual(indexOfResult.index, 4);
58
assert.strictEqual(indexOfResult.remainder, 2);
59
indexOfResult = psc.getIndexOf(8);
60
assert.strictEqual(indexOfResult.index, 4);
61
assert.strictEqual(indexOfResult.remainder, 3);
62
63
// [1, 2, 2, 1, 3]
64
psc.setValue(1, 2);
65
assert.strictEqual(psc.getTotalSum(), 9);
66
assert.strictEqual(psc.getPrefixSum(0), 1);
67
assert.strictEqual(psc.getPrefixSum(1), 3);
68
assert.strictEqual(psc.getPrefixSum(2), 5);
69
assert.strictEqual(psc.getPrefixSum(3), 6);
70
assert.strictEqual(psc.getPrefixSum(4), 9);
71
72
// [1, 0, 2, 1, 3]
73
psc.setValue(1, 0);
74
assert.strictEqual(psc.getTotalSum(), 7);
75
assert.strictEqual(psc.getPrefixSum(0), 1);
76
assert.strictEqual(psc.getPrefixSum(1), 1);
77
assert.strictEqual(psc.getPrefixSum(2), 3);
78
assert.strictEqual(psc.getPrefixSum(3), 4);
79
assert.strictEqual(psc.getPrefixSum(4), 7);
80
indexOfResult = psc.getIndexOf(0);
81
assert.strictEqual(indexOfResult.index, 0);
82
assert.strictEqual(indexOfResult.remainder, 0);
83
indexOfResult = psc.getIndexOf(1);
84
assert.strictEqual(indexOfResult.index, 2);
85
assert.strictEqual(indexOfResult.remainder, 0);
86
indexOfResult = psc.getIndexOf(2);
87
assert.strictEqual(indexOfResult.index, 2);
88
assert.strictEqual(indexOfResult.remainder, 1);
89
indexOfResult = psc.getIndexOf(3);
90
assert.strictEqual(indexOfResult.index, 3);
91
assert.strictEqual(indexOfResult.remainder, 0);
92
indexOfResult = psc.getIndexOf(4);
93
assert.strictEqual(indexOfResult.index, 4);
94
assert.strictEqual(indexOfResult.remainder, 0);
95
indexOfResult = psc.getIndexOf(5);
96
assert.strictEqual(indexOfResult.index, 4);
97
assert.strictEqual(indexOfResult.remainder, 1);
98
indexOfResult = psc.getIndexOf(6);
99
assert.strictEqual(indexOfResult.index, 4);
100
assert.strictEqual(indexOfResult.remainder, 2);
101
indexOfResult = psc.getIndexOf(7);
102
assert.strictEqual(indexOfResult.index, 4);
103
assert.strictEqual(indexOfResult.remainder, 3);
104
105
// [1, 0, 0, 1, 3]
106
psc.setValue(2, 0);
107
assert.strictEqual(psc.getTotalSum(), 5);
108
assert.strictEqual(psc.getPrefixSum(0), 1);
109
assert.strictEqual(psc.getPrefixSum(1), 1);
110
assert.strictEqual(psc.getPrefixSum(2), 1);
111
assert.strictEqual(psc.getPrefixSum(3), 2);
112
assert.strictEqual(psc.getPrefixSum(4), 5);
113
indexOfResult = psc.getIndexOf(0);
114
assert.strictEqual(indexOfResult.index, 0);
115
assert.strictEqual(indexOfResult.remainder, 0);
116
indexOfResult = psc.getIndexOf(1);
117
assert.strictEqual(indexOfResult.index, 3);
118
assert.strictEqual(indexOfResult.remainder, 0);
119
indexOfResult = psc.getIndexOf(2);
120
assert.strictEqual(indexOfResult.index, 4);
121
assert.strictEqual(indexOfResult.remainder, 0);
122
indexOfResult = psc.getIndexOf(3);
123
assert.strictEqual(indexOfResult.index, 4);
124
assert.strictEqual(indexOfResult.remainder, 1);
125
indexOfResult = psc.getIndexOf(4);
126
assert.strictEqual(indexOfResult.index, 4);
127
assert.strictEqual(indexOfResult.remainder, 2);
128
indexOfResult = psc.getIndexOf(5);
129
assert.strictEqual(indexOfResult.index, 4);
130
assert.strictEqual(indexOfResult.remainder, 3);
131
132
// [1, 0, 0, 0, 3]
133
psc.setValue(3, 0);
134
assert.strictEqual(psc.getTotalSum(), 4);
135
assert.strictEqual(psc.getPrefixSum(0), 1);
136
assert.strictEqual(psc.getPrefixSum(1), 1);
137
assert.strictEqual(psc.getPrefixSum(2), 1);
138
assert.strictEqual(psc.getPrefixSum(3), 1);
139
assert.strictEqual(psc.getPrefixSum(4), 4);
140
indexOfResult = psc.getIndexOf(0);
141
assert.strictEqual(indexOfResult.index, 0);
142
assert.strictEqual(indexOfResult.remainder, 0);
143
indexOfResult = psc.getIndexOf(1);
144
assert.strictEqual(indexOfResult.index, 4);
145
assert.strictEqual(indexOfResult.remainder, 0);
146
indexOfResult = psc.getIndexOf(2);
147
assert.strictEqual(indexOfResult.index, 4);
148
assert.strictEqual(indexOfResult.remainder, 1);
149
indexOfResult = psc.getIndexOf(3);
150
assert.strictEqual(indexOfResult.index, 4);
151
assert.strictEqual(indexOfResult.remainder, 2);
152
indexOfResult = psc.getIndexOf(4);
153
assert.strictEqual(indexOfResult.index, 4);
154
assert.strictEqual(indexOfResult.remainder, 3);
155
156
// [1, 1, 0, 1, 1]
157
psc.setValue(1, 1);
158
psc.setValue(3, 1);
159
psc.setValue(4, 1);
160
assert.strictEqual(psc.getTotalSum(), 4);
161
assert.strictEqual(psc.getPrefixSum(0), 1);
162
assert.strictEqual(psc.getPrefixSum(1), 2);
163
assert.strictEqual(psc.getPrefixSum(2), 2);
164
assert.strictEqual(psc.getPrefixSum(3), 3);
165
assert.strictEqual(psc.getPrefixSum(4), 4);
166
indexOfResult = psc.getIndexOf(0);
167
assert.strictEqual(indexOfResult.index, 0);
168
assert.strictEqual(indexOfResult.remainder, 0);
169
indexOfResult = psc.getIndexOf(1);
170
assert.strictEqual(indexOfResult.index, 1);
171
assert.strictEqual(indexOfResult.remainder, 0);
172
indexOfResult = psc.getIndexOf(2);
173
assert.strictEqual(indexOfResult.index, 3);
174
assert.strictEqual(indexOfResult.remainder, 0);
175
indexOfResult = psc.getIndexOf(3);
176
assert.strictEqual(indexOfResult.index, 4);
177
assert.strictEqual(indexOfResult.remainder, 0);
178
indexOfResult = psc.getIndexOf(4);
179
assert.strictEqual(indexOfResult.index, 4);
180
assert.strictEqual(indexOfResult.remainder, 1);
181
});
182
});
183
184