@@ -342,6 +342,103 @@ public void testReverseIndexed() {
342
342
testReverse (new int [] {-1 , 1 , -2 , 2 }, 1 , 3 , new int [] {-1 , -2 , 1 , 2 });
343
343
}
344
344
345
+ private static void testRotate (int [] input , int distance , int [] expectedOutput ) {
346
+ input = Arrays .copyOf (input , input .length );
347
+ Ints .rotate (input , distance );
348
+ assertThat (input ).isEqualTo (expectedOutput );
349
+ }
350
+
351
+ private static void testRotate (
352
+ int [] input , int distance , int fromIndex , int toIndex , int [] expectedOutput ) {
353
+ input = Arrays .copyOf (input , input .length );
354
+ Ints .rotate (input , distance , fromIndex , toIndex );
355
+ assertThat (input ).isEqualTo (expectedOutput );
356
+ }
357
+
358
+ public void testRotate () {
359
+ testRotate (new int [] {}, -1 , new int [] {});
360
+ testRotate (new int [] {}, 0 , new int [] {});
361
+ testRotate (new int [] {}, 1 , new int [] {});
362
+
363
+ testRotate (new int [] {1 }, -2 , new int [] {1 });
364
+ testRotate (new int [] {1 }, -1 , new int [] {1 });
365
+ testRotate (new int [] {1 }, 0 , new int [] {1 });
366
+ testRotate (new int [] {1 }, 1 , new int [] {1 });
367
+ testRotate (new int [] {1 }, 2 , new int [] {1 });
368
+
369
+ testRotate (new int [] {1 , 2 }, -3 , new int [] {2 , 1 });
370
+ testRotate (new int [] {1 , 2 }, -1 , new int [] {2 , 1 });
371
+ testRotate (new int [] {1 , 2 }, -2 , new int [] {1 , 2 });
372
+ testRotate (new int [] {1 , 2 }, 0 , new int [] {1 , 2 });
373
+ testRotate (new int [] {1 , 2 }, 1 , new int [] {2 , 1 });
374
+ testRotate (new int [] {1 , 2 }, 2 , new int [] {1 , 2 });
375
+ testRotate (new int [] {1 , 2 }, 3 , new int [] {2 , 1 });
376
+
377
+ testRotate (new int [] {1 , 2 , 3 }, -5 , new int [] {3 , 1 , 2 });
378
+ testRotate (new int [] {1 , 2 , 3 }, -4 , new int [] {2 , 3 , 1 });
379
+ testRotate (new int [] {1 , 2 , 3 }, -3 , new int [] {1 , 2 , 3 });
380
+ testRotate (new int [] {1 , 2 , 3 }, -2 , new int [] {3 , 1 , 2 });
381
+ testRotate (new int [] {1 , 2 , 3 }, -1 , new int [] {2 , 3 , 1 });
382
+ testRotate (new int [] {1 , 2 , 3 }, 0 , new int [] {1 , 2 , 3 });
383
+ testRotate (new int [] {1 , 2 , 3 }, 1 , new int [] {3 , 1 , 2 });
384
+ testRotate (new int [] {1 , 2 , 3 }, 2 , new int [] {2 , 3 , 1 });
385
+ testRotate (new int [] {1 , 2 , 3 }, 3 , new int [] {1 , 2 , 3 });
386
+ testRotate (new int [] {1 , 2 , 3 }, 4 , new int [] {3 , 1 , 2 });
387
+ testRotate (new int [] {1 , 2 , 3 }, 5 , new int [] {2 , 3 , 1 });
388
+
389
+ testRotate (new int [] {1 , 2 , 3 , 4 }, -9 , new int [] {2 , 3 , 4 , 1 });
390
+ testRotate (new int [] {1 , 2 , 3 , 4 }, -5 , new int [] {2 , 3 , 4 , 1 });
391
+ testRotate (new int [] {1 , 2 , 3 , 4 }, -1 , new int [] {2 , 3 , 4 , 1 });
392
+ testRotate (new int [] {1 , 2 , 3 , 4 }, 0 , new int [] {1 , 2 , 3 , 4 });
393
+ testRotate (new int [] {1 , 2 , 3 , 4 }, 1 , new int [] {4 , 1 , 2 , 3 });
394
+ testRotate (new int [] {1 , 2 , 3 , 4 }, 5 , new int [] {4 , 1 , 2 , 3 });
395
+ testRotate (new int [] {1 , 2 , 3 , 4 }, 9 , new int [] {4 , 1 , 2 , 3 });
396
+
397
+ testRotate (new int [] {1 , 2 , 3 , 4 , 5 }, -6 , new int [] {2 , 3 , 4 , 5 , 1 });
398
+ testRotate (new int [] {1 , 2 , 3 , 4 , 5 }, -4 , new int [] {5 , 1 , 2 , 3 , 4 });
399
+ testRotate (new int [] {1 , 2 , 3 , 4 , 5 }, -3 , new int [] {4 , 5 , 1 , 2 , 3 });
400
+ testRotate (new int [] {1 , 2 , 3 , 4 , 5 }, -1 , new int [] {2 , 3 , 4 , 5 , 1 });
401
+ testRotate (new int [] {1 , 2 , 3 , 4 , 5 }, 0 , new int [] {1 , 2 , 3 , 4 , 5 });
402
+ testRotate (new int [] {1 , 2 , 3 , 4 , 5 }, 1 , new int [] {5 , 1 , 2 , 3 , 4 });
403
+ testRotate (new int [] {1 , 2 , 3 , 4 , 5 }, 3 , new int [] {3 , 4 , 5 , 1 , 2 });
404
+ testRotate (new int [] {1 , 2 , 3 , 4 , 5 }, 4 , new int [] {2 , 3 , 4 , 5 , 1 });
405
+ testRotate (new int [] {1 , 2 , 3 , 4 , 5 }, 6 , new int [] {5 , 1 , 2 , 3 , 4 });
406
+ }
407
+
408
+ public void testRotateIndexed () {
409
+ testRotate (new int [] {}, 0 , 0 , 0 , new int [] {});
410
+
411
+ testRotate (new int [] {1 }, 0 , 0 , 1 , new int [] {1 });
412
+ testRotate (new int [] {1 }, 1 , 0 , 1 , new int [] {1 });
413
+ testRotate (new int [] {1 }, 1 , 1 , 1 , new int [] {1 });
414
+
415
+ // Rotate the central 5 elements, leaving the ends as-is
416
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, -6 , 1 , 6 , new int [] {0 , 2 , 3 , 4 , 5 , 1 , 6 });
417
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, -1 , 1 , 6 , new int [] {0 , 2 , 3 , 4 , 5 , 1 , 6 });
418
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, 0 , 1 , 6 , new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 });
419
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, 5 , 1 , 6 , new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 });
420
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, 14 , 1 , 6 , new int [] {0 , 2 , 3 , 4 , 5 , 1 , 6 });
421
+
422
+ // Rotate the first three elements
423
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, -2 , 0 , 3 , new int [] {2 , 0 , 1 , 3 , 4 , 5 , 6 });
424
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, -1 , 0 , 3 , new int [] {1 , 2 , 0 , 3 , 4 , 5 , 6 });
425
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, 0 , 0 , 3 , new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 });
426
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, 1 , 0 , 3 , new int [] {2 , 0 , 1 , 3 , 4 , 5 , 6 });
427
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, 2 , 0 , 3 , new int [] {1 , 2 , 0 , 3 , 4 , 5 , 6 });
428
+
429
+ // Rotate the last four elements
430
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, -6 , 3 , 7 , new int [] {0 , 1 , 2 , 5 , 6 , 3 , 4 });
431
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, -5 , 3 , 7 , new int [] {0 , 1 , 2 , 4 , 5 , 6 , 3 });
432
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, -4 , 3 , 7 , new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 });
433
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, -3 , 3 , 7 , new int [] {0 , 1 , 2 , 6 , 3 , 4 , 5 });
434
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, -2 , 3 , 7 , new int [] {0 , 1 , 2 , 5 , 6 , 3 , 4 });
435
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, -1 , 3 , 7 , new int [] {0 , 1 , 2 , 4 , 5 , 6 , 3 });
436
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, 0 , 3 , 7 , new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 });
437
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, 1 , 3 , 7 , new int [] {0 , 1 , 2 , 6 , 3 , 4 , 5 });
438
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, 2 , 3 , 7 , new int [] {0 , 1 , 2 , 5 , 6 , 3 , 4 });
439
+ testRotate (new int [] {0 , 1 , 2 , 3 , 4 , 5 , 6 }, 3 , 3 , 7 , new int [] {0 , 1 , 2 , 4 , 5 , 6 , 3 });
440
+ }
441
+
345
442
public void testSortDescending () {
346
443
testSortDescending (new int [] {}, new int [] {});
347
444
testSortDescending (new int [] {1 }, new int [] {1 });
0 commit comments