CopyMethods.java revision 0
6443N/A * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. 6443N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 6443N/A * This code is free software; you can redistribute it and/or modify it 6443N/A * under the terms of the GNU General Public License version 2 only, as 6443N/A * published by the Free Software Foundation. 6443N/A * This code is distributed in the hope that it will be useful, but WITHOUT 6443N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 6443N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 6443N/A * version 2 for more details (a copy is included in the LICENSE file that 6443N/A * You should have received a copy of the GNU General Public License version 6443N/A * 2 along with this work; if not, write to the Free Software Foundation, 6443N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 6443N/A * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 6443N/A * CA 95054 USA or visit www.sun.com if you need additional information or 7321N/A * @summary Test for array cloning and slicing methods. 7165N/A static int muzzle;
// if !=0, suppresses ("muzzles") messages 6443N/A // very simple tests, mainly to test the framework itself 6443N/A // negative test of testing framework: 6999N/A // the following check should fail! 6443N/A // quick test of copyOfRange for (
int i =
0; i <= a.
length; i++) {
for (
int j = i; j <= a.
length+
2; j++) {
// the framework: a fixed series of test values /** Return a canonical test value of a desired index and type. * The original test values are random ints. Derive other test * (C)tv C is byte, short, char, long, float, double * (Integer)tv C is Object and tv%16 != 0 * null C is Object and tv%16 == 0 * Integer.toHexString(tv) C is String and tv != 0 * null C is String and tv == 0 * are derived by ordinary Java coercions, except that boolean * samples the LSB of the int value, and String is the hex numeral. * (Also, the 0th String is null, and the 0th Object mod 16 is null, * regardless of the original int test value.) // Turn the canonical int to a float, boolean, String, whatever: /** Build a test array of the given length, * packed with a subsequence of the test values. * The first element of the array is always testValue(0). for (
int i =
0; i <
len; i++) {
/** Check that the given array has the required length. * Check also that it is packed, up to firstNull, with * a particular subsequence of the canonical test values. * The subsequence must begin with a[0] == testValue(offset). * At a[firstNull] and beyond, the array must contain null values. // Note: asserts in here are not part of the test program. // They verify the integrity of the test method itself. // Check required length first. for (
int i =
0; i <
length; i++) {
// Typical comparison helper. Why isn't this a method somewhere. // Exception-ignoring invoke function. // version of assert() that runs unconditionally static void check(
boolean z) {
/** Run about 10**5 distinct parameter combinations * on copyOf and copyOfRange. Use all primitive types, * Try to all critical values, looking for fencepost errors. // Note: asserts in here are not part of the test program. // They verify the integrity of the test method itself. // b = Arrays.copyOf(a, j); // r = Arrays.copyOfRange(a, i, j); //System.out.println("case c="+c+" src="+src+" i="+i+" j="+j); // Increment x by at least one. Increment by a little more unless // it is near a critical value, either zero, crit1, or crit2. assert(x <=
crit2);
// next1 or next2 must be the limit value x += (x <<
1) >>
downShift;
// giant step toward crit1-D x += (x <<
1) >>
downShift;
// giant step toward crit2-D muzzle =
0;
// turn on print statements (affects failures only) // test much larger arrays, more sparsely // We must run all the our tests on each of 8 distinct primitive types, // and two reference types (Object, String) for good measure. // This would be a pain to write out by hand, statically typed. // So, use reflection. Following are the tables of methods we use. // (The initial simple tests exercise enough of the static typing // features of the API to ensure that they compile as advertised.) // This guy exercises the API based on a type-token. // Note the static typing. // This guy exercises the API based on a type-token. // Note the static typing. byte.
class,
short.
class,
int.
class,
long.
class,
char.
class,
float.
class,
double.
class,