/* * Copyright (c) 2019 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 "video/unique_timestamp_counter.h" #include "test/gtest.h" namespace webrtc { namespace { TEST(UniqueTimestampCounterTest, InitiallyZero) { UniqueTimestampCounter counter; EXPECT_EQ(counter.GetUniqueSeen(), 0); } TEST(UniqueTimestampCounterTest, CountsUniqueValues) { UniqueTimestampCounter counter; counter.Add(100); counter.Add(100); counter.Add(200); counter.Add(150); counter.Add(100); EXPECT_EQ(counter.GetUniqueSeen(), 3); } TEST(UniqueTimestampCounterTest, ForgetsOldValuesAfter1000NewValues) { const int kNumValues = 1500; const int kMaxHistory = 1000; const uint32_t value = 0xFFFFFFF0; UniqueTimestampCounter counter; for (int i = 0; i < kNumValues; ++i) { counter.Add(value + 10 * i); } ASSERT_EQ(counter.GetUniqueSeen(), kNumValues); // Slightly old values not affect number of seen unique values. for (int i = kNumValues - kMaxHistory; i < kNumValues; ++i) { counter.Add(value + 10 * i); } EXPECT_EQ(counter.GetUniqueSeen(), kNumValues); // Very old value will be treated as unique. counter.Add(value); EXPECT_EQ(counter.GetUniqueSeen(), kNumValues + 1); } } // namespace } // namespace webrtc