Sorry, I thought it already opened for commit. Revert it back now. Best Regards Sean, Xiao Xia Qiu
2009/12/2 Tim Ellison <[email protected]> > Sean, > > Please roll this back until we get through the M12 vote. > We are in code freeze. All commits require a second committer review > until the freeze is over. > > Thanks, > Tim > > On 02/Dec/2009 03:44, [email protected] wrote: > > Author: qiuxx > > Date: Wed Dec 2 03:44:56 2009 > > New Revision: 886043 > > > > URL: http://svn.apache.org/viewvc?rev=886043&view=rev > > Log: > > Apply for HARMONY-6395, [classlib][luni] Arrays.sort(double []) will > result in StackOverflowError for specific arrays input > > > > Modified: > > > harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/Arrays.java > > > harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/ArraysTest.java > > > > Modified: > harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/Arrays.java > > URL: > http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/Arrays.java?rev=886043&r1=886042&r2=886043&view=diff > > > ============================================================================== > > --- > harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/Arrays.java > (original) > > +++ > harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/Arrays.java > Wed Dec 2 03:44:56 2009 > > @@ -1495,6 +1495,23 @@ > > } > > return equals((short[]) e1, (short[]) e2); > > } > > + > > + private static boolean isSame(double double1, double double2) { > > + // This method is required as Double.NaN == Double.NaN will > return false. > > + long d1, d2; > > + long NaNbits = Double.doubleToLongBits(Double.NaN); > > + if ((d1 = Double.doubleToLongBits(double1)) == NaNbits) { > > + if ((d2 = Double.doubleToLongBits(double2)) == NaNbits) { > > + return true; > > + } else { > > + return false; > > + } > > + } else if ((d2 = Double.doubleToLongBits(double2)) == NaNbits) { > > + return false; > > + } else { > > + return double1 == double2; > > + } > > + } > > > > private static boolean lessThan(double double1, double double2) { > > // A slightly specialized version of > > @@ -1896,7 +1913,7 @@ > > c = d = end - 1; > > while (true) { > > while (b <= c && !lessThan(partionValue, array[b])) { > > - if (array[b] == partionValue) { > > + if (isSame(array[b], partionValue)) { > > temp = array[a]; > > array[a++] = array[b]; > > array[b] = temp; > > @@ -1904,7 +1921,7 @@ > > b++; > > } > > while (c >= b && !lessThan(array[c], partionValue)) { > > - if (array[c] == partionValue) { > > + if (isSame(array[c], partionValue)) { > > temp = array[c]; > > array[c] = array[d]; > > array[d--] = temp; > > > > Modified: > harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/ArraysTest.java > > URL: > http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/ArraysTest.java?rev=886043&r1=886042&r2=886043&view=diff > > > ============================================================================== > > --- > harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/ArraysTest.java > (original) > > +++ > harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/ArraysTest.java > Wed Dec 2 03:44:56 2009 > > @@ -911,9 +911,13 @@ > > double[] specials2 = new double[] { 0d, > Double.POSITIVE_INFINITY, -0d, > > Double.NEGATIVE_INFINITY, Double.MIN_VALUE, > Double.NaN, > > Double.MAX_VALUE }; > > + double[] specials3 = new double[] { Double.NaN, 1.0, 2.0, > Double.NaN, > > + Double.NaN, 1.0, 3.0 }; > > double[] answer = new double[] { Double.NEGATIVE_INFINITY, > -0d, 0d, > > Double.MIN_VALUE, Double.MAX_VALUE, > Double.POSITIVE_INFINITY, > > Double.NaN }; > > + double[] answer3 = new double[] { 1.0, 1.0, 2.0, 3.0, > Double.NaN, > > + Double.NaN, Double.NaN }; > > > > Arrays.sort(specials1); > > Object[] print1 = new Object[specials1.length]; > > @@ -928,6 +932,13 @@ > > print2[i] = new Double(specials2[i]); > > assertTrue("specials sort incorrectly 2: " + > Arrays.asList(print2), > > Arrays.equals(specials2, answer)); > > + > > + Arrays.sort(specials3); > > + Object[] print3 = new Object[specials3.length]; > > + for (int i = 0; i < specials3.length; i++) > > + print3[i] = new Double(specials3[i]); > > + assertTrue("specials sort incorrectly 3: " + > Arrays.asList(print3), > > + Arrays.equals(specials3, answer3)); > > } > > > > /** > > > > > > >
