/*
 *  Copyright (c) 2012 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_processing/vad/pitch_internal.h"

#include <cmath>

#include "test/gtest.h"

namespace webrtc {

TEST(PitchInternalTest, test) {
  const int kSamplingRateHz = 8000;
  const int kNumInputParameters = 4;
  const int kNumOutputParameters = 3;
  // Inputs
  double log_old_gain = log(0.5);
  double gains[] = {0.6, 0.2, 0.5, 0.4};

  double old_lag = 70;
  double lags[] = {90, 111, 122, 50};

  // Expected outputs
  double expected_log_pitch_gain[] = {-0.541212549898316, -1.45672279045507,
                                      -0.80471895621705};
  double expected_log_old_gain = log(gains[kNumInputParameters - 1]);

  double expected_pitch_lag_hz[] = {92.3076923076923, 70.9010339734121,
                                    93.0232558139535};
  double expected_old_lag = lags[kNumInputParameters - 1];

  double log_pitch_gain[kNumOutputParameters];
  double pitch_lag_hz[kNumInputParameters];

  GetSubframesPitchParameters(kSamplingRateHz, gains, lags, kNumInputParameters,
                              kNumOutputParameters, &log_old_gain, &old_lag,
                              log_pitch_gain, pitch_lag_hz);

  for (int n = 0; n < 3; n++) {
    EXPECT_NEAR(pitch_lag_hz[n], expected_pitch_lag_hz[n], 1e-6);
    EXPECT_NEAR(log_pitch_gain[n], expected_log_pitch_gain[n], 1e-8);
  }
  EXPECT_NEAR(old_lag, expected_old_lag, 1e-6);
  EXPECT_NEAR(log_old_gain, expected_log_old_gain, 1e-8);
}

}  // namespace webrtc
