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

using namespace Eigen;

static void BM_MatrixReverse(benchmark::State& state) {
  int n = state.range(0);
  typedef Matrix<double, Dynamic, Dynamic> MatrixType;
  MatrixType a = MatrixType::Random(n, n);
  MatrixType b(n, n);
  for (auto _ : state) {
    b = a.reverse();
    benchmark::DoNotOptimize(b.data());
  }
  state.SetBytesProcessed(state.iterations() * n * n * sizeof(double));
}
BENCHMARK(BM_MatrixReverse)->RangeMultiplier(2)->Range(4, 512);

static void BM_VectorReverse(benchmark::State& state) {
  int n = state.range(0);
  typedef Matrix<double, Dynamic, 1> VectorType;
  VectorType a = VectorType::Random(n);
  VectorType b(n);
  for (auto _ : state) {
    b = a.reverse();
    benchmark::DoNotOptimize(b.data());
  }
  state.SetBytesProcessed(state.iterations() * n * sizeof(double));
}
BENCHMARK(BM_VectorReverse)->RangeMultiplier(4)->Range(16, 1 << 18);
