@gabrielrufino/cube 1.0.1 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/package.json +6 -6
  2. package/.github/workflows/cd.yml +0 -26
  3. package/.github/workflows/ci.yml +0 -23
  4. package/coverage/clover.xml +0 -706
  5. package/coverage/coverage-final.json +0 -19
  6. package/coverage/lcov-report/base.css +0 -224
  7. package/coverage/lcov-report/block-navigation.js +0 -87
  8. package/coverage/lcov-report/favicon.png +0 -0
  9. package/coverage/lcov-report/index.html +0 -327
  10. package/coverage/lcov-report/prettify.css +0 -1
  11. package/coverage/lcov-report/prettify.js +0 -2
  12. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  13. package/coverage/lcov-report/sorter.js +0 -196
  14. package/coverage/lcov-report/src/Algorithms/index.html +0 -117
  15. package/coverage/lcov-report/src/Algorithms/index.ts.html +0 -149
  16. package/coverage/lcov-report/src/Array/index.html +0 -117
  17. package/coverage/lcov-report/src/Array/index.ts.html +0 -290
  18. package/coverage/lcov-report/src/DataStructure/index.html +0 -117
  19. package/coverage/lcov-report/src/DataStructure/index.ts.html +0 -131
  20. package/coverage/lcov-report/src/Deck/index.html +0 -117
  21. package/coverage/lcov-report/src/Deck/index.ts.html +0 -239
  22. package/coverage/lcov-report/src/Dictionary/index.html +0 -117
  23. package/coverage/lcov-report/src/Dictionary/index.ts.html +0 -350
  24. package/coverage/lcov-report/src/DoublyLinkedList/Node.ts.html +0 -113
  25. package/coverage/lcov-report/src/DoublyLinkedList/index.html +0 -132
  26. package/coverage/lcov-report/src/DoublyLinkedList/index.ts.html +0 -836
  27. package/coverage/lcov-report/src/HashTable/index.html +0 -117
  28. package/coverage/lcov-report/src/HashTable/index.ts.html +0 -320
  29. package/coverage/lcov-report/src/HashTableLinearProbing/index.html +0 -117
  30. package/coverage/lcov-report/src/HashTableLinearProbing/index.ts.html +0 -95
  31. package/coverage/lcov-report/src/HashTableSeparateChaining/HashTableSeparateChainingElement.ts.html +0 -149
  32. package/coverage/lcov-report/src/HashTableSeparateChaining/index.html +0 -132
  33. package/coverage/lcov-report/src/HashTableSeparateChaining/index.ts.html +0 -398
  34. package/coverage/lcov-report/src/LinkedList/Node.ts.html +0 -110
  35. package/coverage/lcov-report/src/LinkedList/index.html +0 -132
  36. package/coverage/lcov-report/src/LinkedList/index.ts.html +0 -641
  37. package/coverage/lcov-report/src/List/index.html +0 -117
  38. package/coverage/lcov-report/src/List/index.ts.html +0 -89
  39. package/coverage/lcov-report/src/Queue/index.html +0 -117
  40. package/coverage/lcov-report/src/Queue/index.ts.html +0 -218
  41. package/coverage/lcov-report/src/Set/index.html +0 -117
  42. package/coverage/lcov-report/src/Set/index.ts.html +0 -488
  43. package/coverage/lcov-report/src/Stack/index.html +0 -117
  44. package/coverage/lcov-report/src/Stack/index.ts.html +0 -215
  45. package/coverage/lcov-report/src/index.html +0 -117
  46. package/coverage/lcov-report/src/index.ts.html +0 -125
  47. package/coverage/lcov.info +0 -1346
  48. package/src/Algorithms/index.spec.ts +0 -15
  49. package/src/Algorithms/index.ts +0 -21
  50. package/src/Array/IArray.ts +0 -10
  51. package/src/Array/index.spec.ts +0 -151
  52. package/src/Array/index.ts +0 -68
  53. package/src/BinarySearchTree/BinarySearchTreeNode.spec.ts +0 -29
  54. package/src/BinarySearchTree/BinarySearchTreeNode.ts +0 -23
  55. package/src/BinarySearchTree/IBinarySearchNodeOptions.ts +0 -6
  56. package/src/BinarySearchTree/IBinarySearchTree.ts +0 -16
  57. package/src/BinarySearchTree/IBinarySearchTreeData.ts +0 -9
  58. package/src/BinarySearchTree/index.spec.ts +0 -486
  59. package/src/BinarySearchTree/index.ts +0 -198
  60. package/src/DataStructure/index.spec.ts +0 -25
  61. package/src/DataStructure/index.ts +0 -15
  62. package/src/Deck/IDeck.ts +0 -10
  63. package/src/Deck/index.spec.ts +0 -131
  64. package/src/Deck/index.ts +0 -51
  65. package/src/Dictionary/IDictionary.ts +0 -18
  66. package/src/Dictionary/IDictionaryData.ts +0 -5
  67. package/src/Dictionary/index.spec.ts +0 -310
  68. package/src/Dictionary/index.ts +0 -88
  69. package/src/DoublyLinkedList/IDoublyLinkedList.ts +0 -18
  70. package/src/DoublyLinkedList/Node.ts +0 -9
  71. package/src/DoublyLinkedList/index.spec.ts +0 -478
  72. package/src/DoublyLinkedList/index.ts +0 -250
  73. package/src/Graph/GraphNodeNotFoundError.ts +0 -7
  74. package/src/Graph/GraphSearchNodeStates.ts +0 -8
  75. package/src/Graph/IGraph.ts +0 -15
  76. package/src/Graph/IGraphOptions.ts +0 -6
  77. package/src/Graph/index.spec.ts +0 -318
  78. package/src/Graph/index.ts +0 -170
  79. package/src/HashTable/IHashTable.ts +0 -11
  80. package/src/HashTable/IHashTableData.ts +0 -5
  81. package/src/HashTable/IHashTableInputs.ts +0 -5
  82. package/src/HashTable/IHashTableOptions.ts +0 -5
  83. package/src/HashTable/index.spec.ts +0 -136
  84. package/src/HashTable/index.ts +0 -78
  85. package/src/HashTableLinearProbing/HashTableLinearProbingElement.spec.ts +0 -28
  86. package/src/HashTableLinearProbing/HashTableLinearProbingElement.ts +0 -18
  87. package/src/HashTableLinearProbing/IHashTableLinearProbing.ts +0 -11
  88. package/src/HashTableLinearProbing/IHashTableLinearProbingData.ts +0 -7
  89. package/src/HashTableLinearProbing/IHashTableLinearProbingInputs.ts +0 -5
  90. package/src/HashTableLinearProbing/IHashTableLinearProbingOptions.ts +0 -5
  91. package/src/HashTableLinearProbing/index.spec.ts +0 -266
  92. package/src/HashTableLinearProbing/index.ts +0 -128
  93. package/src/HashTableSeparateChaining/HashTableSeparateChainingElement.ts +0 -21
  94. package/src/HashTableSeparateChaining/IHashTableSeparateChaining.ts +0 -12
  95. package/src/HashTableSeparateChaining/IHashTableSeparateChainingData.ts +0 -7
  96. package/src/HashTableSeparateChaining/IHashTableSeparateChainingInputs.ts +0 -5
  97. package/src/HashTableSeparateChaining/IHashTableSeparateChainingOptions.ts +0 -5
  98. package/src/HashTableSeparateChaining/index.spec.ts +0 -173
  99. package/src/HashTableSeparateChaining/index.ts +0 -104
  100. package/src/LinkedList/ILinkedList.ts +0 -15
  101. package/src/LinkedList/ILinkedListItem.ts +0 -6
  102. package/src/LinkedList/Node.ts +0 -8
  103. package/src/LinkedList/index.spec.ts +0 -355
  104. package/src/LinkedList/index.ts +0 -185
  105. package/src/List/index.ts +0 -1
  106. package/src/MaxHeap/IMaxHeap.ts +0 -10
  107. package/src/MaxHeap/IMaxHeapOptions.ts +0 -6
  108. package/src/MaxHeap/index.spec.ts +0 -161
  109. package/src/MaxHeap/index.ts +0 -91
  110. package/src/MinHeap/IMinHeap.ts +0 -10
  111. package/src/MinHeap/IMinHeapOptions.ts +0 -6
  112. package/src/MinHeap/index.spec.ts +0 -161
  113. package/src/MinHeap/index.ts +0 -91
  114. package/src/Queue/IQueue.ts +0 -9
  115. package/src/Queue/index.spec.ts +0 -92
  116. package/src/Queue/index.ts +0 -44
  117. package/src/Set/ISet.ts +0 -17
  118. package/src/Set/index.spec.ts +0 -246
  119. package/src/Set/index.ts +0 -134
  120. package/src/Stack/IStack.ts +0 -9
  121. package/src/Stack/index.spec.ts +0 -108
  122. package/src/Stack/index.ts +0 -43
  123. package/src/index.ts +0 -17
@@ -1,185 +0,0 @@
1
- import ILinkedList from './ILinkedList';
2
- import Node from './Node';
3
-
4
- export default class LinkedList<T = number> implements ILinkedList<T> {
5
- private readonly _FIRST_POSITION = 0;
6
- private _head: Node<T> | null = null;
7
- private _size: number = 0;
8
-
9
- constructor(...inputs: T[]) {
10
- if (inputs.length) {
11
- const nodes = inputs.map(input => new Node<T>(input));
12
-
13
- for (let i = 0; i < inputs.length - 1; i++) {
14
- nodes[i].next = nodes[i + 1];
15
- }
16
-
17
- this._head = nodes[0];
18
- this._size = nodes.length;
19
- }
20
- }
21
-
22
- public get data() {
23
- const data = [];
24
-
25
- let current = this._head;
26
-
27
- while (current) {
28
- data.push({
29
- value: current.value,
30
- next: current.next?.value || null,
31
- });
32
-
33
- current = current.next;
34
- }
35
-
36
- return data;
37
- }
38
-
39
- public get size() {
40
- return this._size;
41
- }
42
-
43
- public get isEmpty() {
44
- return this.size === 0;
45
- }
46
-
47
- public positionOf(element: T): number | undefined {
48
- let current = this._head;
49
- let position = 0;
50
-
51
- while (current && current.value !== element) {
52
- current = current?.next;
53
- position += 1;
54
- }
55
-
56
- if (current) {
57
- return position;
58
- }
59
- }
60
-
61
- public push(element: T): T {
62
- if (this._head) {
63
- let current: Node<T> = this._head;
64
-
65
- while (current.next) {
66
- current = current.next;
67
- }
68
-
69
- current.next = new Node<T>(element);
70
- } else {
71
- this._head = new Node<T>(element);
72
- }
73
-
74
- this._size += 1;
75
-
76
- return element;
77
- }
78
-
79
- public remove(element: T): T | undefined {
80
- const position = this.positionOf(element);
81
-
82
- if (position) {
83
- return this.removeFromPosition(position);
84
- }
85
- }
86
-
87
- public insertInPosition(element: T, position: number): T | undefined {
88
- if (position < this._FIRST_POSITION || position > this.size) {
89
- return undefined;
90
- }
91
-
92
- const node = new Node<T>(element);
93
-
94
- if (position === this._FIRST_POSITION) {
95
- node.next = this._head;
96
- this._head = node;
97
- } else {
98
- const before = this.getNodeFromPosition(position - 1);
99
- const after = (before && before.next) || null;
100
-
101
- if (before) {
102
- before.next = node;
103
- }
104
-
105
- node.next = after;
106
- }
107
-
108
- this._size += 1;
109
-
110
- return element;
111
- }
112
-
113
- public getFromPosition(position: number) {
114
- if (position < this._FIRST_POSITION || position > this.size - 1) {
115
- return undefined;
116
- }
117
-
118
- let node = this._head;
119
-
120
- for (let i = 0; i < position; i++) {
121
- node = node?.next || null;
122
- }
123
-
124
- if (node?.value) {
125
- return {
126
- value: node.value,
127
- next: node.next?.value || null,
128
- };
129
- }
130
-
131
- return undefined;
132
- }
133
-
134
- public removeFromPosition(position: number): T | undefined {
135
- if (position < this._FIRST_POSITION || position > (this.size - 1)) {
136
- return undefined;
137
- }
138
-
139
- let current: Node<T> | null = this._head;
140
-
141
- if (position === this._FIRST_POSITION) {
142
- this._head = current?.next || null;
143
- } else {
144
- let previous: Node<T> | null | undefined;
145
-
146
- for (let i = 0; i < position; i++) {
147
- previous = current;
148
- current = current?.next || null;
149
- }
150
-
151
- if (previous) {
152
- previous.next = current?.next || null;
153
- }
154
- }
155
-
156
- this._size -= 1;
157
- return current?.value;
158
- }
159
-
160
- private getNodeFromPosition(position: number): Node<T> | undefined {
161
- if (position < this._FIRST_POSITION || position > this.size - 1) {
162
- return undefined;
163
- }
164
-
165
- let node = this._head;
166
-
167
- for (let i = 0; i < position; i++) {
168
- node = node?.next || null;
169
- }
170
-
171
- return node || undefined;
172
- }
173
-
174
- private [Symbol.toPrimitive](type: string): string | number | null {
175
- if (type === 'string') {
176
- return `[Head] ${this.data.map(({value}) => value).join(' => ')}`;
177
- }
178
-
179
- if (type === 'number') {
180
- return this.size;
181
- }
182
-
183
- return null;
184
- }
185
- }
package/src/List/index.ts DELETED
@@ -1 +0,0 @@
1
- export {default} from '../Array';
@@ -1,10 +0,0 @@
1
- interface IMaxHeap<T> {
2
- get data(): T[];
3
- get size(): number;
4
- get isEmpty(): boolean;
5
- get max(): T | null;
6
- insert(_value: T): T;
7
- extract(): T | null;
8
- }
9
-
10
- export default IMaxHeap;
@@ -1,6 +0,0 @@
1
- interface IMaxHeapOptions<T> {
2
- greaterThanOrEqualTo?: (_value1: T, _value2: T) => boolean;
3
- inputs?: T[],
4
- }
5
-
6
- export default IMaxHeapOptions;
@@ -1,161 +0,0 @@
1
- import {describe, it, expect} from '@jest/globals';
2
- import faker from 'faker';
3
-
4
- import MaxHeap from './';
5
-
6
- describe('MaxHeap', () => {
7
- it('Should create an empty max heap without problems', () => {
8
- const maxHeap = new MaxHeap();
9
-
10
- expect(maxHeap.data).toEqual([]);
11
- expect(maxHeap.size).toBe(0);
12
- });
13
-
14
- it('Should create a filled max heap without problems', () => {
15
- const maxHeap = new MaxHeap({
16
- inputs: [5, 2, 1, 9],
17
- });
18
-
19
- expect(maxHeap.data).toEqual([9, 5, 1, 2]);
20
- expect(maxHeap.size).toBe(4);
21
- });
22
-
23
- describe('.isEmpty', () => {
24
- it('Should be true when the heap has no values', () => {
25
- const maxHeap = new MaxHeap();
26
-
27
- expect(maxHeap.isEmpty).toBe(true);
28
- });
29
-
30
- it('Should be false when the heap has at least one value', () => {
31
- const maxHeap = new MaxHeap({
32
- inputs: [faker.datatype.number()],
33
- });
34
-
35
- expect(maxHeap.isEmpty).toBe(false);
36
- });
37
- });
38
-
39
- describe('.max', () => {
40
- it('Should be the min value when the heap is not empty', () => {
41
- const inputs = new Array(10).fill(undefined).map(faker.datatype.number);
42
- const maxHeap = new MaxHeap({
43
- inputs,
44
- });
45
-
46
- expect(maxHeap.max).toBe(Math.max(...inputs));
47
- });
48
-
49
- it('Should be null when the heap is empty', () => {
50
- const maxHeap = new MaxHeap();
51
-
52
- expect(maxHeap.max).toBeNull();
53
- });
54
- });
55
-
56
- describe('.insert()', () => {
57
- it('Should insert new values in the heap', () => {
58
- const maxHeap = new MaxHeap();
59
-
60
- maxHeap.insert(5);
61
- expect(maxHeap.data).toEqual([5]);
62
- expect(maxHeap.size).toBe(1);
63
-
64
- maxHeap.insert(2);
65
- expect(maxHeap.data).toEqual([5, 2]);
66
- expect(maxHeap.size).toBe(2);
67
-
68
- maxHeap.insert(1);
69
- expect(maxHeap.data).toEqual([5, 2, 1]);
70
- expect(maxHeap.size).toBe(3);
71
-
72
- maxHeap.insert(9);
73
- expect(maxHeap.data).toEqual([9, 5, 1, 2]);
74
- expect(maxHeap.size).toBe(4);
75
- });
76
-
77
- it('Should return the inserted value', () => {
78
- const maxHeap = new MaxHeap();
79
- const value = faker.datatype.number();
80
- const returned = maxHeap.insert(value);
81
-
82
- expect(returned).toBe(value);
83
- });
84
- });
85
-
86
- describe('.extract()', () => {
87
- it('Should extract the max value of the heap and adjust the heap after this', () => {
88
- const maxHeap = new MaxHeap({
89
- inputs: [9, 8, 7, 6, 5, 4, 3, 2, 1],
90
- });
91
- maxHeap.extract();
92
-
93
- expect(maxHeap.data).toEqual([8, 6, 7, 2, 5, 4, 3, 1]);
94
- expect(maxHeap.size).toBe(8);
95
- });
96
-
97
- it('Should return the extracted value', () => {
98
- const inputs = new Array(10).fill(undefined).map(faker.datatype.number);
99
- const maxHeap = new MaxHeap({inputs});
100
- const returned = maxHeap.extract();
101
-
102
- expect(returned).toBe(Math.max(...inputs));
103
- });
104
-
105
- it('Should change nothing if the heap is empty', () => {
106
- const maxHeap = new MaxHeap();
107
- maxHeap.extract();
108
-
109
- expect(maxHeap.data).toEqual([]);
110
- expect(maxHeap.size).toBe(0);
111
- });
112
- });
113
-
114
- describe('Heap Sort', () => {
115
- it('Should sort an array in DESC order', () => {
116
- const maxHeap = new MaxHeap({
117
- inputs: [
118
- 7,
119
- 1,
120
- 10,
121
- 4,
122
- 8,
123
- 6,
124
- 2,
125
- 3,
126
- 5,
127
- 9,
128
- ],
129
- });
130
-
131
- const {size} = maxHeap;
132
- const result = [];
133
-
134
- for (let i = 1; i <= size; i++) {
135
- result.push(maxHeap.extract());
136
- }
137
-
138
- expect(result).toEqual([10, 9, 8, 7, 6, 5, 4, 3, 2, 1]);
139
- });
140
- });
141
-
142
- describe('Conversion to primitive', () => {
143
- it('Should return separated by comma values in string conversion', () => {
144
- const maxHeap = new MaxHeap({
145
- inputs: [1, 2, 3, 4, 5],
146
- });
147
- const string = String(maxHeap);
148
-
149
- expect(string).toBe('5, 4, 2, 1, 3');
150
- });
151
-
152
- it('Should return the size in number conversion', () => {
153
- const maxHeap = new MaxHeap({
154
- inputs: [1, 2, 3, 4, 5],
155
- });
156
- const number = Number(maxHeap);
157
-
158
- expect(number).toBe(5);
159
- });
160
- });
161
- });
@@ -1,91 +0,0 @@
1
- import IMaxHeap from './IMaxHeap';
2
- import IMaxHeapOptions from './IMaxHeapOptions';
3
-
4
- export default class MaxHeap<T = number> implements IMaxHeap<T> {
5
- private _data: T[] = [];
6
-
7
- constructor({greaterThanOrEqualTo, inputs = []}: IMaxHeapOptions<T> = {inputs: []}) {
8
- if (greaterThanOrEqualTo) {
9
- this._greaterThanOrEqualTo = greaterThanOrEqualTo;
10
- }
11
-
12
- for (const input of inputs) {
13
- this.insert(input);
14
- }
15
- }
16
-
17
- get data(): T[] {
18
- return [...this._data];
19
- }
20
-
21
- get size(): number {
22
- return this.data.length;
23
- }
24
-
25
- get isEmpty(): boolean {
26
- return this.size === 0;
27
- }
28
-
29
- get max(): T | null {
30
- return this.data[0] || null;
31
- }
32
-
33
- public insert(value: T): T {
34
- this._data = [...this.data, value];
35
- this._siftUp(this.size - 1);
36
- return value;
37
- }
38
-
39
- public extract(): T | null {
40
- if (!this.isEmpty) {
41
- const [min, ...rest] = this.data;
42
- this._data = [rest[rest.length - 1], ...rest.slice(0, rest.length - 1)].filter(value => value !== undefined);
43
- this._siftDown(0);
44
-
45
- return min;
46
- }
47
-
48
- return null;
49
- }
50
-
51
- private _greaterThanOrEqualTo = (value1: T, value2: T): boolean => value1 >= value2;
52
- private _getLeftIndex = (index: number): number => (2 * index) + 1;
53
- private _getRightIndex = (index: number): number => (2 * index) + 2;
54
- private _getParentIndex = (index: number): number => Math.floor((index - 1) / 2);
55
-
56
- private _siftUp(index: number): void {
57
- const parent = this._getParentIndex(index);
58
-
59
- if (index > 0 && this._greaterThanOrEqualTo(this.data[index], this.data[parent])) {
60
- [this._data[parent], this._data[index]] = [this.data[index], this.data[parent]];
61
- this._siftUp(parent);
62
- }
63
- }
64
-
65
- private _siftDown(index: number): void {
66
- const left = this._getLeftIndex(index);
67
- const right = this._getRightIndex(index);
68
-
69
- if (left < this.size && this._greaterThanOrEqualTo(this.data[left], this.data[index])) {
70
- [this._data[left], this._data[index]] = [this.data[index], this.data[left]];
71
- this._siftDown(left);
72
- }
73
-
74
- if (right < this.size && this._greaterThanOrEqualTo(this.data[right], this.data[index])) {
75
- [this._data[right], this._data[index]] = [this.data[index], this.data[right]];
76
- this._siftDown(right);
77
- }
78
- }
79
-
80
- private [Symbol.toPrimitive](type: string): string | number | null {
81
- if (type === 'string') {
82
- return this.data.join(', ');
83
- }
84
-
85
- if (type === 'number') {
86
- return this.size;
87
- }
88
-
89
- return null;
90
- }
91
- }
@@ -1,10 +0,0 @@
1
- interface IMinHeap<T> {
2
- get data(): T[];
3
- get size(): number;
4
- get isEmpty(): boolean;
5
- get min(): T | null;
6
- insert(_value: T): T;
7
- extract(): T | null;
8
- }
9
-
10
- export default IMinHeap;
@@ -1,6 +0,0 @@
1
- interface IMinHeapOptions<T> {
2
- lessThanOrEqualTo?: (_value1: T, _value2: T) => boolean;
3
- inputs?: T[],
4
- }
5
-
6
- export default IMinHeapOptions;
@@ -1,161 +0,0 @@
1
- import {describe, it, expect} from '@jest/globals';
2
- import faker from 'faker';
3
-
4
- import MinHeap from './';
5
-
6
- describe('MinHeap', () => {
7
- it('Should create an empty min heap without problems', () => {
8
- const minHeap = new MinHeap();
9
-
10
- expect(minHeap.data).toEqual([]);
11
- expect(minHeap.size).toBe(0);
12
- });
13
-
14
- it('Should create a filled min heap without problems', () => {
15
- const minHeap = new MinHeap({
16
- inputs: [5, 2, 1, 9],
17
- });
18
-
19
- expect(minHeap.data).toEqual([1, 5, 2, 9]);
20
- expect(minHeap.size).toBe(4);
21
- });
22
-
23
- describe('.isEmpty', () => {
24
- it('Should be true when the heap has no values', () => {
25
- const minHeap = new MinHeap();
26
-
27
- expect(minHeap.isEmpty).toBe(true);
28
- });
29
-
30
- it('Should be false when the heap has at least one value', () => {
31
- const minHeap = new MinHeap({
32
- inputs: [faker.datatype.number()],
33
- });
34
-
35
- expect(minHeap.isEmpty).toBe(false);
36
- });
37
- });
38
-
39
- describe('.min', () => {
40
- it('Should be the min value when the heap is not empty', () => {
41
- const inputs = new Array(10).fill(undefined).map(faker.datatype.number);
42
- const minHeap = new MinHeap({
43
- inputs,
44
- });
45
-
46
- expect(minHeap.min).toBe(Math.min(...inputs));
47
- });
48
-
49
- it('Should be null when the heap is empty', () => {
50
- const minHeap = new MinHeap();
51
-
52
- expect(minHeap.min).toBeNull();
53
- });
54
- });
55
-
56
- describe('.insert()', () => {
57
- it('Should insert new values in the heap', () => {
58
- const minHeap = new MinHeap();
59
-
60
- minHeap.insert(5);
61
- expect(minHeap.data).toEqual([5]);
62
- expect(minHeap.size).toBe(1);
63
-
64
- minHeap.insert(2);
65
- expect(minHeap.data).toEqual([2, 5]);
66
- expect(minHeap.size).toBe(2);
67
-
68
- minHeap.insert(1);
69
- expect(minHeap.data).toEqual([1, 5, 2]);
70
- expect(minHeap.size).toBe(3);
71
-
72
- minHeap.insert(9);
73
- expect(minHeap.data).toEqual([1, 5, 2, 9]);
74
- expect(minHeap.size).toBe(4);
75
- });
76
-
77
- it('Should return the inserted value', () => {
78
- const minHeap = new MinHeap();
79
- const value = faker.datatype.number();
80
- const returned = minHeap.insert(value);
81
-
82
- expect(returned).toBe(value);
83
- });
84
- });
85
-
86
- describe('.extract()', () => {
87
- it('Should extract the min value of the heap and adjust the heap after this', () => {
88
- const minHeap = new MinHeap({
89
- inputs: [1, 2, 3, 4, 5, 6, 7, 8, 9],
90
- });
91
- minHeap.extract();
92
-
93
- expect(minHeap.data).toEqual([2, 4, 3, 8, 5, 6, 7, 9]);
94
- expect(minHeap.size).toBe(8);
95
- });
96
-
97
- it('Should return the extracted value', () => {
98
- const inputs = new Array(10).fill(undefined).map(faker.datatype.number);
99
- const minHeap = new MinHeap({inputs});
100
- const returned = minHeap.extract();
101
-
102
- expect(returned).toBe(Math.min(...inputs));
103
- });
104
-
105
- it('Should change nothing if the heap is empty', () => {
106
- const minHeap = new MinHeap();
107
- minHeap.extract();
108
-
109
- expect(minHeap.data).toEqual([]);
110
- expect(minHeap.size).toBe(0);
111
- });
112
- });
113
-
114
- describe('Heap Sort', () => {
115
- it('Should sort an array in ASC order', () => {
116
- const minHeap = new MinHeap({
117
- inputs: [
118
- 7,
119
- 1,
120
- 10,
121
- 4,
122
- 8,
123
- 6,
124
- 2,
125
- 3,
126
- 5,
127
- 9,
128
- ],
129
- });
130
-
131
- const {size} = minHeap;
132
- const result = [];
133
-
134
- for (let i = 1; i <= size; i++) {
135
- result.push(minHeap.extract());
136
- }
137
-
138
- expect(result).toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
139
- });
140
- });
141
-
142
- describe('Conversion to primitive', () => {
143
- it('Should return separated by comma values in string conversion', () => {
144
- const maxHeap = new MinHeap({
145
- inputs: [1, 2, 3, 4, 5],
146
- });
147
- const string = String(maxHeap);
148
-
149
- expect(string).toBe('1, 2, 3, 4, 5');
150
- });
151
-
152
- it('Should return the size in number conversion', () => {
153
- const maxHeap = new MinHeap({
154
- inputs: [1, 2, 3, 4, 5],
155
- });
156
- const number = Number(maxHeap);
157
-
158
- expect(number).toBe(5);
159
- });
160
- });
161
- });