var rtree = use('rtree') var RTree = rtree return { test_add_query_match: function() { var tree = RTree() var item1 = {x: 10, y: 10, w: 10, h: 10, id: 1} tree.add(item1) var res = tree.query({x: 0, y: 0, w: 100, h: 100}) if (res.length != 1) throw "Expected 1 item, got " + text(res.length) if (res[0].id != 1) throw "Item ID mismatch" }, test_query_miss: function() { var tree = RTree() var item1 = {x: 10, y: 10, w: 10, h: 10, id: 1} tree.add(item1) var res2 = tree.query({x: 50, y: 50, w: 10, h: 10}) if (res2.length != 0) throw "Expected 0 items, got " + text(res2.length) }, test_size: function() { var tree = RTree() tree.add({x: 0, y: 0, w: 1, h: 1}) tree.add({x: 2, y: 2, w: 1, h: 1}) if (tree.size != 2) throw "Expected size 2, got " + text(tree.size) }, test_delete: function() { var tree = RTree() var item = {x: 10, y: 10, w: 10, h: 10} tree.add(item) if (tree.size != 1) throw "Add failed" tree.delete(item) if (tree.size != 0) throw "Delete failed" }, test_delete_query_empty: function() { var tree = RTree() var item = {x: 10, y: 10, w: 10, h: 10} tree.add(item) tree.delete(item) var res = tree.query({x: 0, y: 0, w: 100, h: 100}) if (res.length != 0) throw "Query returned deleted item" }, test_has_true: function() { var tree = RTree() var item = {x: 10, y: 10, w: 10, h: 10} tree.add(item) if (!tree.has(item)) throw "has() returned false" }, test_has_false: function() { var tree = RTree() var item = {x: 10, y: 10, w: 10, h: 10} tree.add(item) var item2 = {x: 10, y: 10, w: 10, h: 10} if (tree.has(item2)) throw "has() returned true for different object" }, test_forEach: function() { var tree = RTree() var items = [] for(var i=0; i<10; i++) { var item = {x: i*10, y: 0, w: 5, h: 5, idx: i} push(items, item) tree.add(item) } var count = 0 tree.forEach(function(item) { count++ }) if (count != 10) throw "forEach counted " + count }, test_values: function() { var tree = RTree() tree.add({x:0,y:0,w:1,h:1}) var vals = tree.values() if (!is_array(vals)) throw "values() did not return array" if (vals.length != 1) throw "values() length mismatch" } }