//================================================================================================== /* ROTGEN - Runtime Overlay for Eigen Copyright : CODE RECKONS SPDX-License-Identifier: BSL-1.0 */ //================================================================================================== #include #include #include #include namespace rotgen::tests { template void check_norms_functions(const T& input) { using EigenMatrix = Eigen::Matrix; EigenMatrix ref(input.rows(), input.cols()); prepare([&](auto r, auto c) { return input(r,c); }, ref); TTS_EQUAL(input.norm() , ref.norm()); TTS_EQUAL(input.squaredNorm() , ref.squaredNorm()); TTS_EQUAL(input.template lpNorm<1>() , ref.template lpNorm<1>()); TTS_EQUAL(input.template lpNorm<2>() , ref.template lpNorm<2>()); TTS_EQUAL(input.template lpNorm() , ref.template lpNorm()); TTS_EQUAL(norm(input) , ref.norm()); TTS_EQUAL(squaredNorm(input) , ref.squaredNorm()); TTS_EQUAL(lpNorm<1>(input) , ref.template lpNorm<1>()); TTS_EQUAL(lpNorm<2>(input) , ref.template lpNorm<2>()); TTS_EQUAL(lpNorm(input) , ref.template lpNorm()); if constexpr(T::IsVectorAtCompileTime) { EigenMatrix e_norm = ref.normalized(); using mat_t = rotgen::matrix; mat_t norm_ref(input.rows(), input.cols()); prepare([&](auto r, auto c) { return e_norm(r,c); }, norm_ref); TTS_EQUAL(input.normalized(), norm_ref); TTS_EQUAL(normalized(input), norm_ref); auto m_norm = input; m_norm.normalize(); TTS_EQUAL(m_norm, norm_ref); auto f_norm = input; normalize(f_norm); TTS_EQUAL(f_norm, norm_ref); } } }