1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 *
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
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "webrtc/modules/audio_processing/transient/dyadic_decimator.h"
12
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace webrtc {
16
17 static const size_t kEvenBufferLength = 6;
18 static const size_t kOddBufferLength = 5;
19 static const size_t kOutBufferLength = 3;
20
21 int16_t const test_buffer_even_len[] = {0, 1, 2, 3, 4, 5};
22 int16_t const test_buffer_odd_len[] = {0, 1, 2, 3, 4};
23 int16_t test_buffer_out[kOutBufferLength];
24
TEST(DyadicDecimatorTest,GetOutLengthToDyadicDecimate)25 TEST(DyadicDecimatorTest, GetOutLengthToDyadicDecimate) {
26 EXPECT_EQ(3u, GetOutLengthToDyadicDecimate(6, false));
27 EXPECT_EQ(3u, GetOutLengthToDyadicDecimate(6, true));
28 EXPECT_EQ(3u, GetOutLengthToDyadicDecimate(5, false));
29 EXPECT_EQ(2u, GetOutLengthToDyadicDecimate(5, true));
30 }
31
32
TEST(DyadicDecimatorTest,DyadicDecimateErrorValues)33 TEST(DyadicDecimatorTest, DyadicDecimateErrorValues) {
34 size_t out_samples = 0;
35
36 out_samples = DyadicDecimate(static_cast<int16_t*>(NULL),
37 kEvenBufferLength,
38 false, // Even sequence.
39 test_buffer_out,
40 kOutBufferLength);
41 EXPECT_EQ(0u, out_samples);
42
43 out_samples = DyadicDecimate(test_buffer_even_len,
44 kEvenBufferLength,
45 false, // Even sequence.
46 static_cast<int16_t*>(NULL),
47 kOutBufferLength);
48 EXPECT_EQ(0u, out_samples);
49
50 // Less than required |out_length|.
51 out_samples = DyadicDecimate(test_buffer_even_len,
52 kEvenBufferLength,
53 false, // Even sequence.
54 test_buffer_out,
55 2);
56 EXPECT_EQ(0u, out_samples);
57 }
58
TEST(DyadicDecimatorTest,DyadicDecimateEvenLengthEvenSequence)59 TEST(DyadicDecimatorTest, DyadicDecimateEvenLengthEvenSequence) {
60 size_t expected_out_samples =
61 GetOutLengthToDyadicDecimate(kEvenBufferLength, false);
62
63 size_t out_samples = DyadicDecimate(test_buffer_even_len,
64 kEvenBufferLength,
65 false, // Even sequence.
66 test_buffer_out,
67 kOutBufferLength);
68
69 EXPECT_EQ(expected_out_samples, out_samples);
70
71 EXPECT_EQ(0, test_buffer_out[0]);
72 EXPECT_EQ(2, test_buffer_out[1]);
73 EXPECT_EQ(4, test_buffer_out[2]);
74 }
75
TEST(DyadicDecimatorTest,DyadicDecimateEvenLengthOddSequence)76 TEST(DyadicDecimatorTest, DyadicDecimateEvenLengthOddSequence) {
77 size_t expected_out_samples =
78 GetOutLengthToDyadicDecimate(kEvenBufferLength, true);
79
80 size_t out_samples = DyadicDecimate(test_buffer_even_len,
81 kEvenBufferLength,
82 true, // Odd sequence.
83 test_buffer_out,
84 kOutBufferLength);
85
86 EXPECT_EQ(expected_out_samples, out_samples);
87
88 EXPECT_EQ(1, test_buffer_out[0]);
89 EXPECT_EQ(3, test_buffer_out[1]);
90 EXPECT_EQ(5, test_buffer_out[2]);
91 }
92
TEST(DyadicDecimatorTest,DyadicDecimateOddLengthEvenSequence)93 TEST(DyadicDecimatorTest, DyadicDecimateOddLengthEvenSequence) {
94 size_t expected_out_samples =
95 GetOutLengthToDyadicDecimate(kOddBufferLength, false);
96
97 size_t out_samples = DyadicDecimate(test_buffer_odd_len,
98 kOddBufferLength,
99 false, // Even sequence.
100 test_buffer_out,
101 kOutBufferLength);
102
103 EXPECT_EQ(expected_out_samples, out_samples);
104
105 EXPECT_EQ(0, test_buffer_out[0]);
106 EXPECT_EQ(2, test_buffer_out[1]);
107 EXPECT_EQ(4, test_buffer_out[2]);
108 }
109
TEST(DyadicDecimatorTest,DyadicDecimateOddLengthOddSequence)110 TEST(DyadicDecimatorTest, DyadicDecimateOddLengthOddSequence) {
111 size_t expected_out_samples =
112 GetOutLengthToDyadicDecimate(kOddBufferLength, true);
113
114 size_t out_samples = DyadicDecimate(test_buffer_odd_len,
115 kOddBufferLength,
116 true, // Odd sequence.
117 test_buffer_out,
118 kOutBufferLength);
119
120 EXPECT_EQ(expected_out_samples, out_samples);
121
122 EXPECT_EQ(1, test_buffer_out[0]);
123 EXPECT_EQ(3, test_buffer_out[1]);
124 }
125
126 } // namespace webrtc
127