1*635a8641SAndroid Build Coastguard Worker // Copyright (c) 2017 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker
5*635a8641SAndroid Build Coastguard Worker #include "base/metrics/histogram_samples.h"
6*635a8641SAndroid Build Coastguard Worker
7*635a8641SAndroid Build Coastguard Worker #include <limits>
8*635a8641SAndroid Build Coastguard Worker
9*635a8641SAndroid Build Coastguard Worker #include "base/test/gtest_util.h"
10*635a8641SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
11*635a8641SAndroid Build Coastguard Worker
12*635a8641SAndroid Build Coastguard Worker namespace base {
13*635a8641SAndroid Build Coastguard Worker
14*635a8641SAndroid Build Coastguard Worker using SingleSample = HistogramSamples::SingleSample;
15*635a8641SAndroid Build Coastguard Worker using AtomicSingleSample = HistogramSamples::AtomicSingleSample;
16*635a8641SAndroid Build Coastguard Worker
TEST(SingleSampleTest,Load)17*635a8641SAndroid Build Coastguard Worker TEST(SingleSampleTest, Load) {
18*635a8641SAndroid Build Coastguard Worker AtomicSingleSample sample;
19*635a8641SAndroid Build Coastguard Worker ASSERT_TRUE(sample.Accumulate(9, 1));
20*635a8641SAndroid Build Coastguard Worker
21*635a8641SAndroid Build Coastguard Worker SingleSample s = sample.Load();
22*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(9U, s.bucket);
23*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(1U, s.count);
24*635a8641SAndroid Build Coastguard Worker
25*635a8641SAndroid Build Coastguard Worker s = sample.Load();
26*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(9U, s.bucket);
27*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(1U, s.count);
28*635a8641SAndroid Build Coastguard Worker }
29*635a8641SAndroid Build Coastguard Worker
TEST(SingleSampleTest,Extract)30*635a8641SAndroid Build Coastguard Worker TEST(SingleSampleTest, Extract) {
31*635a8641SAndroid Build Coastguard Worker AtomicSingleSample sample;
32*635a8641SAndroid Build Coastguard Worker ASSERT_TRUE(sample.Accumulate(9, 1));
33*635a8641SAndroid Build Coastguard Worker
34*635a8641SAndroid Build Coastguard Worker SingleSample s = sample.Extract(/*disable=*/false);
35*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(9U, s.bucket);
36*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(1U, s.count);
37*635a8641SAndroid Build Coastguard Worker
38*635a8641SAndroid Build Coastguard Worker s = sample.Extract(/*disable=*/false);
39*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(0U, s.bucket);
40*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(0U, s.count);
41*635a8641SAndroid Build Coastguard Worker }
42*635a8641SAndroid Build Coastguard Worker
TEST(SingleSampleTest,Disable)43*635a8641SAndroid Build Coastguard Worker TEST(SingleSampleTest, Disable) {
44*635a8641SAndroid Build Coastguard Worker AtomicSingleSample sample;
45*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(0U, sample.Extract(/*disable=*/false).count);
46*635a8641SAndroid Build Coastguard Worker EXPECT_FALSE(sample.IsDisabled());
47*635a8641SAndroid Build Coastguard Worker
48*635a8641SAndroid Build Coastguard Worker ASSERT_TRUE(sample.Accumulate(9, 1));
49*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(1U, sample.Extract(/*disable=*/true).count);
50*635a8641SAndroid Build Coastguard Worker EXPECT_TRUE(sample.IsDisabled());
51*635a8641SAndroid Build Coastguard Worker
52*635a8641SAndroid Build Coastguard Worker ASSERT_FALSE(sample.Accumulate(9, 1));
53*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(0U, sample.Extract(/*disable=*/false).count);
54*635a8641SAndroid Build Coastguard Worker EXPECT_FALSE(sample.IsDisabled());
55*635a8641SAndroid Build Coastguard Worker }
56*635a8641SAndroid Build Coastguard Worker
TEST(SingleSampleTest,Accumulate)57*635a8641SAndroid Build Coastguard Worker TEST(SingleSampleTest, Accumulate) {
58*635a8641SAndroid Build Coastguard Worker AtomicSingleSample sample;
59*635a8641SAndroid Build Coastguard Worker
60*635a8641SAndroid Build Coastguard Worker ASSERT_TRUE(sample.Accumulate(9, 1));
61*635a8641SAndroid Build Coastguard Worker ASSERT_TRUE(sample.Accumulate(9, 2));
62*635a8641SAndroid Build Coastguard Worker ASSERT_TRUE(sample.Accumulate(9, 4));
63*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(7U, sample.Extract(/*disable=*/false).count);
64*635a8641SAndroid Build Coastguard Worker
65*635a8641SAndroid Build Coastguard Worker ASSERT_TRUE(sample.Accumulate(9, 4));
66*635a8641SAndroid Build Coastguard Worker ASSERT_TRUE(sample.Accumulate(9, -2));
67*635a8641SAndroid Build Coastguard Worker ASSERT_TRUE(sample.Accumulate(9, 1));
68*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(3U, sample.Extract(/*disable=*/false).count);
69*635a8641SAndroid Build Coastguard Worker }
70*635a8641SAndroid Build Coastguard Worker
TEST(SingleSampleTest,Overflow)71*635a8641SAndroid Build Coastguard Worker TEST(SingleSampleTest, Overflow) {
72*635a8641SAndroid Build Coastguard Worker AtomicSingleSample sample;
73*635a8641SAndroid Build Coastguard Worker
74*635a8641SAndroid Build Coastguard Worker ASSERT_TRUE(sample.Accumulate(9, 1));
75*635a8641SAndroid Build Coastguard Worker ASSERT_FALSE(sample.Accumulate(9, -2));
76*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(1U, sample.Extract(/*disable=*/false).count);
77*635a8641SAndroid Build Coastguard Worker
78*635a8641SAndroid Build Coastguard Worker ASSERT_TRUE(sample.Accumulate(9, std::numeric_limits<uint16_t>::max()));
79*635a8641SAndroid Build Coastguard Worker ASSERT_FALSE(sample.Accumulate(9, 1));
80*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(std::numeric_limits<uint16_t>::max(),
81*635a8641SAndroid Build Coastguard Worker sample.Extract(/*disable=*/false).count);
82*635a8641SAndroid Build Coastguard Worker }
83*635a8641SAndroid Build Coastguard Worker
84*635a8641SAndroid Build Coastguard Worker } // namespace base
85