content: package androguard.test;
  
  import android.util.Log;
  
  public class TestLoops {
  
      protected static class Loop {
          public static int i;
          public static int j;
      }
  
      public void testWhile() {
          int i = 5, j = 10;
          while (i < j) {
              j += i / 2.0 + j;
              i += i * 2;
          }
          Loop.i = i;
          Loop.j = j;
      }
  
      public void testWhile2() {
          while(true)
              System.out.println("toto");
      }
  
      public void testWhile3(int i, int j)
      {
          while ( i < j && i % 2 == 0 )
          {
              i += j / 3;
          }
      }
  
      public void testWhile4(int i, int j)
      {
          while ( i < j || i % 2 == 0 )
          {
              i += j / 3;
          }
      }
  
      public void testWhile5(int i, int j, int k )
      {
          while ( ( i < j || i % 2 == 0 ) && ( j < k || k % 2 == 0) )
              i += k - j;
      }
  
      public void testFor() {
          int i, j;
          for (i = 5, j = 10; i < j; i += i * 2) {
              j += i / 2.0 + j;
          }
          Loop.i = i;
          Loop.j = j;
      }
  
      public void testDoWhile() {
          int i = 5, j = 10;
          do {
              j += i / 2.0 + j;
              i += i * 2;
          } while (i < j);
          Loop.i = i;
          Loop.j = j;
      }
  
      public int testNestedLoops(int a) {
          if (a > 1000) {
              return testNestedLoops(a / 2);
          } else {
              while (a > 0) {
                  a += 1;
                  while (a % 2 == 0) {
                      a *= 2;
                      while (a % 3 == 0) {
                          a -= 3;
                      }
                  }
              }
          }
          return a;
      }
  
      public void testMultipleLoops() {
          int a = 0;
          while (a < 50)
              a += 2;
          while (a % 3 == 0)
              a *= 5;
          while (a < 789 && a > 901)
              System.out.println("woo");
      }
  
      public int testDoWhileTrue(int n) {
          do {
              n--;
              if (n == 2)
                  return 5;
              if (n < 2)
                  n = 500;
          } while (true);
      }
  
      public int testWhileTrue(int n) {
          while (true) {
              n--;
              if (n == 2)
                  return 5;
              if (n < 2)
                  n = 500;
          }
      }
  
      public int testDiffWhileDoWhile(int n) {
          while (n != 2) {
              if (n < 2)
                  n = 500;
          }
          return 5;
      }
  
      public void testReducible(boolean x, boolean y) {
          int a = 0, b = 0;
          if (x)
              while (y) {
                  a = b + 1;
                  b++;
              }
          else
              while (y) {
                  b++;
                  a = b + 1;
              }
          Loop.i = a;
          Loop.j = b;
      }
  
      public void testIrreducible(int a, int b) {
          while (true) {
              if (b < a) {
                  Log.i("test", "In BasicBlock A");
              }
              b = a - 1;
              Log.i("test2", "In BasicBlock B");
          }
      }
  
      public int testBreak( boolean b ) {
          int a = 0, c = 0;
          while(true) {
              System.out.println("foo");
              a += c;
              c += 5;
              if ( a == 50 )
                  b = true;
              if ( b )
                  break;
          }
          return a + c;
      }
  
      public int testBreakbis( boolean b ) {
          int a = 0, c = 0;
          do {
              System.out.println("foo");
              a += c;
              c += 5;
              if ( a == 50 )
                  b = true;
              if ( b )
                  break;
          } while(true);
          return a + c;
      }
  
      public int testBreakMid( boolean b ) {
          int a = Loop.i, c = Loop.j;
          while(true) {
              System.out.println("foo");
              a += c;
              c += 5;
              if ( a == 50 )
                  b = !b;
              if ( b ) break;
              System.out.println("bar");
              a *= 2;
          }
          return a + c;
      }
  
      public int testBreakDoWhile( boolean b ) {
          int a = 0, c = 0;
          do {
              System.out.println("foo");
              a += c;
              c += 5;
              if ( a == 50 )
                  b = true;
          }while ( b );
          return a + c;
      }
  
      public int testBreak2( boolean b ) {
          int a = 0, c = 0;
          while (true) {
              System.out.println("foo");
              a += c;
              c += 5;
              if ( a == 50 && b )
                  break;
          }
          return a + c;
      }
  
      public void testBreak3( boolean b ) {
          int a = 0, c = 0;
          while ( true ){
              System.out.println("foo");
              a += c;
              c += 5;
              if ( a == 50 && b )
                  break;
          }
      }
  
      public void testBreak4( boolean b, int d ) {
          int a = 0, c = 0;
          while ( c < 50 ) {
              System.out.println("foo");
              a += c;
              c +=5;
              if ( a == d )
                  break;
          }
      }
  }
  