/*
 *  Copyright (c) 2021 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/audio_coding/neteq/underrun_optimizer.h"

#include <optional>

#include "api/neteq/tick_timer.h"
#include "test/gtest.h"

namespace webrtc {

namespace {

constexpr int kDefaultHistogramQuantile = 1020054733;  // 0.95 in Q30.
constexpr int kForgetFactor = 32745;                   // 0.9993 in Q15.

}  // namespace

TEST(UnderrunOptimizerTest, ResamplePacketDelays) {
  TickTimer tick_timer;
  constexpr int kResampleIntervalMs = 500;
  UnderrunOptimizer underrun_optimizer(&tick_timer, kDefaultHistogramQuantile,
                                       kForgetFactor, std::nullopt,
                                       kResampleIntervalMs);

  // The histogram should be updated once with the maximum delay observed for
  // the following sequence of updates.
  for (int i = 0; i < 500; i += 20) {
    underrun_optimizer.Update(i);
    EXPECT_FALSE(underrun_optimizer.GetOptimalDelayMs());
  }
  tick_timer.Increment(kResampleIntervalMs / tick_timer.ms_per_tick() + 1);
  underrun_optimizer.Update(0);
  EXPECT_EQ(underrun_optimizer.GetOptimalDelayMs(), 500);
}

}  // namespace webrtc
