OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
12 #include "webrtc/common_audio/signal_processing/include/signal_processing_librar
y.h" | 12 #include "webrtc/common_audio/signal_processing/include/signal_processing_librar
y.h" |
13 | 13 |
14 static const int kVector16Size = 9; | 14 static const size_t kVector16Size = 9; |
15 static const int16_t vector16[kVector16Size] = {1, -15511, 4323, 1963, | 15 static const int16_t vector16[kVector16Size] = {1, -15511, 4323, 1963, |
16 WEBRTC_SPL_WORD16_MAX, 0, WEBRTC_SPL_WORD16_MIN + 5, -3333, 345}; | 16 WEBRTC_SPL_WORD16_MAX, 0, WEBRTC_SPL_WORD16_MIN + 5, -3333, 345}; |
17 | 17 |
18 class SplTest : public testing::Test { | 18 class SplTest : public testing::Test { |
19 protected: | 19 protected: |
20 SplTest() { | 20 SplTest() { |
21 WebRtcSpl_Init(); | 21 WebRtcSpl_Init(); |
22 } | 22 } |
23 virtual ~SplTest() { | 23 virtual ~SplTest() { |
24 } | 24 } |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 | 150 |
151 | 151 |
152 EXPECT_EQ(-91772805, WebRtcSpl_DivResultInQ31(den, num)); | 152 EXPECT_EQ(-91772805, WebRtcSpl_DivResultInQ31(den, num)); |
153 EXPECT_EQ(-23, WebRtcSpl_DivW32W16ResW16(num, (int16_t)den)); | 153 EXPECT_EQ(-23, WebRtcSpl_DivW32W16ResW16(num, (int16_t)den)); |
154 EXPECT_EQ(-23, WebRtcSpl_DivW32W16(num, (int16_t)den)); | 154 EXPECT_EQ(-23, WebRtcSpl_DivW32W16(num, (int16_t)den)); |
155 EXPECT_EQ(23u, WebRtcSpl_DivU32U16(num, denU)); | 155 EXPECT_EQ(23u, WebRtcSpl_DivU32U16(num, denU)); |
156 EXPECT_EQ(0, WebRtcSpl_DivW32HiLow(128, 0, 256)); | 156 EXPECT_EQ(0, WebRtcSpl_DivW32HiLow(128, 0, 256)); |
157 } | 157 } |
158 | 158 |
159 TEST_F(SplTest, BasicArrayOperationsTest) { | 159 TEST_F(SplTest, BasicArrayOperationsTest) { |
160 const int kVectorSize = 4; | 160 const size_t kVectorSize = 4; |
161 int B[] = {4, 12, 133, 1100}; | 161 int B[] = {4, 12, 133, 1100}; |
162 int16_t b16[kVectorSize]; | 162 int16_t b16[kVectorSize]; |
163 int32_t b32[kVectorSize]; | 163 int32_t b32[kVectorSize]; |
164 | 164 |
165 int16_t bTmp16[kVectorSize]; | 165 int16_t bTmp16[kVectorSize]; |
166 int32_t bTmp32[kVectorSize]; | 166 int32_t bTmp32[kVectorSize]; |
167 | 167 |
168 WebRtcSpl_MemSetW16(b16, 3, kVectorSize); | 168 WebRtcSpl_MemSetW16(b16, 3, kVectorSize); |
169 for (int kk = 0; kk < kVectorSize; ++kk) { | 169 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
170 EXPECT_EQ(3, b16[kk]); | 170 EXPECT_EQ(3, b16[kk]); |
171 } | 171 } |
172 WebRtcSpl_ZerosArrayW16(b16, kVectorSize); | 172 WebRtcSpl_ZerosArrayW16(b16, kVectorSize); |
173 for (int kk = 0; kk < kVectorSize; ++kk) { | 173 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
174 EXPECT_EQ(0, b16[kk]); | 174 EXPECT_EQ(0, b16[kk]); |
175 } | 175 } |
176 WebRtcSpl_MemSetW32(b32, 3, kVectorSize); | 176 WebRtcSpl_MemSetW32(b32, 3, kVectorSize); |
177 for (int kk = 0; kk < kVectorSize; ++kk) { | 177 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
178 EXPECT_EQ(3, b32[kk]); | 178 EXPECT_EQ(3, b32[kk]); |
179 } | 179 } |
180 WebRtcSpl_ZerosArrayW32(b32, kVectorSize); | 180 WebRtcSpl_ZerosArrayW32(b32, kVectorSize); |
181 for (int kk = 0; kk < kVectorSize; ++kk) { | 181 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
182 EXPECT_EQ(0, b32[kk]); | 182 EXPECT_EQ(0, b32[kk]); |
183 } | 183 } |
184 for (int kk = 0; kk < kVectorSize; ++kk) { | 184 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
185 bTmp16[kk] = (int16_t)kk; | 185 bTmp16[kk] = (int16_t)kk; |
186 bTmp32[kk] = (int32_t)kk; | 186 bTmp32[kk] = (int32_t)kk; |
187 } | 187 } |
188 WEBRTC_SPL_MEMCPY_W16(b16, bTmp16, kVectorSize); | 188 WEBRTC_SPL_MEMCPY_W16(b16, bTmp16, kVectorSize); |
189 for (int kk = 0; kk < kVectorSize; ++kk) { | 189 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
190 EXPECT_EQ(b16[kk], bTmp16[kk]); | 190 EXPECT_EQ(b16[kk], bTmp16[kk]); |
191 } | 191 } |
192 // WEBRTC_SPL_MEMCPY_W32(b32, bTmp32, kVectorSize); | 192 // WEBRTC_SPL_MEMCPY_W32(b32, bTmp32, kVectorSize); |
193 // for (int kk = 0; kk < kVectorSize; ++kk) { | 193 // for (int kk = 0; kk < kVectorSize; ++kk) { |
194 // EXPECT_EQ(b32[kk], bTmp32[kk]); | 194 // EXPECT_EQ(b32[kk], bTmp32[kk]); |
195 // } | 195 // } |
196 WebRtcSpl_CopyFromEndW16(b16, kVectorSize, 2, bTmp16); | 196 WebRtcSpl_CopyFromEndW16(b16, kVectorSize, 2, bTmp16); |
197 for (int kk = 0; kk < 2; ++kk) { | 197 for (size_t kk = 0; kk < 2; ++kk) { |
198 EXPECT_EQ(kk+2, bTmp16[kk]); | 198 EXPECT_EQ(static_cast<int16_t>(kk+2), bTmp16[kk]); |
199 } | 199 } |
200 | 200 |
201 for (int kk = 0; kk < kVectorSize; ++kk) { | 201 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
202 b32[kk] = B[kk]; | 202 b32[kk] = B[kk]; |
203 b16[kk] = (int16_t)B[kk]; | 203 b16[kk] = (int16_t)B[kk]; |
204 } | 204 } |
205 WebRtcSpl_VectorBitShiftW32ToW16(bTmp16, kVectorSize, b32, 1); | 205 WebRtcSpl_VectorBitShiftW32ToW16(bTmp16, kVectorSize, b32, 1); |
206 for (int kk = 0; kk < kVectorSize; ++kk) { | 206 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
207 EXPECT_EQ((B[kk]>>1), bTmp16[kk]); | 207 EXPECT_EQ((B[kk]>>1), bTmp16[kk]); |
208 } | 208 } |
209 WebRtcSpl_VectorBitShiftW16(bTmp16, kVectorSize, b16, 1); | 209 WebRtcSpl_VectorBitShiftW16(bTmp16, kVectorSize, b16, 1); |
210 for (int kk = 0; kk < kVectorSize; ++kk) { | 210 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
211 EXPECT_EQ((B[kk]>>1), bTmp16[kk]); | 211 EXPECT_EQ((B[kk]>>1), bTmp16[kk]); |
212 } | 212 } |
213 WebRtcSpl_VectorBitShiftW32(bTmp32, kVectorSize, b32, 1); | 213 WebRtcSpl_VectorBitShiftW32(bTmp32, kVectorSize, b32, 1); |
214 for (int kk = 0; kk < kVectorSize; ++kk) { | 214 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
215 EXPECT_EQ((B[kk]>>1), bTmp32[kk]); | 215 EXPECT_EQ((B[kk]>>1), bTmp32[kk]); |
216 } | 216 } |
217 | 217 |
218 WebRtcSpl_MemCpyReversedOrder(&bTmp16[3], b16, kVectorSize); | 218 WebRtcSpl_MemCpyReversedOrder(&bTmp16[3], b16, kVectorSize); |
219 for (int kk = 0; kk < kVectorSize; ++kk) { | 219 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
220 EXPECT_EQ(b16[3-kk], bTmp16[kk]); | 220 EXPECT_EQ(b16[3-kk], bTmp16[kk]); |
221 } | 221 } |
222 } | 222 } |
223 | 223 |
224 TEST_F(SplTest, ExeptionsHandlingMinMaxOperationsTest) { | 224 TEST_F(SplTest, ExeptionsHandlingMinMaxOperationsTest) { |
225 // Test how the functions handle exceptional cases. | 225 // Test how the functions handle exceptional cases. |
226 const int kVectorSize = 2; | 226 const size_t kVectorSize = 2; |
227 int16_t vector16[kVectorSize] = {0}; | 227 int16_t vector16[kVectorSize] = {0}; |
228 int32_t vector32[kVectorSize] = {0}; | 228 int32_t vector32[kVectorSize] = {0}; |
229 | 229 |
230 EXPECT_EQ(-1, WebRtcSpl_MaxAbsValueW16(vector16, 0)); | 230 EXPECT_EQ(-1, WebRtcSpl_MaxAbsValueW16(vector16, 0)); |
231 EXPECT_EQ(-1, WebRtcSpl_MaxAbsValueW16(NULL, kVectorSize)); | 231 EXPECT_EQ(-1, WebRtcSpl_MaxAbsValueW16(NULL, kVectorSize)); |
232 EXPECT_EQ(WEBRTC_SPL_WORD16_MIN, WebRtcSpl_MaxValueW16(vector16, 0)); | 232 EXPECT_EQ(WEBRTC_SPL_WORD16_MIN, WebRtcSpl_MaxValueW16(vector16, 0)); |
233 EXPECT_EQ(WEBRTC_SPL_WORD16_MIN, WebRtcSpl_MaxValueW16(NULL, kVectorSize)); | 233 EXPECT_EQ(WEBRTC_SPL_WORD16_MIN, WebRtcSpl_MaxValueW16(NULL, kVectorSize)); |
234 EXPECT_EQ(WEBRTC_SPL_WORD16_MAX, WebRtcSpl_MinValueW16(vector16, 0)); | 234 EXPECT_EQ(WEBRTC_SPL_WORD16_MAX, WebRtcSpl_MinValueW16(vector16, 0)); |
235 EXPECT_EQ(WEBRTC_SPL_WORD16_MAX, WebRtcSpl_MinValueW16(NULL, kVectorSize)); | 235 EXPECT_EQ(WEBRTC_SPL_WORD16_MAX, WebRtcSpl_MinValueW16(NULL, kVectorSize)); |
236 EXPECT_EQ(-1, WebRtcSpl_MaxAbsValueW32(vector32, 0)); | 236 EXPECT_EQ(-1, WebRtcSpl_MaxAbsValueW32(vector32, 0)); |
237 EXPECT_EQ(-1, WebRtcSpl_MaxAbsValueW32(NULL, kVectorSize)); | 237 EXPECT_EQ(-1, WebRtcSpl_MaxAbsValueW32(NULL, kVectorSize)); |
238 EXPECT_EQ(WEBRTC_SPL_WORD32_MIN, WebRtcSpl_MaxValueW32(vector32, 0)); | 238 EXPECT_EQ(WEBRTC_SPL_WORD32_MIN, WebRtcSpl_MaxValueW32(vector32, 0)); |
239 EXPECT_EQ(WEBRTC_SPL_WORD32_MIN, WebRtcSpl_MaxValueW32(NULL, kVectorSize)); | 239 EXPECT_EQ(WEBRTC_SPL_WORD32_MIN, WebRtcSpl_MaxValueW32(NULL, kVectorSize)); |
240 EXPECT_EQ(WEBRTC_SPL_WORD32_MAX, WebRtcSpl_MinValueW32(vector32, 0)); | 240 EXPECT_EQ(WEBRTC_SPL_WORD32_MAX, WebRtcSpl_MinValueW32(vector32, 0)); |
241 EXPECT_EQ(WEBRTC_SPL_WORD32_MAX, WebRtcSpl_MinValueW32(NULL, kVectorSize)); | 241 EXPECT_EQ(WEBRTC_SPL_WORD32_MAX, WebRtcSpl_MinValueW32(NULL, kVectorSize)); |
242 EXPECT_EQ(-1, WebRtcSpl_MaxAbsIndexW16(vector16, 0)); | 242 EXPECT_EQ(-1, WebRtcSpl_MaxAbsIndexW16(vector16, 0)); |
243 EXPECT_EQ(-1, WebRtcSpl_MaxAbsIndexW16(NULL, kVectorSize)); | 243 EXPECT_EQ(-1, WebRtcSpl_MaxAbsIndexW16(NULL, kVectorSize)); |
244 EXPECT_EQ(-1, WebRtcSpl_MaxIndexW16(vector16, 0)); | 244 EXPECT_EQ(-1, WebRtcSpl_MaxIndexW16(vector16, 0)); |
245 EXPECT_EQ(-1, WebRtcSpl_MaxIndexW16(NULL, kVectorSize)); | 245 EXPECT_EQ(-1, WebRtcSpl_MaxIndexW16(NULL, kVectorSize)); |
246 EXPECT_EQ(-1, WebRtcSpl_MaxIndexW32(vector32, 0)); | 246 EXPECT_EQ(-1, WebRtcSpl_MaxIndexW32(vector32, 0)); |
247 EXPECT_EQ(-1, WebRtcSpl_MaxIndexW32(NULL, kVectorSize)); | 247 EXPECT_EQ(-1, WebRtcSpl_MaxIndexW32(NULL, kVectorSize)); |
248 EXPECT_EQ(-1, WebRtcSpl_MinIndexW16(vector16, 0)); | 248 EXPECT_EQ(-1, WebRtcSpl_MinIndexW16(vector16, 0)); |
249 EXPECT_EQ(-1, WebRtcSpl_MinIndexW16(NULL, kVectorSize)); | 249 EXPECT_EQ(-1, WebRtcSpl_MinIndexW16(NULL, kVectorSize)); |
250 EXPECT_EQ(-1, WebRtcSpl_MinIndexW32(vector32, 0)); | 250 EXPECT_EQ(-1, WebRtcSpl_MinIndexW32(vector32, 0)); |
251 EXPECT_EQ(-1, WebRtcSpl_MinIndexW32(NULL, kVectorSize)); | 251 EXPECT_EQ(-1, WebRtcSpl_MinIndexW32(NULL, kVectorSize)); |
252 } | 252 } |
253 | 253 |
254 TEST_F(SplTest, MinMaxOperationsTest) { | 254 TEST_F(SplTest, MinMaxOperationsTest) { |
255 const int kVectorSize = 17; | 255 const size_t kVectorSize = 17; |
256 | 256 |
257 // Vectors to test the cases where minimum values have to be caught | 257 // Vectors to test the cases where minimum values have to be caught |
258 // outside of the unrolled loops in ARM-Neon. | 258 // outside of the unrolled loops in ARM-Neon. |
259 int16_t vector16[kVectorSize] = {-1, 7485, 0, 3333, | 259 int16_t vector16[kVectorSize] = {-1, 7485, 0, 3333, |
260 -18283, 0, 12334, -29871, 988, -3333, | 260 -18283, 0, 12334, -29871, 988, -3333, |
261 345, -456, 222, 999, 888, 8774, WEBRTC_SPL_WORD16_MIN}; | 261 345, -456, 222, 999, 888, 8774, WEBRTC_SPL_WORD16_MIN}; |
262 int32_t vector32[kVectorSize] = {-1, 0, 283211, 3333, | 262 int32_t vector32[kVectorSize] = {-1, 0, 283211, 3333, |
263 8712345, 0, -3333, 89345, -374585456, 222, 999, 122345334, | 263 8712345, 0, -3333, 89345, -374585456, 222, 999, 122345334, |
264 -12389756, -987329871, 888, -2, WEBRTC_SPL_WORD32_MIN}; | 264 -12389756, -987329871, 888, -2, WEBRTC_SPL_WORD32_MIN}; |
265 | 265 |
266 EXPECT_EQ(WEBRTC_SPL_WORD16_MIN, | 266 EXPECT_EQ(WEBRTC_SPL_WORD16_MIN, |
267 WebRtcSpl_MinValueW16(vector16, kVectorSize)); | 267 WebRtcSpl_MinValueW16(vector16, kVectorSize)); |
268 EXPECT_EQ(WEBRTC_SPL_WORD32_MIN, | 268 EXPECT_EQ(WEBRTC_SPL_WORD32_MIN, |
269 WebRtcSpl_MinValueW32(vector32, kVectorSize)); | 269 WebRtcSpl_MinValueW32(vector32, kVectorSize)); |
270 EXPECT_EQ(kVectorSize - 1, WebRtcSpl_MinIndexW16(vector16, kVectorSize)); | 270 EXPECT_EQ(static_cast<int>(kVectorSize - 1), |
271 EXPECT_EQ(kVectorSize - 1, WebRtcSpl_MinIndexW32(vector32, kVectorSize)); | 271 WebRtcSpl_MinIndexW16(vector16, kVectorSize)); |
| 272 EXPECT_EQ(static_cast<int>(kVectorSize - 1), |
| 273 WebRtcSpl_MinIndexW32(vector32, kVectorSize)); |
272 | 274 |
273 // Test the cases where maximum values have to be caught | 275 // Test the cases where maximum values have to be caught |
274 // outside of the unrolled loops in ARM-Neon. | 276 // outside of the unrolled loops in ARM-Neon. |
275 vector16[kVectorSize - 1] = WEBRTC_SPL_WORD16_MAX; | 277 vector16[kVectorSize - 1] = WEBRTC_SPL_WORD16_MAX; |
276 vector32[kVectorSize - 1] = WEBRTC_SPL_WORD32_MAX; | 278 vector32[kVectorSize - 1] = WEBRTC_SPL_WORD32_MAX; |
277 | 279 |
278 EXPECT_EQ(WEBRTC_SPL_WORD16_MAX, | 280 EXPECT_EQ(WEBRTC_SPL_WORD16_MAX, |
279 WebRtcSpl_MaxAbsValueW16(vector16, kVectorSize)); | 281 WebRtcSpl_MaxAbsValueW16(vector16, kVectorSize)); |
280 EXPECT_EQ(WEBRTC_SPL_WORD16_MAX, | 282 EXPECT_EQ(WEBRTC_SPL_WORD16_MAX, |
281 WebRtcSpl_MaxValueW16(vector16, kVectorSize)); | 283 WebRtcSpl_MaxValueW16(vector16, kVectorSize)); |
282 EXPECT_EQ(WEBRTC_SPL_WORD32_MAX, | 284 EXPECT_EQ(WEBRTC_SPL_WORD32_MAX, |
283 WebRtcSpl_MaxAbsValueW32(vector32, kVectorSize)); | 285 WebRtcSpl_MaxAbsValueW32(vector32, kVectorSize)); |
284 EXPECT_EQ(WEBRTC_SPL_WORD32_MAX, | 286 EXPECT_EQ(WEBRTC_SPL_WORD32_MAX, |
285 WebRtcSpl_MaxValueW32(vector32, kVectorSize)); | 287 WebRtcSpl_MaxValueW32(vector32, kVectorSize)); |
286 EXPECT_EQ(kVectorSize - 1, WebRtcSpl_MaxAbsIndexW16(vector16, kVectorSize)); | 288 EXPECT_EQ(static_cast<int>(kVectorSize - 1), |
287 EXPECT_EQ(kVectorSize - 1, WebRtcSpl_MaxIndexW16(vector16, kVectorSize)); | 289 WebRtcSpl_MaxAbsIndexW16(vector16, kVectorSize)); |
288 EXPECT_EQ(kVectorSize - 1, WebRtcSpl_MaxIndexW32(vector32, kVectorSize)); | 290 EXPECT_EQ(static_cast<int>(kVectorSize - 1), |
| 291 WebRtcSpl_MaxIndexW16(vector16, kVectorSize)); |
| 292 EXPECT_EQ(static_cast<int>(kVectorSize - 1), |
| 293 WebRtcSpl_MaxIndexW32(vector32, kVectorSize)); |
289 | 294 |
290 // Test the cases where multiple maximum and minimum values are present. | 295 // Test the cases where multiple maximum and minimum values are present. |
291 vector16[1] = WEBRTC_SPL_WORD16_MAX; | 296 vector16[1] = WEBRTC_SPL_WORD16_MAX; |
292 vector16[6] = WEBRTC_SPL_WORD16_MIN; | 297 vector16[6] = WEBRTC_SPL_WORD16_MIN; |
293 vector16[11] = WEBRTC_SPL_WORD16_MIN; | 298 vector16[11] = WEBRTC_SPL_WORD16_MIN; |
294 vector32[1] = WEBRTC_SPL_WORD32_MAX; | 299 vector32[1] = WEBRTC_SPL_WORD32_MAX; |
295 vector32[6] = WEBRTC_SPL_WORD32_MIN; | 300 vector32[6] = WEBRTC_SPL_WORD32_MIN; |
296 vector32[11] = WEBRTC_SPL_WORD32_MIN; | 301 vector32[11] = WEBRTC_SPL_WORD32_MIN; |
297 | 302 |
298 EXPECT_EQ(WEBRTC_SPL_WORD16_MAX, | 303 EXPECT_EQ(WEBRTC_SPL_WORD16_MAX, |
299 WebRtcSpl_MaxAbsValueW16(vector16, kVectorSize)); | 304 WebRtcSpl_MaxAbsValueW16(vector16, kVectorSize)); |
300 EXPECT_EQ(WEBRTC_SPL_WORD16_MAX, | 305 EXPECT_EQ(WEBRTC_SPL_WORD16_MAX, |
301 WebRtcSpl_MaxValueW16(vector16, kVectorSize)); | 306 WebRtcSpl_MaxValueW16(vector16, kVectorSize)); |
302 EXPECT_EQ(WEBRTC_SPL_WORD16_MIN, | 307 EXPECT_EQ(WEBRTC_SPL_WORD16_MIN, |
303 WebRtcSpl_MinValueW16(vector16, kVectorSize)); | 308 WebRtcSpl_MinValueW16(vector16, kVectorSize)); |
304 EXPECT_EQ(WEBRTC_SPL_WORD32_MAX, | 309 EXPECT_EQ(WEBRTC_SPL_WORD32_MAX, |
305 WebRtcSpl_MaxAbsValueW32(vector32, kVectorSize)); | 310 WebRtcSpl_MaxAbsValueW32(vector32, kVectorSize)); |
306 EXPECT_EQ(WEBRTC_SPL_WORD32_MAX, | 311 EXPECT_EQ(WEBRTC_SPL_WORD32_MAX, |
307 WebRtcSpl_MaxValueW32(vector32, kVectorSize)); | 312 WebRtcSpl_MaxValueW32(vector32, kVectorSize)); |
308 EXPECT_EQ(WEBRTC_SPL_WORD32_MIN, | 313 EXPECT_EQ(WEBRTC_SPL_WORD32_MIN, |
309 WebRtcSpl_MinValueW32(vector32, kVectorSize)); | 314 WebRtcSpl_MinValueW32(vector32, kVectorSize)); |
310 EXPECT_EQ(6, WebRtcSpl_MaxAbsIndexW16(vector16, kVectorSize)); | 315 EXPECT_EQ(6, WebRtcSpl_MaxAbsIndexW16(vector16, kVectorSize)); |
311 EXPECT_EQ(1, WebRtcSpl_MaxIndexW16(vector16, kVectorSize)); | 316 EXPECT_EQ(1, WebRtcSpl_MaxIndexW16(vector16, kVectorSize)); |
312 EXPECT_EQ(1, WebRtcSpl_MaxIndexW32(vector32, kVectorSize)); | 317 EXPECT_EQ(1, WebRtcSpl_MaxIndexW32(vector32, kVectorSize)); |
313 EXPECT_EQ(6, WebRtcSpl_MinIndexW16(vector16, kVectorSize)); | 318 EXPECT_EQ(6, WebRtcSpl_MinIndexW16(vector16, kVectorSize)); |
314 EXPECT_EQ(6, WebRtcSpl_MinIndexW32(vector32, kVectorSize)); | 319 EXPECT_EQ(6, WebRtcSpl_MinIndexW32(vector32, kVectorSize)); |
315 } | 320 } |
316 | 321 |
317 TEST_F(SplTest, VectorOperationsTest) { | 322 TEST_F(SplTest, VectorOperationsTest) { |
318 const int kVectorSize = 4; | 323 const size_t kVectorSize = 4; |
319 int B[] = {4, 12, 133, 1100}; | 324 int B[] = {4, 12, 133, 1100}; |
320 int16_t a16[kVectorSize]; | 325 int16_t a16[kVectorSize]; |
321 int16_t b16[kVectorSize]; | 326 int16_t b16[kVectorSize]; |
322 int16_t bTmp16[kVectorSize]; | 327 int16_t bTmp16[kVectorSize]; |
323 | 328 |
324 for (int kk = 0; kk < kVectorSize; ++kk) { | 329 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
325 a16[kk] = B[kk]; | 330 a16[kk] = B[kk]; |
326 b16[kk] = B[kk]; | 331 b16[kk] = B[kk]; |
327 } | 332 } |
328 | 333 |
329 WebRtcSpl_AffineTransformVector(bTmp16, b16, 3, 7, 2, kVectorSize); | 334 WebRtcSpl_AffineTransformVector(bTmp16, b16, 3, 7, 2, kVectorSize); |
330 for (int kk = 0; kk < kVectorSize; ++kk) { | 335 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
331 EXPECT_EQ((B[kk]*3+7)>>2, bTmp16[kk]); | 336 EXPECT_EQ((B[kk]*3+7)>>2, bTmp16[kk]); |
332 } | 337 } |
333 WebRtcSpl_ScaleAndAddVectorsWithRound(b16, 3, b16, 2, 2, bTmp16, kVectorSize
); | 338 WebRtcSpl_ScaleAndAddVectorsWithRound(b16, 3, b16, 2, 2, bTmp16, kVectorSize
); |
334 for (int kk = 0; kk < kVectorSize; ++kk) { | 339 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
335 EXPECT_EQ((B[kk]*3+B[kk]*2+2)>>2, bTmp16[kk]); | 340 EXPECT_EQ((B[kk]*3+B[kk]*2+2)>>2, bTmp16[kk]); |
336 } | 341 } |
337 | 342 |
338 WebRtcSpl_AddAffineVectorToVector(bTmp16, b16, 3, 7, 2, kVectorSize); | 343 WebRtcSpl_AddAffineVectorToVector(bTmp16, b16, 3, 7, 2, kVectorSize); |
339 for (int kk = 0; kk < kVectorSize; ++kk) { | 344 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
340 EXPECT_EQ(((B[kk]*3+B[kk]*2+2)>>2)+((b16[kk]*3+7)>>2), bTmp16[kk]); | 345 EXPECT_EQ(((B[kk]*3+B[kk]*2+2)>>2)+((b16[kk]*3+7)>>2), bTmp16[kk]); |
341 } | 346 } |
342 | 347 |
343 WebRtcSpl_ScaleVector(b16, bTmp16, 13, kVectorSize, 2); | 348 WebRtcSpl_ScaleVector(b16, bTmp16, 13, kVectorSize, 2); |
344 for (int kk = 0; kk < kVectorSize; ++kk) { | 349 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
345 EXPECT_EQ((b16[kk]*13)>>2, bTmp16[kk]); | 350 EXPECT_EQ((b16[kk]*13)>>2, bTmp16[kk]); |
346 } | 351 } |
347 WebRtcSpl_ScaleVectorWithSat(b16, bTmp16, 13, kVectorSize, 2); | 352 WebRtcSpl_ScaleVectorWithSat(b16, bTmp16, 13, kVectorSize, 2); |
348 for (int kk = 0; kk < kVectorSize; ++kk) { | 353 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
349 EXPECT_EQ((b16[kk]*13)>>2, bTmp16[kk]); | 354 EXPECT_EQ((b16[kk]*13)>>2, bTmp16[kk]); |
350 } | 355 } |
351 WebRtcSpl_ScaleAndAddVectors(a16, 13, 2, b16, 7, 2, bTmp16, kVectorSize); | 356 WebRtcSpl_ScaleAndAddVectors(a16, 13, 2, b16, 7, 2, bTmp16, kVectorSize); |
352 for (int kk = 0; kk < kVectorSize; ++kk) { | 357 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
353 EXPECT_EQ(((a16[kk]*13)>>2)+((b16[kk]*7)>>2), bTmp16[kk]); | 358 EXPECT_EQ(((a16[kk]*13)>>2)+((b16[kk]*7)>>2), bTmp16[kk]); |
354 } | 359 } |
355 | 360 |
356 WebRtcSpl_AddVectorsAndShift(bTmp16, a16, b16, kVectorSize, 2); | 361 WebRtcSpl_AddVectorsAndShift(bTmp16, a16, b16, kVectorSize, 2); |
357 for (int kk = 0; kk < kVectorSize; ++kk) { | 362 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
358 EXPECT_EQ(B[kk] >> 1, bTmp16[kk]); | 363 EXPECT_EQ(B[kk] >> 1, bTmp16[kk]); |
359 } | 364 } |
360 WebRtcSpl_ReverseOrderMultArrayElements(bTmp16, a16, &b16[3], kVectorSize, 2
); | 365 WebRtcSpl_ReverseOrderMultArrayElements(bTmp16, a16, &b16[3], kVectorSize, 2
); |
361 for (int kk = 0; kk < kVectorSize; ++kk) { | 366 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
362 EXPECT_EQ((a16[kk]*b16[3-kk])>>2, bTmp16[kk]); | 367 EXPECT_EQ((a16[kk]*b16[3-kk])>>2, bTmp16[kk]); |
363 } | 368 } |
364 WebRtcSpl_ElementwiseVectorMult(bTmp16, a16, b16, kVectorSize, 6); | 369 WebRtcSpl_ElementwiseVectorMult(bTmp16, a16, b16, kVectorSize, 6); |
365 for (int kk = 0; kk < kVectorSize; ++kk) { | 370 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
366 EXPECT_EQ((a16[kk]*b16[kk])>>6, bTmp16[kk]); | 371 EXPECT_EQ((a16[kk]*b16[kk])>>6, bTmp16[kk]); |
367 } | 372 } |
368 | 373 |
369 WebRtcSpl_SqrtOfOneMinusXSquared(b16, kVectorSize, bTmp16); | 374 WebRtcSpl_SqrtOfOneMinusXSquared(b16, kVectorSize, bTmp16); |
370 for (int kk = 0; kk < kVectorSize - 1; ++kk) { | 375 for (size_t kk = 0; kk < kVectorSize - 1; ++kk) { |
371 EXPECT_EQ(32767, bTmp16[kk]); | 376 EXPECT_EQ(32767, bTmp16[kk]); |
372 } | 377 } |
373 EXPECT_EQ(32749, bTmp16[kVectorSize - 1]); | 378 EXPECT_EQ(32749, bTmp16[kVectorSize - 1]); |
374 | 379 |
375 EXPECT_EQ(0, WebRtcSpl_GetScalingSquare(b16, kVectorSize, 1)); | 380 EXPECT_EQ(0, WebRtcSpl_GetScalingSquare(b16, kVectorSize, 1)); |
376 } | 381 } |
377 | 382 |
378 TEST_F(SplTest, EstimatorsTest) { | 383 TEST_F(SplTest, EstimatorsTest) { |
379 const int16_t kOrder = 2; | 384 const size_t kOrder = 2; |
380 const int32_t unstable_filter[] = { 4, 12, 133, 1100 }; | 385 const int32_t unstable_filter[] = { 4, 12, 133, 1100 }; |
381 const int32_t stable_filter[] = { 1100, 133, 12, 4 }; | 386 const int32_t stable_filter[] = { 1100, 133, 12, 4 }; |
382 int16_t lpc[kOrder + 2] = { 0 }; | 387 int16_t lpc[kOrder + 2] = { 0 }; |
383 int16_t refl[kOrder + 2] = { 0 }; | 388 int16_t refl[kOrder + 2] = { 0 }; |
384 int16_t lpc_result[] = { 4096, -497, 15, 0 }; | 389 int16_t lpc_result[] = { 4096, -497, 15, 0 }; |
385 int16_t refl_result[] = { -3962, 123, 0, 0 }; | 390 int16_t refl_result[] = { -3962, 123, 0, 0 }; |
386 | 391 |
387 EXPECT_EQ(0, WebRtcSpl_LevinsonDurbin(unstable_filter, lpc, refl, kOrder)); | 392 EXPECT_EQ(0, WebRtcSpl_LevinsonDurbin(unstable_filter, lpc, refl, kOrder)); |
388 EXPECT_EQ(1, WebRtcSpl_LevinsonDurbin(stable_filter, lpc, refl, kOrder)); | 393 EXPECT_EQ(1, WebRtcSpl_LevinsonDurbin(stable_filter, lpc, refl, kOrder)); |
389 for (int i = 0; i < kOrder + 2; ++i) { | 394 for (size_t i = 0; i < kOrder + 2; ++i) { |
390 EXPECT_EQ(lpc_result[i], lpc[i]); | 395 EXPECT_EQ(lpc_result[i], lpc[i]); |
391 EXPECT_EQ(refl_result[i], refl[i]); | 396 EXPECT_EQ(refl_result[i], refl[i]); |
392 } | 397 } |
393 } | 398 } |
394 | 399 |
395 TEST_F(SplTest, FilterTest) { | 400 TEST_F(SplTest, FilterTest) { |
396 const int kVectorSize = 4; | 401 const size_t kVectorSize = 4; |
397 const int kFilterOrder = 3; | 402 const size_t kFilterOrder = 3; |
398 int16_t A[] = {1, 2, 33, 100}; | 403 int16_t A[] = {1, 2, 33, 100}; |
399 int16_t A5[] = {1, 2, 33, 100, -5}; | 404 int16_t A5[] = {1, 2, 33, 100, -5}; |
400 int16_t B[] = {4, 12, 133, 110}; | 405 int16_t B[] = {4, 12, 133, 110}; |
401 int16_t data_in[kVectorSize]; | 406 int16_t data_in[kVectorSize]; |
402 int16_t data_out[kVectorSize]; | 407 int16_t data_out[kVectorSize]; |
403 int16_t bTmp16Low[kVectorSize]; | 408 int16_t bTmp16Low[kVectorSize]; |
404 int16_t bState[kVectorSize]; | 409 int16_t bState[kVectorSize]; |
405 int16_t bStateLow[kVectorSize]; | 410 int16_t bStateLow[kVectorSize]; |
406 | 411 |
407 WebRtcSpl_ZerosArrayW16(bState, kVectorSize); | 412 WebRtcSpl_ZerosArrayW16(bState, kVectorSize); |
408 WebRtcSpl_ZerosArrayW16(bStateLow, kVectorSize); | 413 WebRtcSpl_ZerosArrayW16(bStateLow, kVectorSize); |
409 | 414 |
410 for (int kk = 0; kk < kVectorSize; ++kk) { | 415 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
411 data_in[kk] = A[kk]; | 416 data_in[kk] = A[kk]; |
412 data_out[kk] = 0; | 417 data_out[kk] = 0; |
413 } | 418 } |
414 | 419 |
415 // MA filters. | 420 // MA filters. |
416 // Note that the input data has |kFilterOrder| states before the actual | 421 // Note that the input data has |kFilterOrder| states before the actual |
417 // data (one sample). | 422 // data (one sample). |
418 WebRtcSpl_FilterMAFastQ12(&data_in[kFilterOrder], data_out, B, | 423 WebRtcSpl_FilterMAFastQ12(&data_in[kFilterOrder], data_out, B, |
419 kFilterOrder + 1, 1); | 424 kFilterOrder + 1, 1); |
420 EXPECT_EQ(0, data_out[0]); | 425 EXPECT_EQ(0, data_out[0]); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
453 } | 458 } |
454 } | 459 } |
455 | 460 |
456 TEST_F(SplTest, DotProductWithScaleTest) { | 461 TEST_F(SplTest, DotProductWithScaleTest) { |
457 EXPECT_EQ(605362796, WebRtcSpl_DotProductWithScale(vector16, | 462 EXPECT_EQ(605362796, WebRtcSpl_DotProductWithScale(vector16, |
458 vector16, kVector16Size, 2)); | 463 vector16, kVector16Size, 2)); |
459 } | 464 } |
460 | 465 |
461 TEST_F(SplTest, CrossCorrelationTest) { | 466 TEST_F(SplTest, CrossCorrelationTest) { |
462 // Note the function arguments relation specificed by API. | 467 // Note the function arguments relation specificed by API. |
463 const int kCrossCorrelationDimension = 3; | 468 const size_t kCrossCorrelationDimension = 3; |
464 const int kShift = 2; | 469 const int kShift = 2; |
465 const int kStep = 1; | 470 const int kStep = 1; |
466 const int kSeqDimension = 6; | 471 const size_t kSeqDimension = 6; |
467 | 472 |
468 const int16_t kVector16[kVector16Size] = {1, 4323, 1963, | 473 const int16_t kVector16[kVector16Size] = {1, 4323, 1963, |
469 WEBRTC_SPL_WORD16_MAX, WEBRTC_SPL_WORD16_MIN + 5, -3333, -876, 8483, 142}; | 474 WEBRTC_SPL_WORD16_MAX, WEBRTC_SPL_WORD16_MIN + 5, -3333, -876, 8483, 142}; |
470 int32_t vector32[kCrossCorrelationDimension] = {0}; | 475 int32_t vector32[kCrossCorrelationDimension] = {0}; |
471 | 476 |
472 WebRtcSpl_CrossCorrelation(vector32, vector16, kVector16, kSeqDimension, | 477 WebRtcSpl_CrossCorrelation(vector32, vector16, kVector16, kSeqDimension, |
473 kCrossCorrelationDimension, kShift, kStep); | 478 kCrossCorrelationDimension, kShift, kStep); |
474 | 479 |
475 // WebRtcSpl_CrossCorrelationC() and WebRtcSpl_CrossCorrelationNeon() | 480 // WebRtcSpl_CrossCorrelationC() and WebRtcSpl_CrossCorrelationNeon() |
476 // are not bit-exact. | 481 // are not bit-exact. |
477 const int32_t kExpected[kCrossCorrelationDimension] = | 482 const int32_t kExpected[kCrossCorrelationDimension] = |
478 {-266947903, -15579555, -171282001}; | 483 {-266947903, -15579555, -171282001}; |
479 const int32_t* expected = kExpected; | 484 const int32_t* expected = kExpected; |
480 #if !defined(MIPS32_LE) | 485 #if !defined(MIPS32_LE) |
481 const int32_t kExpectedNeon[kCrossCorrelationDimension] = | 486 const int32_t kExpectedNeon[kCrossCorrelationDimension] = |
482 {-266947901, -15579553, -171281999}; | 487 {-266947901, -15579553, -171281999}; |
483 if (WebRtcSpl_CrossCorrelation != WebRtcSpl_CrossCorrelationC) { | 488 if (WebRtcSpl_CrossCorrelation != WebRtcSpl_CrossCorrelationC) { |
484 expected = kExpectedNeon; | 489 expected = kExpectedNeon; |
485 } | 490 } |
486 #endif | 491 #endif |
487 for (int i = 0; i < kCrossCorrelationDimension; ++i) { | 492 for (size_t i = 0; i < kCrossCorrelationDimension; ++i) { |
488 EXPECT_EQ(expected[i], vector32[i]); | 493 EXPECT_EQ(expected[i], vector32[i]); |
489 } | 494 } |
490 } | 495 } |
491 | 496 |
492 TEST_F(SplTest, AutoCorrelationTest) { | 497 TEST_F(SplTest, AutoCorrelationTest) { |
493 int scale = 0; | 498 int scale = 0; |
494 int32_t vector32[kVector16Size]; | 499 int32_t vector32[kVector16Size]; |
495 const int32_t expected[kVector16Size] = {302681398, 14223410, -121705063, | 500 const int32_t expected[kVector16Size] = {302681398, 14223410, -121705063, |
496 -85221647, -17104971, 61806945, 6644603, -669329, 43}; | 501 -85221647, -17104971, 61806945, 6644603, -669329, 43}; |
497 | 502 |
498 EXPECT_EQ(-1, WebRtcSpl_AutoCorrelation(vector16, kVector16Size, | 503 EXPECT_EQ(-1, WebRtcSpl_AutoCorrelation(vector16, kVector16Size, |
499 kVector16Size + 1, vector32, &scale)); | 504 kVector16Size + 1, vector32, &scale)); |
500 EXPECT_EQ(kVector16Size, | 505 EXPECT_EQ(static_cast<int>(kVector16Size), |
501 WebRtcSpl_AutoCorrelation(vector16, kVector16Size, | 506 WebRtcSpl_AutoCorrelation(vector16, kVector16Size, |
502 kVector16Size - 1, vector32, &scale)); | 507 kVector16Size - 1, vector32, &scale)); |
503 EXPECT_EQ(3, scale); | 508 EXPECT_EQ(3, scale); |
504 for (int i = 0; i < kVector16Size; ++i) { | 509 for (size_t i = 0; i < kVector16Size; ++i) { |
505 EXPECT_EQ(expected[i], vector32[i]); | 510 EXPECT_EQ(expected[i], vector32[i]); |
506 } | 511 } |
507 } | 512 } |
508 | 513 |
509 TEST_F(SplTest, SignalProcessingTest) { | 514 TEST_F(SplTest, SignalProcessingTest) { |
510 const int kVectorSize = 4; | 515 const size_t kVectorSize = 4; |
511 int A[] = {1, 2, 33, 100}; | 516 int A[] = {1, 2, 33, 100}; |
512 const int16_t kHanning[4] = { 2399, 8192, 13985, 16384 }; | 517 const int16_t kHanning[4] = { 2399, 8192, 13985, 16384 }; |
513 int16_t b16[kVectorSize]; | 518 int16_t b16[kVectorSize]; |
514 | 519 |
515 int16_t bTmp16[kVectorSize]; | 520 int16_t bTmp16[kVectorSize]; |
516 | 521 |
517 int bScale = 0; | 522 int bScale = 0; |
518 | 523 |
519 for (int kk = 0; kk < kVectorSize; ++kk) { | 524 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
520 b16[kk] = A[kk]; | 525 b16[kk] = A[kk]; |
521 } | 526 } |
522 | 527 |
523 // TODO(bjornv): Activate the Reflection Coefficient tests when refactoring. | 528 // TODO(bjornv): Activate the Reflection Coefficient tests when refactoring. |
524 // WebRtcSpl_ReflCoefToLpc(b16, kVectorSize, bTmp16); | 529 // WebRtcSpl_ReflCoefToLpc(b16, kVectorSize, bTmp16); |
525 //// for (int kk = 0; kk < kVectorSize; ++kk) { | 530 //// for (int kk = 0; kk < kVectorSize; ++kk) { |
526 //// EXPECT_EQ(aTmp16[kk], bTmp16[kk]); | 531 //// EXPECT_EQ(aTmp16[kk], bTmp16[kk]); |
527 //// } | 532 //// } |
528 // WebRtcSpl_LpcToReflCoef(bTmp16, kVectorSize, b16); | 533 // WebRtcSpl_LpcToReflCoef(bTmp16, kVectorSize, b16); |
529 //// for (int kk = 0; kk < kVectorSize; ++kk) { | 534 //// for (int kk = 0; kk < kVectorSize; ++kk) { |
530 //// EXPECT_EQ(a16[kk], b16[kk]); | 535 //// EXPECT_EQ(a16[kk], b16[kk]); |
531 //// } | 536 //// } |
532 // WebRtcSpl_AutoCorrToReflCoef(b32, kVectorSize, bTmp16); | 537 // WebRtcSpl_AutoCorrToReflCoef(b32, kVectorSize, bTmp16); |
533 //// for (int kk = 0; kk < kVectorSize; ++kk) { | 538 //// for (int kk = 0; kk < kVectorSize; ++kk) { |
534 //// EXPECT_EQ(aTmp16[kk], bTmp16[kk]); | 539 //// EXPECT_EQ(aTmp16[kk], bTmp16[kk]); |
535 //// } | 540 //// } |
536 | 541 |
537 WebRtcSpl_GetHanningWindow(bTmp16, kVectorSize); | 542 WebRtcSpl_GetHanningWindow(bTmp16, kVectorSize); |
538 for (int kk = 0; kk < kVectorSize; ++kk) { | 543 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
539 EXPECT_EQ(kHanning[kk], bTmp16[kk]); | 544 EXPECT_EQ(kHanning[kk], bTmp16[kk]); |
540 } | 545 } |
541 | 546 |
542 for (int kk = 0; kk < kVectorSize; ++kk) { | 547 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
543 b16[kk] = A[kk]; | 548 b16[kk] = A[kk]; |
544 } | 549 } |
545 EXPECT_EQ(11094 , WebRtcSpl_Energy(b16, kVectorSize, &bScale)); | 550 EXPECT_EQ(11094 , WebRtcSpl_Energy(b16, kVectorSize, &bScale)); |
546 EXPECT_EQ(0, bScale); | 551 EXPECT_EQ(0, bScale); |
547 } | 552 } |
548 | 553 |
549 TEST_F(SplTest, FFTTest) { | 554 TEST_F(SplTest, FFTTest) { |
550 int16_t B[] = {1, 2, 33, 100, | 555 int16_t B[] = {1, 2, 33, 100, |
551 2, 3, 34, 101, | 556 2, 3, 34, 101, |
552 3, 4, 35, 102, | 557 3, 4, 35, 102, |
553 4, 5, 36, 103}; | 558 4, 5, 36, 103}; |
554 | 559 |
555 EXPECT_EQ(0, WebRtcSpl_ComplexFFT(B, 3, 1)); | 560 EXPECT_EQ(0, WebRtcSpl_ComplexFFT(B, 3, 1)); |
556 // for (int kk = 0; kk < 16; ++kk) { | 561 // for (int kk = 0; kk < 16; ++kk) { |
557 // EXPECT_EQ(A[kk], B[kk]); | 562 // EXPECT_EQ(A[kk], B[kk]); |
558 // } | 563 // } |
559 EXPECT_EQ(0, WebRtcSpl_ComplexIFFT(B, 3, 1)); | 564 EXPECT_EQ(0, WebRtcSpl_ComplexIFFT(B, 3, 1)); |
560 // for (int kk = 0; kk < 16; ++kk) { | 565 // for (int kk = 0; kk < 16; ++kk) { |
561 // EXPECT_EQ(A[kk], B[kk]); | 566 // EXPECT_EQ(A[kk], B[kk]); |
562 // } | 567 // } |
563 WebRtcSpl_ComplexBitReverse(B, 3); | 568 WebRtcSpl_ComplexBitReverse(B, 3); |
564 for (int kk = 0; kk < 16; ++kk) { | 569 for (int kk = 0; kk < 16; ++kk) { |
565 //EXPECT_EQ(A[kk], B[kk]); | 570 //EXPECT_EQ(A[kk], B[kk]); |
566 } | 571 } |
567 } | 572 } |
568 | 573 |
569 TEST_F(SplTest, Resample48WithSaturationTest) { | 574 TEST_F(SplTest, Resample48WithSaturationTest) { |
570 // The test resamples 3*kBlockSize number of samples to 2*kBlockSize number | 575 // The test resamples 3*kBlockSize number of samples to 2*kBlockSize number |
571 // of samples. | 576 // of samples. |
572 const int kBlockSize = 16; | 577 const size_t kBlockSize = 16; |
573 | 578 |
574 // Saturated input vector of 48 samples. | 579 // Saturated input vector of 48 samples. |
575 const int32_t kVectorSaturated[3 * kBlockSize + 7] = { | 580 const int32_t kVectorSaturated[3 * kBlockSize + 7] = { |
576 -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, | 581 -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, |
577 -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, | 582 -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, |
578 -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, | 583 -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, |
579 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, | 584 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, |
580 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, | 585 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, |
581 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, | 586 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, |
582 32767, 32767, 32767, 32767, 32767, 32767, 32767 | 587 32767, 32767, 32767, 32767, 32767, 32767, 32767 |
(...skipping 10 matching lines...) Expand all Loading... |
593 // Vector for storing output. | 598 // Vector for storing output. |
594 int32_t out_vector[2 * kBlockSize]; | 599 int32_t out_vector[2 * kBlockSize]; |
595 int16_t out_vector_w16[2 * kBlockSize]; | 600 int16_t out_vector_w16[2 * kBlockSize]; |
596 | 601 |
597 WebRtcSpl_Resample48khzTo32khz(kVectorSaturated, out_vector, kBlockSize); | 602 WebRtcSpl_Resample48khzTo32khz(kVectorSaturated, out_vector, kBlockSize); |
598 WebRtcSpl_VectorBitShiftW32ToW16(out_vector_w16, 2 * kBlockSize, out_vector, | 603 WebRtcSpl_VectorBitShiftW32ToW16(out_vector_w16, 2 * kBlockSize, out_vector, |
599 15); | 604 15); |
600 | 605 |
601 // Comparing output values against references. The values at position | 606 // Comparing output values against references. The values at position |
602 // 12-15 are skipped to account for the filter lag. | 607 // 12-15 are skipped to account for the filter lag. |
603 for (int i = 0; i < 12; ++i) { | 608 for (size_t i = 0; i < 12; ++i) { |
604 EXPECT_EQ(kRefValue32kHz1, out_vector[i]); | 609 EXPECT_EQ(kRefValue32kHz1, out_vector[i]); |
605 EXPECT_EQ(kRefValue16kHz1, out_vector_w16[i]); | 610 EXPECT_EQ(kRefValue16kHz1, out_vector_w16[i]); |
606 } | 611 } |
607 for (int i = 16; i < 2 * kBlockSize; ++i) { | 612 for (size_t i = 16; i < 2 * kBlockSize; ++i) { |
608 EXPECT_EQ(kRefValue32kHz2, out_vector[i]); | 613 EXPECT_EQ(kRefValue32kHz2, out_vector[i]); |
609 EXPECT_EQ(kRefValue16kHz2, out_vector_w16[i]); | 614 EXPECT_EQ(kRefValue16kHz2, out_vector_w16[i]); |
610 } | 615 } |
611 } | 616 } |
OLD | NEW |