LinkedMap tests

This commit is contained in:
Benjamin Pasero 2016-08-12 10:39:24 +02:00
parent ffce4455b0
commit ef2e222905
2 changed files with 90 additions and 3 deletions

View file

@ -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;
}
}
}

View file

@ -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'));
});
});