// ------------------------------------------------------------
 @Test
 public void testRotation() {
   int nbOfRotations = 10000;
   for (int i = 0; i < nbOfRotations; i++) {
     BTree<Integer> t;
     int size = rnd.nextInt(10) + 6;
     do t = rndTree(size);
     while (itrWithRights.isEmpty());
     int ri = rnd.nextInt(itrWithRights.size());
     BTreeItr<Integer> ti = ((itrWithRights.get(ri)));
     String s0 = t.toReadableString();
     if (i == 0) System.out.println("original" + s0);
     if (i == 0) System.out.println("rotated left on " + ti.consult());
     ti.rotateLeft();
     String s1 = t.toReadableString();
     if (i == 0) System.out.println(s1);
     ti.rotateRight();
     String s2 = t.toReadableString();
     if (i == 0) System.out.println("then right again" + s2);
     assertTrue(s0.equals(s2));
     assertFalse(s0.equals(s1));
   }
 }
 // ------------------------------------------------------------
 public BTree<Integer> rndTree(int size) {
   itrWithRights = new Vector<BTreeItr<Integer>>();
   int i = 0;
   BTree<Integer> t = new BTree<Integer>();
   BTreeItr<Integer> ti;
   int[] tab = new int[size];
   for (i = 0; i < size; i++) tab[i] = i;
   shuffle(tab, rnd);
   for (i = 0; i < size; i++) {
     ti = t.root();
     while (!ti.isBottom()) {
       if (rnd.nextInt(2) == 0) ti = ti.left();
       else ti = ti.right();
     }
     ti.insert(new Integer(tab[i]));
     if (!ti.isRoot() && !ti.isLeftArc()) itrWithRights.add(ti.up());
   }
   return t;
 }