01: package JSci.tests;
02:
03: import java.util.Random;
04: import JSci.maths.*;
05:
06: /**
07: * Testcase for array methods.
08: * @author Mark Hale
09: */
10: public class ArrayTest extends junit.framework.TestCase {
11: private final Random random = new Random();
12:
13: public static void main(String arg[]) {
14: junit.textui.TestRunner.run(ArrayTest.class);
15: }
16:
17: public ArrayTest(String name) {
18: super (name);
19: }
20:
21: protected void setUp() {
22: JSci.GlobalSettings.ZERO_TOL = 1.0e-6;
23: }
24:
25: public void testMedian() {
26: final int N = random.nextInt(31) + 1;
27: double array[] = new double[N];
28: array[0] = random.nextDouble();
29: for (int i = 1; i < N; i++) {
30: array[i] = random.nextDouble();
31: if (array[i] < array[i - 1])
32: array[i] += array[i - 1];
33: }
34: double expected;
35: if (isEven(N))
36: expected = (array[N / 2 - 1] + array[N / 2]) / 2.0;
37: else
38: expected = array[N / 2];
39: randomize(array);
40: double ans = ArrayMath.median(array);
41: assertEquals("[" + ArrayMath.toString(array) + "]", expected,
42: ans, 0.0);
43: }
44:
45: private static boolean isEven(int n) {
46: return (n % 2 == 0);
47: }
48:
49: private void randomize(double array[]) {
50: for (int i = 0; i < array.length; i++) {
51: int p = random.nextInt(array.length);
52: int q = random.nextInt(array.length);
53: double tmp = array[q];
54: array[q] = array[p];
55: array[p] = tmp;
56: }
57: }
58: }
|