17
17
*/
18
18
19
19
#include " mdct.h"
20
+ #include " mdct_ut_common.h"
20
21
#include < gtest/gtest.h>
21
22
22
23
#include < vector>
@@ -35,7 +36,7 @@ static vector<TFloat> mdct(TFloat* x, int N) {
35
36
res.push_back (sum);
36
37
}
37
38
return res;
38
- }
39
+ }
39
40
40
41
static vector<TFloat> midct (TFloat* x, int N) {
41
42
vector<TFloat> res;
@@ -59,8 +60,9 @@ TEST(TMdctTest, MDCT32) {
59
60
const vector<TFloat> res1 = mdct (&src[0 ], N/2 );
60
61
const vector<TFloat> res2 = transform (&src[0 ]);
61
62
EXPECT_EQ (res1.size (), res2.size ());
63
+ auto eps = CalcEps (N);
62
64
for (int i = 0 ; i < res1.size (); i++) {
63
- EXPECT_NEAR (res1[i], res2[i], 0.0000000001 );
65
+ EXPECT_NEAR (res1[i], res2[i], eps );
64
66
}
65
67
}
66
68
@@ -74,8 +76,9 @@ TEST(TMdctTest, MDCT64) {
74
76
const vector<TFloat> res1 = mdct (&src[0 ], N/2 );
75
77
const vector<TFloat> res2 = transform (&src[0 ]);
76
78
EXPECT_EQ (res1.size (), res2.size ());
79
+ auto eps = CalcEps (N);
77
80
for (int i = 0 ; i < res1.size (); i++) {
78
- EXPECT_NEAR (res1[i], res2[i], 0.0000000001 );
81
+ EXPECT_NEAR (res1[i], res2[i], eps );
79
82
}
80
83
}
81
84
@@ -89,8 +92,9 @@ TEST(TMdctTest, MDCT128) {
89
92
const vector<TFloat> res1 = mdct (&src[0 ], N/2 );
90
93
const vector<TFloat> res2 = transform (&src[0 ]);
91
94
EXPECT_EQ (res1.size (), res2.size ());
95
+ auto eps = CalcEps (N * 4 );
92
96
for (int i = 0 ; i < res1.size (); i++) {
93
- EXPECT_NEAR (res1[i], res2[i], 0.0000000001 );
97
+ EXPECT_NEAR (res1[i], res2[i], eps );
94
98
}
95
99
}
96
100
@@ -104,23 +108,27 @@ TEST(TMdctTest, MDCT256) {
104
108
const vector<TFloat> res1 = mdct (&src[0 ], N/2 );
105
109
const vector<TFloat> res2 = transform (&src[0 ]);
106
110
EXPECT_EQ (res1.size (), res2.size ());
111
+ auto eps = CalcEps (N * 4 );
107
112
for (int i = 0 ; i < res1.size (); i++) {
108
- EXPECT_NEAR (res1[i], res2[i], 0.00000001 );
113
+ EXPECT_NEAR (res1[i], res2[i], eps );
109
114
}
110
115
}
111
116
112
117
TEST (TMdctTest, MDCT256_RAND) {
113
118
const int N = 256 ;
114
119
TMDCT<N> transform (N);
115
120
vector<TFloat> src (N);
121
+ TFloat m = 0.0 ;
116
122
for (int i = 0 ; i < N; i++) {
117
123
src[i] = rand ();
124
+ m = std::max (m, src[i]);
118
125
}
119
126
const vector<TFloat> res1 = mdct (&src[0 ], N/2 );
120
127
const vector<TFloat> res2 = transform (&src[0 ]);
121
128
EXPECT_EQ (res1.size (), res2.size ());
129
+ auto eps = CalcEps (m * 8 );
122
130
for (int i = 0 ; i < res1.size (); i++) {
123
- EXPECT_NEAR (res1[i], res2[i], 0.01 );
131
+ EXPECT_NEAR (res1[i], res2[i], eps );
124
132
}
125
133
}
126
134
@@ -134,8 +142,9 @@ TEST(TMdctTest, MIDCT32) {
134
142
const vector<TFloat> res1 = midct (&src[0 ], N/2 );
135
143
const vector<TFloat> res2 = transform (&src[0 ]);
136
144
EXPECT_EQ (res1.size (), res2.size ());
145
+ auto eps = CalcEps (N);
137
146
for (int i = 0 ; i < N; i++) {
138
- EXPECT_NEAR (res1[i], res2[i], 0.0000000001 );
147
+ EXPECT_NEAR (res1[i], res2[i], eps );
139
148
}
140
149
}
141
150
@@ -149,8 +158,9 @@ TEST(TMdctTest, MIDCT64) {
149
158
const vector<TFloat> res1 = midct (&src[0 ], N/2 );
150
159
const vector<TFloat> res2 = transform (&src[0 ]);
151
160
EXPECT_EQ (res1.size (), res2.size ());
161
+ auto eps = CalcEps (N);
152
162
for (int i = 0 ; i < N; i++) {
153
- EXPECT_NEAR (res1[i], res2[i], 0.0000000001 );
163
+ EXPECT_NEAR (res1[i], res2[i], eps );
154
164
}
155
165
}
156
166
@@ -164,8 +174,9 @@ TEST(TMdctTest, MIDCT128) {
164
174
const vector<TFloat> res1 = midct (&src[0 ], N/2 );
165
175
const vector<TFloat> res2 = transform (&src[0 ]);
166
176
EXPECT_EQ (res1.size (), res2.size ());
177
+ auto eps = CalcEps (N);
167
178
for (int i = 0 ; i < N; i++) {
168
- EXPECT_NEAR (res1[i], res2[i], 0.0000000001 );
179
+ EXPECT_NEAR (res1[i], res2[i], eps );
169
180
}
170
181
}
171
182
@@ -179,22 +190,26 @@ TEST(TMdctTest, MIDCT256) {
179
190
const vector<TFloat> res1 = midct (&src[0 ], N/2 );
180
191
const vector<TFloat> res2 = transform (&src[0 ]);
181
192
EXPECT_EQ (res1.size (), res2.size ());
193
+ auto eps = CalcEps (N * 2 );
182
194
for (int i = 0 ; i < N; i++) {
183
- EXPECT_NEAR (res1[i], res2[i], 0.000000001 );
195
+ EXPECT_NEAR (res1[i], res2[i], eps );
184
196
}
185
197
}
186
198
187
199
TEST (TMdctTest, MIDCT256_RAND) {
188
200
const int N = 256 ;
189
201
TMIDCT<N> transform (N);
190
202
vector<TFloat> src (N);
203
+ TFloat m = 0.0 ;
191
204
for (int i = 0 ; i < N/2 ; i++) {
192
205
src[i] = rand ();
206
+ m = std::max (m, src[i]);
193
207
}
194
208
const vector<TFloat> res1 = midct (&src[0 ], N/2 );
195
209
const vector<TFloat> res2 = transform (&src[0 ]);
196
210
EXPECT_EQ (res1.size (), res2.size ());
211
+ auto eps = CalcEps (m * 4 );
197
212
for (int i = 0 ; i < N; i++) {
198
- EXPECT_NEAR (res1[i], res2[i], 0.01 );
213
+ EXPECT_NEAR (res1[i], res2[i], eps );
199
214
}
200
215
}
0 commit comments