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