Skip to content

Commit 901388c

Browse files
committed
added tests
1 parent 33fccd4 commit 901388c

File tree

8 files changed

+224
-11
lines changed

8 files changed

+224
-11
lines changed

examples/PacktDataStructuresAlgorithms.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/PacktDataStructuresAlgorithms.min.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/js/data-structures/binary-search-tree.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Node } from './models/node';
44
export default class BinarySearchTree {
55
constructor(compareFn = defaultCompare) {
66
this.compareFn = compareFn;
7-
this.root = null;
7+
this.root = undefined;
88
}
99
insert(key) {
1010
// special case: first key
@@ -99,7 +99,7 @@ export default class BinarySearchTree {
9999
}
100100
removeNode(node, key) {
101101
if (node == null) {
102-
return null;
102+
return undefined;
103103
}
104104
if (this.compareFn(key, node.key) === Compare.LESS_THAN) {
105105
node.left = this.removeNode(node.left, key);
@@ -115,7 +115,7 @@ export default class BinarySearchTree {
115115
// 3 - a node with 2 children
116116
// case 1
117117
if (node.left == null && node.right == null) {
118-
node = null;
118+
node = undefined;
119119
return node;
120120
}
121121
// case 2

src/js/data-structures/models/node.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
export class Node {
22
constructor(key) {
33
this.key = key;
4-
this.left = null;
5-
this.right = null;
4+
this.left = undefined;
5+
this.right = undefined;
66
}
77
toString() {
88
return `${this.key}`;
+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import 'mocha';
2+
import { expect } from 'chai';
3+
import { AVLTree } from '../../../src/js/index';
4+
5+
describe('AVLTree', () => {
6+
let tree;
7+
8+
beforeEach(() => {
9+
tree = new AVLTree();
10+
});
11+
12+
it('starts empty', () => {
13+
expect(tree.getRoot()).to.equal(null);
14+
});
15+
16+
it('inserts elements in the AVLTree', () => {
17+
expect(tree.getRoot()).to.equal(null);
18+
19+
tree.insert(1);
20+
tree.insert(2);
21+
tree.insert(3);
22+
tree.insert(4);
23+
tree.insert(5);
24+
tree.insert(6);
25+
tree.insert(7);
26+
tree.insert(14);
27+
tree.insert(15);
28+
tree.insert(13);
29+
tree.insert(12);
30+
tree.insert(11);
31+
});
32+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
import 'mocha';
2+
import { expect } from 'chai';
3+
import { BinarySearchTree } from '../../../src/js/index';
4+
5+
describe('BinarySearchTree', () => {
6+
let tree;
7+
8+
beforeEach(() => {
9+
tree = new BinarySearchTree();
10+
});
11+
12+
it('starts empty', () => {
13+
expect(tree.getRoot()).to.equal(undefined);
14+
});
15+
16+
function assertNode(node, key, left, right) {
17+
if (key != null) {
18+
expect(node.key).to.equal(key);
19+
} else {
20+
expect(node).to.equal(key);
21+
return;
22+
}
23+
24+
if (left != null) {
25+
expect(node.left.key).to.equal(left);
26+
} else {
27+
expect(node.left).to.equal(left);
28+
}
29+
30+
if (right != null) {
31+
expect(node.right.key).to.equal(right);
32+
} else {
33+
expect(node.right).to.equal(right);
34+
}
35+
}
36+
37+
it('inserts elements in the BST', () => {
38+
expect(tree.getRoot()).to.equal(undefined);
39+
40+
tree.insert(11);
41+
tree.insert(7);
42+
tree.insert(15);
43+
tree.insert(5);
44+
tree.insert(3);
45+
tree.insert(9);
46+
tree.insert(8);
47+
tree.insert(10);
48+
tree.insert(13);
49+
tree.insert(12);
50+
tree.insert(14);
51+
tree.insert(20);
52+
tree.insert(18);
53+
tree.insert(25);
54+
55+
let node = tree.getRoot();
56+
assertNode(node, 11, 7, 15);
57+
58+
node = node.left;
59+
assertNode(node, 7, 5, 9);
60+
61+
node = node.left;
62+
assertNode(node, 5, 3, undefined);
63+
64+
node = node.left;
65+
assertNode(node, 3, undefined, undefined);
66+
67+
node = tree.getRoot().left.left.right;
68+
assertNode(node, undefined, undefined, undefined);
69+
70+
node = tree.getRoot().left.right;
71+
assertNode(node, 9, 8, 10);
72+
73+
node = node.left;
74+
assertNode(node, 8, undefined, undefined);
75+
76+
node = tree.getRoot().left.right.right;
77+
assertNode(node, 10, undefined, undefined);
78+
79+
node = tree.getRoot().right;
80+
assertNode(node, 15, 13, 20);
81+
82+
node = node.left;
83+
assertNode(node, 13, 12, 14);
84+
85+
node = node.left;
86+
assertNode(node, 12, undefined, undefined);
87+
88+
node = tree.getRoot().right.left.right;
89+
assertNode(node, 14, undefined, undefined);
90+
91+
node = tree.getRoot().right.right;
92+
assertNode(node, 20, 18, 25);
93+
94+
node = node.left;
95+
assertNode(node, 18, undefined, undefined);
96+
97+
node = tree.getRoot().right.right.right;
98+
assertNode(node, 25, undefined, undefined);
99+
});
100+
101+
it('verifies if element exists', () => {
102+
expect(tree.getRoot()).to.equal(undefined);
103+
});
104+
105+
it('removes a leaf', () => {
106+
expect(tree.getRoot()).to.equal(undefined);
107+
});
108+
});

test/js/data-structures/heap.spec.js

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import 'mocha';
2+
import { expect } from 'chai';
3+
import { MinHeap, heapSort } from '../../../src/js/index';
4+
5+
describe('Heap', () => {
6+
let heap;
7+
8+
beforeEach(() => {
9+
heap = new MinHeap();
10+
});
11+
12+
it('starts empty MinHeap', () => {
13+
expect(heap.size()).to.equal(0);
14+
expect(heap.isEmpty()).to.equal(true);
15+
});
16+
17+
it('inserts values in the MinHeap', () => {
18+
const resultArray = [];
19+
for (let i = 1; i < 10; i++) {
20+
resultArray.push(i);
21+
heap.insert(i);
22+
expect(heap.getAsArray()).to.deep.equal(resultArray);
23+
}
24+
});
25+
26+
it('finds the min value from the MinHeap', () => {
27+
const resultArray = [];
28+
for (let i = 10; i >= 1; i--) {
29+
resultArray.push(i);
30+
heap.insert(i);
31+
expect(heap.findMinimum()).to.equal(i);
32+
}
33+
});
34+
35+
it('performs heapify in the MinHeap', () => {
36+
const resultArray = [];
37+
for (let i = 10; i >= 1; i--) {
38+
resultArray.push(i);
39+
}
40+
expect(heap.heapify(resultArray)).to.deep.equal(resultArray);
41+
});
42+
43+
it('extracts the min value from the MinHeap', () => {
44+
let resultArray = [];
45+
for (let i = 1; i < 10; i++) {
46+
resultArray.push(i);
47+
heap.insert(i);
48+
expect(heap.getAsArray()).to.deep.equal(resultArray);
49+
}
50+
51+
resultArray = [
52+
[],
53+
[2, 4, 3, 8, 5, 6, 7, 9],
54+
[3, 4, 6, 8, 5, 9, 7],
55+
[4, 5, 6, 8, 7, 9],
56+
[5, 7, 6, 8, 9],
57+
[6, 7, 9, 8],
58+
[7, 8, 9],
59+
[8, 9],
60+
[9],
61+
[]
62+
];
63+
64+
for (let i = 1; i < 10; i++) {
65+
expect(heap.extract()).to.equal(i);
66+
expect(heap.getAsArray()).to.deep.equal(resultArray[i]);
67+
}
68+
});
69+
70+
it('Heap Sort', () => {
71+
const array = [3, 2, 5, 6, 1, 7, 8, 9];
72+
73+
expect(heapSort(array)).to.deep.equal([1, 2, 3, 5, 6, 7, 8, 9]);
74+
});
75+
});

test/ts/data-structures/heap.spec.ts

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import 'mocha';
22
import { expect } from 'chai';
3-
import { MinHeap } from '../../../src/ts/index';
4-
import { MaxHeap } from '../../../src/ts/data-structures/heap';
5-
import heapSort from '../../../src/ts/algorithms/sorting/heap-sort';
3+
import { MinHeap, heapSort } from '../../../src/ts/index';
64

75
describe('Heap', () => {
86
let heap: MinHeap<number>;
@@ -55,7 +53,7 @@ describe('Heap', () => {
5553
[2, 4, 3, 8, 5, 6, 7, 9],
5654
[3, 4, 6, 8, 5, 9, 7],
5755
[4, 5, 6, 8, 7, 9],
58-
[5, 7 , 6, 8, 9],
56+
[5, 7, 6, 8, 9],
5957
[6, 7, 9, 8],
6058
[7, 8, 9],
6159
[8, 9],

0 commit comments

Comments
 (0)