UNPKG

6.91 kBPlain TextView Raw
1import { MaxHeap } from "../MaxHeap";
2import { MinHeap } from "../MinHeap";
3
4describe("MaxHeap test", () => {
5 test("should create an empty max heap", () => {
6 const maxHeap = new MaxHeap<number>();
7 expect(maxHeap).toBeDefined();
8 expect(maxHeap.peek()).toBeNull();
9 expect(maxHeap.isEmpty()).toBe(true);
10 });
11
12 test("should add items to the heap and heapify it up", () => {
13 const maxHeap = new MaxHeap<number>();
14 maxHeap.add(10);
15 expect(maxHeap).toBeDefined();
16 expect(maxHeap.isEmpty()).toBe(false);
17 expect(maxHeap.peek()).toBe(10);
18 expect(maxHeap.toString()).toBe("10");
19
20 maxHeap.add(5);
21 expect(maxHeap.peek()).toBe(10);
22 expect(maxHeap.toString()).toBe("10,5");
23
24 maxHeap.add(12);
25 expect(maxHeap.peek()).toBe(12);
26 expect(maxHeap.toString()).toBe("12,5,10");
27
28 maxHeap.add(3);
29 expect(maxHeap.peek()).toBe(12);
30 expect(maxHeap.toString()).toBe("12,5,10,3");
31
32 maxHeap.add(7);
33 expect(maxHeap.peek()).toBe(12);
34 expect(maxHeap.toString()).toBe("12,7,10,3,5");
35
36 expect(maxHeap.poll()).toBe(12);
37 expect(maxHeap.toString()).toBe("10,7,5,3");
38
39 expect(maxHeap.poll()).toBe(10);
40 expect(maxHeap.toString()).toBe("7,3,5");
41
42 expect(maxHeap.poll()).toBe(7);
43 expect(maxHeap.toString()).toBe("5,3");
44
45 expect(maxHeap.poll()).toBe(5);
46 expect(maxHeap.toString()).toBe("3");
47
48 expect(maxHeap.poll()).toBe(3);
49 expect(maxHeap.isEmpty()).toBe(true);
50 });
51
52 test("should find items in heap", () => {
53 const maxHeap = new MaxHeap<number>();
54 maxHeap.add(5);
55 maxHeap.add(12);
56 maxHeap.add(7);
57 expect(maxHeap.find(item => item === 5)).not.toBeNull();
58 expect(maxHeap.find(5)).not.toBeNull();
59 expect(maxHeap.findAll(item => item === 5)).toEqual([5]);
60 expect(maxHeap.findAll(5)).toEqual([5]);
61 });
62
63 test("should poll empty to heap", () => {
64 const maxHeap = new MaxHeap<number>();
65 maxHeap.add(5);
66 expect(maxHeap.poll()).toBe(5);
67 expect(maxHeap.poll()).toBeNull();
68 });
69
70 test("should entries to heap", () => {
71 const maxHeap = new MaxHeap<number>();
72 maxHeap.add(5);
73 maxHeap.add(7);
74 expect(maxHeap.entries()).toEqual([7, 5]);
75 });
76});
77
78describe("MinHeap test", () => {
79 test("should create an empty max heap", () => {
80 const minHeap = new MinHeap<number>();
81 expect(minHeap).toBeDefined();
82 expect(minHeap.peek()).toBeNull();
83 expect(minHeap.isEmpty()).toBe(true);
84 });
85
86 test("should add items to the heap and heapify it up", () => {
87 const minHeap = new MinHeap<number>();
88 minHeap.add(10);
89 expect(minHeap.isEmpty()).toBe(false);
90 expect(minHeap.peek()).toBe(10);
91
92 minHeap.add(5);
93 expect(minHeap.peek()).toBe(5);
94 expect(minHeap.toString()).toBe("5,10");
95
96 minHeap.add(7);
97 expect(minHeap.peek()).toBe(5);
98 expect(minHeap.toString()).toBe("5,10,7");
99
100 minHeap.add(8);
101 expect(minHeap.peek()).toBe(5);
102 expect(minHeap.toString()).toBe("5,8,7,10");
103
104 minHeap.add(3);
105 expect(minHeap.peek()).toBe(3);
106 expect(minHeap.toString()).toBe("3,5,7,10,8");
107
108 expect(minHeap.poll()).toBe(3);
109 expect(minHeap.toString()).toBe("5,8,7,10");
110
111 expect(minHeap.poll()).toBe(5);
112 expect(minHeap.toString()).toBe("7,8,10");
113
114 expect(minHeap.poll()).toBe(7);
115 expect(minHeap.toString()).toBe("8,10");
116
117 expect(minHeap.poll()).toBe(8);
118 expect(minHeap.toString()).toBe("10");
119
120 expect(minHeap.poll()).toBe(10);
121 expect(minHeap.toString()).toBe("");
122 expect(minHeap.isEmpty()).toBe(true);
123 });
124
125 test("MinHeap delete test", () => {
126 const minHeap = new MinHeap<number>();
127 minHeap.add(5);
128 minHeap.add(15);
129 minHeap.remove(5);
130 expect(minHeap.find(5)).toBeNull();
131 minHeap.add(5);
132 minHeap.add(7);
133 minHeap.remove(5);
134 expect(minHeap.find(5)).toBeNull();
135 minHeap.add(12);
136 minHeap.add(6);
137 minHeap.remove(6);
138 minHeap.remove(item => item === 12);
139 minHeap.remove(15);
140 minHeap.remove(7);
141 expect(minHeap.find(15)).toBeNull();
142 expect(minHeap.Size).toBe(0);
143
144 minHeap.add(6);
145 minHeap.add(8);
146 minHeap.add(10);
147 minHeap.add(14);
148 minHeap.add(5);
149 minHeap.add(7);
150
151 minHeap.remove(6);
152 minHeap.remove(10);
153 minHeap.remove(5);
154 minHeap.remove(14);
155 minHeap.remove(8);
156 minHeap.remove(7);
157
158 expect(minHeap.Size).toBe(0);
159 });
160
161 test("MinHeap empty test", () => {
162 const minHeap = new MinHeap<number>();
163 minHeap.add(5);
164 minHeap.add(15);
165 minHeap.clear();
166 expect(minHeap.Size).toBe(0);
167 });
168});
169
170describe("Heap Gen test", () => {
171 test("MaxHeap Gen test", () => {
172 const maxHeap = new MaxHeap<{value: number}>("value");
173 maxHeap.add({value: 10});
174 expect(maxHeap).toBeDefined();
175 expect(maxHeap.isEmpty()).toBe(false);
176 expect(maxHeap.peek()).toEqual({value: 10});
177
178 maxHeap.add({value: 5});
179 expect(maxHeap.peek()).toEqual({value: 10});
180
181 maxHeap.add({value: 12});
182 expect(maxHeap.peek()).toEqual({value: 12});
183
184 maxHeap.add({value: 3});
185 expect(maxHeap.peek()).toEqual({value: 12});
186
187 maxHeap.add({value: 7});
188 expect(maxHeap.peek()).toEqual({value: 12});
189
190 expect(maxHeap.poll()).toEqual({value: 12});
191 expect(maxHeap.poll()).toEqual({value: 10});
192 expect(maxHeap.poll()).toEqual({value: 7});
193 expect(maxHeap.poll()).toEqual({value: 5});
194 expect(maxHeap.poll()).toEqual({value: 3});
195
196 expect(maxHeap.isEmpty()).toBe(true);
197 });
198
199 test("MinHeap Gen test", () => {
200 const minHeap = new MinHeap<{value: number}>("value");
201 minHeap.add({value: 10});
202 expect(minHeap.isEmpty()).toBe(false);
203 expect(minHeap.peek()).toEqual({value: 10});
204
205 minHeap.add({value: 5});
206 expect(minHeap.peek()).toEqual({value: 5});
207
208 minHeap.add({value: 7});
209 expect(minHeap.peek()).toEqual({value: 5});
210
211 minHeap.add({value: 8});
212 expect(minHeap.peek()).toEqual({value: 5});
213
214 minHeap.add({value: 3});
215 expect(minHeap.peek()).toEqual({value: 3});
216
217 expect(minHeap.poll()).toEqual({value: 3});
218 expect(minHeap.poll()).toEqual({value: 5});
219 expect(minHeap.poll()).toEqual({value: 7});
220 expect(minHeap.poll()).toEqual({value: 8});
221 expect(minHeap.poll()).toEqual({value: 10});
222
223 expect(minHeap.isEmpty()).toBe(true);
224 });
225});