harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tim Ellison <t.p.elli...@gmail.com>
Subject Re: svn commit: r886043 - in /harmony/enhanced/classlib/trunk/modules/luni/src: main/java/java/util/Arrays.java test/api/common/org/apache/harmony/luni/tests/java/util/ArraysTest.java
Date Wed, 02 Dec 2009 08:08:54 GMT
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, qiuxx@apache.org 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));
>  	}
>  
>  	/**
> 
> 
> 

Mime
View raw message