1 /*
2  *  Licensed to the Apache Software Foundation (ASF) under one or more
3  *  contributor license agreements.  See the NOTICE file distributed with
4  *  this work for additional information regarding copyright ownership.
5  *  The ASF licenses this file to You under the Apache License, Version 2.0
6  *  (the "License"); you may not use this file except in compliance with
7  *  the License.  You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  */
17 package org.apache.harmony.tests.java.util;
18 
19 import tests.support.Support_UnmodifiableCollectionTest;
20 import java.lang.reflect.Method;
21 import java.util.Arrays;
22 import java.util.Comparator;
23 import java.util.Date;
24 import java.util.LinkedList;
25 import java.util.List;
26 import java.util.Random;
27 
28 public class ArraysTest extends junit.framework.TestCase {
29 
30     public static class ReversedIntegerComparator implements Comparator {
compare(Object o1, Object o2)31         public int compare(Object o1, Object o2) {
32             return -(((Integer) o1).compareTo((Integer) o2));
33         }
34 
equals(Object o1, Object o2)35         public boolean equals(Object o1, Object o2) {
36             return ((Integer) o1).compareTo((Integer) o2) == 0;
37         }
38     }
39 
40     static class MockComparable implements Comparable {
compareTo(Object o)41         public int compareTo(Object o) {
42             return 0;
43         }
44     }
45 
46     final static int arraySize = 100;
47 
48     Object[] objArray;
49 
50     boolean[] booleanArray;
51 
52     byte[] byteArray;
53 
54     char[] charArray;
55 
56     double[] doubleArray;
57 
58     float[] floatArray;
59 
60     int[] intArray;
61 
62     long[] longArray;
63 
64     Object[] objectArray;
65 
66     short[] shortArray;
67 
68     /**
69      * java.util.Arrays#asList(java.lang.Object[])
70      */
test_asList$Ljava_lang_Object()71     public void test_asList$Ljava_lang_Object() {
72         // Test for method java.util.List
73         // java.util.Arrays.asList(java.lang.Object [])
74         List convertedList = Arrays.asList(objectArray);
75         for (int counter = 0; counter < arraySize; counter++) {
76             assertTrue(
77                     "Array and List converted from array do not contain identical elements",
78                     convertedList.get(counter) == objectArray[counter]);
79         }
80         convertedList.set(50, new Integer(1000));
81         assertTrue("set/get did not work on coverted list", convertedList.get(
82                 50).equals(new Integer(1000)));
83         convertedList.set(50, new Integer(50));
84         new Support_UnmodifiableCollectionTest("", convertedList).runTest();
85 
86         Object[] myArray = (Object[]) (objectArray.clone());
87         myArray[30] = null;
88         myArray[60] = null;
89         convertedList = Arrays.asList(myArray);
90         for (int counter = 0; counter < arraySize; counter++) {
91             assertTrue(
92                     "Array and List converted from array do not contain identical elements",
93                     convertedList.get(counter) == myArray[counter]);
94         }
95 
96         try {
97             Arrays.asList((Object[]) null);
98             fail("asList with null arg didn't throw NPE");
99         } catch (NullPointerException e) {
100             // Expected
101         }
102     }
103 
104     /**
105      * java.util.Arrays#binarySearch(byte[], byte)
106      */
test_binarySearch$BB()107     public void test_binarySearch$BB() {
108         // Test for method int java.util.Arrays.binarySearch(byte [], byte)
109         for (byte counter = 0; counter < arraySize; counter++)
110             assertTrue("Binary search on byte[] answered incorrect position",
111                     Arrays.binarySearch(byteArray, counter) == counter);
112         assertEquals("Binary search succeeded for value not present in array 1",
113                 -1, Arrays.binarySearch(intArray, (byte) -1));
114         assertTrue(
115                 "Binary search succeeded for value not present in array 2",
116                 Arrays.binarySearch(intArray, (byte) arraySize) == -(arraySize + 1));
117         for (byte counter = 0; counter < arraySize; counter++)
118             byteArray[counter] -= 50;
119         for (byte counter = 0; counter < arraySize; counter++)
120             assertTrue(
121                     "Binary search on byte[] involving negative numbers answered incorrect position",
122                     Arrays.binarySearch(byteArray, (byte) (counter - 50)) == counter);
123     }
124 
125     /**
126      * java.util.Arrays#binarySearch(char[], char)
127      */
test_binarySearch$CC()128     public void test_binarySearch$CC() {
129         // Test for method int java.util.Arrays.binarySearch(char [], char)
130         for (char counter = 0; counter < arraySize; counter++)
131             assertTrue(
132                     "Binary search on char[] answered incorrect position",
133                     Arrays.binarySearch(charArray, (char) (counter + 1)) == counter);
134         assertEquals("Binary search succeeded for value not present in array 1",
135                 -1, Arrays.binarySearch(charArray, '\u0000'));
136         assertTrue(
137                 "Binary search succeeded for value not present in array 2",
138                 Arrays.binarySearch(charArray, (char) (arraySize + 1)) == -(arraySize + 1));
139     }
140 
141     /**
142      * java.util.Arrays#binarySearch(double[], double)
143      */
test_binarySearch$DD()144     public void test_binarySearch$DD() {
145         // Test for method int java.util.Arrays.binarySearch(double [], double)
146         for (int counter = 0; counter < arraySize; counter++)
147             assertTrue(
148                     "Binary search on double[] answered incorrect position",
149                     Arrays.binarySearch(doubleArray, (double) counter) == (double) counter);
150         assertEquals("Binary search succeeded for value not present in array 1",
151                 -1, Arrays.binarySearch(doubleArray, (double) -1));
152         assertTrue(
153                 "Binary search succeeded for value not present in array 2",
154                 Arrays.binarySearch(doubleArray, (double) arraySize) == -(arraySize + 1));
155         for (int counter = 0; counter < arraySize; counter++)
156             doubleArray[counter] -= (double) 50;
157         for (int counter = 0; counter < arraySize; counter++)
158             assertTrue(
159                     "Binary search on double[] involving negative numbers answered incorrect position",
160                     Arrays.binarySearch(doubleArray, (double) (counter - 50)) == (double) counter);
161 
162         double[] specials = new double[] { Double.NEGATIVE_INFINITY,
163                 -Double.MAX_VALUE, -2d, -Double.MIN_VALUE, -0d, 0d,
164                 Double.MIN_VALUE, 2d, Double.MAX_VALUE,
165                 Double.POSITIVE_INFINITY, Double.NaN };
166         for (int i = 0; i < specials.length; i++) {
167             int result = Arrays.binarySearch(specials, specials[i]);
168             assertTrue(specials[i] + " invalid: " + result, result == i);
169         }
170         assertEquals("-1d", -4, Arrays.binarySearch(specials, -1d));
171         assertEquals("1d", -8, Arrays.binarySearch(specials, 1d));
172 
173     }
174 
175     /**
176      * java.util.Arrays#binarySearch(float[], float)
177      */
test_binarySearch$FF()178     public void test_binarySearch$FF() {
179         // Test for method int java.util.Arrays.binarySearch(float [], float)
180         for (int counter = 0; counter < arraySize; counter++)
181             assertTrue(
182                     "Binary search on float[] answered incorrect position",
183                     Arrays.binarySearch(floatArray, (float) counter) == (float) counter);
184         assertEquals("Binary search succeeded for value not present in array 1",
185                 -1, Arrays.binarySearch(floatArray, (float) -1));
186         assertTrue(
187                 "Binary search succeeded for value not present in array 2",
188                 Arrays.binarySearch(floatArray, (float) arraySize) == -(arraySize + 1));
189         for (int counter = 0; counter < arraySize; counter++)
190             floatArray[counter] -= (float) 50;
191         for (int counter = 0; counter < arraySize; counter++)
192             assertTrue(
193                     "Binary search on float[] involving negative numbers answered incorrect position",
194                     Arrays.binarySearch(floatArray, (float) counter - 50) == (float) counter);
195 
196         float[] specials = new float[] { Float.NEGATIVE_INFINITY,
197                 -Float.MAX_VALUE, -2f, -Float.MIN_VALUE, -0f, 0f,
198                 Float.MIN_VALUE, 2f, Float.MAX_VALUE, Float.POSITIVE_INFINITY,
199                 Float.NaN };
200         for (int i = 0; i < specials.length; i++) {
201             int result = Arrays.binarySearch(specials, specials[i]);
202             assertTrue(specials[i] + " invalid: " + result, result == i);
203         }
204         assertEquals("-1f", -4, Arrays.binarySearch(specials, -1f));
205         assertEquals("1f", -8, Arrays.binarySearch(specials, 1f));
206     }
207 
208     /**
209      * java.util.Arrays#binarySearch(int[], int)
210      */
test_binarySearch$II()211     public void test_binarySearch$II() {
212         // Test for method int java.util.Arrays.binarySearch(int [], int)
213         for (int counter = 0; counter < arraySize; counter++)
214             assertTrue("Binary search on int[] answered incorrect position",
215                     Arrays.binarySearch(intArray, counter) == counter);
216         assertEquals("Binary search succeeded for value not present in array 1",
217                 -1, Arrays.binarySearch(intArray, -1));
218         assertTrue("Binary search succeeded for value not present in array 2",
219                 Arrays.binarySearch(intArray, arraySize) == -(arraySize + 1));
220         for (int counter = 0; counter < arraySize; counter++)
221             intArray[counter] -= 50;
222         for (int counter = 0; counter < arraySize; counter++)
223             assertTrue(
224                     "Binary search on int[] involving negative numbers answered incorrect position",
225                     Arrays.binarySearch(intArray, counter - 50) == counter);
226     }
227 
228     /**
229      * java.util.Arrays#binarySearch(long[], long)
230      */
test_binarySearch$JJ()231     public void test_binarySearch$JJ() {
232         // Test for method int java.util.Arrays.binarySearch(long [], long)
233         for (long counter = 0; counter < arraySize; counter++)
234             assertTrue("Binary search on long[] answered incorrect position",
235                     Arrays.binarySearch(longArray, counter) == counter);
236         assertEquals("Binary search succeeded for value not present in array 1",
237                 -1, Arrays.binarySearch(longArray, (long) -1));
238         assertTrue(
239                 "Binary search succeeded for value not present in array 2",
240                 Arrays.binarySearch(longArray, (long) arraySize) == -(arraySize + 1));
241         for (long counter = 0; counter < arraySize; counter++)
242             longArray[(int) counter] -= (long) 50;
243         for (long counter = 0; counter < arraySize; counter++)
244             assertTrue(
245                     "Binary search on long[] involving negative numbers answered incorrect position",
246                     Arrays.binarySearch(longArray, counter - (long) 50) == counter);
247     }
248 
249     /**
250      * java.util.Arrays#binarySearch(java.lang.Object[],
251      *        java.lang.Object)
252      */
test_binarySearch$Ljava_lang_ObjectLjava_lang_Object()253     public void test_binarySearch$Ljava_lang_ObjectLjava_lang_Object() {
254         // Test for method int java.util.Arrays.binarySearch(java.lang.Object
255         // [], java.lang.Object)
256         assertEquals(
257                 "Binary search succeeded for non-comparable value in empty array",
258                 -1, Arrays.binarySearch(new Object[] {}, new Object()));
259         assertEquals(
260                 "Binary search succeeded for comparable value in empty array",
261                 -1, Arrays.binarySearch(new Object[] {}, new Integer(-1)));
262         for (int counter = 0; counter < arraySize; counter++)
263             assertTrue(
264                     "Binary search on Object[] answered incorrect position",
265                     Arrays.binarySearch(objectArray, objArray[counter]) == counter);
266         assertEquals("Binary search succeeded for value not present in array 1",
267                 -1, Arrays.binarySearch(objectArray, new Integer(-1)));
268         assertTrue(
269                 "Binary search succeeded for value not present in array 2",
270                 Arrays.binarySearch(objectArray, new Integer(arraySize)) == -(arraySize + 1));
271 
272         Object object = new Object();
273         Object[] objects = new MockComparable[] { new MockComparable() };
274         assertEquals("Should always return 0", 0, Arrays.binarySearch(objects, object));
275 
276         Object[] string_objects = new String[] { "one" };
277         try {
278             Arrays.binarySearch(string_objects, object);
279             fail("No expected ClassCastException");
280         } catch (ClassCastException e) {
281             // Expected
282         }
283     }
284 
285     /**
286      * java.util.Arrays#binarySearch(java.lang.Object[],
287      *        java.lang.Object, java.util.Comparator)
288      */
test_binarySearch$Ljava_lang_ObjectLjava_lang_ObjectLjava_util_Comparator()289     public void test_binarySearch$Ljava_lang_ObjectLjava_lang_ObjectLjava_util_Comparator() {
290         // Test for method int java.util.Arrays.binarySearch(java.lang.Object
291         // [], java.lang.Object, java.util.Comparator)
292         Comparator comp = new ReversedIntegerComparator();
293         for (int counter = 0; counter < arraySize; counter++)
294             objectArray[counter] = objArray[arraySize - counter - 1];
295         assertTrue(
296                 "Binary search succeeded for value not present in array 1",
297                 Arrays.binarySearch(objectArray, new Integer(-1), comp) == -(arraySize + 1));
298         assertEquals("Binary search succeeded for value not present in array 2",
299                 -1, Arrays.binarySearch(objectArray, new Integer(arraySize), comp));
300         for (int counter = 0; counter < arraySize; counter++)
301             assertTrue(
302                     "Binary search on Object[] with custom comparator answered incorrect position",
303                     Arrays.binarySearch(objectArray, objArray[counter], comp) == arraySize
304                             - counter - 1);
305     }
306 
307     /**
308      * java.util.Arrays#binarySearch(short[], short)
309      */
test_binarySearch$SS()310     public void test_binarySearch$SS() {
311         // Test for method int java.util.Arrays.binarySearch(short [], short)
312         for (short counter = 0; counter < arraySize; counter++)
313             assertTrue("Binary search on short[] answered incorrect position",
314                     Arrays.binarySearch(shortArray, counter) == counter);
315         assertEquals("Binary search succeeded for value not present in array 1",
316                 -1, Arrays.binarySearch(intArray, (short) -1));
317         assertTrue(
318                 "Binary search succeeded for value not present in array 2",
319                 Arrays.binarySearch(intArray, (short) arraySize) == -(arraySize + 1));
320         for (short counter = 0; counter < arraySize; counter++)
321             shortArray[counter] -= 50;
322         for (short counter = 0; counter < arraySize; counter++)
323             assertTrue(
324                     "Binary search on short[] involving negative numbers answered incorrect position",
325                     Arrays.binarySearch(shortArray, (short) (counter - 50)) == counter);
326     }
327 
test_Arrays_binaraySearch_byte()328     public void test_Arrays_binaraySearch_byte() {
329         assertEquals(-1, Arrays.binarySearch(new byte[] { '0' }, 0, 0,
330                 (byte) '1'));
331         assertEquals(-2, Arrays.binarySearch(new byte[] { '0' }, 1, 1,
332                 (byte) '1'));
333         assertEquals(-2, Arrays.binarySearch(new byte[] { '0', '1' }, 1, 1,
334                 (byte) '2'));
335         assertEquals(-3, Arrays.binarySearch(new byte[] { '0', '1' }, 2, 2,
336                 (byte) '2'));
337     }
338 
test_Arrays_binaraySearch_char()339     public void test_Arrays_binaraySearch_char() {
340         assertEquals(-1, Arrays.binarySearch(new char[] { '0' }, 0, 0, '1'));
341         assertEquals(-2, Arrays.binarySearch(new char[] { '0' }, 1, 1, '1'));
342         assertEquals(-2, Arrays
343                 .binarySearch(new char[] { '0', '1' }, 1, 1, '2'));
344         assertEquals(-3, Arrays
345                 .binarySearch(new char[] { '0', '1' }, 2, 2, '2'));
346     }
347 
test_Arrays_binaraySearch_float()348     public void test_Arrays_binaraySearch_float() {
349         assertEquals(-1, Arrays.binarySearch(new float[] { -1.0f }, 0, 0, 0.0f));
350         assertEquals(-2, Arrays.binarySearch(new float[] { -1.0f }, 1, 1, 0.0f));
351         assertEquals(-2, Arrays.binarySearch(new float[] { -1.0f, 0f }, 1, 1,
352                 1f));
353         assertEquals(-3, Arrays.binarySearch(new float[] { -1.0f, 0f }, 2, 2,
354                 1f));
355     }
356 
test_Arrays_binaraySearch_double()357     public void test_Arrays_binaraySearch_double() {
358         assertEquals(-1, Arrays.binarySearch(new double[] { -1.0 }, 0, 0, 0.0));
359         assertEquals(-2, Arrays.binarySearch(new double[] { -1.0 }, 1, 1, 0.0));
360         assertEquals(-2, Arrays.binarySearch(new double[] { -1.0, 0 }, 1, 1, 1));
361         assertEquals(-3, Arrays.binarySearch(new double[] { -1.0, 0 }, 2, 2, 1));
362     }
363 
test_Arrays_binaraySearch_int()364     public void test_Arrays_binaraySearch_int() {
365         assertEquals(-1, Arrays.binarySearch(new int[] { -1 }, 0, 0, 0));
366         assertEquals(-2, Arrays.binarySearch(new int[] { -1 }, 1, 1, 0));
367         assertEquals(-2, Arrays.binarySearch(new int[] { -1, 0 }, 1, 1, 1));
368         assertEquals(-3, Arrays.binarySearch(new int[] { -1, 0 }, 2, 2, 1));
369     }
370 
test_Arrays_binaraySearch_long()371     public void test_Arrays_binaraySearch_long() {
372         assertEquals(-1, Arrays.binarySearch(new long[] { -1l }, 0, 0, 0l));
373         assertEquals(-2, Arrays.binarySearch(new long[] { -1l }, 1, 1, 0l));
374         assertEquals(-2, Arrays.binarySearch(new long[] { -1l, 0l }, 1, 1, 1l));
375         assertEquals(-3, Arrays.binarySearch(new long[] { -1l, 0l }, 2, 2, 1l));
376     }
377 
test_Arrays_binaraySearch_short()378     public void test_Arrays_binaraySearch_short() {
379         assertEquals(-1, Arrays.binarySearch(new short[] { (short) -1 }, 0, 0,
380                 (short) 0));
381         assertEquals(-2, Arrays.binarySearch(new short[] { (short) -1 }, 1, 1,
382                 (short) 0));
383         assertEquals(-2, Arrays.binarySearch(new short[] { (short) -1,
384                 (short) 0 }, 1, 1, (short) 1));
385         assertEquals(-3, Arrays.binarySearch(new short[] { (short) -1,
386                 (short) 0 }, 2, 2, (short) 1));
387     }
388 
test_Arrays_binaraySearch_Object()389     public void test_Arrays_binaraySearch_Object() {
390         assertEquals(-1, Arrays.binarySearch(new Object[] { new Integer(-1) },
391                 0, 0, new Integer(0)));
392         assertEquals(-2, Arrays.binarySearch(new Object[] { new Integer(-1) },
393                 1, 1, new Integer(0)));
394         assertEquals(-2, Arrays.binarySearch(new Object[] { new Integer(-1),
395                 new Integer(0) }, 1, 1, new Integer(1)));
396         assertEquals(-3, Arrays.binarySearch(new Object[] { new Integer(-1),
397                 new Integer(0) }, 2, 2, new Integer(1)));
398     }
399 
test_Arrays_binaraySearch_T()400     public void test_Arrays_binaraySearch_T() {
401         ReversedIntegerComparator reversedComparator = new ReversedIntegerComparator();
402         assertEquals(-1, Arrays.binarySearch(new Integer[] { new Integer(-1) },
403                 0, 0, new Integer(0), reversedComparator));
404         assertEquals(-2, Arrays.binarySearch(new Integer[] { new Integer(-1) },
405                 1, 1, new Integer(0), reversedComparator));
406         assertEquals(-2, Arrays.binarySearch(new Integer[] { new Integer(-1),
407                 new Integer(0) }, 1, 1, new Integer(1), reversedComparator));
408         assertEquals(-3, Arrays.binarySearch(new Integer[] { new Integer(-1),
409                 new Integer(0) }, 2, 2, new Integer(1), reversedComparator));
410     }
411 
412     /**
413      * java.util.Arrays#fill(byte[], byte)
414      */
test_fill$BB()415     public void test_fill$BB() {
416         // Test for method void java.util.Arrays.fill(byte [], byte)
417 
418         byte d[] = new byte[1000];
419         Arrays.fill(d, Byte.MAX_VALUE);
420         for (int i = 0; i < d.length; i++)
421             assertTrue("Failed to fill byte array correctly",
422                     d[i] == Byte.MAX_VALUE);
423     }
424 
425     /**
426      * java.util.Arrays#fill(byte[], int, int, byte)
427      */
test_fill$BIIB()428     public void test_fill$BIIB() {
429         // Test for method void java.util.Arrays.fill(byte [], int, int, byte)
430         byte val = Byte.MAX_VALUE;
431         byte d[] = new byte[1000];
432         Arrays.fill(d, 400, d.length, val);
433         for (int i = 0; i < 400; i++)
434             assertTrue("Filled elements not in range", !(d[i] == val));
435         for (int i = 400; i < d.length; i++)
436             assertTrue("Failed to fill byte array correctly", d[i] == val);
437 
438         int result;
439         try {
440             Arrays.fill(new byte[2], 2, 1, (byte) 27);
441             result = 0;
442         } catch (ArrayIndexOutOfBoundsException e) {
443             result = 1;
444         } catch (IllegalArgumentException e) {
445             result = 2;
446         }
447         assertEquals("Wrong exception1", 2, result);
448         try {
449             Arrays.fill(new byte[2], -1, 1, (byte) 27);
450             result = 0;
451         } catch (ArrayIndexOutOfBoundsException e) {
452             result = 1;
453         } catch (IllegalArgumentException e) {
454             result = 2;
455         }
456         assertEquals("Wrong exception2", 1, result);
457         try {
458             Arrays.fill(new byte[2], 1, 4, (byte) 27);
459             result = 0;
460         } catch (ArrayIndexOutOfBoundsException e) {
461             result = 1;
462         } catch (IllegalArgumentException e) {
463             result = 2;
464         }
465         assertEquals("Wrong exception", 1, result);
466     }
467 
468     /**
469      * java.util.Arrays#fill(short[], short)
470      */
test_fill$SS()471     public void test_fill$SS() {
472         // Test for method void java.util.Arrays.fill(short [], short)
473 
474         short d[] = new short[1000];
475         Arrays.fill(d, Short.MAX_VALUE);
476         for (int i = 0; i < d.length; i++)
477             assertTrue("Failed to fill short array correctly",
478                     d[i] == Short.MAX_VALUE);
479     }
480 
481     /**
482      * java.util.Arrays#fill(short[], int, int, short)
483      */
test_fill$SIIS()484     public void test_fill$SIIS() {
485         // Test for method void java.util.Arrays.fill(short [], int, int, short)
486         short val = Short.MAX_VALUE;
487         short d[] = new short[1000];
488         Arrays.fill(d, 400, d.length, val);
489         for (int i = 0; i < 400; i++)
490             assertTrue("Filled elements not in range", !(d[i] == val));
491         for (int i = 400; i < d.length; i++)
492             assertTrue("Failed to fill short array correctly", d[i] == val);
493 
494         try {
495             Arrays.fill(d, 10, 0, val);
496             fail("IllegalArgumentException expected");
497         } catch (IllegalArgumentException e) {
498             //expected
499         }
500 
501         try {
502             Arrays.fill(d, -10, 0, val);
503             fail("ArrayIndexOutOfBoundsException expected");
504         } catch (ArrayIndexOutOfBoundsException e) {
505             //expected
506         }
507 
508         try {
509             Arrays.fill(d, 10, d.length+1, val);
510             fail("ArrayIndexOutOfBoundsException expected");
511         } catch (ArrayIndexOutOfBoundsException e) {
512             //expected
513         }
514     }
515 
516     /**
517      * java.util.Arrays#fill(char[], char)
518      */
test_fill$CC()519     public void test_fill$CC() {
520         // Test for method void java.util.Arrays.fill(char [], char)
521 
522         char d[] = new char[1000];
523         Arrays.fill(d, 'V');
524         for (int i = 0; i < d.length; i++)
525             assertEquals("Failed to fill char array correctly", 'V', d[i]);
526     }
527 
528     /**
529      * java.util.Arrays#fill(char[], int, int, char)
530      */
test_fill$CIIC()531     public void test_fill$CIIC() {
532         // Test for method void java.util.Arrays.fill(char [], int, int, char)
533         char val = 'T';
534         char d[] = new char[1000];
535         Arrays.fill(d, 400, d.length, val);
536         for (int i = 0; i < 400; i++)
537             assertTrue("Filled elements not in range", !(d[i] == val));
538         for (int i = 400; i < d.length; i++)
539             assertTrue("Failed to fill char array correctly", d[i] == val);
540 
541         try {
542             Arrays.fill(d, 10, 0, val);
543             fail("IllegalArgumentException expected");
544         } catch (IllegalArgumentException e) {
545             //expected
546         }
547 
548         try {
549             Arrays.fill(d, -10, 0, val);
550             fail("ArrayIndexOutOfBoundsException expected");
551         } catch (ArrayIndexOutOfBoundsException e) {
552             //expected
553         }
554 
555         try {
556             Arrays.fill(d, 10, d.length+1, val);
557             fail("ArrayIndexOutOfBoundsException expected");
558         } catch (ArrayIndexOutOfBoundsException e) {
559             //expected
560         }
561     }
562 
563     /**
564      * java.util.Arrays#fill(int[], int)
565      */
test_fill$II()566     public void test_fill$II() {
567         // Test for method void java.util.Arrays.fill(int [], int)
568 
569         int d[] = new int[1000];
570         Arrays.fill(d, Integer.MAX_VALUE);
571         for (int i = 0; i < d.length; i++)
572             assertTrue("Failed to fill int array correctly",
573                     d[i] == Integer.MAX_VALUE);
574     }
575 
576     /**
577      * java.util.Arrays#fill(int[], int, int, int)
578      */
test_fill$IIII()579     public void test_fill$IIII() {
580         // Test for method void java.util.Arrays.fill(int [], int, int, int)
581         int val = Integer.MAX_VALUE;
582         int d[] = new int[1000];
583         Arrays.fill(d, 400, d.length, val);
584         for (int i = 0; i < 400; i++)
585             assertTrue("Filled elements not in range", !(d[i] == val));
586         for (int i = 400; i < d.length; i++)
587             assertTrue("Failed to fill int array correctly", d[i] == val);
588 
589         try {
590             Arrays.fill(d, 10, 0, val);
591             fail("IllegalArgumentException expected");
592         } catch (IllegalArgumentException e) {
593             //expected
594         }
595 
596         try {
597             Arrays.fill(d, -10, 0, val);
598             fail("ArrayIndexOutOfBoundsException expected");
599         } catch (ArrayIndexOutOfBoundsException e) {
600             //expected
601         }
602 
603         try {
604             Arrays.fill(d, 10, d.length+1, val);
605             fail("ArrayIndexOutOfBoundsException expected");
606         } catch (ArrayIndexOutOfBoundsException e) {
607             //expected
608         }
609     }
610 
611     /**
612      * java.util.Arrays#fill(long[], long)
613      */
test_fill$JJ()614     public void test_fill$JJ() {
615         // Test for method void java.util.Arrays.fill(long [], long)
616 
617         long d[] = new long[1000];
618         Arrays.fill(d, Long.MAX_VALUE);
619         for (int i = 0; i < d.length; i++)
620             assertTrue("Failed to fill long array correctly",
621                     d[i] == Long.MAX_VALUE);
622     }
623 
624     /**
625      * java.util.Arrays#fill(long[], int, int, long)
626      */
test_fill$JIIJ()627     public void test_fill$JIIJ() {
628         // Test for method void java.util.Arrays.fill(long [], int, int, long)
629         long d[] = new long[1000];
630         Arrays.fill(d, 400, d.length, Long.MAX_VALUE);
631         for (int i = 0; i < 400; i++)
632             assertTrue("Filled elements not in range", !(d[i] == Long.MAX_VALUE));
633         for (int i = 400; i < d.length; i++)
634             assertTrue("Failed to fill long array correctly",
635                     d[i] == Long.MAX_VALUE);
636 
637         try {
638             Arrays.fill(d, 10, 0, Long.MIN_VALUE);
639             fail("IllegalArgumentException expected");
640         } catch (IllegalArgumentException e) {
641             //expected
642         }
643 
644         try {
645             Arrays.fill(d, -10, 0, Long.MAX_VALUE);
646             fail("ArrayIndexOutOfBoundsException expected");
647         } catch (ArrayIndexOutOfBoundsException e) {
648             //expected
649         }
650 
651         try {
652             Arrays.fill(d, 10, d.length+1, Long.MAX_VALUE);
653             fail("ArrayIndexOutOfBoundsException expected");
654         } catch (ArrayIndexOutOfBoundsException e) {
655             //expected
656         }
657     }
658 
659     /**
660      * java.util.Arrays#fill(float[], float)
661      */
test_fill$FF()662     public void test_fill$FF() {
663         // Test for method void java.util.Arrays.fill(float [], float)
664         float d[] = new float[1000];
665         Arrays.fill(d, Float.MAX_VALUE);
666         for (int i = 0; i < d.length; i++)
667             assertTrue("Failed to fill float array correctly",
668                     d[i] == Float.MAX_VALUE);
669     }
670 
671     /**
672      * java.util.Arrays#fill(float[], int, int, float)
673      */
test_fill$FIIF()674     public void test_fill$FIIF() {
675         // Test for method void java.util.Arrays.fill(float [], int, int, float)
676         float val = Float.MAX_VALUE;
677         float d[] = new float[1000];
678         Arrays.fill(d, 400, d.length, val);
679         for (int i = 0; i < 400; i++)
680             assertTrue("Filled elements not in range", !(d[i] == val));
681         for (int i = 400; i < d.length; i++)
682             assertTrue("Failed to fill float array correctly", d[i] == val);
683 
684         try {
685             Arrays.fill(d, 10, 0, val);
686             fail("IllegalArgumentException expected");
687         } catch (IllegalArgumentException e) {
688             //expected
689         }
690 
691         try {
692             Arrays.fill(d, -10, 0, val);
693             fail("ArrayIndexOutOfBoundsException expected");
694         } catch (ArrayIndexOutOfBoundsException e) {
695             //expected
696         }
697 
698         try {
699             Arrays.fill(d, 10, d.length+1, val);
700             fail("ArrayIndexOutOfBoundsException expected");
701         } catch (ArrayIndexOutOfBoundsException e) {
702             //expected
703         }
704     }
705 
706     /**
707      * java.util.Arrays#fill(double[], double)
708      */
test_fill$DD()709     public void test_fill$DD() {
710         // Test for method void java.util.Arrays.fill(double [], double)
711 
712         double d[] = new double[1000];
713         Arrays.fill(d, Double.MAX_VALUE);
714         for (int i = 0; i < d.length; i++)
715             assertTrue("Failed to fill double array correctly",
716                     d[i] == Double.MAX_VALUE);
717     }
718 
719     /**
720      * java.util.Arrays#fill(double[], int, int, double)
721      */
test_fill$DIID()722     public void test_fill$DIID() {
723         // Test for method void java.util.Arrays.fill(double [], int, int,
724         // double)
725         double val = Double.MAX_VALUE;
726         double d[] = new double[1000];
727         Arrays.fill(d, 400, d.length, val);
728         for (int i = 0; i < 400; i++)
729             assertTrue("Filled elements not in range", !(d[i] == val));
730         for (int i = 400; i < d.length; i++)
731             assertTrue("Failed to fill double array correctly", d[i] == val);
732 
733         try {
734             Arrays.fill(d, 10, 0, val);
735             fail("IllegalArgumentException expected");
736         } catch (IllegalArgumentException e) {
737             //expected
738         }
739 
740         try {
741             Arrays.fill(d, -10, 0, val);
742             fail("ArrayIndexOutOfBoundsException expected");
743         } catch (ArrayIndexOutOfBoundsException e) {
744             //expected
745         }
746 
747         try {
748             Arrays.fill(d, 10, d.length+1, val);
749             fail("ArrayIndexOutOfBoundsException expected");
750         } catch (ArrayIndexOutOfBoundsException e) {
751             //expected
752         }
753     }
754 
755     /**
756      * java.util.Arrays#fill(boolean[], boolean)
757      */
test_fill$ZZ()758     public void test_fill$ZZ() {
759         // Test for method void java.util.Arrays.fill(boolean [], boolean)
760 
761         boolean d[] = new boolean[1000];
762         Arrays.fill(d, true);
763         for (int i = 0; i < d.length; i++)
764             assertTrue("Failed to fill boolean array correctly", d[i]);
765     }
766 
767     /**
768      * java.util.Arrays#fill(boolean[], int, int, boolean)
769      */
test_fill$ZIIZ()770     public void test_fill$ZIIZ() {
771         // Test for method void java.util.Arrays.fill(boolean [], int, int,
772         // boolean)
773         boolean val = true;
774         boolean d[] = new boolean[1000];
775         Arrays.fill(d, 400, d.length, val);
776         for (int i = 0; i < 400; i++)
777             assertTrue("Filled elements not in range", !(d[i] == val));
778         for (int i = 400; i < d.length; i++)
779             assertTrue("Failed to fill boolean array correctly", d[i] == val);
780 
781         try {
782             Arrays.fill(d, 10, 0, val);
783             fail("IllegalArgumentException expected");
784         } catch (IllegalArgumentException e) {
785             //expected
786         }
787 
788         try {
789             Arrays.fill(d, -10, 0, val);
790             fail("ArrayIndexOutOfBoundsException expected");
791         } catch (ArrayIndexOutOfBoundsException e) {
792             //expected
793         }
794 
795         try {
796             Arrays.fill(d, 10, d.length+1, val);
797             fail("ArrayIndexOutOfBoundsException expected");
798         } catch (ArrayIndexOutOfBoundsException e) {
799             //expected
800         }
801     }
802 
803     /**
804      * java.util.Arrays#fill(java.lang.Object[], java.lang.Object)
805      */
test_fill$Ljava_lang_ObjectLjava_lang_Object()806     public void test_fill$Ljava_lang_ObjectLjava_lang_Object() {
807         // Test for method void java.util.Arrays.fill(java.lang.Object [],
808         // java.lang.Object)
809         Object val = new Object();
810         Object d[] = new Object[1000];
811         Arrays.fill(d, 0, d.length, val);
812         for (int i = 0; i < d.length; i++)
813             assertTrue("Failed to fill Object array correctly", d[i] == val);
814     }
815 
816     /**
817      * java.util.Arrays#fill(java.lang.Object[], int, int,
818      *        java.lang.Object)
819      */
test_fill$Ljava_lang_ObjectIILjava_lang_Object()820     public void test_fill$Ljava_lang_ObjectIILjava_lang_Object() {
821         // Test for method void java.util.Arrays.fill(java.lang.Object [], int,
822         // int, java.lang.Object)
823         Object val = new Object();
824         Object d[] = new Object[1000];
825         Arrays.fill(d, 400, d.length, val);
826         for (int i = 0; i < 400; i++)
827             assertTrue("Filled elements not in range", !(d[i] == val));
828         for (int i = 400; i < d.length; i++)
829             assertTrue("Failed to fill Object array correctly", d[i] == val);
830 
831         Arrays.fill(d, 400, d.length, null);
832         for (int i = 400; i < d.length; i++)
833             assertNull("Failed to fill Object array correctly with nulls",
834                     d[i]);
835 
836         try {
837             Arrays.fill(d, 10, 0, val);
838             fail("IllegalArgumentException expected");
839         } catch (IllegalArgumentException e) {
840             //expected
841         }
842 
843         try {
844             Arrays.fill(d, -10, 0, val);
845             fail("ArrayIndexOutOfBoundsException expected");
846         } catch (ArrayIndexOutOfBoundsException e) {
847             //expected
848         }
849 
850         try {
851             Arrays.fill(d, 10, d.length+1, val);
852             fail("ArrayIndexOutOfBoundsException expected");
853         } catch (ArrayIndexOutOfBoundsException e) {
854             //expected
855         }
856     }
857 
858     /**
859      * java.util.Arrays#equals(byte[], byte[])
860      */
test_equals$B$B()861     public void test_equals$B$B() {
862         // Test for method boolean java.util.Arrays.equals(byte [], byte [])
863         byte d[] = new byte[1000];
864         byte x[] = new byte[1000];
865         Arrays.fill(d, Byte.MAX_VALUE);
866         Arrays.fill(x, Byte.MIN_VALUE);
867         assertTrue("Inequal arrays returned true", !Arrays.equals(d, x));
868         Arrays.fill(x, Byte.MAX_VALUE);
869         assertTrue("equal arrays returned false", Arrays.equals(d, x));
870     }
871 
872     /**
873      * java.util.Arrays#equals(short[], short[])
874      */
test_equals$S$S()875     public void test_equals$S$S() {
876         // Test for method boolean java.util.Arrays.equals(short [], short [])
877         short d[] = new short[1000];
878         short x[] = new short[1000];
879         Arrays.fill(d, Short.MAX_VALUE);
880         Arrays.fill(x, Short.MIN_VALUE);
881         assertTrue("Inequal arrays returned true", !Arrays.equals(d, x));
882         Arrays.fill(x, Short.MAX_VALUE);
883         assertTrue("equal arrays returned false", Arrays.equals(d, x));
884     }
885 
886     /**
887      * java.util.Arrays#equals(char[], char[])
888      */
test_equals$C$C()889     public void test_equals$C$C() {
890         // Test for method boolean java.util.Arrays.equals(char [], char [])
891         char d[] = new char[1000];
892         char x[] = new char[1000];
893         char c = 'T';
894         Arrays.fill(d, c);
895         Arrays.fill(x, 'L');
896         assertTrue("Inequal arrays returned true", !Arrays.equals(d, x));
897         Arrays.fill(x, c);
898         assertTrue("equal arrays returned false", Arrays.equals(d, x));
899     }
900 
901     /**
902      * java.util.Arrays#equals(int[], int[])
903      */
test_equals$I$I()904     public void test_equals$I$I() {
905         // Test for method boolean java.util.Arrays.equals(int [], int [])
906         int d[] = new int[1000];
907         int x[] = new int[1000];
908         Arrays.fill(d, Integer.MAX_VALUE);
909         Arrays.fill(x, Integer.MIN_VALUE);
910         assertTrue("Inequal arrays returned true", !Arrays.equals(d, x));
911         Arrays.fill(x, Integer.MAX_VALUE);
912         assertTrue("equal arrays returned false", Arrays.equals(d, x));
913 
914         assertTrue("wrong result for null array1", !Arrays.equals(new int[2],
915                 null));
916         assertTrue("wrong result for null array2", !Arrays.equals(null,
917                 new int[2]));
918     }
919 
920     /**
921      * java.util.Arrays#equals(long[], long[])
922      */
test_equals$J$J()923     public void test_equals$J$J() {
924         // Test for method boolean java.util.Arrays.equals(long [], long [])
925         long d[] = new long[1000];
926         long x[] = new long[1000];
927         Arrays.fill(d, Long.MAX_VALUE);
928         Arrays.fill(x, Long.MIN_VALUE);
929         assertTrue("Inequal arrays returned true", !Arrays.equals(d, x));
930         Arrays.fill(x, Long.MAX_VALUE);
931         assertTrue("equal arrays returned false", Arrays.equals(d, x));
932 
933         assertTrue("should be false", !Arrays.equals(
934                 new long[] { 0x100000000L }, new long[] { 0x200000000L }));
935 
936     }
937 
938     /**
939      * java.util.Arrays#equals(float[], float[])
940      */
test_equals$F$F()941     public void test_equals$F$F() {
942         // Test for method boolean java.util.Arrays.equals(float [], float [])
943         float d[] = new float[1000];
944         float x[] = new float[1000];
945         Arrays.fill(d, Float.MAX_VALUE);
946         Arrays.fill(x, Float.MIN_VALUE);
947         assertTrue("Inequal arrays returned true", !Arrays.equals(d, x));
948         Arrays.fill(x, Float.MAX_VALUE);
949         assertTrue("equal arrays returned false", Arrays.equals(d, x));
950 
951         assertTrue("NaN not equals", Arrays.equals(new float[] { Float.NaN },
952                 new float[] { Float.NaN }));
953         assertTrue("0f equals -0f", !Arrays.equals(new float[] { 0f },
954                 new float[] { -0f }));
955     }
956 
957     /**
958      * java.util.Arrays#equals(double[], double[])
959      */
test_equals$D$D()960     public void test_equals$D$D() {
961         // Test for method boolean java.util.Arrays.equals(double [], double [])
962         double d[] = new double[1000];
963         double x[] = new double[1000];
964         Arrays.fill(d, Double.MAX_VALUE);
965         Arrays.fill(x, Double.MIN_VALUE);
966         assertTrue("Inequal arrays returned true", !Arrays.equals(d, x));
967         Arrays.fill(x, Double.MAX_VALUE);
968         assertTrue("equal arrays returned false", Arrays.equals(d, x));
969 
970         assertTrue("should be false", !Arrays.equals(new double[] { 1.0 },
971                 new double[] { 2.0 }));
972 
973         assertTrue("NaN not equals", Arrays.equals(new double[] { Double.NaN },
974                 new double[] { Double.NaN }));
975         assertTrue("0d equals -0d", !Arrays.equals(new double[] { 0d },
976                 new double[] { -0d }));
977     }
978 
979     /**
980      * java.util.Arrays#equals(boolean[], boolean[])
981      */
test_equals$Z$Z()982     public void test_equals$Z$Z() {
983         // Test for method boolean java.util.Arrays.equals(boolean [], boolean
984         // [])
985         boolean d[] = new boolean[1000];
986         boolean x[] = new boolean[1000];
987         Arrays.fill(d, true);
988         Arrays.fill(x, false);
989         assertTrue("Inequal arrays returned true", !Arrays.equals(d, x));
990         Arrays.fill(x, true);
991         assertTrue("equal arrays returned false", Arrays.equals(d, x));
992     }
993 
994     /**
995      * java.util.Arrays#equals(java.lang.Object[], java.lang.Object[])
996      */
test_equals$Ljava_lang_Object$Ljava_lang_Object()997     public void test_equals$Ljava_lang_Object$Ljava_lang_Object() {
998         // Test for method boolean java.util.Arrays.equals(java.lang.Object [],
999         // java.lang.Object [])
1000         Object d[] = new Object[1000];
1001         Object x[] = new Object[1000];
1002         Object o = new Object();
1003         Arrays.fill(d, o);
1004         Arrays.fill(x, new Object());
1005         assertTrue("Inequal arrays returned true", !Arrays.equals(d, x));
1006         Arrays.fill(x, o);
1007         d[50] = null;
1008         x[50] = null;
1009         assertTrue("equal arrays returned false", Arrays.equals(d, x));
1010     }
1011 
1012     /**
1013      * java.util.Arrays#sort(byte[])
1014      */
test_sort$B()1015     public void test_sort$B() {
1016         // Test for method void java.util.Arrays.sort(byte [])
1017         byte[] reversedArray = new byte[arraySize];
1018         for (int counter = 0; counter < arraySize; counter++)
1019             reversedArray[counter] = (byte) (arraySize - counter - 1);
1020         Arrays.sort(reversedArray);
1021         for (int counter = 0; counter < arraySize; counter++)
1022             assertTrue("Resulting array not sorted",
1023                     reversedArray[counter] == (byte) counter);
1024     }
1025 
1026     /**
1027      * java.util.Arrays#sort(byte[], int, int)
1028      */
test_sort$BII()1029     public void test_sort$BII() {
1030         // Test for method void java.util.Arrays.sort(byte [], int, int)
1031         int startIndex = arraySize / 4;
1032         int endIndex = 3 * arraySize / 4;
1033         byte[] reversedArray = new byte[arraySize];
1034         byte[] originalReversedArray = new byte[arraySize];
1035         for (int counter = 0; counter < arraySize; counter++) {
1036             reversedArray[counter] = (byte) (arraySize - counter - 1);
1037             originalReversedArray[counter] = reversedArray[counter];
1038         }
1039         Arrays.sort(reversedArray, startIndex, endIndex);
1040         for (int counter = 0; counter < startIndex; counter++)
1041             assertTrue("Array modified outside of bounds",
1042                     reversedArray[counter] == originalReversedArray[counter]);
1043         for (int counter = startIndex; counter < endIndex - 1; counter++)
1044             assertTrue("Array not sorted within bounds",
1045                     reversedArray[counter] <= reversedArray[counter + 1]);
1046         for (int counter = endIndex; counter < arraySize; counter++)
1047             assertTrue("Array modified outside of bounds",
1048                     reversedArray[counter] == originalReversedArray[counter]);
1049 
1050         //exception testing
1051         try {
1052             Arrays.sort(reversedArray, startIndex + 1, startIndex);
1053             fail("IllegalArgumentException expected");
1054         } catch (IllegalArgumentException ignore) {
1055         }
1056 
1057         try {
1058             Arrays.sort(reversedArray, -1, startIndex);
1059             fail("ArrayIndexOutOfBoundsException expected (1)");
1060         } catch (ArrayIndexOutOfBoundsException ignore) {
1061         }
1062 
1063         try {
1064             Arrays.sort(reversedArray, startIndex, reversedArray.length + 1);
1065             fail("ArrayIndexOutOfBoundsException expected (2)");
1066         } catch (ArrayIndexOutOfBoundsException ignore) {
1067         }
1068     }
1069 
1070     /**
1071      * java.util.Arrays#sort(char[])
1072      */
test_sort$C()1073     public void test_sort$C() {
1074         // Test for method void java.util.Arrays.sort(char [])
1075         char[] reversedArray = new char[arraySize];
1076         for (int counter = 0; counter < arraySize; counter++)
1077             reversedArray[counter] = (char) (arraySize - counter - 1);
1078         Arrays.sort(reversedArray);
1079         for (int counter = 0; counter < arraySize; counter++)
1080             assertTrue("Resulting array not sorted",
1081                     reversedArray[counter] == (char) counter);
1082 
1083     }
1084 
1085     /**
1086      * java.util.Arrays#sort(char[], int, int)
1087      */
test_sort$CII()1088     public void test_sort$CII() {
1089         // Test for method void java.util.Arrays.sort(char [], int, int)
1090         int startIndex = arraySize / 4;
1091         int endIndex = 3 * arraySize / 4;
1092         char[] reversedArray = new char[arraySize];
1093         char[] originalReversedArray = new char[arraySize];
1094         for (int counter = 0; counter < arraySize; counter++) {
1095             reversedArray[counter] = (char) (arraySize - counter - 1);
1096             originalReversedArray[counter] = reversedArray[counter];
1097         }
1098         Arrays.sort(reversedArray, startIndex, endIndex);
1099         for (int counter = 0; counter < startIndex; counter++)
1100             assertTrue("Array modified outside of bounds",
1101                     reversedArray[counter] == originalReversedArray[counter]);
1102         for (int counter = startIndex; counter < endIndex - 1; counter++)
1103             assertTrue("Array not sorted within bounds",
1104                     reversedArray[counter] <= reversedArray[counter + 1]);
1105         for (int counter = endIndex; counter < arraySize; counter++)
1106             assertTrue("Array modified outside of bounds",
1107                     reversedArray[counter] == originalReversedArray[counter]);
1108 
1109         //exception testing
1110         try {
1111             Arrays.sort(reversedArray, startIndex + 1, startIndex);
1112             fail("IllegalArgumentException expected");
1113         } catch (IllegalArgumentException ignore) {
1114         }
1115 
1116         try {
1117             Arrays.sort(reversedArray, -1, startIndex);
1118             fail("ArrayIndexOutOfBoundsException expected (1)");
1119         } catch (ArrayIndexOutOfBoundsException ignore) {
1120         }
1121 
1122         try {
1123             Arrays.sort(reversedArray, startIndex, reversedArray.length + 1);
1124             fail("ArrayIndexOutOfBoundsException expected (2)");
1125         } catch (ArrayIndexOutOfBoundsException ignore) {
1126         }
1127     }
1128 
1129     /**
1130      * java.util.Arrays#sort(double[])
1131      */
test_sort$D()1132     public void test_sort$D() {
1133         // Test for method void java.util.Arrays.sort(double [])
1134         double[] reversedArray = new double[arraySize];
1135         for (int counter = 0; counter < arraySize; counter++)
1136             reversedArray[counter] = (double) (arraySize - counter - 1);
1137         Arrays.sort(reversedArray);
1138         for (int counter = 0; counter < arraySize; counter++)
1139             assertTrue("Resulting array not sorted",
1140                     reversedArray[counter] == (double) counter);
1141 
1142         double[] specials1 = new double[] { Double.NaN, Double.MAX_VALUE,
1143                 Double.MIN_VALUE, 0d, -0d, Double.POSITIVE_INFINITY,
1144                 Double.NEGATIVE_INFINITY };
1145         double[] specials2 = new double[] { 0d, Double.POSITIVE_INFINITY, -0d,
1146                 Double.NEGATIVE_INFINITY, Double.MIN_VALUE, Double.NaN,
1147                 Double.MAX_VALUE };
1148         double[] specials3 = new double[] { 0.0, Double.NaN, 1.0, 2.0, Double.NaN,
1149                 Double.NaN, 1.0, 3.0, -0.0 };
1150         double[] answer = new double[] { Double.NEGATIVE_INFINITY, -0d, 0d,
1151                 Double.MIN_VALUE, Double.MAX_VALUE, Double.POSITIVE_INFINITY,
1152                 Double.NaN };
1153         double[] answer3 = new double[] { -0.0, 0.0, 1.0, 1.0, 2.0, 3.0, Double.NaN,
1154                 Double.NaN, Double.NaN };
1155 
1156         Arrays.sort(specials1);
1157         Object[] print1 = new Object[specials1.length];
1158         for (int i = 0; i < specials1.length; i++)
1159             print1[i] = new Double(specials1[i]);
1160         assertTrue("specials sort incorrectly 1: " + Arrays.asList(print1),
1161                 Arrays.equals(specials1, answer));
1162 
1163         Arrays.sort(specials2);
1164         Object[] print2 = new Object[specials2.length];
1165         for (int i = 0; i < specials2.length; i++)
1166             print2[i] = new Double(specials2[i]);
1167         assertTrue("specials sort incorrectly 2: " + Arrays.asList(print2),
1168                 Arrays.equals(specials2, answer));
1169 
1170         Arrays.sort(specials3);
1171         Object[] print3 = new Object[specials3.length];
1172         for (int i = 0; i < specials3.length; i++)
1173             print3[i] = new Double(specials3[i]);
1174         assertTrue("specials sort incorrectly 3: " + Arrays.asList(print3),
1175                 Arrays.equals(specials3, answer3));
1176     }
1177 
1178     /**
1179      * java.util.Arrays#sort(double[], int, int)
1180      */
test_sort$DII()1181     public void test_sort$DII() {
1182         // Test for method void java.util.Arrays.sort(double [], int, int)
1183         int startIndex = arraySize / 4;
1184         int endIndex = 3 * arraySize / 4;
1185         double[] reversedArray = new double[arraySize];
1186         double[] originalReversedArray = new double[arraySize];
1187         for (int counter = 0; counter < arraySize; counter++) {
1188             reversedArray[counter] = (double) (arraySize - counter - 1);
1189             originalReversedArray[counter] = reversedArray[counter];
1190         }
1191         Arrays.sort(reversedArray, startIndex, endIndex);
1192         for (int counter = 0; counter < startIndex; counter++)
1193             assertTrue("Array modified outside of bounds",
1194                     reversedArray[counter] == originalReversedArray[counter]);
1195         for (int counter = startIndex; counter < endIndex - 1; counter++)
1196             assertTrue("Array not sorted within bounds",
1197                     reversedArray[counter] <= reversedArray[counter + 1]);
1198         for (int counter = endIndex; counter < arraySize; counter++)
1199             assertTrue("Array modified outside of bounds",
1200                     reversedArray[counter] == originalReversedArray[counter]);
1201 
1202         //exception testing
1203         try {
1204             Arrays.sort(reversedArray, startIndex + 1, startIndex);
1205             fail("IllegalArgumentException expected");
1206         } catch (IllegalArgumentException ignore) {
1207         }
1208 
1209         try {
1210             Arrays.sort(reversedArray, -1, startIndex);
1211             fail("ArrayIndexOutOfBoundsException expected (1)");
1212         } catch (ArrayIndexOutOfBoundsException ignore) {
1213         }
1214 
1215         try {
1216             Arrays.sort(reversedArray, startIndex, reversedArray.length + 1);
1217             fail("ArrayIndexOutOfBoundsException expected (2)");
1218         } catch (ArrayIndexOutOfBoundsException ignore) {
1219         }
1220     }
1221 
1222     /**
1223      * java.util.Arrays#sort(float[])
1224      */
test_sort$F()1225     public void test_sort$F() {
1226         // Test for method void java.util.Arrays.sort(float [])
1227         float[] reversedArray = new float[arraySize];
1228         for (int counter = 0; counter < arraySize; counter++)
1229             reversedArray[counter] = (float) (arraySize - counter - 1);
1230         Arrays.sort(reversedArray);
1231         for (int counter = 0; counter < arraySize; counter++)
1232             assertTrue("Resulting array not sorted",
1233                     reversedArray[counter] == (float) counter);
1234 
1235         float[] specials1 = new float[] { Float.NaN, Float.MAX_VALUE,
1236                 Float.MIN_VALUE, 0f, -0f, Float.POSITIVE_INFINITY,
1237                 Float.NEGATIVE_INFINITY };
1238         float[] specials2 = new float[] { 0f, Float.POSITIVE_INFINITY, -0f,
1239                 Float.NEGATIVE_INFINITY, Float.MIN_VALUE, Float.NaN,
1240                 Float.MAX_VALUE };
1241         float[] answer = new float[] { Float.NEGATIVE_INFINITY, -0f, 0f,
1242                 Float.MIN_VALUE, Float.MAX_VALUE, Float.POSITIVE_INFINITY,
1243                 Float.NaN };
1244 
1245         Arrays.sort(specials1);
1246         Object[] print1 = new Object[specials1.length];
1247         for (int i = 0; i < specials1.length; i++)
1248             print1[i] = new Float(specials1[i]);
1249         assertTrue("specials sort incorrectly 1: " + Arrays.asList(print1),
1250                 Arrays.equals(specials1, answer));
1251 
1252         Arrays.sort(specials2);
1253         Object[] print2 = new Object[specials2.length];
1254         for (int i = 0; i < specials2.length; i++)
1255             print2[i] = new Float(specials2[i]);
1256         assertTrue("specials sort incorrectly 2: " + Arrays.asList(print2),
1257                 Arrays.equals(specials2, answer));
1258     }
1259 
1260     /**
1261      * java.util.Arrays#sort(float[], int, int)
1262      */
test_sort$FII()1263     public void test_sort$FII() {
1264         // Test for method void java.util.Arrays.sort(float [], int, int)
1265         int startIndex = arraySize / 4;
1266         int endIndex = 3 * arraySize / 4;
1267         float[] reversedArray = new float[arraySize];
1268         float[] originalReversedArray = new float[arraySize];
1269         for (int counter = 0; counter < arraySize; counter++) {
1270             reversedArray[counter] = (float) (arraySize - counter - 1);
1271             originalReversedArray[counter] = reversedArray[counter];
1272         }
1273         Arrays.sort(reversedArray, startIndex, endIndex);
1274         for (int counter = 0; counter < startIndex; counter++)
1275             assertTrue("Array modified outside of bounds",
1276                     reversedArray[counter] == originalReversedArray[counter]);
1277         for (int counter = startIndex; counter < endIndex - 1; counter++)
1278             assertTrue("Array not sorted within bounds",
1279                     reversedArray[counter] <= reversedArray[counter + 1]);
1280         for (int counter = endIndex; counter < arraySize; counter++)
1281             assertTrue("Array modified outside of bounds",
1282                     reversedArray[counter] == originalReversedArray[counter]);
1283 
1284         //exception testing
1285         try {
1286             Arrays.sort(reversedArray, startIndex + 1, startIndex);
1287             fail("IllegalArgumentException expected");
1288         } catch (IllegalArgumentException ignore) {
1289         }
1290 
1291         try {
1292             Arrays.sort(reversedArray, -1, startIndex);
1293             fail("ArrayIndexOutOfBoundsException expected (1)");
1294         } catch (ArrayIndexOutOfBoundsException ignore) {
1295         }
1296 
1297         try {
1298             Arrays.sort(reversedArray, startIndex, reversedArray.length + 1);
1299             fail("ArrayIndexOutOfBoundsException expected (2)");
1300         } catch (ArrayIndexOutOfBoundsException ignore) {
1301         }
1302     }
1303 
1304     /**
1305      * java.util.Arrays#sort(int[])
1306      */
test_sort$I()1307     public void test_sort$I() {
1308         // Test for method void java.util.Arrays.sort(int [])
1309         int[] reversedArray = new int[arraySize];
1310         for (int counter = 0; counter < arraySize; counter++)
1311             reversedArray[counter] = arraySize - counter - 1;
1312         Arrays.sort(reversedArray);
1313         for (int counter = 0; counter < arraySize; counter++)
1314             assertTrue("Resulting array not sorted",
1315                     reversedArray[counter] == counter);
1316     }
1317 
1318     /**
1319      * java.util.Arrays#sort(int[], int, int)
1320      */
test_sort$III()1321     public void test_sort$III() {
1322         // Test for method void java.util.Arrays.sort(int [], int, int)
1323         int startIndex = arraySize / 4;
1324         int endIndex = 3 * arraySize / 4;
1325         int[] reversedArray = new int[arraySize];
1326         int[] originalReversedArray = new int[arraySize];
1327         for (int counter = 0; counter < arraySize; counter++) {
1328             reversedArray[counter] = arraySize - counter - 1;
1329             originalReversedArray[counter] = reversedArray[counter];
1330         }
1331         Arrays.sort(reversedArray, startIndex, endIndex);
1332         for (int counter = 0; counter < startIndex; counter++)
1333             assertTrue("Array modified outside of bounds",
1334                     reversedArray[counter] == originalReversedArray[counter]);
1335         for (int counter = startIndex; counter < endIndex - 1; counter++)
1336             assertTrue("Array not sorted within bounds",
1337                     reversedArray[counter] <= reversedArray[counter + 1]);
1338         for (int counter = endIndex; counter < arraySize; counter++)
1339             assertTrue("Array modified outside of bounds",
1340                     reversedArray[counter] == originalReversedArray[counter]);
1341 
1342         //exception testing
1343         try {
1344             Arrays.sort(reversedArray, startIndex + 1, startIndex);
1345             fail("IllegalArgumentException expected");
1346         } catch (IllegalArgumentException ignore) {
1347         }
1348 
1349         try {
1350             Arrays.sort(reversedArray, -1, startIndex);
1351             fail("ArrayIndexOutOfBoundsException expected (1)");
1352         } catch (ArrayIndexOutOfBoundsException ignore) {
1353         }
1354 
1355         try {
1356             Arrays.sort(reversedArray, startIndex, reversedArray.length + 1);
1357             fail("ArrayIndexOutOfBoundsException expected (2)");
1358         } catch (ArrayIndexOutOfBoundsException ignore) {
1359         }
1360     }
1361 
1362     /**
1363      * java.util.Arrays#sort(long[])
1364      */
test_sort$J()1365     public void test_sort$J() {
1366         // Test for method void java.util.Arrays.sort(long [])
1367         long[] reversedArray = new long[arraySize];
1368         for (int counter = 0; counter < arraySize; counter++)
1369             reversedArray[counter] = (long) (arraySize - counter - 1);
1370         Arrays.sort(reversedArray);
1371         for (int counter = 0; counter < arraySize; counter++)
1372             assertTrue("Resulting array not sorted",
1373                     reversedArray[counter] == (long) counter);
1374 
1375     }
1376 
1377     /**
1378      * java.util.Arrays#sort(long[], int, int)
1379      */
test_sort$JII()1380     public void test_sort$JII() {
1381         // Test for method void java.util.Arrays.sort(long [], int, int)
1382         int startIndex = arraySize / 4;
1383         int endIndex = 3 * arraySize / 4;
1384         long[] reversedArray = new long[arraySize];
1385         long[] originalReversedArray = new long[arraySize];
1386         for (int counter = 0; counter < arraySize; counter++) {
1387             reversedArray[counter] = (long) (arraySize - counter - 1);
1388             originalReversedArray[counter] = reversedArray[counter];
1389         }
1390         Arrays.sort(reversedArray, startIndex, endIndex);
1391         for (int counter = 0; counter < startIndex; counter++)
1392             assertTrue("Array modified outside of bounds",
1393                     reversedArray[counter] == originalReversedArray[counter]);
1394         for (int counter = startIndex; counter < endIndex - 1; counter++)
1395             assertTrue("Array not sorted within bounds",
1396                     reversedArray[counter] <= reversedArray[counter + 1]);
1397         for (int counter = endIndex; counter < arraySize; counter++)
1398             assertTrue("Array modified outside of bounds",
1399                     reversedArray[counter] == originalReversedArray[counter]);
1400 
1401         //exception testing
1402         try {
1403             Arrays.sort(reversedArray, startIndex + 1, startIndex);
1404             fail("IllegalArgumentException expected");
1405         } catch (IllegalArgumentException ignore) {
1406         }
1407 
1408         try {
1409             Arrays.sort(reversedArray, -1, startIndex);
1410             fail("ArrayIndexOutOfBoundsException expected (1)");
1411         } catch (ArrayIndexOutOfBoundsException ignore) {
1412         }
1413 
1414         try {
1415             Arrays.sort(reversedArray, startIndex, reversedArray.length + 1);
1416             fail("ArrayIndexOutOfBoundsException expected (2)");
1417         } catch (ArrayIndexOutOfBoundsException ignore) {
1418         }
1419     }
1420 
1421     /**
1422      * java.util.Arrays#sort(java.lang.Object[])
1423      */
test_sort$Ljava_lang_Object()1424     public void test_sort$Ljava_lang_Object() {
1425         // Test for method void java.util.Arrays.sort(java.lang.Object [])
1426         Object[] reversedArray = new Object[arraySize];
1427         for (int counter = 0; counter < arraySize; counter++)
1428             reversedArray[counter] = objectArray[arraySize - counter - 1];
1429         Arrays.sort(reversedArray);
1430         for (int counter = 0; counter < arraySize; counter++)
1431             assertTrue("Resulting array not sorted",
1432                     reversedArray[counter] == objectArray[counter]);
1433 
1434         Arrays.fill(reversedArray, 0, reversedArray.length/2, "String");
1435         Arrays.fill(reversedArray, reversedArray.length/2, reversedArray.length, new Integer(1));
1436 
1437         try {
1438             Arrays.sort(reversedArray);
1439             fail("ClassCastException expected");
1440         } catch (ClassCastException e) {
1441             //expected
1442         }
1443     }
1444 
1445     /**
1446      * java.util.Arrays#sort(java.lang.Object[], int, int)
1447      */
test_sort$Ljava_lang_ObjectII()1448     public void test_sort$Ljava_lang_ObjectII() {
1449         // Test for method void java.util.Arrays.sort(java.lang.Object [], int,
1450         // int)
1451         int startIndex = arraySize / 4;
1452         int endIndex = 3 * arraySize / 4;
1453         Object[] reversedArray = new Object[arraySize];
1454         Object[] originalReversedArray = new Object[arraySize];
1455         for (int counter = 0; counter < arraySize; counter++) {
1456             reversedArray[counter] = objectArray[arraySize - counter - 1];
1457             originalReversedArray[counter] = reversedArray[counter];
1458         }
1459         Arrays.sort(reversedArray, startIndex, endIndex);
1460         for (int counter = 0; counter < startIndex; counter++)
1461             assertTrue("Array modified outside of bounds",
1462                     reversedArray[counter] == originalReversedArray[counter]);
1463         for (int counter = startIndex; counter < endIndex - 1; counter++)
1464             assertTrue("Array not sorted within bounds",
1465                     ((Comparable) reversedArray[counter])
1466                             .compareTo(reversedArray[counter + 1]) <= 0);
1467         for (int counter = endIndex; counter < arraySize; counter++)
1468             assertTrue("Array modified outside of bounds",
1469                     reversedArray[counter] == originalReversedArray[counter]);
1470 
1471         //exception testing
1472         try {
1473             Arrays.sort(reversedArray, startIndex + 1, startIndex);
1474             fail("IllegalArgumentException expected");
1475         } catch (IllegalArgumentException ignore) {
1476         }
1477 
1478         try {
1479             Arrays.sort(reversedArray, -1, startIndex);
1480             fail("ArrayIndexOutOfBoundsException expected (1)");
1481         } catch (ArrayIndexOutOfBoundsException ignore) {
1482         }
1483 
1484         try {
1485             Arrays.sort(reversedArray, startIndex, reversedArray.length + 1);
1486             fail("ArrayIndexOutOfBoundsException expected (2)");
1487         } catch (ArrayIndexOutOfBoundsException ignore) {
1488         }
1489 
1490         Arrays.fill(reversedArray, 0, reversedArray.length/2, "String");
1491         Arrays.fill(reversedArray, reversedArray.length/2, reversedArray.length, new Integer(1));
1492 
1493         try {
1494             Arrays.sort(reversedArray, reversedArray.length/4, 3*reversedArray.length/4);
1495             fail("ClassCastException expected");
1496         } catch (ClassCastException e) {
1497             //expected
1498         }
1499 
1500         Arrays.sort(reversedArray, 0, reversedArray.length/4);
1501         Arrays.sort(reversedArray, 3*reversedArray.length/4, reversedArray.length);
1502     }
1503 
1504     /**
1505      * java.util.Arrays#sort(java.lang.Object[], int, int,
1506      *        java.util.Comparator)
1507      */
test_sort$Ljava_lang_ObjectIILjava_util_Comparator()1508     public void test_sort$Ljava_lang_ObjectIILjava_util_Comparator() {
1509         // Test for method void java.util.Arrays.sort(java.lang.Object [], int,
1510         // int, java.util.Comparator)
1511         int startIndex = arraySize / 4;
1512         int endIndex = 3 * arraySize / 4;
1513         ReversedIntegerComparator comp = new ReversedIntegerComparator();
1514         Object[] originalArray = new Object[arraySize];
1515         for (int counter = 0; counter < arraySize; counter++)
1516             originalArray[counter] = objectArray[counter];
1517         Arrays.sort(objectArray, startIndex, endIndex, comp);
1518         for (int counter = 0; counter < startIndex; counter++)
1519             assertTrue("Array modified outside of bounds",
1520                     objectArray[counter] == originalArray[counter]);
1521         for (int counter = startIndex; counter < endIndex - 1; counter++)
1522             assertTrue("Array not sorted within bounds", comp.compare(
1523                     objectArray[counter], objectArray[counter + 1]) <= 0);
1524         for (int counter = endIndex; counter < arraySize; counter++)
1525             assertTrue("Array modified outside of bounds",
1526                     objectArray[counter] == originalArray[counter]);
1527 
1528         Arrays.fill(originalArray, 0, originalArray.length/2, "String");
1529         Arrays.fill(originalArray, originalArray.length/2, originalArray.length, new Integer(1));
1530 
1531         try {
1532             Arrays.sort(originalArray, startIndex, endIndex, comp);
1533             fail("ClassCastException expected");
1534         } catch (ClassCastException e) {
1535             //expected
1536         }
1537 
1538         Arrays.sort(originalArray, endIndex, originalArray.length, comp);
1539 
1540         try {
1541             Arrays.sort(originalArray, endIndex, originalArray.length + 1, comp);
1542             fail("ArrayIndexOutOfBoundsException expected");
1543         } catch(ArrayIndexOutOfBoundsException e) {
1544             //expected
1545         }
1546 
1547         try {
1548             Arrays.sort(originalArray, -1, startIndex, comp);
1549             fail("ArrayIndexOutOfBoundsException expected");
1550         } catch(ArrayIndexOutOfBoundsException e) {
1551             //expected
1552         }
1553 
1554         try {
1555             Arrays.sort(originalArray, originalArray.length, endIndex, comp);
1556             fail("IllegalArgumentException expected");
1557         } catch(IllegalArgumentException e) {
1558             //expected
1559         }
1560     }
1561 
1562     /**
1563      * java.util.Arrays#sort(java.lang.Object[], java.util.Comparator)
1564      */
test_sort$Ljava_lang_ObjectLjava_util_Comparator()1565     public void test_sort$Ljava_lang_ObjectLjava_util_Comparator() {
1566         // Test for method void java.util.Arrays.sort(java.lang.Object [],
1567         // java.util.Comparator)
1568         ReversedIntegerComparator comp = new ReversedIntegerComparator();
1569         Arrays.sort(objectArray, comp);
1570         for (int counter = 0; counter < arraySize - 1; counter++)
1571             assertTrue("Array not sorted correctly with custom comparator",
1572                     comp
1573                             .compare(objectArray[counter],
1574                                     objectArray[counter + 1]) <= 0);
1575 
1576         Arrays.fill(objectArray, 0, objectArray.length/2, "String");
1577         Arrays.fill(objectArray, objectArray.length/2, objectArray.length, new Integer(1));
1578 
1579         try {
1580             Arrays.sort(objectArray, comp);
1581             fail("ClassCastException expected");
1582         } catch (ClassCastException e) {
1583             //expected
1584         }
1585     }
1586 
1587     // Regression HARMONY-6076
test_sort$Ljava_lang_ObjectLjava_util_Comparator_stable()1588     public void test_sort$Ljava_lang_ObjectLjava_util_Comparator_stable() {
1589         Element[] array = new Element[11];
1590         array[0] = new Element(122);
1591         array[1] = new Element(146);
1592         array[2] = new Element(178);
1593         array[3] = new Element(208);
1594         array[4] = new Element(117);
1595         array[5] = new Element(146);
1596         array[6] = new Element(173);
1597         array[7] = new Element(203);
1598         array[8] = new Element(56);
1599         array[9] = new Element(208);
1600         array[10] = new Element(96);
1601 
1602         Comparator<Element> comparator = new Comparator<Element>() {
1603             public int compare(Element object1, Element object2) {
1604                 return object1.value - object2.value;
1605             }
1606         };
1607 
1608         Arrays.sort(array, comparator);
1609 
1610         for (int i = 1; i < array.length; i++) {
1611             assertTrue(comparator.compare(array[i - 1], array[i]) <= 0);
1612             if (comparator.compare(array[i - 1], array[i]) == 0) {
1613                 assertTrue(array[i - 1].index < array[i].index);
1614             }
1615         }
1616     }
1617 
1618     public static class Element {
1619         public int value;
1620 
1621         public int index;
1622 
1623         private static int count = 0;
1624 
Element(int value)1625         public Element(int value) {
1626             this.value = value;
1627             index = count++;
1628         }
1629     }
1630 
1631     /**
1632      * java.util.Arrays#sort(short[])
1633      */
test_sort$S()1634     public void test_sort$S() {
1635         // Test for method void java.util.Arrays.sort(short [])
1636         short[] reversedArray = new short[arraySize];
1637         for (int counter = 0; counter < arraySize; counter++)
1638             reversedArray[counter] = (short) (arraySize - counter - 1);
1639         Arrays.sort(reversedArray);
1640         for (int counter = 0; counter < arraySize; counter++)
1641             assertTrue("Resulting array not sorted",
1642                     reversedArray[counter] == (short) counter);
1643     }
1644 
1645     /**
1646      * java.util.Arrays#sort(short[], int, int)
1647      */
test_sort$SII()1648     public void test_sort$SII() {
1649         // Test for method void java.util.Arrays.sort(short [], int, int)
1650         int startIndex = arraySize / 4;
1651         int endIndex = 3 * arraySize / 4;
1652         short[] reversedArray = new short[arraySize];
1653         short[] originalReversedArray = new short[arraySize];
1654         for (int counter = 0; counter < arraySize; counter++) {
1655             reversedArray[counter] = (short) (arraySize - counter - 1);
1656             originalReversedArray[counter] = reversedArray[counter];
1657         }
1658         Arrays.sort(reversedArray, startIndex, endIndex);
1659         for (int counter = 0; counter < startIndex; counter++)
1660             assertTrue("Array modified outside of bounds",
1661                     reversedArray[counter] == originalReversedArray[counter]);
1662         for (int counter = startIndex; counter < endIndex - 1; counter++)
1663             assertTrue("Array not sorted within bounds",
1664                     reversedArray[counter] <= reversedArray[counter + 1]);
1665         for (int counter = endIndex; counter < arraySize; counter++)
1666             assertTrue("Array modified outside of bounds",
1667                     reversedArray[counter] == originalReversedArray[counter]);
1668 
1669         //exception testing
1670         try {
1671             Arrays.sort(reversedArray, startIndex + 1, startIndex);
1672             fail("IllegalArgumentException expected");
1673         } catch (IllegalArgumentException ignore) {
1674         }
1675 
1676         try {
1677             Arrays.sort(reversedArray, -1, startIndex);
1678             fail("ArrayIndexOutOfBoundsException expected (1)");
1679         } catch (ArrayIndexOutOfBoundsException ignore) {
1680         }
1681 
1682         try {
1683             Arrays.sort(reversedArray, startIndex, reversedArray.length + 1);
1684             fail("ArrayIndexOutOfBoundsException expected (2)");
1685         } catch (ArrayIndexOutOfBoundsException ignore) {
1686         }
1687     }
1688 
1689     /**
1690      * java.util.Arrays#sort(byte[], int, int)
1691      */
test_java_util_Arrays_sort_byte_array_NPE()1692     public void test_java_util_Arrays_sort_byte_array_NPE() {
1693         byte[] byte_array_null = null;
1694         try {
1695             java.util.Arrays.sort(byte_array_null);
1696             fail("Should throw java.lang.NullPointerException");
1697         } catch (NullPointerException e) {
1698             // Expected
1699         }
1700         try {
1701             // Regression for HARMONY-378
1702             java.util.Arrays.sort(byte_array_null, (int) -1, (int) 1);
1703             fail("Should throw java.lang.NullPointerException");
1704         } catch (NullPointerException e) {
1705             // Expected
1706         }
1707     }
1708 
1709     /**
1710      * java.util.Arrays#sort(char[], int, int)
1711      */
test_java_util_Arrays_sort_char_array_NPE()1712     public void test_java_util_Arrays_sort_char_array_NPE() {
1713         char[] char_array_null = null;
1714         try {
1715             java.util.Arrays.sort(char_array_null);
1716             fail("Should throw java.lang.NullPointerException");
1717         } catch (NullPointerException e) {
1718             // Expected
1719         }
1720         try {
1721             // Regression for HARMONY-378
1722             java.util.Arrays.sort(char_array_null, (int) -1, (int) 1);
1723             fail("Should throw java.lang.NullPointerException");
1724         } catch (NullPointerException e) {
1725             // Expected
1726         }
1727     }
1728 
1729     /**
1730      * java.util.Arrays#sort(double[], int, int)
1731      */
test_java_util_Arrays_sort_double_array_NPE()1732     public void test_java_util_Arrays_sort_double_array_NPE() {
1733         double[] double_array_null = null;
1734         try {
1735             java.util.Arrays.sort(double_array_null);
1736             fail("Should throw java.lang.NullPointerException");
1737         } catch (NullPointerException e) {
1738             // Expected
1739         }
1740         try {
1741             // Regression for HARMONY-378
1742             java.util.Arrays.sort(double_array_null, (int) -1, (int) 1);
1743             fail("Should throw java.lang.NullPointerException");
1744         } catch (NullPointerException e) {
1745             // Expected
1746         }
1747     }
1748 
1749     /**
1750      * java.util.Arrays#sort(float[], int, int)
1751      */
test_java_util_Arrays_sort_float_array_NPE()1752     public void test_java_util_Arrays_sort_float_array_NPE() {
1753         float[] float_array_null = null;
1754         try {
1755             java.util.Arrays.sort(float_array_null);
1756             fail("Should throw java.lang.NullPointerException");
1757         } catch (NullPointerException e) {
1758             // Expected
1759         }
1760         try {
1761             // Regression for HARMONY-378
1762             java.util.Arrays.sort(float_array_null, (int) -1, (int) 1);
1763             fail("Should throw java.lang.NullPointerException");
1764         } catch (NullPointerException e) {
1765             // Expected
1766         }
1767     }
1768 
1769     /**
1770      * java.util.Arrays#sort(int[], int, int)
1771      */
test_java_util_Arrays_sort_int_array_NPE()1772     public void test_java_util_Arrays_sort_int_array_NPE() {
1773         int[] int_array_null = null;
1774         try {
1775             java.util.Arrays.sort(int_array_null);
1776             fail("Should throw java.lang.NullPointerException");
1777         } catch (NullPointerException e) {
1778             // Expected
1779         }
1780         try {
1781             // Regression for HARMONY-378
1782             java.util.Arrays.sort(int_array_null, (int) -1, (int) 1);
1783             fail("Should throw java.lang.NullPointerException");
1784         } catch (NullPointerException e) {
1785             // Expected
1786         }
1787     }
1788 
1789     /**
1790      * java.util.Arrays#sort(Object[], int, int)
1791      */
test_java_util_Arrays_sort_object_array_NPE()1792     public void test_java_util_Arrays_sort_object_array_NPE() {
1793         Object[] object_array_null = null;
1794         try {
1795             java.util.Arrays.sort(object_array_null);
1796             fail("Should throw java.lang.NullPointerException");
1797         } catch (NullPointerException e) {
1798             // Expected
1799         }
1800         try {
1801             // Regression for HARMONY-378
1802             java.util.Arrays.sort(object_array_null, (int) -1, (int) 1);
1803             fail("Should throw java.lang.NullPointerException");
1804         } catch (NullPointerException e) {
1805             // Expected
1806         }
1807         try {
1808             // Regression for HARMONY-378
1809             java.util.Arrays.sort(object_array_null, (int) -1, (int) 1, null);
1810             fail("Should throw java.lang.NullPointerException");
1811         } catch (NullPointerException e) {
1812             // Expected
1813         }
1814     }
1815 
1816     /**
1817      * java.util.Arrays#sort(long[], int, int)
1818      */
test_java_util_Arrays_sort_long_array_NPE()1819     public void test_java_util_Arrays_sort_long_array_NPE() {
1820         long[] long_array_null = null;
1821         try {
1822             java.util.Arrays.sort(long_array_null);
1823             fail("Should throw java.lang.NullPointerException");
1824         } catch (NullPointerException e) {
1825             // Expected
1826         }
1827         try {
1828             // Regression for HARMONY-378
1829             java.util.Arrays.sort(long_array_null, (int) -1, (int) 1);
1830             fail("Should throw java.lang.NullPointerException");
1831         } catch (NullPointerException e) {
1832             // Expected
1833         }
1834     }
1835 
1836     /**
1837      * java.util.Arrays#sort(short[], int, int)
1838      */
test_java_util_Arrays_sort_short_array_NPE()1839     public void test_java_util_Arrays_sort_short_array_NPE() {
1840         short[] short_array_null = null;
1841         try {
1842             java.util.Arrays.sort(short_array_null);
1843             fail("Should throw java.lang.NullPointerException");
1844         } catch (NullPointerException e) {
1845             // Expected
1846         }
1847         try {
1848             // Regression for HARMONY-378
1849             java.util.Arrays.sort(short_array_null, (int) -1, (int) 1);
1850             fail("Should throw java.lang.NullPointerException");
1851         } catch (NullPointerException e) {
1852             // Expected
1853         }
1854     }
1855 
1856     // Lenghts of arrays to test in test_sort;
1857     private static final int[] LENGTHS = { 0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 100, 1000, 10000 };
1858 
1859     /**
1860      * java.util.Arrays#sort()
1861      */
test_sort()1862     public void test_sort() {
1863         for (int len : LENGTHS) {
1864             PrimitiveTypeArrayBuilder.reset();
1865             int[] golden = new int[len];
1866             for (int m = 1; m < 2 * len; m *= 2) {
1867                 for (PrimitiveTypeArrayBuilder builder : PrimitiveTypeArrayBuilder.values()) {
1868                     builder.build(golden, m);
1869                     int[] test = golden.clone();
1870 
1871                     for (PrimitiveTypeConverter converter : PrimitiveTypeConverter.values()) {
1872                         Object convertedGolden = converter.convert(golden);
1873                         Object convertedTest = converter.convert(test);
1874                         sort(convertedTest);
1875                         checkSorted(convertedTest);
1876                         assertEquals(checkSum(convertedGolden), checkSum(convertedTest));
1877                     }
1878                 }
1879             }
1880         }
1881     }
1882 
sort(Object array)1883     private void sort(Object array) {
1884         if (array instanceof int[]) {
1885             Arrays.sort((int[]) array);
1886         }
1887         else if (array instanceof long[]) {
1888             Arrays.sort((long[]) array);
1889         } else if (array instanceof short[]) {
1890             Arrays.sort((short[]) array);
1891         } else if (array instanceof byte[]) {
1892             Arrays.sort((byte[]) array);
1893         } else if (array instanceof char[]) {
1894             Arrays.sort((char[]) array);
1895         } else if (array instanceof float[]) {
1896             Arrays.sort((float[]) array);
1897         } else if (array instanceof double[]) {
1898             Arrays.sort((double[]) array);
1899         } else {
1900             fail("Unknow type of array: " + array.getClass());
1901         }
1902     }
1903 
checkSorted(Object array)1904     private void checkSorted(Object array) {
1905         if (array instanceof int[]) {
1906             checkSorted((int[]) array);
1907         } else if (array instanceof long[]) {
1908             checkSorted((long[]) array);
1909         } else if (array instanceof short[]) {
1910             checkSorted((short[]) array);
1911         } else if (array instanceof byte[]) {
1912             checkSorted((byte[]) array);
1913         } else if (array instanceof char[]) {
1914             checkSorted((char[]) array);
1915         } else if (array instanceof float[]) {
1916             checkSorted((float[]) array);
1917         } else if (array instanceof double[]) {
1918             checkSorted((double[]) array);
1919         } else {
1920             fail("Unknow type of array: " + array.getClass());
1921         }
1922     }
1923 
checkSorted(int[] a)1924     private void checkSorted(int[] a) {
1925         for (int i = 0; i < a.length - 1; i++) {
1926             if (a[i] > a[i + 1]) {
1927                 orderFail(i, "" + a[i], "" + a[i + 1]);
1928             }
1929         }
1930     }
1931 
checkSorted(long[] a)1932     private void checkSorted(long[] a) {
1933         for (int i = 0; i < a.length - 1; i++) {
1934             if (a[i] > a[i + 1]) {
1935                 orderFail(i, "" + a[i], "" + a[i + 1]);
1936             }
1937         }
1938     }
1939 
checkSorted(short[] a)1940     private void checkSorted(short[] a) {
1941         for (int i = 0; i < a.length - 1; i++) {
1942             if (a[i] > a[i + 1]) {
1943                 orderFail(i, "" + a[i], "" + a[i + 1]);
1944             }
1945         }
1946     }
1947 
checkSorted(byte[] a)1948     private void checkSorted(byte[] a) {
1949         for (int i = 0; i < a.length - 1; i++) {
1950             if (a[i] > a[i + 1]) {
1951                 orderFail(i, "" + a[i], "" + a[i + 1]);
1952             }
1953         }
1954     }
1955 
checkSorted(char[] a)1956     private void checkSorted(char[] a) {
1957         for (int i = 0; i < a.length - 1; i++) {
1958             if (a[i] > a[i + 1]) {
1959                 orderFail(i, "" + a[i], "" + a[i + 1]);
1960             }
1961         }
1962     }
1963 
checkSorted(float[] a)1964     private void checkSorted(float[] a) {
1965         for (int i = 0; i < a.length - 1; i++) {
1966             if (a[i] > a[i + 1]) {
1967                 orderFail(i, "" + a[i], "" + a[i + 1]);
1968             }
1969         }
1970     }
1971 
checkSorted(double[] a)1972     private void checkSorted(double[] a) {
1973         for (int i = 0; i < a.length - 1; i++) {
1974             if (a[i] > a[i + 1]) {
1975                 orderFail(i, "" + a[i], "" + a[i + 1]);
1976             }
1977         }
1978     }
1979 
1980 
orderFail(int index, String value1, String value2)1981     private void orderFail(int index, String value1, String value2) {
1982         fail("Array is not sorted at " + index + "-th position: " + value1 + " and " + value2);
1983     }
1984 
checkSum(Object array)1985     private int checkSum(Object array) {
1986         if (array instanceof int[]) {
1987             return checkSum((int[]) array);
1988         } else if (array instanceof long[]) {
1989             return checkSum((long[]) array);
1990         } else if (array instanceof short[]) {
1991             return checkSum((short[]) array);
1992         } else if (array instanceof byte[]) {
1993             return checkSum((byte[]) array);
1994         } else if (array instanceof char[]) {
1995             return checkSum((char[]) array);
1996         } else if (array instanceof float[]) {
1997             return checkSum((float[]) array);
1998         } else if (array instanceof double[]) {
1999             return checkSum((double[]) array);
2000         } else {
2001             fail("Unknow type of array: " + array.getClass());
2002         }
2003         throw new AssertionError(); // Needed to shut up compiler
2004     }
2005 
checkSum(int[] a)2006     private int checkSum(int[] a) {
2007         int checkSum = 0;
2008 
2009         for (int e : a) {
2010             checkSum ^= e; // xor
2011         }
2012         return checkSum;
2013     }
2014 
checkSum(long[] a)2015     private int checkSum(long[] a) {
2016         long checkSum = 0;
2017 
2018         for (long e : a) {
2019             checkSum ^= e; // xor
2020         }
2021         return (int) checkSum;
2022     }
2023 
checkSum(short[] a)2024     private int checkSum(short[] a) {
2025         short checkSum = 0;
2026 
2027         for (short e : a) {
2028             checkSum ^= e; // xor
2029         }
2030         return (int) checkSum;
2031     }
2032 
checkSum(byte[] a)2033     private int checkSum(byte[] a) {
2034         byte checkSum = 0;
2035 
2036         for (byte e : a) {
2037             checkSum ^= e; // xor
2038         }
2039         return (int) checkSum;
2040     }
2041 
checkSum(char[] a)2042     private int checkSum(char[] a) {
2043         char checkSum = 0;
2044 
2045         for (char e : a) {
2046             checkSum ^= e; // xor
2047         }
2048         return (int) checkSum;
2049     }
2050 
checkSum(float[] a)2051     private int checkSum(float[] a) {
2052         int checkSum = 0;
2053 
2054         for (float e : a) {
2055             checkSum ^= (int) e; // xor
2056         }
2057         return checkSum;
2058     }
2059 
checkSum(double[] a)2060     private int checkSum(double[] a) {
2061         int checkSum = 0;
2062 
2063         for (double e : a) {
2064             checkSum ^= (int) e; // xor
2065         }
2066         return checkSum;
2067     }
2068 
2069     private enum PrimitiveTypeArrayBuilder {
2070 
2071         RANDOM {
build(int[] a, int m)2072             void build(int[] a, int m) {
2073                 for (int i = 0; i < a.length; i++) {
2074                     a[i] = ourRandom.nextInt();
2075                 }
2076             }
2077         },
2078 
2079         ASCENDING {
build(int[] a, int m)2080             void build(int[] a, int m) {
2081                 for (int i = 0; i < a.length; i++) {
2082                     a[i] = m + i;
2083                 }
2084             }
2085         },
2086 
2087         DESCENDING {
build(int[] a, int m)2088             void build(int[] a, int m) {
2089                 for (int i = 0; i < a.length; i++) {
2090                     a[i] = a.length - m - i;
2091                 }
2092             }
2093         },
2094 
2095         ALL_EQUAL {
build(int[] a, int m)2096             void build(int[] a, int m) {
2097                 for (int i = 0; i < a.length; i++) {
2098                     a[i] = m;
2099                 }
2100             }
2101         },
2102 
2103         SAW {
build(int[] a, int m)2104             void build(int[] a, int m) {
2105                 int incCount = 1;
2106                 int decCount = a.length;
2107                 int i = 0;
2108                 int period = m;
2109                 m--;
2110 
2111                 while (true) {
2112                     for (int k = 1; k <= period; k++) {
2113                         if (i >= a.length) {
2114                             return;
2115                         }
2116                         a[i++] = incCount++;
2117                     }
2118                     period += m;
2119 
2120                     for (int k = 1; k <= period; k++) {
2121                         if (i >= a.length) {
2122                             return;
2123                         }
2124                         a[i++] = decCount--;
2125                     }
2126                     period += m;
2127                 }
2128             }
2129         },
2130 
2131         REPEATED {
build(int[] a, int m)2132             void build(int[] a, int m) {
2133                 for (int i = 0; i < a.length; i++) {
2134                     a[i] = i % m;
2135                 }
2136             }
2137         },
2138 
2139         DUPLICATED {
build(int[] a, int m)2140             void build(int[] a, int m) {
2141                 for (int i = 0; i < a.length; i++) {
2142                     a[i] = ourRandom.nextInt(m);
2143                 }
2144             }
2145         },
2146 
2147         ORGAN_PIPES {
build(int[] a, int m)2148             void build(int[] a, int m) {
2149                 int middle = a.length / (m + 1);
2150 
2151                 for (int i = 0; i < middle; i++) {
2152                     a[i] = i;
2153                 }
2154                 for (int i = middle; i < a.length ; i++) {
2155                     a[i] = a.length - i - 1;
2156                 }
2157             }
2158         },
2159 
2160         STAGGER {
build(int[] a, int m)2161             void build(int[] a, int m) {
2162                 for (int i = 0; i < a.length; i++) {
2163                     a[i] = (i * m + i) % a.length;
2164                 }
2165             }
2166         },
2167 
2168         PLATEAU {
build(int[] a, int m)2169             void build(int[] a, int m) {
2170                 for (int i = 0; i < a.length; i++) {
2171                     a[i] =  Math.min(i, m);
2172                 }
2173             }
2174         },
2175 
2176         SHUFFLE {
build(int[] a, int m)2177             void build(int[] a, int m) {
2178                 for (int i = 0; i < a.length; i++) {
2179                     a[i] = ourRandom.nextBoolean() ? (ourFirst += 2) : (ourSecond += 2);
2180                 }
2181             }
2182         };
2183 
build(int[] a, int m)2184         abstract void build(int[] a, int m);
2185 
reset()2186         static void reset() {
2187             ourRandom = new Random(666);
2188             ourFirst = 0;
2189             ourSecond = 0;
2190         }
2191 
2192         @Override
toString()2193         public String toString() {
2194             String name = name();
2195 
2196             for (int i = name.length(); i < 12; i++) {
2197                 name += " " ;
2198             }
2199             return name;
2200         }
2201 
2202         private static int ourFirst;
2203         private static int ourSecond;
2204         private static Random ourRandom = new Random(666);
2205     }
2206 
2207     private enum PrimitiveTypeConverter {
2208 
2209         INT {
convert(int[] a)2210             Object convert(int[] a) {
2211                 return a;
2212             }
2213         },
2214 
2215         LONG {
convert(int[] a)2216             Object convert(int[] a) {
2217                 long[] b = new long[a.length];
2218 
2219                 for (int i = 0; i < a.length; i++) {
2220                     b[i] = (int) a[i];
2221                 }
2222                 return b;
2223             }
2224         },
2225 
2226         BYTE {
convert(int[] a)2227             Object convert(int[] a) {
2228                 byte[] b = new byte[a.length];
2229 
2230                 for (int i = 0; i < a.length; i++) {
2231                     b[i] = (byte) a[i];
2232                 }
2233                 return b;
2234             }
2235         },
2236 
2237         SHORT {
convert(int[] a)2238             Object convert(int[] a) {
2239                 short[] b = new short[a.length];
2240 
2241                 for (int i = 0; i < a.length; i++) {
2242                     b[i] = (short) a[i];
2243                 }
2244                 return b;
2245             }
2246         },
2247 
2248         CHAR {
convert(int[] a)2249             Object convert(int[] a) {
2250                 char[] b = new char[a.length];
2251 
2252                 for (int i = 0; i < a.length; i++) {
2253                     b[i] = (char) a[i];
2254                 }
2255                 return b;
2256             }
2257         },
2258 
2259         FLOAT {
convert(int[] a)2260             Object convert(int[] a) {
2261                 float[] b = new float[a.length];
2262 
2263                 for (int i = 0; i < a.length; i++) {
2264                     b[i] = (float) a[i];
2265                 }
2266                 return b;
2267             }
2268         },
2269 
2270         DOUBLE {
convert(int[] a)2271             Object convert(int[] a) {
2272                 double[] b = new double[a.length];
2273 
2274                 for (int i = 0; i < a.length; i++) {
2275                     b[i] = (double) a[i];
2276                 }
2277                 return b;
2278             }
2279         };
2280 
convert(int[] a)2281         abstract Object convert(int[] a);
2282 
toString()2283         public String toString() {
2284             String name = name();
2285 
2286             for (int i = name.length(); i < 9; i++) {
2287                 name += " " ;
2288             }
2289             return name;
2290         }
2291     }
2292 
2293 
2294     /**
2295      * java.util.Arrays#deepEquals(Object[], Object[])
2296      */
test_deepEquals$Ljava_lang_ObjectLjava_lang_Object()2297     public void test_deepEquals$Ljava_lang_ObjectLjava_lang_Object() {
2298         int[] a1 = { 1, 2, 3 };
2299         short[] a2 = { 0, 1 };
2300         Object[] a3 = { new Integer(1), a2 };
2301         int[] a4 = { 6, 5, 4 };
2302 
2303         int[] b1 = { 1, 2, 3 };
2304         short[] b2 = { 0, 1 };
2305         Object[] b3 = { new Integer(1), b2 };
2306 
2307         Object a[] = { a1, a2, a3 };
2308         Object b[] = { b1, b2, b3 };
2309 
2310         assertFalse(Arrays.equals(a, b));
2311         assertTrue(Arrays.deepEquals(a, b));
2312 
2313         a[2] = a4;
2314 
2315         assertFalse(Arrays.deepEquals(a, b));
2316     }
2317 
2318     /**
2319      * java.util.Arrays#deepHashCode(Object[])
2320      */
test_deepHashCode$Ljava_lang_Object()2321     public void test_deepHashCode$Ljava_lang_Object() {
2322         int[] a1 = { 1, 2, 3 };
2323         short[] a2 = { 0, 1 };
2324         Object[] a3 = { new Integer(1), a2 };
2325 
2326         int[] b1 = { 1, 2, 3 };
2327         short[] b2 = { 0, 1 };
2328         Object[] b3 = { new Integer(1), b2 };
2329 
2330         Object a[] = { a1, a2, a3 };
2331         Object b[] = { b1, b2, b3 };
2332 
2333         int deep_hash_a = Arrays.deepHashCode(a);
2334         int deep_hash_b = Arrays.deepHashCode(b);
2335 
2336         assertEquals(deep_hash_a, deep_hash_b);
2337     }
2338 
2339     /**
2340      * java.util.Arrays#hashCode(boolean[] a)
2341      */
test_hashCode$LZ()2342     public void test_hashCode$LZ() {
2343         int listHashCode;
2344         int arrayHashCode;
2345 
2346         boolean[] boolArr = { true, false, false, true, false };
2347         List listOfBoolean = new LinkedList();
2348         for (int i = 0; i < boolArr.length; i++) {
2349             listOfBoolean.add(new Boolean(boolArr[i]));
2350         }
2351         listHashCode = listOfBoolean.hashCode();
2352         arrayHashCode = Arrays.hashCode(boolArr);
2353         assertEquals(listHashCode, arrayHashCode);
2354     }
2355 
2356     /**
2357      * java.util.Arrays#hashCode(int[] a)
2358      */
test_hashCode$LI()2359     public void test_hashCode$LI() {
2360         int listHashCode;
2361         int arrayHashCode;
2362 
2363         int[] intArr = { 10, 5, 134, 7, 19 };
2364         List listOfInteger = new LinkedList();
2365 
2366         for (int i = 0; i < intArr.length; i++) {
2367             listOfInteger.add(new Integer(intArr[i]));
2368         }
2369         listHashCode = listOfInteger.hashCode();
2370         arrayHashCode = Arrays.hashCode(intArr);
2371         assertEquals(listHashCode, arrayHashCode);
2372 
2373         int[] intArr2 = { 10, 5, 134, 7, 19 };
2374         assertEquals(Arrays.hashCode(intArr2), Arrays.hashCode(intArr));
2375     }
2376 
2377     /**
2378      * java.util.Arrays#hashCode(char[] a)
2379      */
test_hashCode$LC()2380     public void test_hashCode$LC() {
2381         int listHashCode;
2382         int arrayHashCode;
2383 
2384         char[] charArr = { 'a', 'g', 'x', 'c', 'm' };
2385         List listOfCharacter = new LinkedList();
2386         for (int i = 0; i < charArr.length; i++) {
2387             listOfCharacter.add(new Character(charArr[i]));
2388         }
2389         listHashCode = listOfCharacter.hashCode();
2390         arrayHashCode = Arrays.hashCode(charArr);
2391         assertEquals(listHashCode, arrayHashCode);
2392     }
2393 
2394     /**
2395      * java.util.Arrays#hashCode(byte[] a)
2396      */
test_hashCode$LB()2397     public void test_hashCode$LB() {
2398         int listHashCode;
2399         int arrayHashCode;
2400 
2401         byte[] byteArr = { 5, 9, 7, 6, 17 };
2402         List listOfByte = new LinkedList();
2403         for (int i = 0; i < byteArr.length; i++) {
2404             listOfByte.add(new Byte(byteArr[i]));
2405         }
2406         listHashCode = listOfByte.hashCode();
2407         arrayHashCode = Arrays.hashCode(byteArr);
2408         assertEquals(listHashCode, arrayHashCode);
2409     }
2410 
2411     /**
2412      * java.util.Arrays#hashCode(long[] a)
2413      */
test_hashCode$LJ()2414     public void test_hashCode$LJ() {
2415         int listHashCode;
2416         int arrayHashCode;
2417 
2418         long[] longArr = { 67890234512l, 97587236923425l, 257421912912l,
2419                 6754268100l, 5 };
2420         List listOfLong = new LinkedList();
2421         for (int i = 0; i < longArr.length; i++) {
2422             listOfLong.add(new Long(longArr[i]));
2423         }
2424         listHashCode = listOfLong.hashCode();
2425         arrayHashCode = Arrays.hashCode(longArr);
2426         assertEquals(listHashCode, arrayHashCode);
2427     }
2428 
2429     /**
2430      * java.util.Arrays#hashCode(float[] a)
2431      */
test_hashCode$LF()2432     public void test_hashCode$LF() {
2433         int listHashCode;
2434         int arrayHashCode;
2435 
2436         float[] floatArr = { 0.13497f, 0.268934f, 12e-5f, -3e+2f, 10e-4f };
2437         List listOfFloat = new LinkedList();
2438         for (int i = 0; i < floatArr.length; i++) {
2439             listOfFloat.add(new Float(floatArr[i]));
2440         }
2441         listHashCode = listOfFloat.hashCode();
2442         arrayHashCode = Arrays.hashCode(floatArr);
2443         assertEquals(listHashCode, arrayHashCode);
2444 
2445         float[] floatArr2 = { 0.13497f, 0.268934f, 12e-5f, -3e+2f, 10e-4f };
2446         assertEquals(Arrays.hashCode(floatArr2), Arrays.hashCode(floatArr));
2447     }
2448 
2449     /**
2450      * java.util.Arrays#hashCode(double[] a)
2451      */
test_hashCode$LD()2452     public void test_hashCode$LD() {
2453         int listHashCode;
2454         int arrayHashCode;
2455 
2456         double[] doubleArr = { 0.134945657, 0.0038754, 11e-150, -30e-300, 10e-4 };
2457         List listOfDouble = new LinkedList();
2458         for (int i = 0; i < doubleArr.length; i++) {
2459             listOfDouble.add(new Double(doubleArr[i]));
2460         }
2461         listHashCode = listOfDouble.hashCode();
2462         arrayHashCode = Arrays.hashCode(doubleArr);
2463         assertEquals(listHashCode, arrayHashCode);
2464     }
2465 
2466     /**
2467      * java.util.Arrays#hashCode(short[] a)
2468      */
test_hashCode$LS()2469     public void test_hashCode$LS() {
2470         int listHashCode;
2471         int arrayHashCode;
2472 
2473         short[] shortArr = { 35, 13, 45, 2, 91 };
2474         List listOfShort = new LinkedList();
2475         for (int i = 0; i < shortArr.length; i++) {
2476             listOfShort.add(new Short(shortArr[i]));
2477         }
2478         listHashCode = listOfShort.hashCode();
2479         arrayHashCode = Arrays.hashCode(shortArr);
2480         assertEquals(listHashCode, arrayHashCode);
2481     }
2482 
2483     /**
2484      * java.util.Arrays#hashCode(Object[] a)
2485      */
test_hashCode$Ljava_lang_Object()2486     public void test_hashCode$Ljava_lang_Object() {
2487         int listHashCode;
2488         int arrayHashCode;
2489 
2490         Object[] objectArr = { new Integer(1), new Float(10e-12f), null };
2491         List listOfObject = new LinkedList();
2492         for (int i = 0; i < objectArr.length; i++) {
2493             listOfObject.add(objectArr[i]);
2494         }
2495         listHashCode = listOfObject.hashCode();
2496         arrayHashCode = Arrays.hashCode(objectArr);
2497         assertEquals(listHashCode, arrayHashCode);
2498     }
2499 
2500     /**
2501      * Sets up the fixture, for example, open a network connection. This method
2502      * is called before a test is executed.
2503      */
setUp()2504     protected void setUp() {
2505         objArray = new Object[arraySize];
2506         for (int i = 0; i < objArray.length; i++)
2507             objArray[i] = new Integer(i);
2508 
2509         booleanArray = new boolean[arraySize];
2510         byteArray = new byte[arraySize];
2511         charArray = new char[arraySize];
2512         doubleArray = new double[arraySize];
2513         floatArray = new float[arraySize];
2514         intArray = new int[arraySize];
2515         longArray = new long[arraySize];
2516         objectArray = new Object[arraySize];
2517         shortArray = new short[arraySize];
2518 
2519         for (int counter = 0; counter < arraySize; counter++) {
2520             byteArray[counter] = (byte) counter;
2521             charArray[counter] = (char) (counter + 1);
2522             doubleArray[counter] = counter;
2523             floatArray[counter] = counter;
2524             intArray[counter] = counter;
2525             longArray[counter] = counter;
2526             objectArray[counter] = objArray[counter];
2527             shortArray[counter] = (short) counter;
2528         }
2529         for (int counter = 0; counter < arraySize; counter += 2) {
2530             booleanArray[counter] = false;
2531             booleanArray[counter + 1] = true;
2532         }
2533     }
2534 
2535     /**
2536      * java.util.Arrays#binarySearch(byte[], int, int, byte)
2537      */
test_binarySearch$BIIB()2538     public void test_binarySearch$BIIB() {
2539         for (byte counter = 0; counter < arraySize; counter++) {
2540             assertTrue(
2541                     "Binary search on byte[] answered incorrect position",
2542                     Arrays.binarySearch(byteArray, counter, arraySize, counter) == counter);
2543         }
2544         assertEquals(
2545                 "Binary search succeeded for value not present in array 1", -1,
2546                 Arrays.binarySearch(byteArray, 0, arraySize, (byte) -1));
2547         assertTrue(
2548                 "Binary search succeeded for value not present in array 2",
2549                 Arrays.binarySearch(byteArray, (byte) arraySize) == -(arraySize + 1));
2550         for (byte counter = 0; counter < arraySize; counter++) {
2551             byteArray[counter] -= 50;
2552         }
2553         for (byte counter = 0; counter < arraySize; counter++) {
2554             assertTrue(
2555                     "Binary search on byte[] involving negative numbers answered incorrect position",
2556                     Arrays.binarySearch(byteArray, counter, arraySize,
2557                             (byte) (counter - 50)) == counter);
2558         }
2559         try {
2560             Arrays.binarySearch((byte[]) null, 2, 1, (byte) arraySize);
2561             fail("should throw NullPointerException");
2562         } catch (NullPointerException e) {
2563             // expected
2564         }
2565         try {
2566             Arrays.binarySearch((byte[]) null, -1, 0, (byte) arraySize);
2567             fail("should throw NullPointerException");
2568         } catch (NullPointerException e) {
2569             // expected
2570         }
2571         try {
2572             Arrays.binarySearch((byte[]) null, -1, -2, (byte) arraySize);
2573             fail("should throw NullPointerException");
2574         } catch (NullPointerException e) {
2575             // expected
2576         }
2577         try {
2578             Arrays.binarySearch(byteArray, 2, 1, (byte) arraySize);
2579             fail("should throw IllegalArgumentException");
2580         } catch (IllegalArgumentException e) {
2581             // expected
2582         }
2583         assertEquals(-1, Arrays.binarySearch(byteArray, 0, 0, (byte) arraySize));
2584         try {
2585             Arrays.binarySearch(byteArray, -1, -2, (byte) arraySize);
2586             fail("should throw IllegalArgumentException");
2587         } catch (IllegalArgumentException e) {
2588             // expected
2589         }
2590         try {
2591             Arrays.binarySearch(byteArray, arraySize + 2, arraySize + 1,
2592                     (byte) arraySize);
2593             fail("should throw IllegalArgumentException");
2594         } catch (IllegalArgumentException e) {
2595             // expected
2596         }
2597         try {
2598             Arrays.binarySearch(byteArray, -1, 0, (byte) arraySize);
2599             fail("should throw ArrayIndexOutOfBoundsException");
2600         } catch (ArrayIndexOutOfBoundsException e) {
2601             // expected
2602         }
2603         try {
2604             Arrays.binarySearch(byteArray, 0, arraySize + 1, (byte) arraySize);
2605             fail("should throw ArrayIndexOutOfBoundsException");
2606         } catch (ArrayIndexOutOfBoundsException e) {
2607             // expected
2608         }
2609     }
2610 
2611     /**
2612      * java.util.Arrays#binarySearch(char[], char)
2613      */
test_binarySearch$CIIC()2614     public void test_binarySearch$CIIC() {
2615         for (char counter = 0; counter < arraySize; counter++) {
2616             assertTrue("Binary search on char[] answered incorrect position",
2617                     Arrays.binarySearch(charArray, counter, arraySize,
2618                             (char) (counter + 1)) == counter);
2619         }
2620         assertEquals(
2621                 "Binary search succeeded for value not present in array 1", -1,
2622                 Arrays.binarySearch(charArray, 0, arraySize, '\u0000'));
2623         assertTrue("Binary search succeeded for value not present in array 2",
2624                 Arrays.binarySearch(charArray, 0, arraySize,
2625                         (char) (arraySize + 1)) == -(arraySize + 1));
2626         try {
2627             Arrays.binarySearch(charArray, 2, 1, (char) arraySize);
2628             fail("should throw IllegalArgumentException");
2629         } catch (IllegalArgumentException e) {
2630             // expected
2631         }
2632         try {
2633             Arrays.binarySearch((char[]) null, 2, 1, (char) arraySize);
2634             fail("should throw NullPointerException");
2635         } catch (NullPointerException e) {
2636             // expected
2637         }
2638         try {
2639             Arrays.binarySearch((char[]) null, -1, 0, (char) arraySize);
2640             fail("should throw NullPointerException");
2641         } catch (NullPointerException e) {
2642             // expected
2643         }
2644         try {
2645             Arrays.binarySearch((char[]) null, -1, -2, (char) arraySize);
2646             fail("should throw NullPointerException");
2647         } catch (NullPointerException e) {
2648             // expected
2649         }
2650         assertEquals(-1, Arrays.binarySearch(charArray, 0, 0, (char) arraySize));
2651         try {
2652             Arrays.binarySearch(charArray, -1, -2, (char) arraySize);
2653             fail("should throw IllegalArgumentException");
2654         } catch (IllegalArgumentException e) {
2655             // expected
2656         }
2657         try {
2658             Arrays.binarySearch(charArray, arraySize + 2, arraySize + 1,
2659                     (char) arraySize);
2660             fail("should throw IllegalArgumentException");
2661         } catch (IllegalArgumentException e) {
2662             // expected
2663         }
2664         try {
2665             Arrays.binarySearch(charArray, -1, 0, (char) arraySize);
2666             fail("should throw ArrayIndexOutOfBoundsException");
2667         } catch (ArrayIndexOutOfBoundsException e) {
2668             // expected
2669         }
2670         try {
2671             Arrays.binarySearch(charArray, 0, arraySize + 1, (char) arraySize);
2672             fail("should throw ArrayIndexOutOfBoundsException");
2673         } catch (ArrayIndexOutOfBoundsException e) {
2674             // expected
2675         }
2676     }
2677 
2678     /**
2679      * java.util.Arrays#binarySearch(double[], double)
2680      */
test_binarySearch$DIID()2681     public void test_binarySearch$DIID() {
2682         for (int counter = 0; counter < arraySize; counter++) {
2683             assertTrue("Binary search on double[] answered incorrect position",
2684                     Arrays.binarySearch(doubleArray, counter, arraySize,
2685                             (double) counter) == (double) counter);
2686         }
2687         assertEquals(
2688                 "Binary search succeeded for value not present in array 1", -1,
2689                 Arrays.binarySearch(doubleArray, 0, arraySize, (double) -1));
2690         assertTrue("Binary search succeeded for value not present in array 2",
2691                 Arrays.binarySearch(doubleArray, 0, arraySize,
2692                         (double) arraySize) == -(arraySize + 1));
2693         for (int counter = 0; counter < arraySize; counter++) {
2694             doubleArray[counter] -= (double) 50;
2695         }
2696         for (int counter = 0; counter < arraySize; counter++) {
2697             assertTrue(
2698                     "Binary search on double[] involving negative numbers answered incorrect position",
2699                     Arrays.binarySearch(doubleArray, counter, arraySize, (double) (counter - 50)) == (double) counter);
2700         }
2701         double[] specials = new double[] { Double.NEGATIVE_INFINITY,
2702                 -Double.MAX_VALUE, -2d, -Double.MIN_VALUE, -0d, 0d,
2703                 Double.MIN_VALUE, 2d, Double.MAX_VALUE,
2704                 Double.POSITIVE_INFINITY, Double.NaN };
2705         for (int i = 0; i < specials.length; i++) {
2706             int result = Arrays.binarySearch(specials, i, specials.length, specials[i]);
2707             assertTrue(specials[i] + " invalid: " + result, result == i);
2708         }
2709         assertEquals("-1d", -4, Arrays.binarySearch(specials, 0, specials.length, -1d));
2710         assertEquals("1d", -8, Arrays.binarySearch(specials, 0, specials.length, 1d));
2711         try {
2712             Arrays.binarySearch((double[]) null, 2, 1, (double) arraySize);
2713             fail("should throw NullPointerException");
2714         } catch (NullPointerException e) {
2715             // expected
2716         }
2717         try {
2718             Arrays.binarySearch((double[]) null, -1, 0, (double) arraySize);
2719             fail("should throw NullPointerException");
2720         } catch (NullPointerException e) {
2721             // expected
2722         }
2723         try {
2724             Arrays.binarySearch((double[]) null, -1, -2, (double) arraySize);
2725             fail("should throw NullPointerException");
2726         } catch (NullPointerException e) {
2727             // expected
2728         }
2729         try {
2730             Arrays.binarySearch(doubleArray, 2, 1, (char) arraySize);
2731             fail("should throw IllegalArgumentException");
2732         } catch (IllegalArgumentException e) {
2733             // expected
2734         }
2735         assertEquals(-1, Arrays.binarySearch(doubleArray, 0, 0, (char) arraySize));
2736         try {
2737             Arrays.binarySearch(doubleArray, -1, -2, (char) arraySize);
2738             fail("should throw IllegalArgumentException");
2739         } catch (IllegalArgumentException e) {
2740             // expected
2741         }
2742         try {
2743             Arrays.binarySearch(doubleArray, arraySize + 2, arraySize + 1,
2744                     (char) arraySize);
2745             fail("should throw IllegalArgumentException");
2746         } catch (IllegalArgumentException e) {
2747             // expected
2748         }
2749         try {
2750             Arrays.binarySearch(doubleArray, -1, 0, (char) arraySize);
2751             fail("should throw ArrayIndexOutOfBoundsException");
2752         } catch (ArrayIndexOutOfBoundsException e) {
2753             // expected
2754         }
2755         try {
2756             Arrays.binarySearch(doubleArray, 0, arraySize + 1, (char) arraySize);
2757             fail("should throw ArrayIndexOutOfBoundsException");
2758         } catch (ArrayIndexOutOfBoundsException e) {
2759             // expected
2760         }
2761     }
2762 
2763     /**
2764      * java.util.Arrays#binarySearch(float[], float)
2765      */
test_binarySearch$FIIF()2766     public void test_binarySearch$FIIF() {
2767         for (int counter = 0; counter < arraySize; counter++) {
2768             assertTrue("Binary search on float[] answered incorrect position",
2769                     Arrays.binarySearch(floatArray, counter, arraySize,
2770                             (float) counter) == (float) counter);
2771         }
2772         assertEquals(
2773                 "Binary search succeeded for value not present in array 1", -1,
2774                 Arrays.binarySearch(floatArray, 0, arraySize, (float) -1));
2775         assertTrue("Binary search succeeded for value not present in array 2",
2776                 Arrays
2777                         .binarySearch(floatArray, 0, arraySize,
2778                                 (float) arraySize) == -(arraySize + 1));
2779         for (int counter = 0; counter < arraySize; counter++) {
2780             floatArray[counter] -= (float) 50;
2781         }
2782         for (int counter = 0; counter < arraySize; counter++) {
2783             assertTrue(
2784                     "Binary search on float[] involving negative numbers answered incorrect position",
2785                     Arrays.binarySearch(floatArray, 0, arraySize,
2786                             (float) counter - 50) == (float) counter);
2787         }
2788         float[] specials = new float[] { Float.NEGATIVE_INFINITY,
2789                 -Float.MAX_VALUE, -2f, -Float.MIN_VALUE, -0f, 0f,
2790                 Float.MIN_VALUE, 2f, Float.MAX_VALUE, Float.POSITIVE_INFINITY,
2791                 Float.NaN };
2792         for (int i = 0; i < specials.length; i++) {
2793             int result = Arrays.binarySearch(specials, i, specials.length, specials[i]);
2794             assertTrue(specials[i] + " invalid: " + result, result == i);
2795         }
2796         assertEquals("-1f", -4, Arrays.binarySearch(specials, 0, specials.length, -1f));
2797         assertEquals("1f", -8, Arrays.binarySearch(specials, 0, specials.length, 1f));
2798         try {
2799             Arrays.binarySearch((float[]) null, 2, 1, (float) arraySize);
2800             fail("should throw NullPointerException");
2801         } catch (NullPointerException e) {
2802             // expected
2803         }
2804         try {
2805             Arrays.binarySearch((float[]) null, -1, 0, (float) arraySize);
2806             fail("should throw NullPointerException");
2807         } catch (NullPointerException e) {
2808             // expected
2809         }
2810         try {
2811             Arrays.binarySearch((float[]) null, -1, -2, (float) arraySize);
2812             fail("should throw NullPointerException");
2813         } catch (NullPointerException e) {
2814             // expected
2815         }
2816         try {
2817             Arrays.binarySearch(floatArray, 2, 1, (char) arraySize);
2818             fail("should throw IllegalArgumentException");
2819         } catch (IllegalArgumentException e) {
2820             // expected
2821         }
2822         assertEquals(-1, Arrays.binarySearch(floatArray, 0, 0,
2823                 (char) arraySize));
2824         try {
2825             Arrays.binarySearch(floatArray, -1, -2, (char) arraySize);
2826             fail("should throw IllegalArgumentException");
2827         } catch (IllegalArgumentException e) {
2828             // expected
2829         }
2830         try {
2831             Arrays.binarySearch(floatArray, arraySize + 2, arraySize + 1,
2832                     (char) arraySize);
2833             fail("should throw IllegalArgumentException");
2834         } catch (IllegalArgumentException e) {
2835             // expected
2836         }
2837         try {
2838             Arrays.binarySearch(floatArray, -1, 0, (char) arraySize);
2839             fail("should throw ArrayIndexOutOfBoundsException");
2840         } catch (ArrayIndexOutOfBoundsException e) {
2841             // expected
2842         }
2843         try {
2844             Arrays
2845                     .binarySearch(floatArray, 0, arraySize + 1,
2846                             (char) arraySize);
2847             fail("should throw ArrayIndexOutOfBoundsException");
2848         } catch (ArrayIndexOutOfBoundsException e) {
2849             // expected
2850         }
2851     }
2852 
2853     /**
2854      * java.util.Arrays#binarySearch(int[], int)
2855      */
test_binarySearch$IIII()2856     public void test_binarySearch$IIII() {
2857         for (int counter = 0; counter < arraySize; counter++) {
2858             assertTrue(
2859                     "Binary search on int[] answered incorrect position",
2860                     Arrays.binarySearch(intArray, counter, arraySize, counter) == counter);
2861         }
2862         assertEquals(
2863                 "Binary search succeeded for value not present in array 1", -1,
2864                 Arrays.binarySearch(intArray, 0, arraySize, -1));
2865         assertTrue("Binary search succeeded for value not present in array 2",
2866                 Arrays.binarySearch(intArray, 0, arraySize, arraySize) == -(arraySize + 1));
2867         for (int counter = 0; counter < arraySize; counter++) {
2868             intArray[counter] -= 50;
2869         }
2870         for (int counter = 0; counter < arraySize; counter++) {
2871             assertTrue(
2872                     "Binary search on int[] involving negative numbers answered incorrect position",
2873                     Arrays.binarySearch(intArray, 0, arraySize, counter - 50) == counter);
2874         }
2875         try {
2876             Arrays.binarySearch((int[]) null, 2, 1, (int) arraySize);
2877             fail("should throw NullPointerException");
2878         } catch (NullPointerException e) {
2879             // expected
2880         }
2881         try {
2882             Arrays.binarySearch((int[]) null, -1, 0, (int) arraySize);
2883             fail("should throw NullPointerException");
2884         } catch (NullPointerException e) {
2885             // expected
2886         }
2887         try {
2888             Arrays.binarySearch((int[]) null, -1, -2, (int) arraySize);
2889             fail("should throw NullPointerException");
2890         } catch (NullPointerException e) {
2891             // expected
2892         }
2893         try {
2894             Arrays.binarySearch(intArray, 2, 1, (char) arraySize);
2895             fail("should throw IllegalArgumentException");
2896         } catch (IllegalArgumentException e) {
2897             // expected
2898         }
2899         assertEquals(-1, Arrays
2900                 .binarySearch(intArray, 0, 0, (char) arraySize));
2901         try {
2902             Arrays.binarySearch(intArray, -1, -2, (char) arraySize);
2903             fail("should throw IllegalArgumentException");
2904         } catch (IllegalArgumentException e) {
2905             // expected
2906         }
2907         try {
2908             Arrays.binarySearch(intArray, arraySize + 2, arraySize + 1,
2909                     (char) arraySize);
2910             fail("should throw IllegalArgumentException");
2911         } catch (IllegalArgumentException e) {
2912             // expected
2913         }
2914         try {
2915             Arrays.binarySearch(intArray, -1, 0, (char) arraySize);
2916             fail("should throw ArrayIndexOutOfBoundsException");
2917         } catch (ArrayIndexOutOfBoundsException e) {
2918             // expected
2919         }
2920         try {
2921             Arrays.binarySearch(intArray, 0, arraySize + 1, (char) arraySize);
2922             fail("should throw ArrayIndexOutOfBoundsException");
2923         } catch (ArrayIndexOutOfBoundsException e) {
2924             // expected
2925         }
2926     }
2927 
2928     /**
2929      * java.util.Arrays#binarySearch(long[], long)
2930      */
test_binarySearch$JIIJ()2931     public void test_binarySearch$JIIJ() {
2932         for (long counter = 0; counter < arraySize; counter++) {
2933             assertTrue("Binary search on long[] answered incorrect position",
2934                     Arrays.binarySearch(longArray, 0, arraySize, counter) == counter);
2935         }
2936         assertEquals("Binary search succeeded for value not present in array 1",
2937                 -1, Arrays.binarySearch(longArray, 0, arraySize, (long) -1));
2938         assertTrue(
2939                 "Binary search succeeded for value not present in array 2",
2940                 Arrays.binarySearch(longArray, 0, arraySize, (long) arraySize) == -(arraySize + 1));
2941         for (long counter = 0; counter < arraySize; counter++) {
2942             longArray[(int) counter] -= (long) 50;
2943         }
2944         for (long counter = 0; counter < arraySize; counter++) {
2945             assertTrue(
2946                     "Binary search on long[] involving negative numbers answered incorrect position",
2947                     Arrays.binarySearch(longArray, 0, arraySize, counter - (long) 50) == counter);
2948         }
2949         try {
2950             Arrays.binarySearch((long[]) null, 2, 1, (long) arraySize);
2951             fail("should throw NullPointerException");
2952         } catch (NullPointerException e) {
2953             // expected
2954         }
2955         try {
2956             Arrays.binarySearch((long[]) null, -1, 0, (long) arraySize);
2957             fail("should throw NullPointerException");
2958         } catch (NullPointerException e) {
2959             // expected
2960         }
2961         try {
2962             Arrays.binarySearch((long[]) null, -1, -2, (long) arraySize);
2963             fail("should throw NullPointerException");
2964         } catch (NullPointerException e) {
2965             // expected
2966         }
2967         try {
2968             Arrays.binarySearch(longArray, 2, 1, (char) arraySize);
2969             fail("should throw IllegalArgumentException");
2970         } catch (IllegalArgumentException e) {
2971             // expected
2972         }
2973         assertEquals(-1, Arrays
2974                 .binarySearch(longArray, 0, 0, (char) arraySize));
2975         try {
2976             Arrays.binarySearch(longArray, -1, -2, (char) arraySize);
2977             fail("should throw IllegalArgumentException");
2978         } catch (IllegalArgumentException e) {
2979             // expected
2980         }
2981         try {
2982             Arrays.binarySearch(longArray, arraySize + 2, arraySize + 1,
2983                     (char) arraySize);
2984             fail("should throw IllegalArgumentException");
2985         } catch (IllegalArgumentException e) {
2986             // expected
2987         }
2988         try {
2989             Arrays.binarySearch(longArray, -1, 0, (char) arraySize);
2990             fail("should throw ArrayIndexOutOfBoundsException");
2991         } catch (ArrayIndexOutOfBoundsException e) {
2992             // expected
2993         }
2994         try {
2995             Arrays.binarySearch(longArray, 0, arraySize + 1, (char) arraySize);
2996             fail("should throw ArrayIndexOutOfBoundsException");
2997         } catch (ArrayIndexOutOfBoundsException e) {
2998             // expected
2999         }
3000     }
3001 
3002     /**
3003      * java.util.Arrays#binarySearch(java.lang.Object[],
3004      *java.lang.Object)
3005      */
test_binarySearch$Ljava_lang_ObjectIILjava_lang_Object()3006     public void test_binarySearch$Ljava_lang_ObjectIILjava_lang_Object() {
3007         assertEquals(
3008                 "Binary search succeeded for non-comparable value in empty array",
3009                 -1, Arrays.binarySearch(new Object[] { }, 0, 0, new Object()));
3010         assertEquals(
3011                 "Binary search succeeded for comparable value in empty array",
3012                 -1, Arrays.binarySearch(new Object[] { }, 0, 0, new Integer(-1)));
3013         for (int counter = 0; counter < arraySize; counter++) {
3014             assertTrue(
3015                     "Binary search on Object[] answered incorrect position",
3016                     Arrays.binarySearch(objectArray, counter, arraySize, objArray[counter]) == counter);
3017         }
3018         assertEquals("Binary search succeeded for value not present in array 1",
3019                 -1, Arrays.binarySearch(objectArray, 0, arraySize, new Integer(-1)));
3020         assertTrue(
3021                 "Binary search succeeded for value not present in array 2",
3022                 Arrays.binarySearch(objectArray, 0, arraySize, new Integer(arraySize)) == -(arraySize + 1));
3023         try {
3024             Arrays.binarySearch((Object[]) null, 2, 1, (byte) arraySize);
3025             fail("should throw NullPointerException");
3026         } catch (NullPointerException e) {
3027             // expected
3028         }
3029         try {
3030             Arrays.binarySearch((Object[]) null, -1, 0, (byte) arraySize);
3031             fail("should throw NullPointerException");
3032         } catch (NullPointerException e) {
3033             // expected
3034         }
3035         try {
3036             Arrays.binarySearch((Object[]) null, -1, -2, (byte) arraySize);
3037             fail("should throw NullPointerException");
3038         } catch (NullPointerException e) {
3039             // expected
3040         }
3041         try {
3042             Arrays.binarySearch(objectArray, 2, 1, (char) arraySize);
3043             fail("should throw IllegalArgumentException");
3044         } catch (IllegalArgumentException e) {
3045             // expected
3046         }
3047         assertEquals(-1, Arrays
3048                 .binarySearch(objectArray, 0, 0, (char) arraySize));
3049         try {
3050             Arrays.binarySearch(objectArray, -1, -2, (char) arraySize);
3051             fail("should throw IllegalArgumentException");
3052         } catch (IllegalArgumentException e) {
3053             // expected
3054         }
3055         try {
3056             Arrays.binarySearch(objectArray, arraySize + 2, arraySize + 1,
3057                     (char) arraySize);
3058             fail("should throw IllegalArgumentException");
3059         } catch (IllegalArgumentException e) {
3060             // expected
3061         }
3062         try {
3063             Arrays.binarySearch(objectArray, -1, 0, (char) arraySize);
3064             fail("should throw ArrayIndexOutOfBoundsException");
3065         } catch (ArrayIndexOutOfBoundsException e) {
3066             // expected
3067         }
3068         try {
3069             Arrays.binarySearch(objectArray, 0, arraySize + 1, (char) arraySize);
3070             fail("should throw ArrayIndexOutOfBoundsException");
3071         } catch (ArrayIndexOutOfBoundsException e) {
3072             // expected
3073         }
3074     }
3075 
3076     /**
3077      * java.util.Arrays#binarySearch(java.lang.Object[],
3078      *java.lang.Object, java.util.Comparator)
3079      */
test_binarySearch$Ljava_lang_ObjectIILjava_lang_ObjectLjava_util_Comparator()3080     public void test_binarySearch$Ljava_lang_ObjectIILjava_lang_ObjectLjava_util_Comparator() {
3081         Comparator comp = new ReversedIntegerComparator();
3082         for (int counter = 0; counter < arraySize; counter++) {
3083             objectArray[counter] = objArray[arraySize - counter - 1];
3084         }
3085         assertTrue("Binary search succeeded for value not present in array 1",
3086                 Arrays.binarySearch(objectArray, 0, arraySize, new Integer(-1),
3087                         comp) == -(arraySize + 1));
3088         assertEquals(
3089                 "Binary search succeeded for value not present in array 2", -1,
3090                 Arrays.binarySearch(objectArray, 0, arraySize, new Integer(
3091                         arraySize), comp));
3092         for (int counter = 0; counter < arraySize; counter++) {
3093             assertTrue(
3094                     "Binary search on Object[] with custom comparator answered incorrect position",
3095                     Arrays.binarySearch(objectArray, objArray[counter], comp) == arraySize
3096                             - counter - 1);
3097         }
3098         try {
3099             Arrays.binarySearch((Object[]) null, 2, 1, (byte) arraySize);
3100             fail("should throw NullPointerException");
3101         } catch (NullPointerException e) {
3102             // expected
3103         }
3104         try {
3105             Arrays.binarySearch((Object[]) null, -1, 0, (byte) arraySize);
3106             fail("should throw NullPointerException");
3107         } catch (NullPointerException e) {
3108             // expected
3109         }
3110         try {
3111             Arrays.binarySearch((Object[]) null, -1, -2, (byte) arraySize);
3112             fail("should throw NullPointerException");
3113         } catch (NullPointerException e) {
3114             // expected
3115         }
3116         try {
3117             Arrays.binarySearch(objectArray, 2, 1, (char) arraySize, comp);
3118             fail("should throw IllegalArgumentException");
3119         } catch (IllegalArgumentException e) {
3120             // expected
3121         }
3122         assertEquals(-1, Arrays.binarySearch(objectArray, 0, 0,
3123                 (char) arraySize, comp));
3124         try {
3125             Arrays.binarySearch(objectArray, -1, -2, (char) arraySize, comp);
3126             fail("should throw IllegalArgumentException");
3127         } catch (IllegalArgumentException e) {
3128             // expected
3129         }
3130         try {
3131             Arrays.binarySearch(objectArray, arraySize + 2, arraySize + 1,
3132                     (char) arraySize, comp);
3133             fail("should throw IllegalArgumentException");
3134         } catch (IllegalArgumentException e) {
3135             // expected
3136         }
3137         try {
3138             Arrays.binarySearch(objectArray, -1, 0, (char) arraySize, comp);
3139             fail("should throw ArrayIndexOutOfBoundsException");
3140         } catch (ArrayIndexOutOfBoundsException e) {
3141             // expected
3142         }
3143         try {
3144             Arrays.binarySearch(objectArray, 0, arraySize + 1,
3145                     (char) arraySize, comp);
3146             fail("should throw ArrayIndexOutOfBoundsException");
3147         } catch (ArrayIndexOutOfBoundsException e) {
3148             // expected
3149         }
3150         try {
3151             Arrays.binarySearch(objectArray, 0, arraySize,
3152                     new LinkedList(), comp);
3153             fail("should throw ClassCastException");
3154         } catch (ClassCastException e) {
3155             // expected
3156         }
3157     }
3158 
3159     /**
3160      * java.util.Arrays#binarySearch(short[], short)
3161      */
test_binarySearch$SIIS()3162     public void test_binarySearch$SIIS() {
3163         for (short counter = 0; counter < arraySize; counter++) {
3164             assertTrue("Binary search on short[] answered incorrect position",
3165                     Arrays.binarySearch(shortArray, counter, arraySize, counter) == counter);
3166         }
3167         assertEquals("Binary search succeeded for value not present in array 1",
3168                 -1, Arrays.binarySearch(shortArray, 0, arraySize, (short) -1));
3169         assertTrue(
3170                 "Binary search succeeded for value not present in array 2",
3171                 Arrays.binarySearch(shortArray, 0, arraySize, (short) arraySize) == -(arraySize + 1));
3172         for (short counter = 0; counter < arraySize; counter++) {
3173             shortArray[counter] -= 50;
3174         }
3175         for (short counter = 0; counter < arraySize; counter++) {
3176             assertTrue(
3177                     "Binary search on short[] involving negative numbers answered incorrect position",
3178                     Arrays.binarySearch(shortArray, counter, arraySize, (short) (counter - 50)) == counter);
3179         }
3180         try {
3181             Arrays.binarySearch((String[]) null, 2, 1, (byte) arraySize);
3182             fail("should throw NullPointerException");
3183         } catch (NullPointerException e) {
3184             // expected
3185         }
3186         try {
3187             Arrays.binarySearch((String[]) null, -1, 0, (byte) arraySize);
3188             fail("should throw NullPointerException");
3189         } catch (NullPointerException e) {
3190             // expected
3191         }
3192         try {
3193             Arrays.binarySearch((String[]) null, -1, -2, (byte) arraySize);
3194             fail("should throw NullPointerException");
3195         } catch (NullPointerException e) {
3196             // expected
3197         }
3198         try {
3199             Arrays.binarySearch(shortArray, 2, 1, (short) arraySize);
3200             fail("should throw IllegalArgumentException");
3201         } catch (IllegalArgumentException e) {
3202             // expected
3203         }
3204         assertEquals(-1, Arrays
3205                 .binarySearch(shortArray, 0, 0, (short) arraySize));
3206         try {
3207             Arrays.binarySearch(shortArray, -1, -2, (short) arraySize);
3208             fail("should throw IllegalArgumentException");
3209         } catch (IllegalArgumentException e) {
3210             // expected
3211         }
3212         try {
3213             Arrays.binarySearch(shortArray, arraySize + 2, arraySize + 1,
3214                     (short) arraySize);
3215             fail("should throw IllegalArgumentException");
3216         } catch (IllegalArgumentException e) {
3217             // expected
3218         }
3219         try {
3220             Arrays.binarySearch(shortArray, -1, 0, (short) arraySize);
3221             fail("should throw ArrayIndexOutOfBoundsException");
3222         } catch (ArrayIndexOutOfBoundsException e) {
3223             // expected
3224         }
3225         try {
3226             Arrays.binarySearch(shortArray, 0, arraySize + 1, (short) arraySize);
3227             fail("should throw ArrayIndexOutOfBoundsException");
3228         } catch (ArrayIndexOutOfBoundsException e) {
3229             // expected
3230         }
3231         String[] array = { "a", "b", "c" };
3232         assertEquals(-2, Arrays.binarySearch(array, 1, 2, "a", null));
3233     }
3234 
3235     /**
3236      * {@link java.util.Arrays#copyOf(byte[], int)
3237      */
test_copyOf_$BI()3238     public void test_copyOf_$BI() throws Exception {
3239         byte[] result = Arrays.copyOf(byteArray, arraySize * 2);
3240         int i = 0;
3241         for (; i < arraySize; i++) {
3242             assertEquals(i, result[i]);
3243         }
3244         for (; i < result.length; i++) {
3245             assertEquals(0, result[i]);
3246         }
3247         result = Arrays.copyOf(byteArray, arraySize / 2);
3248         i = 0;
3249         for (; i < result.length; i++) {
3250             assertEquals(i, result[i]);
3251         }
3252         try {
3253             Arrays.copyOf((byte[]) null, arraySize);
3254             fail("should throw NullPointerException");
3255         } catch (NullPointerException e) {
3256             // expected
3257         }
3258         try {
3259             Arrays.copyOf(byteArray, -1);
3260             fail("should throw NegativeArraySizeException");
3261         } catch (NegativeArraySizeException e) {
3262             // expected
3263         }
3264         try {
3265             Arrays.copyOf((byte[]) null, -1);
3266             fail("should throw NegativeArraySizeException");
3267         } catch (NegativeArraySizeException e) {
3268             // expected
3269         }
3270     }
3271 
3272     /**
3273      * {@link java.util.Arrays#copyOf(short[], int)
3274      */
test_copyOf_$SI()3275     public void test_copyOf_$SI() throws Exception {
3276         short[] result = Arrays.copyOf(shortArray, arraySize * 2);
3277         int i = 0;
3278         for (; i < arraySize; i++) {
3279             assertEquals(i, result[i]);
3280         }
3281         for (; i < result.length; i++) {
3282             assertEquals(0, result[i]);
3283         }
3284         result = Arrays.copyOf(shortArray, arraySize / 2);
3285         i = 0;
3286         for (; i < result.length; i++) {
3287             assertEquals(i, result[i]);
3288         }
3289         try {
3290             Arrays.copyOf((short[]) null, arraySize);
3291             fail("should throw NullPointerException");
3292         } catch (NullPointerException e) {
3293             // expected
3294         }
3295         try {
3296             Arrays.copyOf(shortArray, -1);
3297             fail("should throw NegativeArraySizeException");
3298         } catch (NegativeArraySizeException e) {
3299             // expected
3300         }
3301         try {
3302             Arrays.copyOf((short[]) null, -1);
3303             fail("should throw NegativeArraySizeException");
3304         } catch (NegativeArraySizeException e) {
3305             // expected
3306         }
3307     }
3308 
3309     /**
3310      * {@link java.util.Arrays#copyOf(int[], int)
3311      */
test_copyOf_$II()3312     public void test_copyOf_$II() throws Exception {
3313         int[] result = Arrays.copyOf(intArray, arraySize * 2);
3314         int i = 0;
3315         for (; i < arraySize; i++) {
3316             assertEquals(i, result[i]);
3317         }
3318         for (; i < result.length; i++) {
3319             assertEquals(0, result[i]);
3320         }
3321         result = Arrays.copyOf(intArray, arraySize / 2);
3322         i = 0;
3323         for (; i < result.length; i++) {
3324             assertEquals(i, result[i]);
3325         }
3326         try {
3327             Arrays.copyOf((int[]) null, arraySize);
3328             fail("should throw NullPointerException");
3329         } catch (NullPointerException e) {
3330             // expected
3331         }
3332         try {
3333             Arrays.copyOf(intArray, -1);
3334             fail("should throw NegativeArraySizeException");
3335         } catch (NegativeArraySizeException e) {
3336             // expected
3337         }
3338         try {
3339             Arrays.copyOf((int[]) null, -1);
3340             fail("should throw NegativeArraySizeException");
3341         } catch (NegativeArraySizeException e) {
3342             // expected
3343         }
3344     }
3345 
3346     /**
3347      * {@link java.util.Arrays#copyOf(boolean[], int)
3348      */
test_copyOf_$ZI()3349     public void test_copyOf_$ZI() throws Exception {
3350         boolean[] result = Arrays.copyOf(booleanArray, arraySize * 2);
3351         int i = 0;
3352         for (; i < arraySize; i++) {
3353             assertEquals(booleanArray[i], result[i]);
3354         }
3355         for (; i < result.length; i++) {
3356             assertEquals(false, result[i]);
3357         }
3358         result = Arrays.copyOf(booleanArray, arraySize / 2);
3359         i = 0;
3360         for (; i < result.length; i++) {
3361             assertEquals(booleanArray[i], result[i]);
3362         }
3363         try {
3364             Arrays.copyOf((boolean[]) null, arraySize);
3365             fail("should throw NullPointerException");
3366         } catch (NullPointerException e) {
3367             // expected
3368         }
3369         try {
3370             Arrays.copyOf(booleanArray, -1);
3371             fail("should throw NegativeArraySizeException");
3372         } catch (NegativeArraySizeException e) {
3373             // expected
3374         }
3375         try {
3376             Arrays.copyOf((boolean[]) null, -1);
3377             fail("should throw NegativeArraySizeException");
3378         } catch (NegativeArraySizeException e) {
3379             // expected
3380         }
3381     }
3382 
3383     /**
3384      * {@link java.util.Arrays#copyOf(char[], int)
3385      */
test_copyOf_$CI()3386     public void test_copyOf_$CI() throws Exception {
3387         char[] result = Arrays.copyOf(charArray, arraySize * 2);
3388         int i = 0;
3389         for (; i < arraySize; i++) {
3390             assertEquals(i + 1, result[i]);
3391         }
3392         for (; i < result.length; i++) {
3393             assertEquals(0, result[i]);
3394         }
3395         result = Arrays.copyOf(charArray, arraySize / 2);
3396         i = 0;
3397         for (; i < result.length; i++) {
3398             assertEquals(i + 1, result[i]);
3399         }
3400         try {
3401             Arrays.copyOf((char[]) null, arraySize);
3402             fail("should throw NullPointerException");
3403         } catch (NullPointerException e) {
3404             // expected
3405         }
3406         try {
3407             Arrays.copyOf(charArray, -1);
3408             fail("should throw NegativeArraySizeException");
3409         } catch (NegativeArraySizeException e) {
3410             // expected
3411         }
3412         try {
3413             Arrays.copyOf((char[]) null, -1);
3414             fail("should throw NegativeArraySizeException");
3415         } catch (NegativeArraySizeException e) {
3416             // expected
3417         }
3418     }
3419 
3420     /**
3421      * {@link java.util.Arrays#copyOf(float[], int)
3422      */
test_copyOf_$FI()3423     public void test_copyOf_$FI() throws Exception {
3424         float[] result = Arrays.copyOf(floatArray, arraySize * 2);
3425         int i = 0;
3426         for (; i < arraySize; i++) {
3427             assertEquals(floatArray[i], result[i]);
3428         }
3429         for (; i < result.length; i++) {
3430             assertEquals(0.0f, result[i]);
3431         }
3432         result = Arrays.copyOf(floatArray, arraySize / 2);
3433         i = 0;
3434         for (; i < result.length; i++) {
3435             assertEquals(floatArray[i], result[i]);
3436         }
3437         try {
3438             Arrays.copyOf((float[]) null, arraySize);
3439             fail("should throw NullPointerException");
3440         } catch (NullPointerException e) {
3441             // expected
3442         }
3443         try {
3444             Arrays.copyOf(floatArray, -1);
3445             fail("should throw NegativeArraySizeException");
3446         } catch (NegativeArraySizeException e) {
3447             // expected
3448         }
3449         try {
3450             Arrays.copyOf((float[]) null, -1);
3451             fail("should throw NegativeArraySizeException");
3452         } catch (NegativeArraySizeException e) {
3453             // expected
3454         }
3455     }
3456 
3457     /**
3458      * {@link java.util.Arrays#copyOf(double[], int)
3459      */
test_copyOf_$DI()3460     public void test_copyOf_$DI() throws Exception {
3461         double[] result = Arrays.copyOf(doubleArray, arraySize * 2);
3462         int i = 0;
3463         for (; i < arraySize; i++) {
3464             assertEquals(doubleArray[i], result[i]);
3465         }
3466         for (; i < result.length; i++) {
3467             assertEquals(0.0, result[i]);
3468         }
3469         result = Arrays.copyOf(doubleArray, arraySize / 2);
3470         i = 0;
3471         for (; i < result.length; i++) {
3472             assertEquals(doubleArray[i], result[i]);
3473         }
3474         try {
3475             Arrays.copyOf((double[]) null, arraySize);
3476             fail("should throw NullPointerException");
3477         } catch (NullPointerException e) {
3478             // expected
3479         }
3480         try {
3481             Arrays.copyOf(doubleArray, -1);
3482             fail("should throw NegativeArraySizeException");
3483         } catch (NegativeArraySizeException e) {
3484             // expected
3485         }
3486         try {
3487             Arrays.copyOf((double[]) null, -1);
3488             fail("should throw NegativeArraySizeException");
3489         } catch (NegativeArraySizeException e) {
3490             // expected
3491         }
3492     }
3493 
3494     /**
3495      * {@link java.util.Arrays#copyOf(long[], int)
3496      */
test_copyOf_$JI()3497     public void test_copyOf_$JI() throws Exception {
3498         long[] result = Arrays.copyOf(longArray, arraySize * 2);
3499         int i = 0;
3500         for (; i < arraySize; i++) {
3501             assertEquals(longArray[i], result[i]);
3502         }
3503         for (; i < result.length; i++) {
3504             assertEquals(0, result[i]);
3505         }
3506         result = Arrays.copyOf(longArray, arraySize / 2);
3507         i = 0;
3508         for (; i < result.length; i++) {
3509             assertEquals(longArray[i], result[i]);
3510         }
3511         try {
3512             Arrays.copyOf((long[]) null, arraySize);
3513             fail("should throw NullPointerException");
3514         } catch (NullPointerException e) {
3515             // expected
3516         }
3517         try {
3518             Arrays.copyOf(longArray, -1);
3519             fail("should throw NegativeArraySizeException");
3520         } catch (NegativeArraySizeException e) {
3521             // expected
3522         }
3523         try {
3524             Arrays.copyOf((long[]) null, -1);
3525             fail("should throw NegativeArraySizeException");
3526         } catch (NegativeArraySizeException e) {
3527             // expected
3528         }
3529     }
3530 
3531     /**
3532      * {@link java.util.Arrays#copyOf(T[], int)
3533      */
test_copyOf_$TI()3534     public void test_copyOf_$TI() throws Exception {
3535         Object[] result = Arrays.copyOf(objArray, arraySize * 2);
3536         int i = 0;
3537         for (; i < arraySize; i++) {
3538             assertEquals(objArray[i], result[i]);
3539         }
3540         for (; i < result.length; i++) {
3541             assertNull(result[i]);
3542         }
3543         result = Arrays.copyOf(objArray, arraySize / 2);
3544         i = 0;
3545         for (; i < result.length; i++) {
3546             assertEquals(objArray[i], result[i]);
3547         }
3548         try {
3549             Arrays.copyOf((String[]) null, arraySize);
3550             fail("should throw NullPointerException");
3551         } catch (NullPointerException e) {
3552             // expected
3553         }
3554         try {
3555             Arrays.copyOf(objArray, -1);
3556             fail("should throw NegativeArraySizeException");
3557         } catch (NegativeArraySizeException e) {
3558             // expected
3559         }
3560         try {
3561             Arrays.copyOf((String[]) null, -1);
3562             fail("should throw NullPointerException");
3563         } catch (NullPointerException e) {
3564             // expected
3565         }
3566 
3567         Date[] component = new Date[0];
3568         Object object[] = new Date[0];
3569 
3570         object = Arrays.copyOf(component, 2);
3571         assertNotNull(object);
3572         component = Arrays.copyOf(component, 2);
3573         assertNotNull(component);
3574         assertEquals(2, component.length);
3575     }
3576 
3577     /**
3578      * {@link java.util.Arrays#copyOf(T[], int, Class<? extends Object[]>))
3579      */
test_copyOf_$TILClass()3580     public void test_copyOf_$TILClass() throws Exception {
3581         Object[] result = Arrays.copyOf(objArray, arraySize * 2, Object[].class);
3582         int i = 0;
3583         for (; i < arraySize; i++) {
3584             assertEquals(objArray[i], result[i]);
3585         }
3586         for (; i < result.length; i++) {
3587             assertNull(result[i]);
3588         }
3589         result = Arrays.copyOf(objArray, arraySize / 2, Object[].class);
3590         i = 0;
3591         for (; i < result.length; i++) {
3592             assertEquals(objArray[i], result[i]);
3593         }
3594         result = Arrays.copyOf(objArray, arraySize / 2, Integer[].class);
3595         i = 0;
3596         for (; i < result.length; i++) {
3597             assertEquals(objArray[i], result[i]);
3598         }
3599         try {
3600             Arrays.copyOf((Object[]) null, arraySize, LinkedList[].class);
3601             fail("should throw NullPointerException");
3602         } catch (NullPointerException e) {
3603             // expected
3604         }
3605         try {
3606             Arrays.copyOf(objArray, arraySize, LinkedList[].class);
3607             fail("should throw ArrayStoreException ");
3608         } catch (ArrayStoreException e) {
3609             // expected
3610         }
3611         try {
3612             Arrays.copyOf((Object[]) null, arraySize, Object[].class);
3613             fail("should throw NullPointerException");
3614         } catch (NullPointerException e) {
3615             // expected
3616         }
3617         try {
3618             Arrays.copyOf(objArray, -1, Object[].class);
3619             fail("should throw NegativeArraySizeException");
3620         } catch (NegativeArraySizeException e) {
3621             // expected
3622         }
3623         try {
3624             Arrays.copyOf((Object[]) null, -1, Object[].class);
3625             fail("should throw NegativeArraySizeException");
3626         } catch (NegativeArraySizeException e) {
3627             // expected
3628         }
3629         try {
3630             Arrays.copyOf((Object[]) null, -1, LinkedList[].class);
3631             fail("should throw NegativeArraySizeException");
3632         } catch (NegativeArraySizeException e) {
3633             // expected
3634         }
3635         try {
3636             Arrays.copyOf((Object[]) null, 0, LinkedList[].class);
3637             fail("should throw NullPointerException");
3638         } catch (NullPointerException e) {
3639             // expected
3640         }
3641         assertEquals(0, Arrays.copyOf(objArray, 0, LinkedList[].class).length);
3642     }
3643 
3644     /**
3645      * {@link java.util.Arrays#copyOfRange(byte[], int, int)
3646      */
test_copyOfRange_$BII()3647     public void test_copyOfRange_$BII() throws Exception {
3648         byte[] result = Arrays.copyOfRange(byteArray, 0, arraySize * 2);
3649         int i = 0;
3650         for (; i < arraySize; i++) {
3651             assertEquals(i, result[i]);
3652         }
3653         for (; i < result.length; i++) {
3654             assertEquals(0, result[i]);
3655         }
3656         result = Arrays.copyOfRange(byteArray, 0, arraySize / 2);
3657         i = 0;
3658         for (; i < result.length; i++) {
3659             assertEquals(i, result[i]);
3660         }
3661         result = Arrays.copyOfRange(byteArray, 0, 0);
3662         assertEquals(0, result.length);
3663         try {
3664             Arrays.copyOfRange((byte[]) null, 0, arraySize);
3665             fail("should throw NullPointerException");
3666         } catch (NullPointerException e) {
3667             // expected
3668         }
3669         try {
3670             Arrays.copyOfRange((byte[]) null, -1, arraySize);
3671             fail("should throw NullPointerException");
3672         } catch (NullPointerException e) {
3673             // expected
3674         }
3675         try {
3676             Arrays.copyOfRange((byte[]) null, 0, -1);
3677             fail("should throw IllegalArgumentException");
3678         } catch (IllegalArgumentException e) {
3679             // expected
3680         }
3681         try {
3682             Arrays.copyOfRange(byteArray, -1, arraySize);
3683             fail("should throw ArrayIndexOutOfBoundsException");
3684         } catch (ArrayIndexOutOfBoundsException e) {
3685             // expected
3686         }
3687         try {
3688             Arrays.copyOfRange(byteArray, 0, -1);
3689             fail("should throw IllegalArgumentException");
3690         } catch (IllegalArgumentException e) {
3691             // expected
3692         }
3693         assertEquals(byteArray.length + 1, Arrays.copyOfRange(byteArray, 0,
3694                 byteArray.length + 1).length);
3695     }
3696 
3697     /**
3698      * {@link java.util.Arrays#copyOfRange(short[], int, int)
3699      */
test_copyOfRange_$SII()3700     public void test_copyOfRange_$SII() throws Exception {
3701         short[] result = Arrays.copyOfRange(shortArray, 0, arraySize * 2);
3702         int i = 0;
3703         for (; i < arraySize; i++) {
3704             assertEquals(i, result[i]);
3705         }
3706         for (; i < result.length; i++) {
3707             assertEquals(0, result[i]);
3708         }
3709         result = Arrays.copyOfRange(shortArray, 0, arraySize / 2);
3710         i = 0;
3711         for (; i < result.length; i++) {
3712             assertEquals(i, result[i]);
3713         }
3714         result = Arrays.copyOfRange(shortArray, 0, 0);
3715         assertEquals(0, result.length);
3716         try {
3717             Arrays.copyOfRange((short[]) null, 0, arraySize);
3718             fail("should throw NullPointerException");
3719         } catch (NullPointerException e) {
3720             // expected
3721         }
3722         try {
3723             Arrays.copyOfRange((short[]) null, -1, arraySize);
3724             fail("should throw NullPointerException");
3725         } catch (NullPointerException e) {
3726             // expected
3727         }
3728         try {
3729             Arrays.copyOfRange((short[]) null, 0, -1);
3730             fail("should throw IllegalArgumentException");
3731         } catch (IllegalArgumentException e) {
3732             // expected
3733         }
3734         try {
3735             Arrays.copyOfRange(shortArray, -1, arraySize);
3736             fail("should throw ArrayIndexOutOfBoundsException");
3737         } catch (ArrayIndexOutOfBoundsException e) {
3738             // expected
3739         }
3740         try {
3741             Arrays.copyOfRange(shortArray, 0, -1);
3742             fail("should throw IllegalArgumentException");
3743         } catch (IllegalArgumentException e) {
3744             // expected
3745         }
3746         assertEquals(shortArray.length + 1, Arrays.copyOfRange(shortArray, 0,
3747                 shortArray.length + 1).length);
3748     }
3749 
3750     /**
3751      * {@link java.util.Arrays#copyOfRange(int[], int, int)
3752      */
test_copyOfRange_$III()3753     public void test_copyOfRange_$III() throws Exception {
3754         int[] result = Arrays.copyOfRange(intArray, 0, arraySize * 2);
3755         int i = 0;
3756         for (; i < arraySize; i++) {
3757             assertEquals(i, result[i]);
3758         }
3759         for (; i < result.length; i++) {
3760             assertEquals(0, result[i]);
3761         }
3762         result = Arrays.copyOfRange(intArray, 0, arraySize / 2);
3763         i = 0;
3764         for (; i < result.length; i++) {
3765             assertEquals(i, result[i]);
3766         }
3767         result = Arrays.copyOfRange(intArray, 0, 0);
3768         assertEquals(0, result.length);
3769         try {
3770             Arrays.copyOfRange((int[]) null, 0, arraySize);
3771             fail("should throw NullPointerException");
3772         } catch (NullPointerException e) {
3773             // expected
3774         }
3775         try {
3776             Arrays.copyOfRange((int[]) null, -1, arraySize);
3777             fail("should throw NullPointerException");
3778         } catch (NullPointerException e) {
3779             // expected
3780         }
3781         try {
3782             Arrays.copyOfRange((int[]) null, 0, -1);
3783             fail("should throw IllegalArgumentException");
3784         } catch (IllegalArgumentException e) {
3785             // expected
3786         }
3787         try {
3788             Arrays.copyOfRange(intArray, -1, arraySize);
3789             fail("should throw ArrayIndexOutOfBoundsException");
3790         } catch (ArrayIndexOutOfBoundsException e) {
3791             // expected
3792         }
3793         try {
3794             Arrays.copyOfRange(intArray, 0, -1);
3795             fail("should throw IllegalArgumentException");
3796         } catch (IllegalArgumentException e) {
3797             // expected
3798         }
3799         assertEquals(intArray.length + 1, Arrays.copyOfRange(intArray, 0,
3800                 intArray.length + 1).length);
3801     }
3802 
3803     /**
3804      * {@link java.util.Arrays#copyOfRange(long[], int, int)
3805      */
test_copyOfRange_$JII()3806     public void test_copyOfRange_$JII() throws Exception {
3807         long[] result = Arrays.copyOfRange(longArray, 0, arraySize * 2);
3808         int i = 0;
3809         for (; i < arraySize; i++) {
3810             assertEquals(i, result[i]);
3811         }
3812         for (; i < result.length; i++) {
3813             assertEquals(0, result[i]);
3814         }
3815         result = Arrays.copyOfRange(longArray, 0, arraySize / 2);
3816         i = 0;
3817         for (; i < result.length; i++) {
3818             assertEquals(i, result[i]);
3819         }
3820         result = Arrays.copyOfRange(longArray, 0, 0);
3821         assertEquals(0, result.length);
3822         try {
3823             Arrays.copyOfRange((long[]) null, 0, arraySize);
3824             fail("should throw NullPointerException");
3825         } catch (NullPointerException e) {
3826             // expected
3827         }
3828         try {
3829             Arrays.copyOfRange((long[]) null, -1, arraySize);
3830             fail("should throw NullPointerException");
3831         } catch (NullPointerException e) {
3832             // expected
3833         }
3834         try {
3835             Arrays.copyOfRange((long[]) null, 0, -1);
3836             fail("should throw IllegalArgumentException");
3837         } catch (IllegalArgumentException e) {
3838             // expected
3839         }
3840         try {
3841             Arrays.copyOfRange(longArray, -1, arraySize);
3842             fail("should throw ArrayIndexOutOfBoundsException");
3843         } catch (ArrayIndexOutOfBoundsException e) {
3844             // expected
3845         }
3846         try {
3847             Arrays.copyOfRange(longArray, 0, -1);
3848             fail("should throw IllegalArgumentException");
3849         } catch (IllegalArgumentException e) {
3850             // expected
3851         }
3852         assertEquals(longArray.length + 1, Arrays.copyOfRange(longArray, 0,
3853                 longArray.length + 1).length);
3854     }
3855 
3856     /**
3857      * {@link java.util.Arrays#copyOfRange(char[], int, int)
3858      */
test_copyOfRange_$CII()3859     public void test_copyOfRange_$CII() throws Exception {
3860         char[] result = Arrays.copyOfRange(charArray, 0, arraySize * 2);
3861         int i = 0;
3862         for (; i < arraySize; i++) {
3863             assertEquals(i + 1, result[i]);
3864         }
3865         for (; i < result.length; i++) {
3866             assertEquals(0, result[i]);
3867         }
3868         result = Arrays.copyOfRange(charArray, 0, arraySize / 2);
3869         i = 0;
3870         for (; i < result.length; i++) {
3871             assertEquals(i + 1, result[i]);
3872         }
3873         result = Arrays.copyOfRange(charArray, 0, 0);
3874         assertEquals(0, result.length);
3875         try {
3876             Arrays.copyOfRange((char[]) null, 0, arraySize);
3877             fail("should throw NullPointerException");
3878         } catch (NullPointerException e) {
3879             // expected
3880         }
3881         try {
3882             Arrays.copyOfRange((char[]) null, -1, arraySize);
3883             fail("should throw NullPointerException");
3884         } catch (NullPointerException e) {
3885             // expected
3886         }
3887         try {
3888             Arrays.copyOfRange((char[]) null, 0, -1);
3889             fail("should throw IllegalArgumentException");
3890         } catch (IllegalArgumentException e) {
3891             // expected
3892         }
3893         try {
3894             Arrays.copyOfRange(charArray, -1, arraySize);
3895             fail("should throw ArrayIndexOutOfBoundsException");
3896         } catch (ArrayIndexOutOfBoundsException e) {
3897             // expected
3898         }
3899         try {
3900             Arrays.copyOfRange(charArray, 0, -1);
3901             fail("should throw IllegalArgumentException");
3902         } catch (IllegalArgumentException e) {
3903             // expected
3904         }
3905         assertEquals(charArray.length + 1, Arrays.copyOfRange(charArray, 0,
3906                 charArray.length + 1).length);
3907     }
3908 
test_copyOfRange_$FII()3909     public void test_copyOfRange_$FII() throws Exception {
3910         float[] result = Arrays.copyOfRange(floatArray, 0, arraySize * 2);
3911         int i = 0;
3912         for (; i < arraySize; i++) {
3913             assertEquals((float) i, result[i]);
3914         }
3915         for (; i < result.length; i++) {
3916             assertEquals(0.0f, result[i]);
3917         }
3918         result = Arrays.copyOfRange(floatArray, 0, arraySize / 2);
3919         i = 0;
3920         for (; i < result.length; i++) {
3921             assertEquals((float) i, result[i]);
3922         }
3923         result = Arrays.copyOfRange(floatArray, 0, 0);
3924         assertEquals(0, result.length);
3925         try {
3926             Arrays.copyOfRange((float[]) null, 0, arraySize);
3927             fail("should throw NullPointerException");
3928         } catch (NullPointerException e) {
3929             // expected
3930         }
3931         try {
3932             Arrays.copyOfRange((float[]) null, -1, arraySize);
3933             fail("should throw NullPointerException");
3934         } catch (NullPointerException e) {
3935             // expected
3936         }
3937         try {
3938             Arrays.copyOfRange((float[]) null, 0, -1);
3939             fail("should throw IllegalArgumentException");
3940         } catch (IllegalArgumentException e) {
3941             // expected
3942         }
3943         try {
3944             Arrays.copyOfRange(floatArray, -1, arraySize);
3945             fail("should throw ArrayIndexOutOfBoundsException");
3946         } catch (ArrayIndexOutOfBoundsException e) {
3947             // expected
3948         }
3949         try {
3950             Arrays.copyOfRange(floatArray, 0, -1);
3951             fail("should throw IllegalArgumentException");
3952         } catch (IllegalArgumentException e) {
3953             // expected
3954         }
3955         assertEquals(floatArray.length + 1, Arrays.copyOfRange(floatArray, 0,
3956                 floatArray.length + 1).length);
3957     }
3958 
3959     /**
3960      * {@link java.util.Arrays#copyOfRange(double[], int, int)
3961      */
test_copyOfRange_$DII()3962     public void test_copyOfRange_$DII() throws Exception {
3963         double[] result = Arrays.copyOfRange(doubleArray, 0, arraySize * 2);
3964         int i = 0;
3965         for (; i < arraySize; i++) {
3966             assertEquals((double) i, result[i]);
3967         }
3968         for (; i < result.length; i++) {
3969             assertEquals(0.0, result[i]);
3970         }
3971         result = Arrays.copyOfRange(doubleArray, 0, arraySize / 2);
3972         i = 0;
3973         for (; i < result.length; i++) {
3974             assertEquals((double) i, result[i]);
3975         }
3976         result = Arrays.copyOfRange(doubleArray, 0, 0);
3977         assertEquals(0, result.length);
3978         try {
3979             Arrays.copyOfRange((double[]) null, 0, arraySize);
3980             fail("should throw NullPointerException");
3981         } catch (NullPointerException e) {
3982             // expected
3983         }
3984         try {
3985             Arrays.copyOfRange((double[]) null, -1, arraySize);
3986             fail("should throw NullPointerException");
3987         } catch (NullPointerException e) {
3988             // expected
3989         }
3990         try {
3991             Arrays.copyOfRange((double[]) null, 0, -1);
3992             fail("should throw IllegalArgumentException");
3993         } catch (IllegalArgumentException e) {
3994             // expected
3995         }
3996         try {
3997             Arrays.copyOfRange(doubleArray, -1, arraySize);
3998             fail("should throw ArrayIndexOutOfBoundsException");
3999         } catch (ArrayIndexOutOfBoundsException e) {
4000             // expected
4001         }
4002         try {
4003             Arrays.copyOfRange(doubleArray, 0, -1);
4004             fail("should throw IllegalArgumentException");
4005         } catch (IllegalArgumentException e) {
4006             // expected
4007         }
4008         assertEquals(doubleArray.length + 1, Arrays.copyOfRange(doubleArray, 0,
4009                 doubleArray.length + 1).length);
4010     }
4011 
4012     /**
4013      * {@link java.util.Arrays#copyOfRange(boolean[], int, int)
4014      */
test_copyOfRange_$ZII()4015     public void test_copyOfRange_$ZII() throws Exception {
4016         boolean[] result = Arrays.copyOfRange(booleanArray, 0, arraySize * 2);
4017         int i = 0;
4018         for (; i < arraySize; i++) {
4019             assertEquals(booleanArray[i], result[i]);
4020         }
4021         for (; i < result.length; i++) {
4022             assertEquals(false, result[i]);
4023         }
4024         result = Arrays.copyOfRange(booleanArray, 0, arraySize / 2);
4025         i = 0;
4026         for (; i < result.length; i++) {
4027             assertEquals(booleanArray[i], result[i]);
4028         }
4029         result = Arrays.copyOfRange(booleanArray, 0, 0);
4030         assertEquals(0, result.length);
4031         try {
4032             Arrays.copyOfRange((boolean[]) null, 0, arraySize);
4033             fail("should throw NullPointerException");
4034         } catch (NullPointerException e) {
4035             // expected
4036         }
4037         try {
4038             Arrays.copyOfRange((boolean[]) null, -1, arraySize);
4039             fail("should throw NullPointerException");
4040         } catch (NullPointerException e) {
4041             // expected
4042         }
4043         try {
4044             Arrays.copyOfRange((boolean[]) null, 0, -1);
4045             fail("should throw IllegalArgumentException");
4046         } catch (IllegalArgumentException e) {
4047             // expected
4048         }
4049         try {
4050             Arrays.copyOfRange(booleanArray, -1, arraySize);
4051             fail("should throw ArrayIndexOutOfBoundsException");
4052         } catch (ArrayIndexOutOfBoundsException e) {
4053             // expected
4054         }
4055         try {
4056             Arrays.copyOfRange(booleanArray, 0, -1);
4057             fail("should throw IllegalArgumentException");
4058         } catch (IllegalArgumentException e) {
4059             // expected
4060         }
4061         assertEquals(booleanArray.length + 1, Arrays.copyOfRange(booleanArray, 0,
4062                 booleanArray.length + 1).length);
4063     }
4064 
4065     /**
4066      * {@link java.util.Arrays#copyOfRange(Object[], int, int)
4067      */
test_copyOfRange_$TII()4068     public void test_copyOfRange_$TII() throws Exception {
4069         Object[] result = Arrays.copyOfRange(objArray, 0, arraySize * 2);
4070         int i = 0;
4071         for (; i < arraySize; i++) {
4072             assertEquals(objArray[i], result[i]);
4073         }
4074         for (; i < result.length; i++) {
4075             assertEquals(null, result[i]);
4076         }
4077         result = Arrays.copyOfRange(objArray, 0, arraySize / 2);
4078         i = 0;
4079         for (; i < result.length; i++) {
4080             assertEquals(objArray[i], result[i]);
4081         }
4082         result = Arrays.copyOfRange(objArray, 0, 0);
4083         assertEquals(0, result.length);
4084         try {
4085             Arrays.copyOfRange((Object[]) null, 0, arraySize);
4086             fail("should throw NullPointerException");
4087         } catch (NullPointerException e) {
4088             // expected
4089         }
4090         try {
4091             Arrays.copyOfRange((Object[]) null, -1, arraySize);
4092             fail("should throw NullPointerException");
4093         } catch (NullPointerException e) {
4094             // expected
4095         }
4096         try {
4097             Arrays.copyOfRange((Object[]) null, 0, -1);
4098             fail("should throw NullPointerException");
4099         } catch (NullPointerException e) {
4100             // expected
4101         }
4102         try {
4103             Arrays.copyOfRange((Object[]) objArray, -1, arraySize);
4104             fail("should throw ArrayIndexOutOfBoundsException");
4105         } catch (ArrayIndexOutOfBoundsException e) {
4106             // expected
4107         }
4108         try {
4109             Arrays.copyOfRange((Object[]) objArray, 0, -1);
4110             fail("should throw IllegalArgumentException");
4111         } catch (IllegalArgumentException e) {
4112             // expected
4113         }
4114         assertEquals(objArray.length + 1, Arrays.copyOfRange(objArray, 0,
4115                 objArray.length + 1).length);
4116     }
4117 
test_copyOfRange_$TIILClass()4118     public void test_copyOfRange_$TIILClass() throws Exception {
4119         Object[] result = Arrays.copyOfRange(objArray, 0, arraySize * 2, Integer[].class);
4120         int i = 0;
4121         for (; i < arraySize; i++) {
4122             assertEquals(objArray[i], result[i]);
4123         }
4124         for (; i < result.length; i++) {
4125             assertEquals(null, result[i]);
4126         }
4127         result = Arrays.copyOfRange(objArray, 0, arraySize / 2, Integer[].class);
4128         i = 0;
4129         for (; i < result.length; i++) {
4130             assertEquals(objArray[i], result[i]);
4131         }
4132         result = Arrays.copyOfRange(objArray, 0, 0, Integer[].class);
4133         assertEquals(0, result.length);
4134         try {
4135             Arrays.copyOfRange(null, 0, arraySize, Integer[].class);
4136             fail("should throw NullPointerException");
4137         } catch (NullPointerException e) {
4138             // expected
4139         }
4140         try {
4141             Arrays.copyOfRange(null, -1, arraySize, Integer[].class);
4142             fail("should throw NullPointerException");
4143         } catch (NullPointerException e) {
4144             // expected
4145         }
4146         try {
4147             Arrays.copyOfRange(null, 0, -1, Integer[].class);
4148             fail("should throw IllegalArgumentException");
4149         } catch (IllegalArgumentException e) {
4150             // expected
4151         }
4152         try {
4153             Arrays.copyOfRange(objArray, -1, arraySize, Integer[].class);
4154             fail("should throw ArrayIndexOutOfBoundsException");
4155         } catch (ArrayIndexOutOfBoundsException e) {
4156             // expected
4157         }
4158         try {
4159             Arrays.copyOfRange(objArray, 0, -1, Integer[].class);
4160             fail("should throw IllegalArgumentException");
4161         } catch (IllegalArgumentException e) {
4162             // expected
4163         }
4164         try {
4165             Arrays.copyOfRange(objArray, 0, -1, LinkedList[].class);
4166             fail("should throw IllegalArgumentException");
4167         } catch (IllegalArgumentException e) {
4168             // expected
4169         }
4170         try {
4171             Arrays.copyOfRange(objArray, 0, 1, LinkedList[].class);
4172             fail("should throw ArrayStoreException");
4173         } catch (ArrayStoreException e) {
4174             // expected
4175         }
4176         try {
4177             Arrays.copyOfRange(null, 0, 1, LinkedList[].class);
4178             fail("should throw NullPointerException");
4179         } catch (NullPointerException e) {
4180             // expected
4181         }
4182         try {
4183             assertEquals(objArray.length + 1, Arrays.copyOfRange(objArray, 0,
4184                     objArray.length + 1, LinkedList[].class).length);
4185             fail("should throw ArrayStoreException");
4186         } catch (ArrayStoreException e) {
4187             // expected
4188         }
4189         assertEquals(0,
4190                 Arrays.copyOfRange(objArray, 0, 0, LinkedList[].class).length);
4191     }
4192 
4193     /**
4194      * Tears down the fixture, for example, close a network connection. This
4195      * method is called after a test is executed.
4196      */
tearDown()4197     protected void tearDown() {
4198         objArray = null;
4199         booleanArray = null;
4200         byteArray = null;
4201         charArray = null;
4202         doubleArray = null;
4203         floatArray = null;
4204         intArray = null;
4205         longArray = null;
4206         objectArray = null;
4207         shortArray = null;
4208     }
4209 }
4210