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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy