| // Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "power_manager/powerd/system/rolling_average.h" |
| |
| #include <stdint.h> |
| |
| #include <gtest/gtest.h> |
| |
| namespace power_manager { |
| namespace system { |
| |
| TEST(RollingAverageTest, SingleSample) { |
| RollingAverage average(1); |
| average.AddSample(5.0, base::TimeTicks()); |
| EXPECT_DOUBLE_EQ(5.0, average.GetAverage()); |
| average.AddSample(0.0, base::TimeTicks()); |
| EXPECT_DOUBLE_EQ(0.0, average.GetAverage()); |
| average.AddSample(4.0, base::TimeTicks()); |
| EXPECT_DOUBLE_EQ(4.0, average.GetAverage()); |
| average.AddSample(-1.0, base::TimeTicks()); |
| EXPECT_DOUBLE_EQ(-1.0, average.GetAverage()); |
| } |
| |
| TEST(RollingAverageTest, MultipleSamples) { |
| RollingAverage average(3); |
| average.AddSample(4.0, base::TimeTicks()); |
| EXPECT_DOUBLE_EQ(4.0, average.GetAverage()); |
| average.AddSample(8.0, base::TimeTicks()); |
| EXPECT_DOUBLE_EQ(6.0, average.GetAverage()); |
| average.AddSample(12.0, base::TimeTicks()); |
| EXPECT_DOUBLE_EQ(8.0, average.GetAverage()); |
| average.AddSample(10.0, base::TimeTicks()); |
| EXPECT_DOUBLE_EQ(10.0, average.GetAverage()); |
| average.AddSample(-4.0, base::TimeTicks()); |
| EXPECT_DOUBLE_EQ(6.0, average.GetAverage()); |
| } |
| |
| TEST(RollingAverageTest, GetDelta) { |
| const base::TimeTicks kTime1 = base::TimeTicks::FromInternalValue(1000); |
| const base::TimeTicks kTime2 = base::TimeTicks::FromInternalValue(2000); |
| const base::TimeTicks kTime3 = base::TimeTicks::FromInternalValue(4000); |
| const base::TimeTicks kTime4 = base::TimeTicks::FromInternalValue(8000); |
| |
| const double kValue1 = 10.0; |
| const double kValue2 = 4.0; |
| const double kValue3 = -5.0; |
| const double kValue4 = 13.0; |
| |
| const int64_t kEmptyDelta = base::TimeDelta().ToInternalValue(); |
| |
| RollingAverage average(3); |
| EXPECT_EQ(kEmptyDelta, average.GetTimeDelta().ToInternalValue()); |
| EXPECT_EQ(0.0, average.GetValueDelta()); |
| |
| average.AddSample(kValue1, kTime1); |
| EXPECT_EQ(kEmptyDelta, average.GetTimeDelta().ToInternalValue()); |
| EXPECT_EQ(0.0, average.GetValueDelta()); |
| |
| average.AddSample(kValue2, kTime2); |
| EXPECT_EQ((kTime2 - kTime1).ToInternalValue(), |
| average.GetTimeDelta().ToInternalValue()); |
| EXPECT_EQ(kValue2 - kValue1, average.GetValueDelta()); |
| |
| average.AddSample(kValue3, kTime3); |
| EXPECT_EQ((kTime3 - kTime1).ToInternalValue(), |
| average.GetTimeDelta().ToInternalValue()); |
| EXPECT_EQ(kValue3 - kValue1, average.GetValueDelta()); |
| |
| average.AddSample(kValue4, kTime4); |
| EXPECT_EQ((kTime4 - kTime2).ToInternalValue(), |
| average.GetTimeDelta().ToInternalValue()); |
| EXPECT_EQ(kValue4 - kValue2, average.GetValueDelta()); |
| } |
| |
| TEST(RollingAverageTest, Clear) { |
| RollingAverage average(2); |
| average.AddSample(3.0, base::TimeTicks()); |
| EXPECT_DOUBLE_EQ(3.0, average.GetAverage()); |
| average.AddSample(2.0, base::TimeTicks()); |
| EXPECT_DOUBLE_EQ(2.5, average.GetAverage()); |
| average.Clear(); |
| EXPECT_DOUBLE_EQ(0.0, average.GetAverage()); |
| } |
| |
| TEST(RollingAverageTest, HasMaxSamples) { |
| RollingAverage average(3); |
| average.AddSample(1.0, base::TimeTicks()); |
| EXPECT_EQ(false, average.HasMaxSamples()); |
| average.AddSample(2.0, base::TimeTicks()); |
| EXPECT_EQ(false, average.HasMaxSamples()); |
| average.AddSample(3.0, base::TimeTicks()); |
| EXPECT_EQ(true, average.HasMaxSamples()); |
| average.AddSample(4.0, base::TimeTicks()); |
| EXPECT_EQ(true, average.HasMaxSamples()); |
| average.Clear(); |
| EXPECT_EQ(false, average.HasMaxSamples()); |
| average.AddSample(1.0, base::TimeTicks()); |
| EXPECT_EQ(false, average.HasMaxSamples()); |
| average.AddSample(2.0, base::TimeTicks()); |
| EXPECT_EQ(false, average.HasMaxSamples()); |
| } |
| |
| } // namespace system |
| } // namespace power_manager |