@@ -78,10 +78,10 @@ impl <T: Copy Ord> PriorityQueue<T> {
78
78
/// Consume the PriorityQueue and return a vector in sorted (ascending) order
79
79
pure fn to_sorted_vec ( self ) -> ~[ T ] {
80
80
let mut q = self ;
81
- let mut end = q. len ( ) - 1 ;
82
- while end > 0 {
83
- q. data [ end] <-> q. data [ 0 ] ;
81
+ let mut end = q. len ( ) ;
82
+ while end > 1 {
84
83
end -= 1 ;
84
+ q. data [ end] <-> q. data [ 0 ] ;
85
85
unsafe { q. siftup_range ( 0 , end) } // purity-checking workaround
86
86
}
87
87
q. to_vec ( )
@@ -206,10 +206,27 @@ mod tests {
206
206
assert heap. len ( ) == 5 ;
207
207
}
208
208
209
+ fn check_to_vec ( data : ~[ int ] ) {
210
+ let heap = from_vec ( data) ;
211
+ assert merge_sort( heap. to_vec ( ) , le) == merge_sort ( data, le) ;
212
+ assert heap. to_sorted_vec ( ) == merge_sort ( data, le) ;
213
+ }
214
+
209
215
#[ test]
210
- fn test_to_sorted_vec ( ) {
211
- let data = ~[ 2 , 4 , 6 , 2 , 1 , 8 , 10 , 3 , 5 , 7 , 0 , 9 , 1 ] ;
212
- assert from_vec( data) . to_sorted_vec ( ) == merge_sort ( data, le) ;
216
+ fn test_to_vec ( ) {
217
+ check_to_vec ( ~[ ] ) ;
218
+ check_to_vec ( ~[ 5 ] ) ;
219
+ check_to_vec ( ~[ 3 , 2 ] ) ;
220
+ check_to_vec ( ~[ 2 , 3 ] ) ;
221
+ check_to_vec ( ~[ 5 , 1 , 2 ] ) ;
222
+ check_to_vec ( ~[ 1 , 100 , 2 , 3 ] ) ;
223
+ check_to_vec ( ~[ 1 , 3 , 5 , 7 , 9 , 2 , 4 , 6 , 8 , 0 ] ) ;
224
+ check_to_vec ( ~[ 2 , 4 , 6 , 2 , 1 , 8 , 10 , 3 , 5 , 7 , 0 , 9 , 1 ] ) ;
225
+ check_to_vec ( ~[ 9 , 11 , 9 , 9 , 9 , 9 , 11 , 2 , 3 , 4 , 11 , 9 , 0 , 0 , 0 , 0 ] ) ;
226
+ check_to_vec ( ~[ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ) ;
227
+ check_to_vec ( ~[ 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 ] ) ;
228
+ check_to_vec ( ~[ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , 0 , 0 , 1 , 2 ] ) ;
229
+ check_to_vec ( ~[ 5 , 4 , 3 , 2 , 1 , 5 , 4 , 3 , 2 , 1 , 5 , 4 , 3 , 2 , 1 ] ) ;
213
230
}
214
231
215
232
#[ test]
@@ -237,11 +254,4 @@ mod tests {
237
254
let mut heap = from_vec :: < int > ( ~[ ] ) ;
238
255
heap. replace ( 5 ) ;
239
256
}
240
-
241
- #[ test]
242
- fn test_to_vec ( ) {
243
- let data = ~[ 1 , 3 , 5 , 7 , 9 , 2 , 4 , 6 , 8 , 0 ] ;
244
- let heap = from_vec ( copy data) ;
245
- assert merge_sort( heap. to_vec ( ) , le) == merge_sort ( data, le) ;
246
- }
247
257
}
0 commit comments