| /* |
| * Copyright (c) 2021 The WebRTC project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #include "modules/audio_processing/agc2/saturation_protector_buffer.h" |
| |
| #include "test/gmock.h" |
| #include "test/gtest.h" |
| |
| namespace webrtc { |
| namespace { |
| |
| using ::testing::Eq; |
| using ::testing::Optional; |
| |
| TEST(GainController2SaturationProtectorBuffer, Init) { |
| SaturationProtectorBuffer b; |
| EXPECT_EQ(b.Size(), 0); |
| EXPECT_FALSE(b.Front().has_value()); |
| } |
| |
| TEST(GainController2SaturationProtectorBuffer, PushBack) { |
| SaturationProtectorBuffer b; |
| constexpr float kValue = 123.0f; |
| b.PushBack(kValue); |
| EXPECT_EQ(b.Size(), 1); |
| EXPECT_THAT(b.Front(), Optional(Eq(kValue))); |
| } |
| |
| TEST(GainController2SaturationProtectorBuffer, Reset) { |
| SaturationProtectorBuffer b; |
| b.PushBack(123.0f); |
| b.Reset(); |
| EXPECT_EQ(b.Size(), 0); |
| EXPECT_FALSE(b.Front().has_value()); |
| } |
| |
| // Checks that the front value does not change until the ring buffer gets full. |
| TEST(GainController2SaturationProtectorBuffer, FrontUntilBufferIsFull) { |
| SaturationProtectorBuffer b; |
| constexpr float kValue = 123.0f; |
| b.PushBack(kValue); |
| for (int i = 1; i < b.Capacity(); ++i) { |
| SCOPED_TRACE(i); |
| EXPECT_THAT(b.Front(), Optional(Eq(kValue))); |
| b.PushBack(kValue + i); |
| } |
| } |
| |
| // Checks that when the buffer is full it behaves as a shift register. |
| TEST(GainController2SaturationProtectorBuffer, FrontIsDelayed) { |
| SaturationProtectorBuffer b; |
| // Fill the buffer. |
| for (int i = 0; i < b.Capacity(); ++i) { |
| b.PushBack(i); |
| } |
| // The ring buffer should now behave as a shift register with a delay equal to |
| // its capacity. |
| for (int i = b.Capacity(); i < 2 * b.Capacity() + 1; ++i) { |
| SCOPED_TRACE(i); |
| EXPECT_THAT(b.Front(), Optional(Eq(i - b.Capacity()))); |
| b.PushBack(i); |
| } |
| } |
| |
| } // namespace |
| } // namespace webrtc |