|
4 | 4 | *--------------------------------------------------------------------------------------------*/
|
5 | 5 |
|
6 | 6 | import * as assert from 'assert';
|
7 |
| -import { BidirectionalMap, LinkedMap, LRUCache, mapsStrictEqualIgnoreOrder, ResourceMap, SetMap, Touch } from 'vs/base/common/map'; |
| 7 | +import { BidirectionalMap, LinkedMap, LRUCache, mapsStrictEqualIgnoreOrder, MRUCache, ResourceMap, SetMap, Touch } from 'vs/base/common/map'; |
8 | 8 | import { extUriIgnorePathCase } from 'vs/base/common/resources';
|
9 | 9 | import { URI } from 'vs/base/common/uri';
|
10 | 10 | import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils';
|
@@ -259,6 +259,53 @@ suite('Map', () => {
|
259 | 259 | assert.deepStrictEqual([...cache.values()], values);
|
260 | 260 | });
|
261 | 261 |
|
| 262 | + test('LinkedMap - MRU Cache simple', () => { |
| 263 | + const cache = new MRUCache<number, number>(5); |
| 264 | + |
| 265 | + [1, 2, 3, 4, 5].forEach(value => cache.set(value, value)); |
| 266 | + assert.strictEqual(cache.size, 5); |
| 267 | + cache.set(6, 6); |
| 268 | + assert.strictEqual(cache.size, 5); |
| 269 | + assert.deepStrictEqual([...cache.keys()], [1, 2, 3, 4, 6]); |
| 270 | + cache.set(7, 7); |
| 271 | + assert.strictEqual(cache.size, 5); |
| 272 | + assert.deepStrictEqual([...cache.keys()], [1, 2, 3, 4, 7]); |
| 273 | + const values: number[] = []; |
| 274 | + [1, 2, 3, 4, 7].forEach(key => values.push(cache.get(key)!)); |
| 275 | + assert.deepStrictEqual(values, [1, 2, 3, 4, 7]); |
| 276 | + }); |
| 277 | + |
| 278 | + test('LinkedMap - MRU Cache get', () => { |
| 279 | + const cache = new MRUCache<number, number>(5); |
| 280 | + |
| 281 | + [1, 2, 3, 4, 5].forEach(value => cache.set(value, value)); |
| 282 | + assert.strictEqual(cache.size, 5); |
| 283 | + assert.deepStrictEqual([...cache.keys()], [1, 2, 3, 4, 5]); |
| 284 | + cache.get(3); |
| 285 | + assert.deepStrictEqual([...cache.keys()], [1, 2, 4, 5, 3]); |
| 286 | + cache.peek(4); |
| 287 | + assert.deepStrictEqual([...cache.keys()], [1, 2, 4, 5, 3]); |
| 288 | + const values: number[] = []; |
| 289 | + [1, 2, 3, 4, 5].forEach(key => values.push(cache.get(key)!)); |
| 290 | + assert.deepStrictEqual(values, [1, 2, 3, 4, 5]); |
| 291 | + }); |
| 292 | + |
| 293 | + test('LinkedMap - MRU Cache limit with ratio', () => { |
| 294 | + const cache = new MRUCache<number, number>(10, 0.5); |
| 295 | + |
| 296 | + for (let i = 1; i <= 10; i++) { |
| 297 | + cache.set(i, i); |
| 298 | + } |
| 299 | + assert.strictEqual(cache.size, 10); |
| 300 | + cache.set(11, 11); |
| 301 | + assert.strictEqual(cache.size, 5); |
| 302 | + assert.deepStrictEqual([...cache.keys()], [1, 2, 3, 4, 11]); |
| 303 | + const values: number[] = []; |
| 304 | + [...cache.keys()].forEach(key => values.push(cache.get(key)!)); |
| 305 | + assert.deepStrictEqual(values, [1, 2, 3, 4, 11]); |
| 306 | + assert.deepStrictEqual([...cache.values()], values); |
| 307 | + }); |
| 308 | + |
262 | 309 | test('LinkedMap - toJSON / fromJSON', () => {
|
263 | 310 | let map = new LinkedMap<string, string>();
|
264 | 311 | map.set('ak', 'av');
|
|
0 commit comments