diff --git a/src/data-structures/priority-queue/PriorityQueue.js b/src/data-structures/priority-queue/PriorityQueue.js index 0b283c2c7a..acb8a213a0 100644 --- a/src/data-structures/priority-queue/PriorityQueue.js +++ b/src/data-structures/priority-queue/PriorityQueue.js @@ -34,7 +34,7 @@ export default class PriorityQueue extends MinHeap { * @param {Comparator} [customFindingComparator] - custom function for finding the item to remove * @return {PriorityQueue} */ - remove(item, customFindingComparator) { + remove(item, customFindingComparator = new Comparator(this.compareValue)) { super.remove(item, customFindingComparator); this.priorities.delete(item); return this; diff --git a/src/data-structures/priority-queue/__test__/PriorityQueue.test.js b/src/data-structures/priority-queue/__test__/PriorityQueue.test.js index 2ffe4acb74..e19a1e6510 100644 --- a/src/data-structures/priority-queue/__test__/PriorityQueue.test.js +++ b/src/data-structures/priority-queue/__test__/PriorityQueue.test.js @@ -121,4 +121,19 @@ describe('PriorityQueue', () => { expect(priorityQueue.hasValue(70)).toBe(false); expect(priorityQueue.hasValue(15)).toBe(true); }); + it('should remove only the given item and keep items with the same priority', () => { + const priorityQueue = new PriorityQueue(); + + priorityQueue.add(10, 1); + priorityQueue.add(5, 1); + priorityQueue.add(100, 2); + + priorityQueue.remove(10); + + expect(priorityQueue.hasValue(10)).toBe(false); + expect(priorityQueue.hasValue(5)).toBe(true); + expect(priorityQueue.poll()).toBe(5); + expect(priorityQueue.poll()).toBe(100); + expect(priorityQueue.isEmpty()).toBe(true); + }); });