1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.math.transform;
18
19 import junit.framework.TestCase;
20
21
22
23
24
25 public final class FastHadamardTransformerTest extends TestCase {
26
27
28
29
30 public void test8Points() {
31 checkAllTransforms(new int[] { 1, 4, -2, 3, 0, 1, 4, -1 },
32 new int[] { 10, -4, 2, -4, 2, -12, 6, 8 });
33 }
34
35
36
37
38 public void test4Points() {
39 checkAllTransforms(new int[] { 1, 2, 3, 4 },
40 new int[] { 10, -2, -4, 0 });
41 }
42
43
44
45
46 public void testNoIntInverse() {
47 FastHadamardTransformer transformer = new FastHadamardTransformer();
48 double[] x = transformer.inversetransform(new double[] { 0, 1, 0, 1});
49 assertEquals( 0.5, x[0], 0);
50 assertEquals(-0.5, x[1], 0);
51 assertEquals( 0.0, x[2], 0);
52 assertEquals( 0.0, x[3], 0);
53 }
54
55
56
57
58 public void test3Points() {
59 try {
60 new FastHadamardTransformer().transform(new double[3]);
61 fail("an exception should have been thrown");
62 } catch (IllegalArgumentException iae) {
63
64 }
65 }
66
67 private void checkAllTransforms(int[]x, int[] y) {
68 checkDoubleTransform(x, y);
69 checkInverseDoubleTransform(x, y);
70 checkIntTransform(x, y);
71 }
72
73 private void checkDoubleTransform(int[]x, int[] y) {
74
75 FastHadamardTransformer transformer = new FastHadamardTransformer();
76
77
78 double[] dX = new double[x.length];
79 for (int i = 0; i < dX.length; ++i) {
80 dX[i] = x[i];
81 }
82 double dResult[] = transformer.transform(dX);
83 for (int i = 0; i < dResult.length; i++) {
84
85 assertEquals((double) y[i], dResult[i]);
86 }
87 }
88
89 private void checkIntTransform(int[]x, int[] y) {
90
91 FastHadamardTransformer transformer = new FastHadamardTransformer();
92
93
94 int iResult[] = transformer.transform(x);
95 for (int i = 0; i < iResult.length; i++) {
96
97 assertEquals(y[i], iResult[i]);
98 }
99
100 }
101
102 private void checkInverseDoubleTransform(int[]x, int[] y) {
103
104 FastHadamardTransformer transformer = new FastHadamardTransformer();
105
106
107 double[] dY = new double[y.length];
108 for (int i = 0; i < dY.length; ++i) {
109 dY[i] = y[i];
110 }
111 double dResult[] = transformer.inversetransform(dY);
112 for (int i = 0; i < dResult.length; i++) {
113
114 assertEquals((double) x[i], dResult[i]);
115 }
116
117 }
118
119 }