@@ -1309,3 +1309,137 @@ fn test_try_reserve_exact() {
1309
1309
}
1310
1310
1311
1311
}
1312
+
1313
+ #[ test]
1314
+ fn test_rotate_nop ( ) {
1315
+ let mut v: VecDeque < _ > = ( 0 ..10 ) . collect ( ) ;
1316
+ assert_unchanged ( & v) ;
1317
+
1318
+ v. rotate_left ( 0 ) ;
1319
+ assert_unchanged ( & v) ;
1320
+
1321
+ v. rotate_left ( 10 ) ;
1322
+ assert_unchanged ( & v) ;
1323
+
1324
+ v. rotate_right ( 0 ) ;
1325
+ assert_unchanged ( & v) ;
1326
+
1327
+ v. rotate_right ( 10 ) ;
1328
+ assert_unchanged ( & v) ;
1329
+
1330
+ v. rotate_left ( 3 ) ;
1331
+ v. rotate_right ( 3 ) ;
1332
+ assert_unchanged ( & v) ;
1333
+
1334
+ v. rotate_right ( 3 ) ;
1335
+ v. rotate_left ( 3 ) ;
1336
+ assert_unchanged ( & v) ;
1337
+
1338
+ v. rotate_left ( 6 ) ;
1339
+ v. rotate_right ( 6 ) ;
1340
+ assert_unchanged ( & v) ;
1341
+
1342
+ v. rotate_right ( 6 ) ;
1343
+ v. rotate_left ( 6 ) ;
1344
+ assert_unchanged ( & v) ;
1345
+
1346
+ v. rotate_left ( 3 ) ;
1347
+ v. rotate_left ( 7 ) ;
1348
+ assert_unchanged ( & v) ;
1349
+
1350
+ v. rotate_right ( 4 ) ;
1351
+ v. rotate_right ( 6 ) ;
1352
+ assert_unchanged ( & v) ;
1353
+
1354
+ v. rotate_left ( 1 ) ;
1355
+ v. rotate_left ( 2 ) ;
1356
+ v. rotate_left ( 3 ) ;
1357
+ v. rotate_left ( 4 ) ;
1358
+ assert_unchanged ( & v) ;
1359
+
1360
+ v. rotate_right ( 1 ) ;
1361
+ v. rotate_right ( 2 ) ;
1362
+ v. rotate_right ( 3 ) ;
1363
+ v. rotate_right ( 4 ) ;
1364
+ assert_unchanged ( & v) ;
1365
+
1366
+ fn assert_unchanged ( v : & VecDeque < i32 > ) {
1367
+ assert_eq ! ( v, & [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ) ;
1368
+ }
1369
+ }
1370
+
1371
+ #[ test]
1372
+ fn test_rotate_left_parts ( ) {
1373
+ let mut v: VecDeque < _ > = ( 1 ..=7 ) . collect ( ) ;
1374
+ v. rotate_left ( 2 ) ;
1375
+ assert_eq ! ( v. as_slices( ) , ( & [ 3 , 4 , 5 , 6 , 7 , 1 ] [ ..] , & [ 2 ] [ ..] ) ) ;
1376
+ v. rotate_left ( 2 ) ;
1377
+ assert_eq ! ( v. as_slices( ) , ( & [ 5 , 6 , 7 , 1 ] [ ..] , & [ 2 , 3 , 4 ] [ ..] ) ) ;
1378
+ v. rotate_left ( 2 ) ;
1379
+ assert_eq ! ( v. as_slices( ) , ( & [ 7 , 1 ] [ ..] , & [ 2 , 3 , 4 , 5 , 6 ] [ ..] ) ) ;
1380
+ v. rotate_left ( 2 ) ;
1381
+ assert_eq ! ( v. as_slices( ) , ( & [ 2 , 3 , 4 , 5 , 6 , 7 , 1 ] [ ..] , & [ ] [ ..] ) ) ;
1382
+ v. rotate_left ( 2 ) ;
1383
+ assert_eq ! ( v. as_slices( ) , ( & [ 4 , 5 , 6 , 7 , 1 , 2 ] [ ..] , & [ 3 ] [ ..] ) ) ;
1384
+ v. rotate_left ( 2 ) ;
1385
+ assert_eq ! ( v. as_slices( ) , ( & [ 6 , 7 , 1 , 2 ] [ ..] , & [ 3 , 4 , 5 ] [ ..] ) ) ;
1386
+ v. rotate_left ( 2 ) ;
1387
+ assert_eq ! ( v. as_slices( ) , ( & [ 1 , 2 ] [ ..] , & [ 3 , 4 , 5 , 6 , 7 ] [ ..] ) ) ;
1388
+ }
1389
+
1390
+ #[ test]
1391
+ fn test_rotate_right_parts ( ) {
1392
+ let mut v: VecDeque < _ > = ( 1 ..=7 ) . collect ( ) ;
1393
+ v. rotate_right ( 2 ) ;
1394
+ assert_eq ! ( v. as_slices( ) , ( & [ 6 , 7 ] [ ..] , & [ 1 , 2 , 3 , 4 , 5 ] [ ..] ) ) ;
1395
+ v. rotate_right ( 2 ) ;
1396
+ assert_eq ! ( v. as_slices( ) , ( & [ 4 , 5 , 6 , 7 ] [ ..] , & [ 1 , 2 , 3 ] [ ..] ) ) ;
1397
+ v. rotate_right ( 2 ) ;
1398
+ assert_eq ! ( v. as_slices( ) , ( & [ 2 , 3 , 4 , 5 , 6 , 7 ] [ ..] , & [ 1 ] [ ..] ) ) ;
1399
+ v. rotate_right ( 2 ) ;
1400
+ assert_eq ! ( v. as_slices( ) , ( & [ 7 , 1 , 2 , 3 , 4 , 5 , 6 ] [ ..] , & [ ] [ ..] ) ) ;
1401
+ v. rotate_right ( 2 ) ;
1402
+ assert_eq ! ( v. as_slices( ) , ( & [ 5 , 6 ] [ ..] , & [ 7 , 1 , 2 , 3 , 4 ] [ ..] ) ) ;
1403
+ v. rotate_right ( 2 ) ;
1404
+ assert_eq ! ( v. as_slices( ) , ( & [ 3 , 4 , 5 , 6 ] [ ..] , & [ 7 , 1 , 2 ] [ ..] ) ) ;
1405
+ v. rotate_right ( 2 ) ;
1406
+ assert_eq ! ( v. as_slices( ) , ( & [ 1 , 2 , 3 , 4 , 5 , 6 ] [ ..] , & [ 7 ] [ ..] ) ) ;
1407
+ }
1408
+
1409
+ #[ test]
1410
+ fn test_rotate_left_random ( ) {
1411
+ let shifts = [
1412
+ 6 , 1 , 0 , 11 , 12 , 1 , 11 , 7 , 9 , 3 , 6 , 1 ,
1413
+ 4 , 0 , 5 , 1 , 3 , 1 , 12 , 8 , 3 , 1 , 11 , 11 ,
1414
+ 9 , 4 , 12 , 3 , 12 , 9 , 11 , 1 , 7 , 9 , 7 , 2 ,
1415
+ ] ;
1416
+ let n = 12 ;
1417
+ let mut v: VecDeque < _ > = ( 0 ..n) . collect ( ) ;
1418
+ let mut total_shift = 0 ;
1419
+ for shift in shifts. iter ( ) . cloned ( ) {
1420
+ v. rotate_left ( shift) ;
1421
+ total_shift += shift;
1422
+ for i in 0 ..n {
1423
+ assert_eq ! ( v[ i] , ( i + total_shift) % n) ;
1424
+ }
1425
+ }
1426
+ }
1427
+
1428
+ #[ test]
1429
+ fn test_rotate_right_random ( ) {
1430
+ let shifts = [
1431
+ 6 , 1 , 0 , 11 , 12 , 1 , 11 , 7 , 9 , 3 , 6 , 1 ,
1432
+ 4 , 0 , 5 , 1 , 3 , 1 , 12 , 8 , 3 , 1 , 11 , 11 ,
1433
+ 9 , 4 , 12 , 3 , 12 , 9 , 11 , 1 , 7 , 9 , 7 , 2 ,
1434
+ ] ;
1435
+ let n = 12 ;
1436
+ let mut v: VecDeque < _ > = ( 0 ..n) . collect ( ) ;
1437
+ let mut total_shift = 0 ;
1438
+ for shift in shifts. iter ( ) . cloned ( ) {
1439
+ v. rotate_right ( shift) ;
1440
+ total_shift += shift;
1441
+ for i in 0 ..n {
1442
+ assert_eq ! ( v[ ( i + total_shift) % n] , i) ;
1443
+ }
1444
+ }
1445
+ }
0 commit comments