var _ = require('underscore'); var loader = require('./loader'); var SAMPLE_FILE = __dirname + '/samples/10k'; var TREES = ['rbtree', 'bintree']; function clear(assert, tree_class) { var inserts = loader.get_inserts(loader.load(SAMPLE_FILE)); var tree = loader.build_tree(tree_class, inserts); tree.clear(); inserts.forEach(function(data) { assert.equal(tree.find(data), null); }); } function dup(assert, tree_class) { var tree = loader.new_tree(tree_class); assert.ok(tree.insert(100)); assert.ok(tree.insert(101)); assert.ok(!tree.insert(101)); assert.ok(!tree.insert(100)); tree.remove(100); assert.ok(!tree.insert(101)); assert.ok(tree.insert(100)); assert.ok(!tree.insert(100)); } function nonexist(assert, tree_class) { var tree = loader.new_tree(tree_class); assert.ok(!tree.remove(100)); tree.insert(100); assert.ok(!tree.remove(101)); assert.ok(tree.remove(100)); } function minmax(assert, tree_class) { var tree = loader.new_tree(tree_class); assert.equal(tree.min(), null); assert.equal(tree.max(), null); var inserts = loader.get_inserts(loader.load(SAMPLE_FILE)); tree = loader.build_tree(tree_class, inserts); assert.equal(tree.min(), _.min(inserts)); assert.equal(tree.max(), _.max(inserts)); } function forward_it(assert, tree_class) { var inserts = loader.get_inserts(loader.load(SAMPLE_FILE)); var tree = loader.build_tree(tree_class, inserts); var items = []; var it=tree.iterator(), data; while((data = it.next()) !== null) { items.push(data); } inserts.sort(function(a,b) { return a - b; }); assert.deepEqual(items, inserts); items = []; tree.each(function(data) { items.push(data); }); assert.deepEqual(items, inserts); } function forward_it_break(assert, tree_class) { var inserts = loader.get_inserts(loader.load(SAMPLE_FILE)); var tree = loader.build_tree(tree_class, inserts); var items = []; var it=tree.iterator(), data; while((data = it.next()) !== null) { items.push(data); } inserts.sort(function(a,b) { return a - b; }); assert.deepEqual(items, inserts); items = []; var i = 0; tree.each(function(data) { items.push(data); if (i === 3) { return false; } i++; }); assert.equal(items.length, 4); } function reverse_it(assert, tree_class) { var inserts = loader.get_inserts(loader.load(SAMPLE_FILE)); var tree = loader.build_tree(tree_class, inserts); var items = []; var it=tree.iterator(), data; while((data = it.prev()) !== null) { items.push(data); } inserts.sort(function(a,b) { return b - a; }); assert.deepEqual(items, inserts); items = []; tree.reach(function(data) { items.push(data); }); assert.deepEqual(items, inserts); } function reverse_it_break(assert, tree_class) { var inserts = loader.get_inserts(loader.load(SAMPLE_FILE)); var tree = loader.build_tree(tree_class, inserts); var items = []; var it=tree.iterator(), data; while((data = it.prev()) !== null) { items.push(data); } inserts.sort(function(a,b) { return b - a; }); assert.deepEqual(items, inserts); items = []; var i = 0; tree.reach(function(data) { items.push(data); if (i === 3) { return false; } i++; }); assert.equal(items.length, 4); } function switch_it(assert, tree_class) { var inserts = loader.get_inserts(loader.load(SAMPLE_FILE)); var tree = loader.build_tree(tree_class, inserts); inserts.sort(function(a,b) { return a - b; }); function do_switch(after) { var items = []; var it = tree.iterator(); for(var i = 0; i < after; i++) { items.push(it.next()); } while((data = it.prev()) !== null) { items.push(data); } var forward = inserts.slice(0, after); var reverse = inserts.slice(0, after - 1).reverse(); var all = forward.concat(reverse); assert.deepEqual(items, all); } do_switch(1); do_switch(10); do_switch(1000); do_switch(9000); } function empty_it(assert, tree_class) { var tree = loader.new_tree(tree_class); var it = tree.iterator(); assert.equal(it.next(), null); it = tree.iterator(); assert.equal(it.prev(), null); } function lower_bound(assert, tree_class) { var inserts = loader.get_inserts(loader.load(SAMPLE_FILE)); var tree = loader.build_tree(tree_class, inserts); inserts.sort(function(a,b) { return a - b; }); for(var i=1; i