Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 03f4820

Browse files
committed
Test index.
1 parent 3c0f1d6 commit 03f4820

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed

src/data-structures/size-balanced-tree.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,19 @@
248248
return Nil;
249249
}
250250
return findNodeAtPos(this._root, pos);
251-
},
251+
};
252+
253+
exports.SBTree.prototype.getIndex = function(node) {
254+
let index = node.left.size;
255+
while (node != this._root) {
256+
let parent = node.parent;
257+
if (parent.right === node) {
258+
index += parent.left.size + 1;
259+
}
260+
node = parent;
261+
}
262+
return index;
263+
};
252264

253265
exports.SBTree.prototype.insert = function(pos, value) {
254266
if (pos >= this._root.size) {

test/data-structures/size-balanced-tree.spec.js

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,16 +100,16 @@ describe('SBTree', function () {
100100

101101
it('push and get 100000 elements, remove the array by always remove the first/last element', function () {
102102
var sTree = new SBTree();
103-
for (var i = 0; i < 2000000; ++i) {
103+
for (var i = 0; i < 200000; ++i) {
104104
sTree.push(i);
105105
}
106106
checkNil();
107-
for (var i = 0; i < 2000000; ++i) {
107+
for (var i = 0; i < 200000; ++i) {
108108
var node = sTree.get(i);
109109
expect(node.value).toBe(i);
110110
}
111-
expect(sTree._root.height).toBe(21);
112-
for (var i = 0; i < 2000000; ++i) {
111+
expect(sTree._root.height).toBe(18);
112+
for (var i = 0; i < 200000; ++i) {
113113
expect(sTree.get(0).value).toBe(i);
114114
var node = sTree.remove(0); // Always remove the first element;
115115
expect(node.value).toBe(i);
@@ -137,7 +137,6 @@ describe('SBTree', function () {
137137
var node = sTree.get(i);
138138
expect(node.value).toBe(expectedArray[i]);
139139
}
140-
console.log(sTree._root.height);
141140
for (var i = 0; i < 90000; ++i) {
142141
var removedPos = getRandomInt(0, sTree.size);
143142
sTree.remove(removedPos);
@@ -147,7 +146,20 @@ describe('SBTree', function () {
147146
var node = sTree.get(i);
148147
expect(node.value).toBe(expectedArray[i]);
149148
}
150-
console.log(sTree._root.height);
151149
checkNil();
152150
});
151+
152+
it('test getIndex', function(){
153+
var sTree = new SBTree();
154+
for (let i = 0; i < 10000; ++i) {
155+
let key = i.toString();
156+
sTree.push(key);
157+
}
158+
159+
for (let i=0; i<100; ++i) {
160+
let item = sTree.get(i);
161+
expect(item.value).toBe(i.toString());
162+
expect(sTree.getIndex(item)).toBe(i);
163+
}
164+
});
153165
});

0 commit comments

Comments
 (0)