// SPDX-FileCopyrightText: The Eigen Authors
// SPDX-License-Identifier: MPL-2.0

#include <benchmark/benchmark.h>
#include <Eigen/Core>
#include <Eigen/QR>
#include <Eigen/Eigenvalues>

using namespace Eigen;

#ifndef SCALAR
#define SCALAR float
#endif

typedef SCALAR Scalar;

static void BM_SelfAdjointEigenSolver(benchmark::State& state) {
  int n = state.range(0);
  typedef Matrix<Scalar, Dynamic, Dynamic> MatrixType;
  MatrixType a = MatrixType::Random(n, n);
  MatrixType covMat = a * a.adjoint();
  int r = internal::random<int>(0, n - 1);
  int c = internal::random<int>(0, n - 1);
  Scalar acc = 0;
  SelfAdjointEigenSolver<MatrixType> ei(covMat);
  for (auto _ : state) {
    ei.compute(covMat);
    acc += ei.eigenvectors().coeff(r, c);
    benchmark::DoNotOptimize(acc);
  }
}
BENCHMARK(BM_SelfAdjointEigenSolver)->RangeMultiplier(2)->Range(4, 512);

static void BM_EigenSolver(benchmark::State& state) {
  int n = state.range(0);
  typedef Matrix<Scalar, Dynamic, Dynamic> MatrixType;
  MatrixType a = MatrixType::Random(n, n);
  MatrixType covMat = a * a.adjoint();
  int r = internal::random<int>(0, n - 1);
  int c = internal::random<int>(0, n - 1);
  Scalar acc = 0;
  EigenSolver<MatrixType> ei(covMat);
  for (auto _ : state) {
    ei.compute(covMat);
    acc += std::norm(ei.eigenvectors().coeff(r, c));
    benchmark::DoNotOptimize(acc);
  }
}
BENCHMARK(BM_EigenSolver)->RangeMultiplier(2)->Range(4, 512);
