@@ -162,6 +162,300 @@ fn test_insert() {
162162 }
163163}
164164
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+
165459#[ test]
166460fn make_contiguous_big_tail ( ) {
167461 let mut tester = VecDeque :: with_capacity ( 15 ) ;
0 commit comments