//================================================================================================== /* ROTGEN - Runtime Overlay for Eigen Copyright : CODE RECKONS SPDX-License-Identifier: BSL-1.0 */ //================================================================================================== #include "unit/tests.hpp" #include TTS_CASE_TPL("Function size", rotgen::tests::types)( tts::type>) { T data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; rotgen::map> dyn_map(data, 1, 12); TTS_EQUAL(dyn_map.rows(), rotgen::Index{1}); TTS_EQUAL(dyn_map.cols(), rotgen::Index{12}); rotgen::map> s112_map(data); TTS_EQUAL(s112_map.rows(), rotgen::Index{1}); TTS_EQUAL(s112_map.cols(), rotgen::Index{12}); TTS_EQUAL(s112_map.size(), rotgen::Index{12}); rotgen::map> s121_map(data); TTS_EQUAL(s121_map.rows(), rotgen::Index{12}); TTS_EQUAL(s121_map.cols(), rotgen::Index{1}); TTS_EQUAL(s121_map.size(), rotgen::Index{12}); rotgen::map> s34_map(data); TTS_EQUAL(s34_map.rows(), rotgen::Index{3}); TTS_EQUAL(s34_map.cols(), rotgen::Index{4}); TTS_EQUAL(s34_map.size(), rotgen::Index{12}); rotgen::map> s62_map(data); TTS_EQUAL(s62_map.rows(), rotgen::Index{6}); TTS_EQUAL(s62_map.cols(), rotgen::Index{2}); TTS_EQUAL(s62_map.size(), rotgen::Index{12}); }; TTS_CASE_TPL("Test coefficient accessors", rotgen::tests::types)( tts::type>) { using base = rotgen::matrix; T data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; rotgen::map a(data, 4, 3); for (rotgen::Index i = 0; i < 4; i++) { for (rotgen::Index j = 0; j < 3; j++) { if constexpr (O::value) TTS_EQUAL(a(i, j), data[j + 3 * i]); else TTS_EQUAL(a(i, j), data[i + 4 * j]); } } a(1, 1) = 42; TTS_EQUAL(a(1, 1), 42); T& ref = a(2, 2); ref = 17; TTS_EQUAL(a(2, 2), 17); }; TTS_CASE_TPL("Test one index coefficient accessors", rotgen::tests::types)( tts::type>) { T data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; auto m = [&]() { if constexpr (O::value == rotgen::ColMajor) { using base = rotgen::matrix; rotgen::map a(data, 12); return a; } else { using base = rotgen::matrix; rotgen::map a(data, 12); return a; } }(); TTS_EXPECT(m.IsVectorAtCompileTime); for (rotgen::Index i = 0; i < m.size(); i++) TTS_EQUAL(m(i), data[i]) << "Index: " << i << "\n"; for (rotgen::Index i = 0; i < m.size(); i++) TTS_EQUAL(m[i], data[i]) << "Index: " << i << "\n"; m(1) = 42; TTS_EQUAL(data[1], 42); T& ref = m(2); ref = 17; TTS_EQUAL(data[2], 17); m[1] = 77; TTS_EQUAL(data[1], 77); T& bref = m[3]; bref = 331; TTS_EQUAL(data[3], 331); };