/*
 *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#include "modules/video_coding/histogram.h"

#include "test/gtest.h"

namespace webrtc {
namespace video_coding {

class TestHistogram : public ::testing::Test {
 protected:
  TestHistogram() : histogram_(5, 10) {}
  Histogram histogram_;
};

TEST_F(TestHistogram, NumValues) {
  EXPECT_EQ(0ul, histogram_.NumValues());
  histogram_.Add(0);
  EXPECT_EQ(1ul, histogram_.NumValues());
}

TEST_F(TestHistogram, InverseCdf) {
  histogram_.Add(0);
  histogram_.Add(1);
  histogram_.Add(2);
  histogram_.Add(3);
  histogram_.Add(4);
  EXPECT_EQ(5ul, histogram_.NumValues());
  EXPECT_EQ(1ul, histogram_.InverseCdf(0.2f));
  EXPECT_EQ(2ul, histogram_.InverseCdf(0.2000001f));
  EXPECT_EQ(4ul, histogram_.InverseCdf(0.8f));

  histogram_.Add(0);
  EXPECT_EQ(6ul, histogram_.NumValues());
  EXPECT_EQ(1ul, histogram_.InverseCdf(0.2f));
  EXPECT_EQ(1ul, histogram_.InverseCdf(0.2000001f));
}

TEST_F(TestHistogram, ReplaceOldValues) {
  histogram_.Add(0);
  histogram_.Add(0);
  histogram_.Add(0);
  histogram_.Add(0);
  histogram_.Add(0);
  histogram_.Add(1);
  histogram_.Add(1);
  histogram_.Add(1);
  histogram_.Add(1);
  histogram_.Add(1);
  EXPECT_EQ(10ul, histogram_.NumValues());
  EXPECT_EQ(1ul, histogram_.InverseCdf(0.5f));
  EXPECT_EQ(2ul, histogram_.InverseCdf(0.5000001f));

  histogram_.Add(4);
  histogram_.Add(4);
  histogram_.Add(4);
  histogram_.Add(4);
  EXPECT_EQ(10ul, histogram_.NumValues());
  EXPECT_EQ(1ul, histogram_.InverseCdf(0.1f));
  EXPECT_EQ(2ul, histogram_.InverseCdf(0.5f));

  histogram_.Add(20);
  EXPECT_EQ(10ul, histogram_.NumValues());
  EXPECT_EQ(2ul, histogram_.InverseCdf(0.5f));
  EXPECT_EQ(5ul, histogram_.InverseCdf(0.5000001f));
}

}  // namespace video_coding
}  // namespace webrtc
