@@ -95,3 +95,39 @@ const PriorityQueue = require('internal/priority_queue');
95
95
96
96
assert . strictEqual ( queue . peek ( ) , undefined ) ;
97
97
}
98
+
99
+ {
100
+ const queue = new PriorityQueue ( ( a , b ) => {
101
+ return a . value - b . value ;
102
+ } , ( node , pos ) => ( node . position = pos ) ) ;
103
+
104
+ queue . insert ( { value : 1 , position : null } ) ;
105
+ queue . insert ( { value : 2 , position : null } ) ;
106
+ queue . insert ( { value : 3 , position : null } ) ;
107
+ queue . insert ( { value : 4 , position : null } ) ;
108
+ queue . insert ( { value : 5 , position : null } ) ;
109
+
110
+ queue . insert ( { value : 2 , position : null } ) ;
111
+ const secondLargest = { value : 10 , position : null } ;
112
+ queue . insert ( secondLargest ) ;
113
+ const largest = { value : 15 , position : null } ;
114
+ queue . insert ( largest ) ;
115
+
116
+ queue . removeAt ( 5 ) ;
117
+ assert . strictEqual ( largest . position , 5 ) ;
118
+
119
+ // check that removing 2nd to last item works fine
120
+ queue . removeAt ( 6 ) ;
121
+ assert . strictEqual ( secondLargest . position , 6 ) ;
122
+
123
+ // check that removing the last item doesn't throw
124
+ queue . removeAt ( 6 ) ;
125
+
126
+ assert . strictEqual ( queue . shift ( ) . value , 1 ) ;
127
+ assert . strictEqual ( queue . shift ( ) . value , 2 ) ;
128
+ assert . strictEqual ( queue . shift ( ) . value , 2 ) ;
129
+ assert . strictEqual ( queue . shift ( ) . value , 4 ) ;
130
+ assert . strictEqual ( queue . shift ( ) . value , 15 ) ;
131
+
132
+ assert . strictEqual ( queue . shift ( ) , undefined ) ;
133
+ }
0 commit comments