1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "remoting/base/running_average.h" 6#include "testing/gtest/include/gtest/gtest.h" 7 8namespace remoting { 9 10static const int64 kTestValues[] = { 10, 20, 30, 10, 25, 16, 15 }; 11 12// Average across a single element, i.e. just return the most recent. 13TEST(RunningAverageTest, OneElementWindow) { 14 RunningAverage running_average(1); 15 EXPECT_EQ(0, running_average.Average()); 16 17 for (size_t i = 0; i < arraysize(kTestValues); ++i) { 18 running_average.Record(kTestValues[i]); 19 EXPECT_EQ(static_cast<double>(kTestValues[i]), running_average.Average()); 20 } 21} 22 23// Average the two most recent elements. 24TEST(RunningAverageTest, TwoElementWindow) { 25 RunningAverage running_average(2); 26 EXPECT_EQ(0, running_average.Average()); 27 28 for (size_t i = 0; i < arraysize(kTestValues); ++i) { 29 running_average.Record(kTestValues[i]); 30 31 double expected = kTestValues[i]; 32 if (i > 0) 33 expected = (expected + kTestValues[i-1]) / 2; 34 35 EXPECT_EQ(expected, running_average.Average()); 36 } 37} 38 39// Average across all the elements if the window size exceeds the element count. 40TEST(RunningAverageTest, LongWindow) { 41 RunningAverage running_average(arraysize(kTestValues) + 1); 42 EXPECT_EQ(0, running_average.Average()); 43 44 for (size_t i = 0; i < arraysize(kTestValues); ++i) { 45 running_average.Record(kTestValues[i]); 46 47 double expected = 0.0; 48 for (size_t j = 0; j <= i; ++j) 49 expected += kTestValues[j]; 50 expected /= i + 1; 51 52 EXPECT_EQ(expected, running_average.Average()); 53 } 54} 55 56} // namespace remoting 57