fleximap
Version:
A flexible hash map which supports deep keys.
64 lines (47 loc) • 2.59 kB
JavaScript
var assert = require('assert');
var FlexiMap = require('../index.js').FlexiMap;
var flexiMap = new FlexiMap();
flexiMap.set('keyA', {arr: [], obj: {}});
assert(JSON.stringify(flexiMap.get(['keyA', 'arr'])) === '[]');
assert(JSON.stringify(flexiMap.get(['keyA', 'obj'])) === '{}');
flexiMap.add(['keyB1', 'keyB2', 'keyB3'], 123);
assert(JSON.stringify(flexiMap.get(['keyB1', 'keyB2'])) === JSON.stringify({keyB3: [123]}));
var arr = [];
arr[5] = 'Hello world';
flexiMap.set(['keyC1', 'keyC2'], arr);
var result = flexiMap.get(['keyC1', 'keyC2']);
assert(JSON.stringify(result) === JSON.stringify({5: 'Hello world'}), 'Sparse Array should be cast to Object');
flexiMap.set(['itemsA', 0], 'hello');
flexiMap.set(['itemsA', 2], 'world');
flexiMap.remove(['itemsA', 0]);
assert(JSON.stringify(flexiMap.get('itemsA')) === JSON.stringify({2: 'world'}));
flexiMap.set(['itemsB', 0], 'a');
flexiMap.set(['itemsB', 1], 'b');
flexiMap.set(['itemsB', 2], 'c');
var splicedItemsB = flexiMap.splice(['itemsB'], 1, 1);
assert(JSON.stringify(flexiMap.get('itemsB')) === JSON.stringify({0: 'a', 1: 'c'}));
assert(JSON.stringify(splicedItemsB) === JSON.stringify(['b']));
flexiMap.splice(['itemsB'], 1, 0, 'b2');
assert(JSON.stringify(flexiMap.get('itemsB')) === JSON.stringify({0: 'a', 1: 'b2', 2: 'c'}));
flexiMap.splice(['itemsB'], 1, 1, 'b3');
assert(JSON.stringify(flexiMap.get('itemsB')) === JSON.stringify({0: 'a', 1: 'b3', 2: 'c'}));
var splicedItemsBB = flexiMap.splice(['itemsB'], 1, 2, 'b4');
assert(JSON.stringify(flexiMap.get('itemsB')) === JSON.stringify({0: 'a', 1: 'b4'}));
assert(JSON.stringify(splicedItemsBB) === JSON.stringify(['b3', 'c']));
flexiMap.set(['itemsC', 'a'], 'A');
flexiMap.set(['itemsC', 'b'], 'B');
flexiMap.set(['itemsC', 'c'], 'C');
flexiMap.splice(['itemsC'], 1, 0, 'zero');
flexiMap.splice(['itemsC'], 1, 0, 'two');
flexiMap.splice(['itemsC'], 1, 0, 'one');
assert(JSON.stringify(flexiMap.get('itemsC')) === JSON.stringify({0: 'zero', 1: 'one', 2: 'two', a: 'A', b: 'B', c: 'C'}));
var splicedItemsD = flexiMap.splice(['itemsD'], 1, 0);
assert(JSON.stringify(splicedItemsD) === '[]');
flexiMap.set('myArray', [0, 1, 2, 3, 4, 5]);
var arrayRange = flexiMap.getRange('myArray', 1, 4);
assert(JSON.stringify(arrayRange) === JSON.stringify([1, 2, 3]));
var removedArrayRange = flexiMap.removeRange('myArray', 1, 4);
assert(JSON.stringify(removedArrayRange) === JSON.stringify([1, 2, 3]));
var arrayAfterRangeRemoved = flexiMap.get('myArray');
assert(JSON.stringify(arrayAfterRangeRemoved) === JSON.stringify([0, 4, 5]));
console.log('All tests passed!');