@@ -162,6 +162,300 @@ fn test_insert() {
162
162
}
163
163
}
164
164
165
+ #[ test]
166
+ fn test_get ( ) {
167
+ let mut tester = VecDeque :: new ( ) ;
168
+ tester. push_back ( 1 ) ;
169
+ tester. push_back ( 2 ) ;
170
+ tester. push_back ( 3 ) ;
171
+
172
+ assert_eq ! ( tester. len( ) , 3 ) ;
173
+
174
+ assert_eq ! ( tester. get( 1 ) , Some ( & 2 ) ) ;
175
+ assert_eq ! ( tester. get( 2 ) , Some ( & 3 ) ) ;
176
+ assert_eq ! ( tester. get( 0 ) , Some ( & 1 ) ) ;
177
+ assert_eq ! ( tester. get( 3 ) , None ) ;
178
+
179
+ tester. remove ( 0 ) ;
180
+
181
+ assert_eq ! ( tester. len( ) , 2 ) ;
182
+ assert_eq ! ( tester. get( 0 ) , Some ( & 2 ) ) ;
183
+ assert_eq ! ( tester. get( 1 ) , Some ( & 3 ) ) ;
184
+ assert_eq ! ( tester. get( 2 ) , None ) ;
185
+ }
186
+
187
+ #[ test]
188
+ fn test_get_mut ( ) {
189
+ let mut tester = VecDeque :: new ( ) ;
190
+ tester. push_back ( 1 ) ;
191
+ tester. push_back ( 2 ) ;
192
+ tester. push_back ( 3 ) ;
193
+
194
+ assert_eq ! ( tester. len( ) , 3 ) ;
195
+
196
+ if let Some ( elem) = tester. get_mut ( 0 ) {
197
+ assert_eq ! ( * elem, 1 ) ;
198
+ * elem = 10 ;
199
+ }
200
+
201
+ if let Some ( elem) = tester. get_mut ( 2 ) {
202
+ assert_eq ! ( * elem, 3 ) ;
203
+ * elem = 30 ;
204
+ }
205
+
206
+ assert_eq ! ( tester. get( 0 ) , Some ( & 10 ) ) ;
207
+ assert_eq ! ( tester. get( 2 ) , Some ( & 30 ) ) ;
208
+ assert_eq ! ( tester. get_mut( 3 ) , None ) ;
209
+
210
+ tester. remove ( 2 ) ;
211
+
212
+ assert_eq ! ( tester. len( ) , 2 ) ;
213
+ assert_eq ! ( tester. get( 0 ) , Some ( & 10 ) ) ;
214
+ assert_eq ! ( tester. get( 1 ) , Some ( & 2 ) ) ;
215
+ assert_eq ! ( tester. get( 2 ) , None ) ;
216
+ }
217
+
218
+ #[ test]
219
+ fn test_swap ( ) {
220
+ let mut tester = VecDeque :: new ( ) ;
221
+ tester. push_back ( 1 ) ;
222
+ tester. push_back ( 2 ) ;
223
+ tester. push_back ( 3 ) ;
224
+
225
+ assert_eq ! ( tester, [ 1 , 2 , 3 ] ) ;
226
+
227
+ tester. swap ( 0 , 0 ) ;
228
+ assert_eq ! ( tester, [ 1 , 2 , 3 ] ) ;
229
+ tester. swap ( 0 , 1 ) ;
230
+ assert_eq ! ( tester, [ 2 , 1 , 3 ] ) ;
231
+ tester. swap ( 2 , 1 ) ;
232
+ assert_eq ! ( tester, [ 2 , 3 , 1 ] ) ;
233
+ tester. swap ( 1 , 2 ) ;
234
+ assert_eq ! ( tester, [ 2 , 1 , 3 ] ) ;
235
+ tester. swap ( 0 , 2 ) ;
236
+ assert_eq ! ( tester, [ 3 , 1 , 2 ] ) ;
237
+ tester. swap ( 2 , 2 ) ;
238
+ assert_eq ! ( tester, [ 3 , 1 , 2 ] ) ;
239
+ }
240
+
241
+ #[ test]
242
+ #[ should_panic = "assertion failed: j < self.len()" ]
243
+ fn test_swap_panic ( ) {
244
+ let mut tester = VecDeque :: new ( ) ;
245
+ tester. push_back ( 1 ) ;
246
+ tester. push_back ( 2 ) ;
247
+ tester. push_back ( 3 ) ;
248
+ tester. swap ( 2 , 3 ) ;
249
+ }
250
+
251
+ #[ test]
252
+ fn test_reserve_exact ( ) {
253
+ let mut tester: VecDeque < i32 > = VecDeque :: with_capacity ( 1 ) ;
254
+ assert ! ( tester. capacity( ) == 1 ) ;
255
+ tester. reserve_exact ( 50 ) ;
256
+ assert ! ( tester. capacity( ) >= 51 ) ;
257
+ tester. reserve_exact ( 40 ) ;
258
+ assert ! ( tester. capacity( ) >= 51 ) ;
259
+ tester. reserve_exact ( 200 ) ;
260
+ assert ! ( tester. capacity( ) >= 200 ) ;
261
+ }
262
+
263
+ #[ test]
264
+ #[ should_panic = "capacity overflow" ]
265
+ fn test_reserve_exact_panic ( ) {
266
+ let mut tester: VecDeque < i32 > = VecDeque :: new ( ) ;
267
+ tester. reserve_exact ( usize:: MAX ) ;
268
+ }
269
+
270
+ #[ test]
271
+ fn test_try_reserve_exact ( ) {
272
+ let mut tester: VecDeque < i32 > = VecDeque :: with_capacity ( 1 ) ;
273
+ assert ! ( tester. capacity( ) == 1 ) ;
274
+ assert_eq ! ( tester. try_reserve_exact( 100 ) , Ok ( ( ) ) ) ;
275
+ assert ! ( tester. capacity( ) >= 100 ) ;
276
+ assert_eq ! ( tester. try_reserve_exact( 50 ) , Ok ( ( ) ) ) ;
277
+ assert ! ( tester. capacity( ) >= 100 ) ;
278
+ assert_eq ! ( tester. try_reserve_exact( 200 ) , Ok ( ( ) ) ) ;
279
+ assert ! ( tester. capacity( ) >= 200 ) ;
280
+ assert_eq ! ( tester. try_reserve_exact( 0 ) , Ok ( ( ) ) ) ;
281
+ assert ! ( tester. capacity( ) >= 200 ) ;
282
+ assert ! ( tester. try_reserve_exact( usize :: MAX ) . is_err( ) ) ;
283
+ }
284
+
285
+ #[ test]
286
+ fn test_try_reserve ( ) {
287
+ let mut tester: VecDeque < i32 > = VecDeque :: with_capacity ( 1 ) ;
288
+ assert ! ( tester. capacity( ) == 1 ) ;
289
+ assert_eq ! ( tester. try_reserve( 100 ) , Ok ( ( ) ) ) ;
290
+ assert ! ( tester. capacity( ) >= 100 ) ;
291
+ assert_eq ! ( tester. try_reserve( 50 ) , Ok ( ( ) ) ) ;
292
+ assert ! ( tester. capacity( ) >= 100 ) ;
293
+ assert_eq ! ( tester. try_reserve( 200 ) , Ok ( ( ) ) ) ;
294
+ assert ! ( tester. capacity( ) >= 200 ) ;
295
+ assert_eq ! ( tester. try_reserve( 0 ) , Ok ( ( ) ) ) ;
296
+ assert ! ( tester. capacity( ) >= 200 ) ;
297
+ assert ! ( tester. try_reserve( usize :: MAX ) . is_err( ) ) ;
298
+ }
299
+
300
+ #[ test]
301
+ fn test_contains ( ) {
302
+ let mut tester = VecDeque :: new ( ) ;
303
+ tester. push_back ( 1 ) ;
304
+ tester. push_back ( 2 ) ;
305
+ tester. push_back ( 3 ) ;
306
+
307
+ assert ! ( tester. contains( & 1 ) ) ;
308
+ assert ! ( tester. contains( & 3 ) ) ;
309
+ assert ! ( !tester. contains( & 0 ) ) ;
310
+ assert ! ( !tester. contains( & 4 ) ) ;
311
+ tester. remove ( 0 ) ;
312
+ assert ! ( !tester. contains( & 1 ) ) ;
313
+ assert ! ( tester. contains( & 2 ) ) ;
314
+ assert ! ( tester. contains( & 3 ) ) ;
315
+ }
316
+
317
+ #[ test]
318
+ fn test_rotate_left_right ( ) {
319
+ let mut tester: VecDeque < _ > = ( 1 ..=10 ) . collect ( ) ;
320
+
321
+ assert_eq ! ( tester. len( ) , 10 ) ;
322
+
323
+ tester. rotate_left ( 0 ) ;
324
+ assert_eq ! ( tester, [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ) ;
325
+
326
+ tester. rotate_right ( 0 ) ;
327
+ assert_eq ! ( tester, [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ) ;
328
+
329
+ tester. rotate_left ( 3 ) ;
330
+ assert_eq ! ( tester, [ 4 , 5 , 6 , 7 , 8 , 9 , 10 , 1 , 2 , 3 ] ) ;
331
+
332
+ tester. rotate_right ( 5 ) ;
333
+ assert_eq ! ( tester, [ 9 , 10 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ) ;
334
+
335
+ tester. rotate_left ( tester. len ( ) ) ;
336
+ assert_eq ! ( tester, [ 9 , 10 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ) ;
337
+
338
+ tester. rotate_right ( tester. len ( ) ) ;
339
+ assert_eq ! ( tester, [ 9 , 10 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ) ;
340
+
341
+ tester. rotate_left ( 1 ) ;
342
+ assert_eq ! ( tester, [ 10 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ) ;
343
+ }
344
+
345
+ #[ test]
346
+ #[ should_panic = "assertion failed: mid <= self.len()" ]
347
+ fn test_rotate_left_panic ( ) {
348
+ let mut tester: VecDeque < _ > = ( 1 ..=10 ) . collect ( ) ;
349
+ tester. rotate_left ( tester. len ( ) + 1 ) ;
350
+ }
351
+
352
+ #[ test]
353
+ #[ should_panic = "assertion failed: k <= self.len()" ]
354
+ fn test_rotate_right_panic ( ) {
355
+ let mut tester: VecDeque < _ > = ( 1 ..=10 ) . collect ( ) ;
356
+ tester. rotate_right ( tester. len ( ) + 1 ) ;
357
+ }
358
+
359
+ #[ test]
360
+ fn test_binary_search ( ) {
361
+ // If the givin VecDeque is not sorted, the returned result is unspecified and meaningless,
362
+ // as this method performs a binary search.
363
+
364
+ let tester: VecDeque < _ > = [ 0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 ] . into ( ) ;
365
+
366
+ assert_eq ! ( tester. binary_search( & 0 ) , Ok ( 0 ) ) ;
367
+ assert_eq ! ( tester. binary_search( & 5 ) , Ok ( 5 ) ) ;
368
+ assert_eq ! ( tester. binary_search( & 55 ) , Ok ( 10 ) ) ;
369
+ assert_eq ! ( tester. binary_search( & 4 ) , Err ( 5 ) ) ;
370
+ assert_eq ! ( tester. binary_search( & -1 ) , Err ( 0 ) ) ;
371
+ assert ! ( matches!( tester. binary_search( & 1 ) , Ok ( 1 ..=2 ) ) ) ;
372
+
373
+ let tester: VecDeque < _ > = [ 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ] . into ( ) ;
374
+ assert_eq ! ( tester. binary_search( & 1 ) , Ok ( 0 ) ) ;
375
+ assert ! ( matches!( tester. binary_search( & 2 ) , Ok ( 1 ..=4 ) ) ) ;
376
+ assert ! ( matches!( tester. binary_search( & 3 ) , Ok ( 5 ..=13 ) ) ) ;
377
+ assert_eq ! ( tester. binary_search( & -2 ) , Err ( 0 ) ) ;
378
+ assert_eq ! ( tester. binary_search( & 0 ) , Err ( 0 ) ) ;
379
+ assert_eq ! ( tester. binary_search( & 4 ) , Err ( 14 ) ) ;
380
+ assert_eq ! ( tester. binary_search( & 5 ) , Err ( 14 ) ) ;
381
+ }
382
+
383
+ #[ test]
384
+ fn test_binary_search_by ( ) {
385
+ // If the givin VecDeque is not sorted, the returned result is unspecified and meaningless,
386
+ // as this method performs a binary search.
387
+
388
+ let tester: VecDeque < _ > = [ 0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 ] . into ( ) ;
389
+
390
+ assert_eq ! ( tester. binary_search_by( |x| x. cmp( & 0 ) ) , Ok ( 0 ) ) ;
391
+ assert_eq ! ( tester. binary_search_by( |x| x. cmp( & 5 ) ) , Ok ( 5 ) ) ;
392
+ assert_eq ! ( tester. binary_search_by( |x| x. cmp( & 55 ) ) , Ok ( 10 ) ) ;
393
+ assert_eq ! ( tester. binary_search_by( |x| x. cmp( & 4 ) ) , Err ( 5 ) ) ;
394
+ assert_eq ! ( tester. binary_search_by( |x| x. cmp( & -1 ) ) , Err ( 0 ) ) ;
395
+ assert ! ( matches!( tester. binary_search_by( |x| x. cmp( & 1 ) ) , Ok ( 1 ..=2 ) ) ) ;
396
+ }
397
+
398
+ #[ test]
399
+ fn test_binary_search_key ( ) {
400
+ // If the givin VecDeque is not sorted, the returned result is unspecified and meaningless,
401
+ // as this method performs a binary search.
402
+
403
+ let tester: VecDeque < _ > = [
404
+ ( -1 , 0 ) ,
405
+ ( 2 , 10 ) ,
406
+ ( 6 , 5 ) ,
407
+ ( 7 , 1 ) ,
408
+ ( 8 , 10 ) ,
409
+ ( 10 , 2 ) ,
410
+ ( 20 , 3 ) ,
411
+ ( 24 , 5 ) ,
412
+ ( 25 , 18 ) ,
413
+ ( 28 , 13 ) ,
414
+ ( 31 , 21 ) ,
415
+ ( 32 , 4 ) ,
416
+ ( 54 , 25 ) ,
417
+ ]
418
+ . into ( ) ;
419
+
420
+ assert_eq ! ( tester. binary_search_by_key( & -1 , |& ( a, _b) | a) , Ok ( 0 ) ) ;
421
+ assert_eq ! ( tester. binary_search_by_key( & 8 , |& ( a, _b) | a) , Ok ( 4 ) ) ;
422
+ assert_eq ! ( tester. binary_search_by_key( & 25 , |& ( a, _b) | a) , Ok ( 8 ) ) ;
423
+ assert_eq ! ( tester. binary_search_by_key( & 54 , |& ( a, _b) | a) , Ok ( 12 ) ) ;
424
+ assert_eq ! ( tester. binary_search_by_key( & -2 , |& ( a, _b) | a) , Err ( 0 ) ) ;
425
+ assert_eq ! ( tester. binary_search_by_key( & 1 , |& ( a, _b) | a) , Err ( 1 ) ) ;
426
+ assert_eq ! ( tester. binary_search_by_key( & 4 , |& ( a, _b) | a) , Err ( 2 ) ) ;
427
+ assert_eq ! ( tester. binary_search_by_key( & 13 , |& ( a, _b) | a) , Err ( 6 ) ) ;
428
+ assert_eq ! ( tester. binary_search_by_key( & 55 , |& ( a, _b) | a) , Err ( 13 ) ) ;
429
+ assert_eq ! ( tester. binary_search_by_key( & 100 , |& ( a, _b) | a) , Err ( 13 ) ) ;
430
+
431
+ let tester: VecDeque < _ > = [
432
+ ( 0 , 0 ) ,
433
+ ( 2 , 1 ) ,
434
+ ( 6 , 1 ) ,
435
+ ( 5 , 1 ) ,
436
+ ( 3 , 1 ) ,
437
+ ( 1 , 2 ) ,
438
+ ( 2 , 3 ) ,
439
+ ( 4 , 5 ) ,
440
+ ( 5 , 8 ) ,
441
+ ( 8 , 13 ) ,
442
+ ( 1 , 21 ) ,
443
+ ( 2 , 34 ) ,
444
+ ( 4 , 55 ) ,
445
+ ]
446
+ . into ( ) ;
447
+
448
+ assert_eq ! ( tester. binary_search_by_key( & 0 , |& ( _a, b) | b) , Ok ( 0 ) ) ;
449
+ assert ! ( matches!( tester. binary_search_by_key( & 1 , |& ( _a, b) | b) , Ok ( 1 ..=4 ) ) ) ;
450
+ assert_eq ! ( tester. binary_search_by_key( & 8 , |& ( _a, b) | b) , Ok ( 8 ) ) ;
451
+ assert_eq ! ( tester. binary_search_by_key( & 13 , |& ( _a, b) | b) , Ok ( 9 ) ) ;
452
+ assert_eq ! ( tester. binary_search_by_key( & 55 , |& ( _a, b) | b) , Ok ( 12 ) ) ;
453
+ assert_eq ! ( tester. binary_search_by_key( & -1 , |& ( _a, b) | b) , Err ( 0 ) ) ;
454
+ assert_eq ! ( tester. binary_search_by_key( & 4 , |& ( _a, b) | b) , Err ( 7 ) ) ;
455
+ assert_eq ! ( tester. binary_search_by_key( & 56 , |& ( _a, b) | b) , Err ( 13 ) ) ;
456
+ assert_eq ! ( tester. binary_search_by_key( & 100 , |& ( _a, b) | b) , Err ( 13 ) ) ;
457
+ }
458
+
165
459
#[ test]
166
460
fn make_contiguous_big_tail ( ) {
167
461
let mut tester = VecDeque :: with_capacity ( 15 ) ;
0 commit comments