1c55a96383497a772a307b346368133960b02ad03Eric Laurent/* 2c55a96383497a772a307b346368133960b02ad03Eric Laurent * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3c55a96383497a772a307b346368133960b02ad03Eric Laurent * 4c55a96383497a772a307b346368133960b02ad03Eric Laurent * Use of this source code is governed by a BSD-style license 5c55a96383497a772a307b346368133960b02ad03Eric Laurent * that can be found in the LICENSE file in the root of the source 6c55a96383497a772a307b346368133960b02ad03Eric Laurent * tree. An additional intellectual property rights grant can be found 7c55a96383497a772a307b346368133960b02ad03Eric Laurent * in the file PATENTS. All contributing project authors may 8c55a96383497a772a307b346368133960b02ad03Eric Laurent * be found in the AUTHORS file in the root of the source tree. 9c55a96383497a772a307b346368133960b02ad03Eric Laurent */ 10c55a96383497a772a307b346368133960b02ad03Eric Laurent 11c55a96383497a772a307b346368133960b02ad03Eric Laurent#include "signal_processing_library.h" 12c55a96383497a772a307b346368133960b02ad03Eric Laurent#include "gtest/gtest.h" 13c55a96383497a772a307b346368133960b02ad03Eric Laurent 14c55a96383497a772a307b346368133960b02ad03Eric Laurentclass SplTest : public testing::Test { 15c55a96383497a772a307b346368133960b02ad03Eric Laurent protected: 16c55a96383497a772a307b346368133960b02ad03Eric Laurent virtual ~SplTest() { 17c55a96383497a772a307b346368133960b02ad03Eric Laurent } 18c55a96383497a772a307b346368133960b02ad03Eric Laurent void SetUp() { 19c55a96383497a772a307b346368133960b02ad03Eric Laurent } 20c55a96383497a772a307b346368133960b02ad03Eric Laurent void TearDown() { 21c55a96383497a772a307b346368133960b02ad03Eric Laurent } 22c55a96383497a772a307b346368133960b02ad03Eric Laurent}; 23c55a96383497a772a307b346368133960b02ad03Eric Laurent 24c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST_F(SplTest, MacroTest) { 25c55a96383497a772a307b346368133960b02ad03Eric Laurent // Macros with inputs. 26c55a96383497a772a307b346368133960b02ad03Eric Laurent int A = 10; 27c55a96383497a772a307b346368133960b02ad03Eric Laurent int B = 21; 28c55a96383497a772a307b346368133960b02ad03Eric Laurent int a = -3; 29c55a96383497a772a307b346368133960b02ad03Eric Laurent int b = WEBRTC_SPL_WORD32_MAX; 30c55a96383497a772a307b346368133960b02ad03Eric Laurent int nr = 2; 31c55a96383497a772a307b346368133960b02ad03Eric Laurent int d_ptr2 = 0; 32c55a96383497a772a307b346368133960b02ad03Eric Laurent 33c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(10, WEBRTC_SPL_MIN(A, B)); 34c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(21, WEBRTC_SPL_MAX(A, B)); 35c55a96383497a772a307b346368133960b02ad03Eric Laurent 36c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(3, WEBRTC_SPL_ABS_W16(a)); 37c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(3, WEBRTC_SPL_ABS_W32(a)); 38c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WEBRTC_SPL_GET_BYTE(&B, nr)); 39c55a96383497a772a307b346368133960b02ad03Eric Laurent WEBRTC_SPL_SET_BYTE(&d_ptr2, 1, nr); 40c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(65536, d_ptr2); 41c55a96383497a772a307b346368133960b02ad03Eric Laurent 42c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-63, WEBRTC_SPL_MUL(a, B)); 43c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-2147483645, WEBRTC_SPL_MUL(a, b)); 44c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-2147483645u, WEBRTC_SPL_UMUL(a, b)); 45c55a96383497a772a307b346368133960b02ad03Eric Laurent b = WEBRTC_SPL_WORD16_MAX >> 1; 46c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(65535u, WEBRTC_SPL_UMUL_RSFT16(a, b)); 47c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(1073627139u, WEBRTC_SPL_UMUL_16_16(a, b)); 48c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(16382u, WEBRTC_SPL_UMUL_16_16_RSFT16(a, b)); 49c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-49149u, WEBRTC_SPL_UMUL_32_16(a, b)); 50c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(65535u, WEBRTC_SPL_UMUL_32_16_RSFT16(a, b)); 51c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-49149, WEBRTC_SPL_MUL_16_U16(a, b)); 52c55a96383497a772a307b346368133960b02ad03Eric Laurent 53c55a96383497a772a307b346368133960b02ad03Eric Laurent a = b; 54c55a96383497a772a307b346368133960b02ad03Eric Laurent b = -3; 55c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-5461, WEBRTC_SPL_DIV(a, b)); 56c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0u, WEBRTC_SPL_UDIV(a, b)); 57c55a96383497a772a307b346368133960b02ad03Eric Laurent 58c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-1, WEBRTC_SPL_MUL_16_32_RSFT16(a, b)); 59c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-1, WEBRTC_SPL_MUL_16_32_RSFT15(a, b)); 60c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-3, WEBRTC_SPL_MUL_16_32_RSFT14(a, b)); 61c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-24, WEBRTC_SPL_MUL_16_32_RSFT11(a, b)); 62c55a96383497a772a307b346368133960b02ad03Eric Laurent 63c55a96383497a772a307b346368133960b02ad03Eric Laurent int a32 = WEBRTC_SPL_WORD32_MAX; 64c55a96383497a772a307b346368133960b02ad03Eric Laurent int a32a = (WEBRTC_SPL_WORD32_MAX >> 16); 65c55a96383497a772a307b346368133960b02ad03Eric Laurent int a32b = (WEBRTC_SPL_WORD32_MAX & 0x0000ffff); 66c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(5, WEBRTC_SPL_MUL_32_32_RSFT32(a32a, a32b, A)); 67c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(5, WEBRTC_SPL_MUL_32_32_RSFT32BI(a32, A)); 68c55a96383497a772a307b346368133960b02ad03Eric Laurent 69c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-49149, WEBRTC_SPL_MUL_16_16(a, b)); 70c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-12288, WEBRTC_SPL_MUL_16_16_RSFT(a, b, 2)); 71c55a96383497a772a307b346368133960b02ad03Eric Laurent 72c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-12287, WEBRTC_SPL_MUL_16_16_RSFT_WITH_ROUND(a, b, 2)); 73c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-1, WEBRTC_SPL_MUL_16_16_RSFT_WITH_FIXROUND(a, b)); 74c55a96383497a772a307b346368133960b02ad03Eric Laurent 75c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(16380, WEBRTC_SPL_ADD_SAT_W32(a, b)); 76c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(21, WEBRTC_SPL_SAT(a, A, B)); 77c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(21, WEBRTC_SPL_SAT(a, B, A)); 78c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-49149, WEBRTC_SPL_MUL_32_16(a, b)); 79c55a96383497a772a307b346368133960b02ad03Eric Laurent 80c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(16386, WEBRTC_SPL_SUB_SAT_W32(a, b)); 81c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(16380, WEBRTC_SPL_ADD_SAT_W16(a, b)); 82c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(16386, WEBRTC_SPL_SUB_SAT_W16(a, b)); 83c55a96383497a772a307b346368133960b02ad03Eric Laurent 84c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_TRUE(WEBRTC_SPL_IS_NEG(b)); 85c55a96383497a772a307b346368133960b02ad03Eric Laurent 86c55a96383497a772a307b346368133960b02ad03Eric Laurent // Shifting with negative numbers allowed 87c55a96383497a772a307b346368133960b02ad03Eric Laurent int shift_amount = 1; // Workaround compiler warning using variable here. 88c55a96383497a772a307b346368133960b02ad03Eric Laurent // Positive means left shift 89c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(32766, WEBRTC_SPL_SHIFT_W16(a, shift_amount)); 90c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(32766, WEBRTC_SPL_SHIFT_W32(a, shift_amount)); 91c55a96383497a772a307b346368133960b02ad03Eric Laurent 92c55a96383497a772a307b346368133960b02ad03Eric Laurent // Shifting with negative numbers not allowed 93c55a96383497a772a307b346368133960b02ad03Eric Laurent // We cannot do casting here due to signed/unsigned problem 94c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(8191, WEBRTC_SPL_RSHIFT_W16(a, 1)); 95c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(32766, WEBRTC_SPL_LSHIFT_W16(a, 1)); 96c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(8191, WEBRTC_SPL_RSHIFT_W32(a, 1)); 97c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(32766, WEBRTC_SPL_LSHIFT_W32(a, 1)); 98c55a96383497a772a307b346368133960b02ad03Eric Laurent 99c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(8191, WEBRTC_SPL_RSHIFT_U16(a, 1)); 100c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(32766, WEBRTC_SPL_LSHIFT_U16(a, 1)); 101c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(8191u, WEBRTC_SPL_RSHIFT_U32(a, 1)); 102c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(32766u, WEBRTC_SPL_LSHIFT_U32(a, 1)); 103c55a96383497a772a307b346368133960b02ad03Eric Laurent 104c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(1470, WEBRTC_SPL_RAND(A)); 105c55a96383497a772a307b346368133960b02ad03Eric Laurent} 106c55a96383497a772a307b346368133960b02ad03Eric Laurent 107c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST_F(SplTest, InlineTest) { 108c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 a = 121; 109c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 b = -17; 110c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word32 A = 111121; 111c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word32 B = -1711; 112c55a96383497a772a307b346368133960b02ad03Eric Laurent char bVersion[8]; 113c55a96383497a772a307b346368133960b02ad03Eric Laurent 114c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(104, WebRtcSpl_AddSatW16(a, b)); 115c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(138, WebRtcSpl_SubSatW16(a, b)); 116c55a96383497a772a307b346368133960b02ad03Eric Laurent 117c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(109410, WebRtcSpl_AddSatW32(A, B)); 118c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(112832, WebRtcSpl_SubSatW32(A, B)); 119c55a96383497a772a307b346368133960b02ad03Eric Laurent 120c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(17, WebRtcSpl_GetSizeInBits(A)); 121c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(14, WebRtcSpl_NormW32(A)); 122c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(4, WebRtcSpl_NormW16(B)); 123c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(15, WebRtcSpl_NormU32(A)); 124c55a96383497a772a307b346368133960b02ad03Eric Laurent 125c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcSpl_get_version(bVersion, 8)); 126c55a96383497a772a307b346368133960b02ad03Eric Laurent} 127c55a96383497a772a307b346368133960b02ad03Eric Laurent 128c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST_F(SplTest, MathOperationsTest) { 129c55a96383497a772a307b346368133960b02ad03Eric Laurent int A = 117; 130c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word32 num = 117; 131c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word32 den = -5; 132c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_UWord16 denU = 5; 133c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(10, WebRtcSpl_Sqrt(A)); 134c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(10, WebRtcSpl_SqrtFloor(A)); 135c55a96383497a772a307b346368133960b02ad03Eric Laurent 136c55a96383497a772a307b346368133960b02ad03Eric Laurent 137c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-91772805, WebRtcSpl_DivResultInQ31(den, num)); 138c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-23, WebRtcSpl_DivW32W16ResW16(num, (WebRtc_Word16)den)); 139c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-23, WebRtcSpl_DivW32W16(num, (WebRtc_Word16)den)); 140c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(23u, WebRtcSpl_DivU32U16(num, denU)); 141c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcSpl_DivW32HiLow(128, 0, 256)); 142c55a96383497a772a307b346368133960b02ad03Eric Laurent} 143c55a96383497a772a307b346368133960b02ad03Eric Laurent 144c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST_F(SplTest, BasicArrayOperationsTest) { 145c55a96383497a772a307b346368133960b02ad03Eric Laurent const int kVectorSize = 4; 146c55a96383497a772a307b346368133960b02ad03Eric Laurent int B[] = {4, 12, 133, 1100}; 147c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_UWord8 b8[kVectorSize]; 148c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 b16[kVectorSize]; 149c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word32 b32[kVectorSize]; 150c55a96383497a772a307b346368133960b02ad03Eric Laurent 151c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_UWord8 bTmp8[kVectorSize]; 152c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 bTmp16[kVectorSize]; 153c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word32 bTmp32[kVectorSize]; 154c55a96383497a772a307b346368133960b02ad03Eric Laurent 155c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_MemSetW16(b16, 3, kVectorSize); 156c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 157c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(3, b16[kk]); 158c55a96383497a772a307b346368133960b02ad03Eric Laurent } 159c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(kVectorSize, WebRtcSpl_ZerosArrayW16(b16, kVectorSize)); 160c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 161c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, b16[kk]); 162c55a96383497a772a307b346368133960b02ad03Eric Laurent } 163c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(kVectorSize, WebRtcSpl_OnesArrayW16(b16, kVectorSize)); 164c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 165c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(1, b16[kk]); 166c55a96383497a772a307b346368133960b02ad03Eric Laurent } 167c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_MemSetW32(b32, 3, kVectorSize); 168c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 169c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(3, b32[kk]); 170c55a96383497a772a307b346368133960b02ad03Eric Laurent } 171c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(kVectorSize, WebRtcSpl_ZerosArrayW32(b32, kVectorSize)); 172c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 173c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, b32[kk]); 174c55a96383497a772a307b346368133960b02ad03Eric Laurent } 175c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(kVectorSize, WebRtcSpl_OnesArrayW32(b32, kVectorSize)); 176c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 177c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(1, b32[kk]); 178c55a96383497a772a307b346368133960b02ad03Eric Laurent } 179c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 180c55a96383497a772a307b346368133960b02ad03Eric Laurent bTmp8[kk] = (WebRtc_Word8)kk; 181c55a96383497a772a307b346368133960b02ad03Eric Laurent bTmp16[kk] = (WebRtc_Word16)kk; 182c55a96383497a772a307b346368133960b02ad03Eric Laurent bTmp32[kk] = (WebRtc_Word32)kk; 183c55a96383497a772a307b346368133960b02ad03Eric Laurent } 184c55a96383497a772a307b346368133960b02ad03Eric Laurent WEBRTC_SPL_MEMCPY_W8(b8, bTmp8, kVectorSize); 185c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 186c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(b8[kk], bTmp8[kk]); 187c55a96383497a772a307b346368133960b02ad03Eric Laurent } 188c55a96383497a772a307b346368133960b02ad03Eric Laurent WEBRTC_SPL_MEMCPY_W16(b16, bTmp16, kVectorSize); 189c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 190c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(b16[kk], bTmp16[kk]); 191c55a96383497a772a307b346368133960b02ad03Eric Laurent } 192c55a96383497a772a307b346368133960b02ad03Eric Laurent// WEBRTC_SPL_MEMCPY_W32(b32, bTmp32, kVectorSize); 193c55a96383497a772a307b346368133960b02ad03Eric Laurent// for (int kk = 0; kk < kVectorSize; ++kk) { 194c55a96383497a772a307b346368133960b02ad03Eric Laurent// EXPECT_EQ(b32[kk], bTmp32[kk]); 195c55a96383497a772a307b346368133960b02ad03Eric Laurent// } 196c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(2, WebRtcSpl_CopyFromEndW16(b16, kVectorSize, 2, bTmp16)); 197c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < 2; ++kk) { 198c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(kk+2, bTmp16[kk]); 199c55a96383497a772a307b346368133960b02ad03Eric Laurent } 200c55a96383497a772a307b346368133960b02ad03Eric Laurent 201c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 202c55a96383497a772a307b346368133960b02ad03Eric Laurent b32[kk] = B[kk]; 203c55a96383497a772a307b346368133960b02ad03Eric Laurent b16[kk] = (WebRtc_Word16)B[kk]; 204c55a96383497a772a307b346368133960b02ad03Eric Laurent } 205c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_VectorBitShiftW32ToW16(bTmp16, kVectorSize, b32, 1); 206c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 207c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ((B[kk]>>1), bTmp16[kk]); 208c55a96383497a772a307b346368133960b02ad03Eric Laurent } 209c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_VectorBitShiftW16(bTmp16, kVectorSize, b16, 1); 210c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 211c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ((B[kk]>>1), bTmp16[kk]); 212c55a96383497a772a307b346368133960b02ad03Eric Laurent } 213c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_VectorBitShiftW32(bTmp32, kVectorSize, b32, 1); 214c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 215c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ((B[kk]>>1), bTmp32[kk]); 216c55a96383497a772a307b346368133960b02ad03Eric Laurent } 217c55a96383497a772a307b346368133960b02ad03Eric Laurent 218c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_MemCpyReversedOrder(&bTmp16[3], b16, kVectorSize); 219c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 220c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(b16[3-kk], bTmp16[kk]); 221c55a96383497a772a307b346368133960b02ad03Eric Laurent } 222c55a96383497a772a307b346368133960b02ad03Eric Laurent} 223c55a96383497a772a307b346368133960b02ad03Eric Laurent 224c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST_F(SplTest, MinMaxOperationsTest) { 225c55a96383497a772a307b346368133960b02ad03Eric Laurent const int kVectorSize = 4; 226c55a96383497a772a307b346368133960b02ad03Eric Laurent int B[] = {4, 12, 133, -1100}; 227c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 b16[kVectorSize]; 228c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word32 b32[kVectorSize]; 229c55a96383497a772a307b346368133960b02ad03Eric Laurent 230c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 231c55a96383497a772a307b346368133960b02ad03Eric Laurent b16[kk] = B[kk]; 232c55a96383497a772a307b346368133960b02ad03Eric Laurent b32[kk] = B[kk]; 233c55a96383497a772a307b346368133960b02ad03Eric Laurent } 234c55a96383497a772a307b346368133960b02ad03Eric Laurent 235c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(1100, WebRtcSpl_MaxAbsValueW16(b16, kVectorSize)); 236c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(1100, WebRtcSpl_MaxAbsValueW32(b32, kVectorSize)); 237c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(133, WebRtcSpl_MaxValueW16(b16, kVectorSize)); 238c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(133, WebRtcSpl_MaxValueW32(b32, kVectorSize)); 239c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(3, WebRtcSpl_MaxAbsIndexW16(b16, kVectorSize)); 240c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(2, WebRtcSpl_MaxIndexW16(b16, kVectorSize)); 241c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(2, WebRtcSpl_MaxIndexW32(b32, kVectorSize)); 242c55a96383497a772a307b346368133960b02ad03Eric Laurent 243c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-1100, WebRtcSpl_MinValueW16(b16, kVectorSize)); 244c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-1100, WebRtcSpl_MinValueW32(b32, kVectorSize)); 245c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(3, WebRtcSpl_MinIndexW16(b16, kVectorSize)); 246c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(3, WebRtcSpl_MinIndexW32(b32, kVectorSize)); 247c55a96383497a772a307b346368133960b02ad03Eric Laurent 248c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcSpl_GetScalingSquare(b16, kVectorSize, 1)); 249c55a96383497a772a307b346368133960b02ad03Eric Laurent} 250c55a96383497a772a307b346368133960b02ad03Eric Laurent 251c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST_F(SplTest, VectorOperationsTest) { 252c55a96383497a772a307b346368133960b02ad03Eric Laurent const int kVectorSize = 4; 253c55a96383497a772a307b346368133960b02ad03Eric Laurent int B[] = {4, 12, 133, 1100}; 254c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 a16[kVectorSize]; 255c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 b16[kVectorSize]; 256c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word32 b32[kVectorSize]; 257c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 bTmp16[kVectorSize]; 258c55a96383497a772a307b346368133960b02ad03Eric Laurent 259c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 260c55a96383497a772a307b346368133960b02ad03Eric Laurent a16[kk] = B[kk]; 261c55a96383497a772a307b346368133960b02ad03Eric Laurent b16[kk] = B[kk]; 262c55a96383497a772a307b346368133960b02ad03Eric Laurent } 263c55a96383497a772a307b346368133960b02ad03Eric Laurent 264c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_AffineTransformVector(bTmp16, b16, 3, 7, 2, kVectorSize); 265c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 266c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ((B[kk]*3+7)>>2, bTmp16[kk]); 267c55a96383497a772a307b346368133960b02ad03Eric Laurent } 268c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_ScaleAndAddVectorsWithRound(b16, 3, b16, 2, 2, bTmp16, kVectorSize); 269c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 270c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ((B[kk]*3+B[kk]*2+2)>>2, bTmp16[kk]); 271c55a96383497a772a307b346368133960b02ad03Eric Laurent } 272c55a96383497a772a307b346368133960b02ad03Eric Laurent 273c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_AddAffineVectorToVector(bTmp16, b16, 3, 7, 2, kVectorSize); 274c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 275c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(((B[kk]*3+B[kk]*2+2)>>2)+((b16[kk]*3+7)>>2), bTmp16[kk]); 276c55a96383497a772a307b346368133960b02ad03Eric Laurent } 277c55a96383497a772a307b346368133960b02ad03Eric Laurent 278c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_CrossCorrelation(b32, b16, bTmp16, kVectorSize, 2, 2, 0); 279c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < 2; ++kk) { 280c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(614236, b32[kk]); 281c55a96383497a772a307b346368133960b02ad03Eric Laurent } 282c55a96383497a772a307b346368133960b02ad03Eric Laurent// EXPECT_EQ(, WebRtcSpl_DotProduct(b16, bTmp16, 4)); 283c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(306962, WebRtcSpl_DotProductWithScale(b16, b16, kVectorSize, 2)); 284c55a96383497a772a307b346368133960b02ad03Eric Laurent 285c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_ScaleVector(b16, bTmp16, 13, kVectorSize, 2); 286c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 287c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ((b16[kk]*13)>>2, bTmp16[kk]); 288c55a96383497a772a307b346368133960b02ad03Eric Laurent } 289c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_ScaleVectorWithSat(b16, bTmp16, 13, kVectorSize, 2); 290c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 291c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ((b16[kk]*13)>>2, bTmp16[kk]); 292c55a96383497a772a307b346368133960b02ad03Eric Laurent } 293c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_ScaleAndAddVectors(a16, 13, 2, b16, 7, 2, bTmp16, kVectorSize); 294c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 295c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(((a16[kk]*13)>>2)+((b16[kk]*7)>>2), bTmp16[kk]); 296c55a96383497a772a307b346368133960b02ad03Eric Laurent } 297c55a96383497a772a307b346368133960b02ad03Eric Laurent 298c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_AddVectorsAndShift(bTmp16, a16, b16, kVectorSize, 2); 299c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 300c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(B[kk] >> 1, bTmp16[kk]); 301c55a96383497a772a307b346368133960b02ad03Eric Laurent } 302c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_ReverseOrderMultArrayElements(bTmp16, a16, &b16[3], kVectorSize, 2); 303c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 304c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ((a16[kk]*b16[3-kk])>>2, bTmp16[kk]); 305c55a96383497a772a307b346368133960b02ad03Eric Laurent } 306c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_ElementwiseVectorMult(bTmp16, a16, b16, kVectorSize, 6); 307c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 308c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ((a16[kk]*b16[kk])>>6, bTmp16[kk]); 309c55a96383497a772a307b346368133960b02ad03Eric Laurent } 310c55a96383497a772a307b346368133960b02ad03Eric Laurent 311c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_SqrtOfOneMinusXSquared(b16, kVectorSize, bTmp16); 312c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize - 1; ++kk) { 313c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(32767, bTmp16[kk]); 314c55a96383497a772a307b346368133960b02ad03Eric Laurent } 315c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(32749, bTmp16[kVectorSize - 1]); 316c55a96383497a772a307b346368133960b02ad03Eric Laurent} 317c55a96383497a772a307b346368133960b02ad03Eric Laurent 318c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST_F(SplTest, EstimatorsTest) { 319c55a96383497a772a307b346368133960b02ad03Eric Laurent const int kVectorSize = 4; 320c55a96383497a772a307b346368133960b02ad03Eric Laurent int B[] = {4, 12, 133, 1100}; 321c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 b16[kVectorSize]; 322c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word32 b32[kVectorSize]; 323c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 bTmp16[kVectorSize]; 324c55a96383497a772a307b346368133960b02ad03Eric Laurent 325c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 326c55a96383497a772a307b346368133960b02ad03Eric Laurent b16[kk] = B[kk]; 327c55a96383497a772a307b346368133960b02ad03Eric Laurent b32[kk] = B[kk]; 328c55a96383497a772a307b346368133960b02ad03Eric Laurent } 329c55a96383497a772a307b346368133960b02ad03Eric Laurent 330c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcSpl_LevinsonDurbin(b32, b16, bTmp16, 2)); 331c55a96383497a772a307b346368133960b02ad03Eric Laurent} 332c55a96383497a772a307b346368133960b02ad03Eric Laurent 333c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST_F(SplTest, FilterTest) { 334c55a96383497a772a307b346368133960b02ad03Eric Laurent const int kVectorSize = 4; 335c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 A[] = {1, 2, 33, 100}; 336c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 A5[] = {1, 2, 33, 100, -5}; 337c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 B[] = {4, 12, 133, 110}; 338c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 b16[kVectorSize]; 339c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 bTmp16[kVectorSize]; 340c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 bTmp16Low[kVectorSize]; 341c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 bState[kVectorSize]; 342c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 bStateLow[kVectorSize]; 343c55a96383497a772a307b346368133960b02ad03Eric Laurent 344c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_ZerosArrayW16(bState, kVectorSize); 345c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_ZerosArrayW16(bStateLow, kVectorSize); 346c55a96383497a772a307b346368133960b02ad03Eric Laurent 347c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 348c55a96383497a772a307b346368133960b02ad03Eric Laurent b16[kk] = A[kk]; 349c55a96383497a772a307b346368133960b02ad03Eric Laurent } 350c55a96383497a772a307b346368133960b02ad03Eric Laurent 351c55a96383497a772a307b346368133960b02ad03Eric Laurent // MA filters 352c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_FilterMAFastQ12(b16, bTmp16, B, kVectorSize, kVectorSize); 353c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 354c55a96383497a772a307b346368133960b02ad03Eric Laurent //EXPECT_EQ(aTmp16[kk], bTmp16[kk]); 355c55a96383497a772a307b346368133960b02ad03Eric Laurent } 356c55a96383497a772a307b346368133960b02ad03Eric Laurent // AR filters 357c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_FilterARFastQ12(b16, bTmp16, A, kVectorSize, kVectorSize); 358c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 359c55a96383497a772a307b346368133960b02ad03Eric Laurent// EXPECT_EQ(aTmp16[kk], bTmp16[kk]); 360c55a96383497a772a307b346368133960b02ad03Eric Laurent } 361c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(kVectorSize, WebRtcSpl_FilterAR(A5, 362c55a96383497a772a307b346368133960b02ad03Eric Laurent 5, 363c55a96383497a772a307b346368133960b02ad03Eric Laurent b16, 364c55a96383497a772a307b346368133960b02ad03Eric Laurent kVectorSize, 365c55a96383497a772a307b346368133960b02ad03Eric Laurent bState, 366c55a96383497a772a307b346368133960b02ad03Eric Laurent kVectorSize, 367c55a96383497a772a307b346368133960b02ad03Eric Laurent bStateLow, 368c55a96383497a772a307b346368133960b02ad03Eric Laurent kVectorSize, 369c55a96383497a772a307b346368133960b02ad03Eric Laurent bTmp16, 370c55a96383497a772a307b346368133960b02ad03Eric Laurent bTmp16Low, 371c55a96383497a772a307b346368133960b02ad03Eric Laurent kVectorSize)); 372c55a96383497a772a307b346368133960b02ad03Eric Laurent} 373c55a96383497a772a307b346368133960b02ad03Eric Laurent 374c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST_F(SplTest, RandTest) { 375c55a96383497a772a307b346368133960b02ad03Eric Laurent const int kVectorSize = 4; 376c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 BU[] = {3653, 12446, 8525, 30691}; 377c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 b16[kVectorSize]; 378c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_UWord32 bSeed = 100000; 379c55a96383497a772a307b346368133960b02ad03Eric Laurent 380c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(464449057u, WebRtcSpl_IncreaseSeed(&bSeed)); 381c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(31565, WebRtcSpl_RandU(&bSeed)); 382c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(-9786, WebRtcSpl_RandN(&bSeed)); 383c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(kVectorSize, WebRtcSpl_RandUArray(b16, kVectorSize, &bSeed)); 384c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 385c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(BU[kk], b16[kk]); 386c55a96383497a772a307b346368133960b02ad03Eric Laurent } 387c55a96383497a772a307b346368133960b02ad03Eric Laurent} 388c55a96383497a772a307b346368133960b02ad03Eric Laurent 389c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST_F(SplTest, SignalProcessingTest) { 390c55a96383497a772a307b346368133960b02ad03Eric Laurent const int kVectorSize = 4; 391c55a96383497a772a307b346368133960b02ad03Eric Laurent int A[] = {1, 2, 33, 100}; 392c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 b16[kVectorSize]; 393c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word32 b32[kVectorSize]; 394c55a96383497a772a307b346368133960b02ad03Eric Laurent 395c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 bTmp16[kVectorSize]; 396c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word32 bTmp32[kVectorSize]; 397c55a96383497a772a307b346368133960b02ad03Eric Laurent 398c55a96383497a772a307b346368133960b02ad03Eric Laurent int bScale = 0; 399c55a96383497a772a307b346368133960b02ad03Eric Laurent 400c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 401c55a96383497a772a307b346368133960b02ad03Eric Laurent b16[kk] = A[kk]; 402c55a96383497a772a307b346368133960b02ad03Eric Laurent b32[kk] = A[kk]; 403c55a96383497a772a307b346368133960b02ad03Eric Laurent } 404c55a96383497a772a307b346368133960b02ad03Eric Laurent 405c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(2, WebRtcSpl_AutoCorrelation(b16, kVectorSize, 1, bTmp32, &bScale)); 406c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_ReflCoefToLpc(b16, kVectorSize, bTmp16); 407c55a96383497a772a307b346368133960b02ad03Eric Laurent// for (int kk = 0; kk < kVectorSize; ++kk) { 408c55a96383497a772a307b346368133960b02ad03Eric Laurent// EXPECT_EQ(aTmp16[kk], bTmp16[kk]); 409c55a96383497a772a307b346368133960b02ad03Eric Laurent// } 410c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_LpcToReflCoef(bTmp16, kVectorSize, b16); 411c55a96383497a772a307b346368133960b02ad03Eric Laurent// for (int kk = 0; kk < kVectorSize; ++kk) { 412c55a96383497a772a307b346368133960b02ad03Eric Laurent// EXPECT_EQ(a16[kk], b16[kk]); 413c55a96383497a772a307b346368133960b02ad03Eric Laurent// } 414c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_AutoCorrToReflCoef(b32, kVectorSize, bTmp16); 415c55a96383497a772a307b346368133960b02ad03Eric Laurent// for (int kk = 0; kk < kVectorSize; ++kk) { 416c55a96383497a772a307b346368133960b02ad03Eric Laurent// EXPECT_EQ(aTmp16[kk], bTmp16[kk]); 417c55a96383497a772a307b346368133960b02ad03Eric Laurent// } 418c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_GetHanningWindow(bTmp16, kVectorSize); 419c55a96383497a772a307b346368133960b02ad03Eric Laurent// for (int kk = 0; kk < kVectorSize; ++kk) { 420c55a96383497a772a307b346368133960b02ad03Eric Laurent// EXPECT_EQ(aTmp16[kk], bTmp16[kk]); 421c55a96383497a772a307b346368133960b02ad03Eric Laurent// } 422c55a96383497a772a307b346368133960b02ad03Eric Laurent 423c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < kVectorSize; ++kk) { 424c55a96383497a772a307b346368133960b02ad03Eric Laurent b16[kk] = A[kk]; 425c55a96383497a772a307b346368133960b02ad03Eric Laurent } 426c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(11094 , WebRtcSpl_Energy(b16, kVectorSize, &bScale)); 427c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, bScale); 428c55a96383497a772a307b346368133960b02ad03Eric Laurent} 429c55a96383497a772a307b346368133960b02ad03Eric Laurent 430c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST_F(SplTest, FFTTest) { 431c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_Word16 B[] = {1, 2, 33, 100, 432c55a96383497a772a307b346368133960b02ad03Eric Laurent 2, 3, 34, 101, 433c55a96383497a772a307b346368133960b02ad03Eric Laurent 3, 4, 35, 102, 434c55a96383497a772a307b346368133960b02ad03Eric Laurent 4, 5, 36, 103}; 435c55a96383497a772a307b346368133960b02ad03Eric Laurent 436c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcSpl_ComplexFFT(B, 3, 1)); 437c55a96383497a772a307b346368133960b02ad03Eric Laurent// for (int kk = 0; kk < 16; ++kk) { 438c55a96383497a772a307b346368133960b02ad03Eric Laurent// EXPECT_EQ(A[kk], B[kk]); 439c55a96383497a772a307b346368133960b02ad03Eric Laurent// } 440c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcSpl_ComplexIFFT(B, 3, 1)); 441c55a96383497a772a307b346368133960b02ad03Eric Laurent// for (int kk = 0; kk < 16; ++kk) { 442c55a96383497a772a307b346368133960b02ad03Eric Laurent// EXPECT_EQ(A[kk], B[kk]); 443c55a96383497a772a307b346368133960b02ad03Eric Laurent// } 444c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtcSpl_ComplexBitReverse(B, 3); 445c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int kk = 0; kk < 16; ++kk) { 446c55a96383497a772a307b346368133960b02ad03Eric Laurent //EXPECT_EQ(A[kk], B[kk]); 447c55a96383497a772a307b346368133960b02ad03Eric Laurent } 448c55a96383497a772a307b346368133960b02ad03Eric Laurent} 449