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

#include <contrib/Eigen/Polynomials>
#include <vector>
#include <iostream>

using namespace Eigen;
using namespace std;

int main() {
  typedef Matrix<double, 5, 1> Vector5d;

  Vector5d roots = Vector5d::Random();
  cout << "Roots: " << roots.transpose() << endl;
  Eigen::Matrix<double, 6, 1> polynomial;
  roots_to_monicPolynomial(roots, polynomial);

  PolynomialSolver<double, 5> psolve(polynomial);
  cout << "Complex roots: " << psolve.roots().transpose() << endl;

  std::vector<double> realRoots;
  psolve.realRoots(realRoots);
  Map<Vector5d> mapRR(&realRoots[0]);
  cout << "Real roots: " << mapRR.transpose() << endl;

  cout << endl;
  cout << "A float polynomial with almost conjugate roots of almost the same modulus: " << endl;
  cout << "--------------------------------------------------------------------------" << endl;
  Eigen::Matrix<float, 7, 1> hardCase_polynomial;
  hardCase_polynomial << -0.957, 0.9219, 0.3516, 0.9453, -0.4023, -0.5508, -0.03125;
  cout << "Hard case polynomial defined by floats: " << hardCase_polynomial.transpose() << endl;
  PolynomialSolver<float, 6> psolvef(hardCase_polynomial);
  cout << "Complex roots: " << psolvef.roots().transpose() << endl;
  Eigen::Matrix<float, 6, 1> evals;
  for (int i = 0; i < 6; ++i) {
    evals[i] = std::abs(poly_eval(hardCase_polynomial, psolvef.roots()[i]));
  }
  cout << "Norms of the evaluations of the polynomial at the roots: " << evals.transpose() << endl << endl;

  cout << "The same polynomial solved with doubles: " << endl;
  cout << "----------------------------------------" << endl;
  PolynomialSolver<double, 6> psolve6d(hardCase_polynomial.cast<double>());
  cout << "Complex roots: " << psolve6d.roots().transpose() << endl;
  for (int i = 0; i < 6; ++i) {
    std::complex<float> castedRoot(psolve6d.roots()[i].real(), psolve6d.roots()[i].imag());
    evals[i] = std::abs(poly_eval(hardCase_polynomial, castedRoot));
  }
  cout << "Norms of the evaluations of the polynomial at the roots: " << evals.transpose() << endl << endl;

  cout.precision(10);
  cout << "The last root in float then in double: " << psolvef.roots()[5] << "\t" << psolve6d.roots()[5] << endl;
  std::complex<float> castedRoot(psolve6d.roots()[5].real(), psolve6d.roots()[5].imag());
  cout << "Norm of the difference: " << std::abs(psolvef.roots()[5] - castedRoot) << endl;
}
