blob: 14b0573de92888eb6cc1511aed0ad8ac3b2e000f [file] [log] [blame]
Ilya Nikolaevskiy0beed5d2018-05-22 10:54:30 +02001/*
2 * Copyright 2018 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 "rtc_base/numerics/sample_counter.h"
12
Yves Gerey3e707812018-11-28 16:47:49 +010013#include <initializer_list>
Ilya Nikolaevskiy0beed5d2018-05-22 10:54:30 +020014
15#include "test/gmock.h"
16#include "test/gtest.h"
17
Mirko Bonadei6a489f22019-04-09 15:11:12 +020018using ::testing::Eq;
Ilya Nikolaevskiy0beed5d2018-05-22 10:54:30 +020019
20namespace rtc {
21
22TEST(SampleCounterTest, ProcessesNoSamples) {
23 constexpr int kMinSamples = 1;
24 SampleCounter counter;
Danil Chapovalov0a1d1892018-06-21 11:48:25 +020025 EXPECT_THAT(counter.Avg(kMinSamples), Eq(absl::nullopt));
Danil Chapovalov0a1d1892018-06-21 11:48:25 +020026 EXPECT_THAT(counter.Max(), Eq(absl::nullopt));
Ilya Nikolaevskiy0beed5d2018-05-22 10:54:30 +020027}
28
29TEST(SampleCounterTest, NotEnoughSamples) {
30 constexpr int kMinSamples = 6;
31 SampleCounter counter;
32 for (int value : {1, 2, 3, 4, 5}) {
33 counter.Add(value);
34 }
Danil Chapovalov0a1d1892018-06-21 11:48:25 +020035 EXPECT_THAT(counter.Avg(kMinSamples), Eq(absl::nullopt));
Sergey Silkin02371062019-01-31 16:45:42 +010036 EXPECT_THAT(counter.Sum(kMinSamples), Eq(absl::nullopt));
Ilya Nikolaevskiy0beed5d2018-05-22 10:54:30 +020037 EXPECT_THAT(counter.Max(), Eq(5));
38}
39
40TEST(SampleCounterTest, EnoughSamples) {
41 constexpr int kMinSamples = 5;
42 SampleCounter counter;
43 for (int value : {1, 2, 3, 4, 5}) {
44 counter.Add(value);
45 }
46 EXPECT_THAT(counter.Avg(kMinSamples), Eq(3));
Sergey Silkin02371062019-01-31 16:45:42 +010047 EXPECT_THAT(counter.Sum(kMinSamples), Eq(15));
Ilya Nikolaevskiy0beed5d2018-05-22 10:54:30 +020048 EXPECT_THAT(counter.Max(), Eq(5));
49}
50
Ilya Nikolaevskiy8c688452018-09-11 13:46:22 +020051TEST(SampleCounterTest, ComputesVariance) {
52 constexpr int kMinSamples = 5;
53 SampleCounterWithVariance counter;
54 for (int value : {1, 2, 3, 4, 5}) {
55 counter.Add(value);
56 }
57 EXPECT_THAT(counter.Variance(kMinSamples), Eq(2));
58}
59
60TEST(SampleCounterTest, AggregatesTwoCounters) {
61 constexpr int kMinSamples = 5;
62 SampleCounterWithVariance counter1;
63 for (int value : {1, 2, 3}) {
64 counter1.Add(value);
65 }
66 SampleCounterWithVariance counter2;
67 for (int value : {4, 5}) {
68 counter2.Add(value);
69 }
70 // Before aggregation there is not enough samples.
71 EXPECT_THAT(counter1.Avg(kMinSamples), Eq(absl::nullopt));
72 EXPECT_THAT(counter1.Variance(kMinSamples), Eq(absl::nullopt));
73 // Aggregate counter2 in counter1.
74 counter1.Add(counter2);
75 EXPECT_THAT(counter1.Avg(kMinSamples), Eq(3));
76 EXPECT_THAT(counter1.Max(), Eq(5));
77 EXPECT_THAT(counter1.Variance(kMinSamples), Eq(2));
78}
79
Ilya Nikolaevskiy0beed5d2018-05-22 10:54:30 +020080} // namespace rtc