@@ -1309,3 +1309,137 @@ fn test_try_reserve_exact() {
13091309 }
13101310
13111311}
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