blob: 7e3063674f640913ab1d9ac802960e775b91943c [file] [log] [blame]
// 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