// Copyright 2017 The Chromium 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 "chrome/browser/vr/sliding_average.h"

#include "testing/gtest/include/gtest/gtest.h"

namespace vr {

TEST(SlidingAverage, Basics) {
  SlidingAverage meter(5);

  // No values yet
  EXPECT_EQ(42, meter.GetAverageOrDefault(42));
  EXPECT_EQ(0, meter.GetAverage());

  meter.AddSample(100);
  EXPECT_EQ(100, meter.GetAverageOrDefault(42));
  EXPECT_EQ(100, meter.GetAverage());

  meter.AddSample(200);
  EXPECT_EQ(150, meter.GetAverage());

  meter.AddSample(10);
  EXPECT_EQ(103, meter.GetAverage());

  meter.AddSample(10);
  EXPECT_EQ(80, meter.GetAverage());

  meter.AddSample(10);
  EXPECT_EQ(66, meter.GetAverage());

  meter.AddSample(10);
  EXPECT_EQ(48, meter.GetAverage());

  meter.AddSample(10);
  EXPECT_EQ(10, meter.GetAverage());

  meter.AddSample(110);
  EXPECT_EQ(30, meter.GetAverage());
}

TEST(SlidingTimeDeltaAverage, Basics) {
  SlidingTimeDeltaAverage meter(5);

  EXPECT_EQ(base::TimeDelta::FromSeconds(42),
            meter.GetAverageOrDefault(base::TimeDelta::FromSeconds(42)));
  EXPECT_EQ(base::TimeDelta(), meter.GetAverage());

  meter.AddSample(base::TimeDelta::FromSeconds(100));
  EXPECT_EQ(base::TimeDelta::FromSeconds(100),
            meter.GetAverageOrDefault(base::TimeDelta::FromSeconds(42)));
  EXPECT_EQ(base::TimeDelta::FromSeconds(100), meter.GetAverage());

  meter.AddSample(base::TimeDelta::FromMilliseconds(200000));
  EXPECT_EQ(base::TimeDelta::FromSeconds(150), meter.GetAverage());
}

}  // namespace vr
