@@ -209,6 +209,237 @@ public void testReverseIndexed() {
209209 new boolean [] {true , true , false , false }, 1 , 3 , new boolean [] {true , false , true , false });
210210 }
211211
212+ private static void testRotate (boolean [] input , int distance , boolean [] expectedOutput ) {
213+ input = Arrays .copyOf (input , input .length );
214+ Booleans .rotate (input , distance );
215+ assertThat (input ).isEqualTo (expectedOutput );
216+ }
217+
218+ private static void testRotate (
219+ boolean [] input , int distance , int fromIndex , int toIndex , boolean [] expectedOutput ) {
220+ input = Arrays .copyOf (input , input .length );
221+ Booleans .rotate (input , distance , fromIndex , toIndex );
222+ assertThat (input ).isEqualTo (expectedOutput );
223+ }
224+
225+ public void testRotate () {
226+ testRotate (new boolean [] {}, -1 , new boolean [] {});
227+ testRotate (new boolean [] {}, 0 , new boolean [] {});
228+ testRotate (new boolean [] {}, 1 , new boolean [] {});
229+
230+ testRotate (new boolean [] {true }, -2 , new boolean [] {true });
231+ testRotate (new boolean [] {true }, -1 , new boolean [] {true });
232+ testRotate (new boolean [] {true }, 0 , new boolean [] {true });
233+ testRotate (new boolean [] {true }, 1 , new boolean [] {true });
234+ testRotate (new boolean [] {true }, 2 , new boolean [] {true });
235+
236+ testRotate (new boolean [] {true , false }, -3 , new boolean [] {false , true });
237+ testRotate (new boolean [] {true , false }, -1 , new boolean [] {false , true });
238+ testRotate (new boolean [] {true , false }, -2 , new boolean [] {true , false });
239+ testRotate (new boolean [] {true , false }, 0 , new boolean [] {true , false });
240+ testRotate (new boolean [] {true , false }, 1 , new boolean [] {false , true });
241+ testRotate (new boolean [] {true , false }, 2 , new boolean [] {true , false });
242+ testRotate (new boolean [] {true , false }, 3 , new boolean [] {false , true });
243+
244+ testRotate (new boolean [] {true , false , true }, -5 , new boolean [] {true , true , false });
245+ testRotate (new boolean [] {true , false , true }, -4 , new boolean [] {false , true , true });
246+ testRotate (new boolean [] {true , false , true }, -3 , new boolean [] {true , false , true });
247+ testRotate (new boolean [] {true , false , true }, -2 , new boolean [] {true , true , false });
248+ testRotate (new boolean [] {true , false , true }, -1 , new boolean [] {false , true , true });
249+ testRotate (new boolean [] {true , false , true }, 0 , new boolean [] {true , false , true });
250+ testRotate (new boolean [] {true , false , true }, 1 , new boolean [] {true , true , false });
251+ testRotate (new boolean [] {true , false , true }, 2 , new boolean [] {false , true , true });
252+ testRotate (new boolean [] {true , false , true }, 3 , new boolean [] {true , false , true });
253+ testRotate (new boolean [] {true , false , true }, 4 , new boolean [] {true , true , false });
254+ testRotate (new boolean [] {true , false , true }, 5 , new boolean [] {false , true , true });
255+
256+ testRotate (
257+ new boolean [] {true , false , true , false }, -9 , new boolean [] {false , true , false , true });
258+ testRotate (
259+ new boolean [] {true , false , true , false }, -5 , new boolean [] {false , true , false , true });
260+ testRotate (
261+ new boolean [] {true , false , true , false }, -1 , new boolean [] {false , true , false , true });
262+ testRotate (
263+ new boolean [] {true , false , true , false }, 0 , new boolean [] {true , false , true , false });
264+ testRotate (
265+ new boolean [] {true , false , true , false }, 1 , new boolean [] {false , true , false , true });
266+ testRotate (
267+ new boolean [] {true , false , true , false }, 5 , new boolean [] {false , true , false , true });
268+ testRotate (
269+ new boolean [] {true , false , true , false }, 9 , new boolean [] {false , true , false , true });
270+
271+ testRotate (
272+ new boolean [] {true , false , true , false , true },
273+ -6 ,
274+ new boolean [] {false , true , false , true , true });
275+ testRotate (
276+ new boolean [] {true , false , true , false , true },
277+ -4 ,
278+ new boolean [] {true , true , false , true , false });
279+ testRotate (
280+ new boolean [] {true , false , true , false , true },
281+ -3 ,
282+ new boolean [] {false , true , true , false , true });
283+ testRotate (
284+ new boolean [] {true , false , true , false , true },
285+ -1 ,
286+ new boolean [] {false , true , false , true , true });
287+ testRotate (
288+ new boolean [] {true , false , true , false , true },
289+ 0 ,
290+ new boolean [] {true , false , true , false , true });
291+ testRotate (
292+ new boolean [] {true , false , true , false , true },
293+ 1 ,
294+ new boolean [] {true , true , false , true , false });
295+ testRotate (
296+ new boolean [] {true , false , true , false , true },
297+ 3 ,
298+ new boolean [] {true , false , true , true , false });
299+ testRotate (
300+ new boolean [] {true , false , true , false , true },
301+ 4 ,
302+ new boolean [] {false , true , false , true , true });
303+ testRotate (
304+ new boolean [] {true , false , true , false , true },
305+ 6 ,
306+ new boolean [] {true , true , false , true , false });
307+ }
308+
309+ public void testRotateIndexed () {
310+ testRotate (new boolean [] {}, 0 , 0 , 0 , new boolean [] {});
311+
312+ testRotate (new boolean [] {true }, 0 , 0 , 1 , new boolean [] {true });
313+ testRotate (new boolean [] {true }, 1 , 0 , 1 , new boolean [] {true });
314+ testRotate (new boolean [] {true }, 1 , 1 , 1 , new boolean [] {true });
315+
316+ // Rotate the central 5 elements, leaving the ends as-is
317+ testRotate (
318+ new boolean [] {false , true , false , true , false , true , false },
319+ -6 ,
320+ 1 ,
321+ 6 ,
322+ new boolean [] {false , false , true , false , true , true , false });
323+ testRotate (
324+ new boolean [] {false , true , false , true , false , true , false },
325+ -1 ,
326+ 1 ,
327+ 6 ,
328+ new boolean [] {false , false , true , false , true , true , false });
329+ testRotate (
330+ new boolean [] {false , true , false , true , false , true , false },
331+ 0 ,
332+ 1 ,
333+ 6 ,
334+ new boolean [] {false , true , false , true , false , true , false });
335+ testRotate (
336+ new boolean [] {false , true , false , true , false , true , false },
337+ 5 ,
338+ 1 ,
339+ 6 ,
340+ new boolean [] {false , true , false , true , false , true , false });
341+ testRotate (
342+ new boolean [] {false , true , false , true , false , true , false },
343+ 14 ,
344+ 1 ,
345+ 6 ,
346+ new boolean [] {false , false , true , false , true , true , false });
347+
348+ // Rotate the first three elements
349+ testRotate (
350+ new boolean [] {false , true , false , true , false , true , false },
351+ -2 ,
352+ 0 ,
353+ 3 ,
354+ new boolean [] {false , false , true , true , false , true , false });
355+ testRotate (
356+ new boolean [] {false , true , false , true , false , true , false },
357+ -1 ,
358+ 0 ,
359+ 3 ,
360+ new boolean [] {true , false , false , true , false , true , false });
361+ testRotate (
362+ new boolean [] {false , true , false , true , false , true , false },
363+ 0 ,
364+ 0 ,
365+ 3 ,
366+ new boolean [] {false , true , false , true , false , true , false });
367+ testRotate (
368+ new boolean [] {false , true , false , true , false , true , false },
369+ 1 ,
370+ 0 ,
371+ 3 ,
372+ new boolean [] {false , false , true , true , false , true , false });
373+ testRotate (
374+ new boolean [] {false , true , false , true , false , true , false },
375+ 2 ,
376+ 0 ,
377+ 3 ,
378+ new boolean [] {true , false , false , true , false , true , false });
379+
380+ // Rotate the last four elements
381+ testRotate (
382+ new boolean [] {false , true , false , true , false , true , false },
383+ -6 ,
384+ 3 ,
385+ 7 ,
386+ new boolean [] {false , true , false , true , false , true , false });
387+ testRotate (
388+ new boolean [] {false , true , false , true , false , true , false },
389+ -5 ,
390+ 3 ,
391+ 7 ,
392+ new boolean [] {false , true , false , false , true , false , true });
393+ testRotate (
394+ new boolean [] {false , true , false , true , false , true , false },
395+ -4 ,
396+ 3 ,
397+ 7 ,
398+ new boolean [] {false , true , false , true , false , true , false });
399+ testRotate (
400+ new boolean [] {false , true , false , true , false , true , false },
401+ -3 ,
402+ 3 ,
403+ 7 ,
404+ new boolean [] {false , true , false , false , true , false , true });
405+ testRotate (
406+ new boolean [] {false , true , false , true , false , true , false },
407+ -2 ,
408+ 3 ,
409+ 7 ,
410+ new boolean [] {false , true , false , true , false , true , false });
411+ testRotate (
412+ new boolean [] {false , true , false , true , false , true , false },
413+ -1 ,
414+ 3 ,
415+ 7 ,
416+ new boolean [] {false , true , false , false , true , false , true });
417+ testRotate (
418+ new boolean [] {false , true , false , true , false , true , false },
419+ 0 ,
420+ 3 ,
421+ 7 ,
422+ new boolean [] {false , true , false , true , false , true , false });
423+ testRotate (
424+ new boolean [] {false , true , false , true , false , true , false },
425+ 1 ,
426+ 3 ,
427+ 7 ,
428+ new boolean [] {false , true , false , false , true , false , true });
429+ testRotate (
430+ new boolean [] {false , true , false , true , false , true , false },
431+ 2 ,
432+ 3 ,
433+ 7 ,
434+ new boolean [] {false , true , false , true , false , true , false });
435+ testRotate (
436+ new boolean [] {false , true , false , true , false , true , false },
437+ 3 ,
438+ 3 ,
439+ 7 ,
440+ new boolean [] {false , true , false , false , true , false , true });
441+ }
442+
212443 public void testToArray () {
213444 // need explicit type parameter to avoid javac warning!?
214445 List <Boolean > none = Arrays .<Boolean >asList ();
0 commit comments