LinkedMap tests
This commit is contained in:
parent
ffce4455b0
commit
ef2e222905
|
@ -40,6 +40,17 @@ export class LinkedMap<K extends Key, T> {
|
|||
return value ? value : null;
|
||||
}
|
||||
|
||||
public getOrSet(k: K, t: T): T {
|
||||
const res = this.get(k);
|
||||
if (res) {
|
||||
return res;
|
||||
}
|
||||
|
||||
this.set(k, t);
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
public keys(): K[] {
|
||||
var keys: K[] = [];
|
||||
for (let key in this.map) {
|
||||
|
@ -152,6 +163,17 @@ export class BoundedLinkedMap<T> {
|
|||
return entry ? entry.value : null;
|
||||
}
|
||||
|
||||
public getOrSet(k: string, t: T): T {
|
||||
const res = this.get(k);
|
||||
if (res) {
|
||||
return res;
|
||||
}
|
||||
|
||||
this.set(k, t);
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
public delete(key: string): T {
|
||||
const entry = this.map[key];
|
||||
|
||||
|
@ -273,4 +295,4 @@ export class LRUCache<T> extends BoundedLinkedMap<T> {
|
|||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,10 +5,72 @@
|
|||
|
||||
'use strict';
|
||||
|
||||
import {BoundedLinkedMap, LRUCache} from 'vs/base/common/map';
|
||||
import {BoundedLinkedMap, LRUCache, LinkedMap} from 'vs/base/common/map';
|
||||
import * as assert from 'assert';
|
||||
|
||||
suite('Map', () => {
|
||||
|
||||
test('LinkedMap - basics', function () {
|
||||
const map = new LinkedMap<string, any>();
|
||||
|
||||
assert.equal(map.size, 0);
|
||||
|
||||
map.set('1', 1);
|
||||
map.set('2', '2');
|
||||
map.set('3', true);
|
||||
|
||||
const obj = Object.create(null);
|
||||
map.set('4', obj);
|
||||
|
||||
const date = Date.now();
|
||||
map.set('5', date);
|
||||
|
||||
assert.equal(map.size, 5);
|
||||
assert.equal(map.get('1'), 1);
|
||||
assert.equal(map.get('2'), '2');
|
||||
assert.equal(map.get('3'), true);
|
||||
assert.equal(map.get('4'), obj);
|
||||
assert.equal(map.get('5'), date);
|
||||
assert.ok(!map.get('6'));
|
||||
|
||||
map.delete('6');
|
||||
assert.equal(map.size, 5);
|
||||
assert.equal(map.delete('1'), 1);
|
||||
assert.equal(map.delete('2'), '2');
|
||||
assert.equal(map.delete('3'), true);
|
||||
assert.equal(map.delete('4'), obj);
|
||||
assert.equal(map.delete('5'), date);
|
||||
|
||||
assert.equal(map.size, 0);
|
||||
assert.ok(!map.get('5'));
|
||||
assert.ok(!map.get('4'));
|
||||
assert.ok(!map.get('3'));
|
||||
assert.ok(!map.get('2'));
|
||||
assert.ok(!map.get('1'));
|
||||
|
||||
map.set('1', 1);
|
||||
map.set('2', '2');
|
||||
assert.ok(map.set('3', true)); // adding an element returns true
|
||||
assert.ok(!map.set('3', true)); // adding it again returns false
|
||||
|
||||
assert.ok(map.has('1'));
|
||||
assert.equal(map.get('1'), 1);
|
||||
assert.equal(map.get('2'), '2');
|
||||
assert.equal(map.get('3'), true);
|
||||
|
||||
map.clear();
|
||||
|
||||
assert.equal(map.size, 0);
|
||||
assert.ok(!map.get('1'));
|
||||
assert.ok(!map.get('2'));
|
||||
assert.ok(!map.get('3'));
|
||||
assert.ok(!map.has('1'));
|
||||
|
||||
const res = map.getOrSet('foo', 'bar');
|
||||
assert.equal(map.get('foo'), res);
|
||||
assert.equal(res, 'bar');
|
||||
});
|
||||
|
||||
test('BoundedLinkedMap - basics', function () {
|
||||
const map = new BoundedLinkedMap<any>();
|
||||
|
||||
|
@ -64,6 +126,10 @@ suite('Map', () => {
|
|||
assert.ok(!map.get('2'));
|
||||
assert.ok(!map.get('3'));
|
||||
assert.ok(!map.has('1'));
|
||||
|
||||
const res = map.getOrSet('foo', 'bar');
|
||||
assert.equal(map.get('foo'), res);
|
||||
assert.equal(res, 'bar');
|
||||
});
|
||||
|
||||
test('BoundedLinkedMap - bounded', function () {
|
||||
|
@ -204,6 +270,5 @@ suite('Map', () => {
|
|||
assert.equal(cache.get('6'), 6);
|
||||
assert.ok(!cache.has('3'));
|
||||
assert.ok(!cache.has('4'));
|
||||
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue