/*
 *  Copyright (c) 2017 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 "webrtc/modules/audio_processing/aec3/erl_estimator.h"

#include "webrtc/test/gtest.h"

namespace webrtc {

namespace {

void VerifyErl(const std::array<float, kFftLengthBy2Plus1>& erl,
               float reference) {
  std::for_each(erl.begin(), erl.end(),
                [reference](float a) { EXPECT_NEAR(reference, a, 0.001); });
}

}  // namespace

// Verifies that the correct ERL estimates are achieved.
TEST(ErlEstimator, Estimates) {
  std::array<float, kFftLengthBy2Plus1> X2;
  std::array<float, kFftLengthBy2Plus1> Y2;

  ErlEstimator estimator;

  // Verifies that the ERL estimate is properly reduced to lower values.
  X2.fill(500 * 1000.f * 1000.f);
  Y2.fill(10 * X2[0]);
  for (size_t k = 0; k < 200; ++k) {
    estimator.Update(X2, Y2);
  }
  VerifyErl(estimator.Erl(), 10.f);

  // Verifies that the ERL is not immediately increased when the ERL in the data
  // increases.
  Y2.fill(10000 * X2[0]);
  for (size_t k = 0; k < 998; ++k) {
    estimator.Update(X2, Y2);
  }
  VerifyErl(estimator.Erl(), 10.f);

  // Verifies that the rate of increase is 3 dB.
  estimator.Update(X2, Y2);
  VerifyErl(estimator.Erl(), 20.f);

  // Verifies that the maximum ERL is achieved when there are no low RLE
  // estimates.
  for (size_t k = 0; k < 1000; ++k) {
    estimator.Update(X2, Y2);
  }
  VerifyErl(estimator.Erl(), 1000.f);

  // Verifies that the ERL estimate is is not updated for low-level signals
  X2.fill(1000.f * 1000.f);
  Y2.fill(10 * X2[0]);
  for (size_t k = 0; k < 200; ++k) {
    estimator.Update(X2, Y2);
  }
  VerifyErl(estimator.Erl(), 1000.f);
}

}  // namespace webrtc
