1 /*
   2  * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 /**
  26  * @test
  27  * @bug 7052494
  28  * @summary Eclipse test fails on JDK 7 b142
  29  *
  30  * @run main/othervm -Xbatch Test7052494
  31  */
  32 
  33 
  34 public class Test7052494 {
  35 
  36   static int test1(int i, int limit) {
  37     int result = 0;
  38     while (i++ != 0) {
  39       if (result >= limit)
  40         break;
  41       result = i*2;
  42     }
  43     return result;
  44   }
  45 
  46   static int test2(int i, int limit) {
  47     int result = 0;
  48     while (i-- != 0) {
  49       if (result <= limit)
  50         break;
  51       result = i*2;
  52     }
  53     return result;
  54   }
  55 
  56   static void test3(int i, int limit, int arr[]) {
  57     while (i++ != 0) {
  58       if (arr[i-1] >= limit)
  59         break;
  60       arr[i] = i*2;
  61     }
  62   }
  63 
  64   static void test4(int i, int limit, int arr[]) {
  65     while (i-- != 0) {
  66       if (arr[arr.length + i + 1] <= limit)
  67         break;
  68       arr[arr.length + i] = i*2;
  69     }
  70   }
  71 
  72   // Empty loop rolls through MAXINT if i > 0
  73   static int test5(int i) {
  74     int result = 0;
  75     while (i++ != 0) {
  76       result = i*2;
  77     }
  78     return result;
  79   }
  80 
  81   // Empty loop rolls through MININT if i < 0
  82   static int test6(int i) {
  83     int result = 0;
  84     while (i-- != 0) {
  85       result = i*2;
  86     }
  87     return result;
  88   }
  89 
  90   public static void main(String [] args) {
  91     boolean failed = false;
  92     int[] arr = new int[8];
  93     int[] ar3 = { 0, 0, 4, 6, 8, 10, 0, 0 };
  94     int[] ar4 = { 0, 0, 0, -10, -8, -6, -4, 0 };
  95     for (int i = 0; i < 11000; i++) {
  96       int k = test1(1, 10);
  97       if (k != 10) {
  98         System.out.println("FAILED: " + k + " != 10");
  99         failed = true;
 100         break;
 101       }
 102     }
 103     for (int i = 0; i < 11000; i++) {
 104       int k = test2(-1, -10);
 105       if (k != -10) {
 106         System.out.println("FAILED: " + k + " != -10");
 107         failed = true;
 108         break;
 109       }
 110     }
 111     for (int i = 0; i < 11000; i++) {
 112       java.util.Arrays.fill(arr, 0);
 113       test3(1, 10, arr);
 114       if (!java.util.Arrays.equals(arr,ar3)) {
 115         System.out.println("FAILED: arr = { " + arr[0] + ", "
 116                                               + arr[1] + ", "
 117                                               + arr[2] + ", "
 118                                               + arr[3] + ", "
 119                                               + arr[4] + ", "
 120                                               + arr[5] + ", "
 121                                               + arr[6] + ", "
 122                                               + arr[7] + " }");
 123         failed = true;
 124         break;
 125       }
 126     }
 127     for (int i = 0; i < 11000; i++) {
 128       java.util.Arrays.fill(arr, 0);
 129       test4(-1, -10, arr);
 130       if (!java.util.Arrays.equals(arr,ar4)) {
 131         System.out.println("FAILED: arr = { " + arr[0] + ", "
 132                                               + arr[1] + ", "
 133                                               + arr[2] + ", "
 134                                               + arr[3] + ", "
 135                                               + arr[4] + ", "
 136                                               + arr[5] + ", "
 137                                               + arr[6] + ", "
 138                                               + arr[7] + " }");
 139         failed = true;
 140         break;
 141       }
 142     }
 143     for (int i = 0; i < 11000; i++) {
 144       int k = test5(1);
 145       if (k != 0) {
 146         System.out.println("FAILED: " + k + " != 0");
 147         failed = true;
 148         break;
 149       }
 150     }
 151     for (int i = 0; i < 11000; i++) {
 152       int k = test6(-1);
 153       if (k != 0) {
 154         System.out.println("FAILED: " + k + " != 0");
 155         failed = true;
 156         break;
 157       }
 158     }
 159     if (failed)
 160       System.exit(97);
 161   }
 162 }