grid-index
Version:
A 2D spatial index for axis-aligned boxes
61 lines (48 loc) • 1.98 kB
JavaScript
var GridIndex = require('../grid-index');
var test = require('tap').test;
test('GridIndex', function(t) {
t.test('indexes features', function(t) {
var grid = new GridIndex(100, 4, 1);
grid.insert(0, 4, 10, 6, 30);
grid.insert(1, 4, 10, 30, 12);
grid.insert(2, -10, 30, -5, 35);
t.deepEqual(grid.query(4, 10, 5, 11).sort(), [0, 1]);
t.deepEqual(grid.query(24, 10, 25, 11).sort(), [1]);
t.deepEqual(grid.query(40, 40, 100, 100), []);
t.deepEqual(grid.query(-6, 0, -7, 100), [2]);
t.deepEqual(grid.query(-Infinity, -Infinity, Infinity, Infinity).sort(), [0, 1, 2]);
t.end();
});
t.test('returns multiple copies of a key if multiple boxes were inserted with the same key', function(t) {
var grid = new GridIndex(100, 4, 0);
var key = 123;
grid.insert(key, 3, 3, 4, 4);
grid.insert(key, 13, 13, 14, 14);
grid.insert(key, 23, 23, 24, 24);
t.deepEqual(grid.query(0, 0, 30, 30), [key, key, key]);
t.end();
});
t.test('serializing to an arraybuffer', function(t) {
var originalGrid = new GridIndex(100, 4, 1);
originalGrid.insert(0, 4, 10, 6, 30);
originalGrid.insert(1, 4, 10, 30, 12);
originalGrid.insert(2, -10, 30, -5, 35);
var arrayBuffer = originalGrid.toArrayBuffer();
var grid = new GridIndex(arrayBuffer);
t.deepEqual(grid.query(4, 10, 5, 11).sort(), [0, 1]);
t.deepEqual(grid.query(24, 10, 25, 11).sort(), [1]);
t.deepEqual(grid.query(40, 40, 100, 100), []);
t.deepEqual(grid.query(-6, 0, -7, 100), [2]);
t.deepEqual(grid.query(-Infinity, -Infinity, Infinity, Infinity).sort(), [0, 1, 2]);
var exception = null;
try {
t.insert(3, 0, 0, 0, 0);
} catch(e) {
exception = e;
}
t.notEqual(exception, null);
t.end();
});
t.end();
});
;