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

#ifndef EIGEN_STRUCTURED_TEST_HELPERS_H
#define EIGEN_STRUCTURED_TEST_HELPERS_H

#include <Eigen/Core>

namespace Eigen {

// Vectorized complex products can introduce Inf - Inf across component accumulators.
// Preserve scalar evaluation order for the non-finite reference results.
template <typename Scalar>
Matrix<Scalar, Dynamic, 1> reference_product_ieee(const Matrix<Scalar, Dynamic, Dynamic>& matrix,
                                                  const Matrix<Scalar, Dynamic, 1>& vector) {
  Matrix<Scalar, Dynamic, 1> result(matrix.rows());
  for (Index i = 0; i < matrix.rows(); ++i) {
    Scalar accumulator(0);
    for (Index j = 0; j < matrix.cols(); ++j) accumulator += matrix(i, j) * vector[j];
    result[i] = accumulator;
  }
  return result;
}

// The FFT-based products mix every input entry into every output entry, so an Inf or NaN may make more entries
// non-finite than the dense product does. \returns whether it makes at least those.
template <typename Actual, typename Reference>
bool nonfinite_covers_reference(const Actual& actual, const Reference& reference) {
  for (Index i = 0; i < reference.size(); ++i)
    if (!(numext::isfinite)(reference[i]) && (numext::isfinite)(actual[i])) return false;
  return true;
}

}  // namespace Eigen

#endif  // EIGEN_STRUCTURED_TEST_HELPERS_H
