| /* | |
| * 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 |