static-range-query
Version:
Fast n-dimensional orthogonal range searches for static point sets
111 lines (99 loc) • 3.13 kB
JavaScript
var preprocess = require("../index.js")
require("tap").test("static range tree", function(t) {
var points, search
function getRange(lo, hi, expected) {
var result = []
search(lo, hi, function(i) {
result.push(i)
})
result.sort()
expected.sort()
t.equals(result.join(","), expected.join(","))
}
//1D singleton test
points = [[0]]
search = preprocess(points)
getRange([-1], [1], [0])
getRange([0], [0], [0])
getRange([0], [1], [0])
getRange([-1], [0], [0])
getRange([-1], [-1], [])
getRange([1], [1], [])
getRange([1], [-1], [])
//1D tests
points = [[0], [1], [2], [2], [2], [3], [4], [5] ]
search = preprocess(points)
getRange([0], [2], [0,1,2,3,4])
getRange([0], [3], [0,1,2,3,4,5])
getRange([0], [2.5], [0,1,2,3,4])
getRange([-1], [0], [0])
getRange([-10], [-10], [])
getRange([1000], [10000], [])
getRange([3], [7], [5,6,7])
getRange([3], [5], [5,6,7])
getRange([2.2], [4], [5,6])
getRange([0], [0], [0])
getRange([5], [5], [7])
//2D singleton test
points = [[0,0]]
search = preprocess(points)
getRange([-1,-1], [1,1], [0])
getRange([0,0], [0,0], [0])
getRange([0,0], [1,0], [0])
getRange([0,0], [0,1], [0])
getRange([-1,0], [0,0], [0])
getRange([0,-1], [0,0], [0])
//2D line test
points = [[0,0], [1,0], [2,0], [2,0], [2,0], [3,0], [4,0], [5,0] ]
search = preprocess(points)
getRange([0,0], [2,0], [0,1,2,3,4])
getRange([0,0], [3,0], [0,1,2,3,4,5])
getRange([0,0], [2.5,0], [0,1,2,3,4])
getRange([-1,0], [0,0], [0])
getRange([-10,0], [-10,0], [])
getRange([1000,0], [10000,0], [])
getRange([3,0], [7,0], [5,6,7])
getRange([3,0], [5,0], [5,6,7])
getRange([2.2,0], [4,0], [5,6])
getRange([0,0], [0,0], [0])
getRange([5,0], [5,0], [7])
points = [[0,0], [1,1], [2,2], [2,2], [2,2], [3,3], [4,4], [5,5] ]
search = preprocess(points)
getRange([0,0], [2,2], [0,1,2,3,4])
getRange([0,0], [3,3], [0,1,2,3,4,5])
getRange([0,0], [2.5,2.5], [0,1,2,3,4])
getRange([-1,-1], [0,0], [0])
getRange([-10,-10], [-10,-10], [])
getRange([1000,1000], [1000,1000], [])
getRange([3,3], [7,7], [5,6,7])
getRange([3,3], [5,5], [5,6,7])
getRange([2.2,2.2], [4,4], [5,6])
getRange([0,0], [0,0], [0])
getRange([5,5], [5,5], [7])
//n-d singleton test
points = [[0,0,0,0,0,0,0,0,0,0]]
search = preprocess(points)
getRange([0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0], [0])
getRange([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [1,1,1,1,1,1,1,1,1,1], [0])
getRange([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [])
getRange([1,1,1,1,1,1,1,1,1,1], [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [])
//Test with 7 points
points = [[0,0], [1,1], [2,2], [3,3], [4,4], [5,5], [6,6]]
search = preprocess(points)
getRange([0,0], [3,3], [0,1,2,3])
//Fuzz test
points = new Array(100)
for(var i=0; i<100; ++i) {
var p = new Array(3)
for(var j=0; j<3; ++j) {
p[j] = Math.random() * 1000
}
points[i] = p
}
var count = 0
preprocess(points)([0, 0, 0], [1000, 1000, 1000], function(i) {
++count
})
t.equals(count, 100)
t.end()
})