| Index: webrtc/modules/video_coding/percentile_filter_unittest.cc
|
| diff --git a/webrtc/modules/video_coding/percentile_filter_unittest.cc b/webrtc/modules/video_coding/percentile_filter_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8029bdbe194a56ae290724246e4797ed68f00f0b
|
| --- /dev/null
|
| +++ b/webrtc/modules/video_coding/percentile_filter_unittest.cc
|
| @@ -0,0 +1,104 @@
|
| +/*
|
| + * Copyright 2016 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 <algorithm>
|
| +
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "webrtc/base/constructormagic.h"
|
| +#include "webrtc/modules/video_coding/percentile_filter.h"
|
| +
|
| +namespace webrtc {
|
| +
|
| +class PercentileFilterTest : public ::testing::TestWithParam<float> {
|
| + public:
|
| + PercentileFilterTest() : filter_(GetParam()) {
|
| + // Make sure the tests are deterministic by seeding with a constant.
|
| + srand(42);
|
| + }
|
| +
|
| + protected:
|
| + PercentileFilter filter_;
|
| +
|
| + private:
|
| + RTC_DISALLOW_COPY_AND_ASSIGN(PercentileFilterTest);
|
| +};
|
| +
|
| +INSTANTIATE_TEST_CASE_P(PercentileFilterTests,
|
| + PercentileFilterTest,
|
| + ::testing::Values(0.0f, 0.1f, 0.5f, 0.9f, 1.0f));
|
| +
|
| +TEST(PercentileFilterTest, MinFilter) {
|
| + PercentileFilter filter(0.0f);
|
| + filter.Insert(4);
|
| + EXPECT_EQ(4, filter.GetPercentileValue());
|
| + filter.Insert(3);
|
| + EXPECT_EQ(3, filter.GetPercentileValue());
|
| +}
|
| +
|
| +TEST(PercentileFilterTest, MaxFilter) {
|
| + PercentileFilter filter(1.0f);
|
| + filter.Insert(3);
|
| + EXPECT_EQ(3, filter.GetPercentileValue());
|
| + filter.Insert(4);
|
| + EXPECT_EQ(4, filter.GetPercentileValue());
|
| +}
|
| +
|
| +TEST_P(PercentileFilterTest, EmptyFilter) {
|
| + EXPECT_EQ(0, filter_.GetPercentileValue());
|
| + filter_.Insert(3);
|
| + filter_.Erase(3);
|
| + EXPECT_EQ(0, filter_.GetPercentileValue());
|
| +}
|
| +
|
| +TEST_P(PercentileFilterTest, EraseNonExistingElement) {
|
| + filter_.Erase(3);
|
| + EXPECT_EQ(0, filter_.GetPercentileValue());
|
| + filter_.Insert(4);
|
| + filter_.Erase(3);
|
| + EXPECT_EQ(4, filter_.GetPercentileValue());
|
| +}
|
| +
|
| +TEST_P(PercentileFilterTest, DuplicateElements) {
|
| + filter_.Insert(3);
|
| + filter_.Insert(3);
|
| + filter_.Erase(3);
|
| + EXPECT_EQ(3, filter_.GetPercentileValue());
|
| +}
|
| +
|
| +TEST_P(PercentileFilterTest, InsertAndEraseTenValuesInRandomOrder) {
|
| + int64_t zero_to_nine[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
|
| + // The percentile value of the ten values above.
|
| + const int64_t expected_value = static_cast<int64_t>(GetParam() * 9);
|
| +
|
| + // Insert two sets of |zero_to_nine| in random order.
|
| + for (int i = 0; i < 2; ++i) {
|
| + std::random_shuffle(zero_to_nine, zero_to_nine + 10);
|
| + for (int64_t value : zero_to_nine)
|
| + filter_.Insert(value);
|
| + // After inserting a full set of |zero_to_nine|, the percentile should
|
| + // stay constant.
|
| + EXPECT_EQ(expected_value, filter_.GetPercentileValue());
|
| + }
|
| +
|
| + // Insert and erase sets of |zero_to_nine| in random order a few times.
|
| + for (int i = 0; i < 3; ++i) {
|
| + std::random_shuffle(zero_to_nine, zero_to_nine + 10);
|
| + for (int64_t value : zero_to_nine)
|
| + filter_.Erase(value);
|
| + EXPECT_EQ(expected_value, filter_.GetPercentileValue());
|
| +
|
| + std::random_shuffle(zero_to_nine, zero_to_nine + 10);
|
| + for (int64_t value : zero_to_nine)
|
| + filter_.Insert(value);
|
| + EXPECT_EQ(expected_value, filter_.GetPercentileValue());
|
| + }
|
| +}
|
| +
|
| +} // namespace webrtc
|
|
|