rotgen/test/unit/common/cwise.hpp
Jules Pénuchot e151e136d6 Resolve "[API-#2] Pseudo-privatization of rotgen entity member functions"
Closes #18

Co-authored-by: Jules Pénuchot <jules@penuchot.com>

See merge request oss/rotgen!50
2025-12-17 20:48:00 +01:00

66 lines
2 KiB
C++

//==================================================================================================
/*
ROTGEN - Runtime Overlay for Eigen
Copyright : CODE RECKONS
SPDX-License-Identifier: BSL-1.0
*/
//==================================================================================================
#pragma once
#include <rotgen/rotgen.hpp>
#include "tts.hpp"
#include "unit/common/references.hpp"
#include <Eigen/Dense>
namespace rotgen::tests
{
template<typename T> void check_cwise_functions(T const& rotgen_input)
{
using eigen_mat_t =
Eigen::Matrix<typename T::value_type, Eigen::Dynamic, Eigen::Dynamic>;
using rotgen_mat_t =
matrix<typename T::value_type, Dynamic, Dynamic, T::storage_order>;
TTS_WHEN("Unary Cwise operations")
{
eigen_mat_t eigen_ref(rows(rotgen_input), cols(rotgen_input));
prepare([&](auto r, auto c) { return rotgen_input(r, c); }, eigen_ref);
rotgen_mat_t rotgen_ref(rows(rotgen_input), cols(rotgen_input));
TTS_AND_THEN("abs()")
{
eigen_ref = eigen_ref.cwiseAbs();
prepare([&](auto r, auto c) { return eigen_ref(r, c); }, rotgen_ref);
TTS_EQUAL(rotgen::abs(rotgen_input), rotgen_ref);
}
TTS_AND_THEN("abs2()")
{
eigen_ref = eigen_ref.cwiseAbs2();
prepare([&](auto r, auto c) { return eigen_ref(r, c); }, rotgen_ref);
TTS_EQUAL(rotgen::abs2(rotgen_input), rotgen_ref);
}
TTS_AND_THEN("rec")
{
eigen_ref = eigen_ref.cwiseInverse();
prepare([&](auto r, auto c) { return eigen_ref(r, c); }, rotgen_ref);
TTS_EQUAL(rotgen::rec(rotgen_input), rotgen_ref);
}
TTS_AND_THEN("sqrt")
{
eigen_ref = eigen_ref.cwiseAbs().cwiseSqrt();
auto mat = rotgen::abs(rotgen_input);
auto proper_input = rotgen::sqrt(mat);
for (rotgen::Index r = 0; r < rows(rotgen_input); ++r)
for (rotgen::Index c = 0; c < cols(rotgen_input); ++c)
TTS_ULP_EQUAL(proper_input(r, c), eigen_ref(r, c), 1);
}
}
}
}