"copyOf" methods (for "int" and "double" arrays).


git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@1071596 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Gilles Sadowski 2011-02-17 12:43:53 +00:00
parent 08ee0d963c
commit dee0874ae8
2 changed files with 98 additions and 6 deletions

View File

@ -2220,10 +2220,7 @@ public final class MathUtils {
* @return the copied array.
*/
public static int[] copyOf(int[] source) {
final int len = source.length;
final int[] output = new int[len];
System.arraycopy(source, 0, output, 0, len);
return output;
return copyOf(source, source.length);
}
/**
@ -2233,9 +2230,36 @@ public final class MathUtils {
* @return the copied array.
*/
public static double[] copyOf(double[] source) {
final int len = source.length;
return copyOf(source, source.length);
}
/**
* Creates a copy of the {@code source} array.
*
* @param source Array to be copied.
* @param len Number of entries to copy. If smaller then the source
* length, the copy will be truncated, if larger it will padded with
* zeroes.
* @return the copied array.
*/
public static int[] copyOf(int[] source, int len) {
final int[] output = new int[len];
System.arraycopy(source, 0, output, 0, FastMath.min(len, source.length));
return output;
}
/**
* Creates a copy of the {@code source} array.
*
* @param source Array to be copied.
* @param len Number of entries to copy. If smaller then the source
* length, the copy will be truncated, if larger it will padded with
* zeroes.
* @return the copied array.
*/
public static double[] copyOf(double[] source, int len) {
final double[] output = new double[len];
System.arraycopy(source, 0, output, 0, len);
System.arraycopy(source, 0, output, 0, FastMath.min(len, source.length));
return output;
}
}

View File

@ -1557,6 +1557,35 @@ public final class MathUtilsTest extends TestCase {
}
}
public void testCopyOfInt2() {
final int[] source = { Integer.MIN_VALUE,
-1, 0, 1, 3, 113, 4769,
Integer.MAX_VALUE };
final int offset = 3;
final int[] dest = MathUtils.copyOf(source, source.length - offset);
assertEquals(dest.length, source.length - offset);
for (int i = 0; i < source.length - offset; i++) {
assertEquals(source[i], dest[i]);
}
}
public void testCopyOfInt3() {
final int[] source = { Integer.MIN_VALUE,
-1, 0, 1, 3, 113, 4769,
Integer.MAX_VALUE };
final int offset = 3;
final int[] dest = MathUtils.copyOf(source, source.length + offset);
assertEquals(dest.length, source.length + offset);
for (int i = 0; i < source.length; i++) {
assertEquals(source[i], dest[i]);
}
for (int i = source.length; i < source.length + offset; i++) {
assertEquals(0, dest[i], 0);
}
}
public void testCopyOfDouble() {
final double[] source = { Double.NEGATIVE_INFINITY,
-Double.MAX_VALUE,
@ -1573,4 +1602,43 @@ public final class MathUtilsTest extends TestCase {
assertEquals(source[i], dest[i], 0);
}
}
public void testCopyOfDouble2() {
final double[] source = { Double.NEGATIVE_INFINITY,
-Double.MAX_VALUE,
-1, 0,
Double.MIN_VALUE,
Math.ulp(1d),
1, 3, 113, 4769,
Double.MAX_VALUE,
Double.POSITIVE_INFINITY };
final int offset = 3;
final double[] dest = MathUtils.copyOf(source, source.length - offset);
assertEquals(dest.length, source.length - offset);
for (int i = 0; i < source.length - offset; i++) {
assertEquals(source[i], dest[i], 0);
}
}
public void testCopyOfDouble3() {
final double[] source = { Double.NEGATIVE_INFINITY,
-Double.MAX_VALUE,
-1, 0,
Double.MIN_VALUE,
Math.ulp(1d),
1, 3, 113, 4769,
Double.MAX_VALUE,
Double.POSITIVE_INFINITY };
final int offset = 3;
final double[] dest = MathUtils.copyOf(source, source.length + offset);
assertEquals(dest.length, source.length + offset);
for (int i = 0; i < source.length; i++) {
assertEquals(source[i], dest[i], 0);
}
for (int i = source.length; i < source.length + offset; i++) {
assertEquals(0, dest[i], 0);
}
}
}