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