Added Ubuntu 24.04 tests

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

See merge request oss/rotgen!33
This commit is contained in:
Jules Pénuchot 2025-10-06 17:03:54 +02:00 committed by Joel Falcou
parent 8fcd92ce1a
commit 991967761d
6 changed files with 254 additions and 142 deletions

View file

@ -44,17 +44,17 @@ MatrixType make_initialized_matrix(rotgen::tests::matrix_block_test_case<MatrixT
template<typename MatrixType, typename BlockType>
void validate_block_behavior(MatrixType& matrix, BlockType& block,
rotgen::Index i0, rotgen::Index j0,
rotgen::Index ni, rotgen::Index nj)
rotgen::Index block_i, rotgen::Index block_j,
rotgen::Index block_m, rotgen::Index block_n)
{
using T = typename MatrixType::value_type;
TTS_EQUAL(block.rows(), ni);
TTS_EQUAL(block.cols(), nj);
TTS_EQUAL(block.size(), ni * nj);
TTS_EQUAL(block.rows(), block_m);
TTS_EQUAL(block.cols(), block_n);
TTS_EQUAL(block.size(), block_m * block_n);
// test block values
for_each_element(block, [&](auto i, auto j, auto val) {
TTS_EQUAL(val, matrix(i0 + i, j0 + j));
for_each_element(block, [&](auto i, auto j, auto block_val) {
TTS_EQUAL(block_val, matrix(block_i + i, block_j + j));
});
// test aliasing if non immutable
@ -67,15 +67,15 @@ void validate_block_behavior(MatrixType& matrix, BlockType& block,
value = 1;
for_each_element(block, [&](auto i, auto j, auto&) {
TTS_EQUAL(matrix(i0 + i, j0 + j), value++);
TTS_EQUAL(matrix(block_i + i, block_j + j), value++);
});
for_each_element(block, [&](auto i, auto j, auto&) {
matrix(i0 + i, j0 + j) = T(42);
matrix(block_i + i, block_j + j) = T(42);
});
for_each_element(block, [&](auto&, auto&, auto val) {
TTS_EQUAL(val, T(42));
for_each_element(block, [&](auto&, auto&, auto block_val) {
TTS_EQUAL(block_val, T(42));
});
}
}
@ -347,83 +347,62 @@ TTS_CASE_TPL("Check all static block extractions", rotgen::tests::types)
);
};
TTS_CASE_TPL("Check vector-only extractions", rotgen::tests::types)
<typename T, typename O>( tts::type< tts::types<T,O>> )
{
auto refs = []()
{
if constexpr(O::value == rotgen::RowMajor)
{
using mat_t = rotgen::matrix<T,1,rotgen::Dynamic,O::value>;
mat_t m(1,11);
TTS_CASE_TPL("Check vector-only extractions",
rotgen::tests::types)<typename T, typename O>(
tts::type<tts::types<T, O>>) {
auto run_case = [](auto &&matrix, auto &&block, int i_offset, int j_offset,
int ni, int nj, auto const &rows_ct, auto const &cols_ct) {
using block_t = std::remove_reference_t<decltype(block)>;
for(rotgen::Index i=0;i<11;++i) m(i) = 1 + i;
TTS_EQUAL(block_t::RowsAtCompileTime, rows_ct);
TTS_EQUAL(block_t::ColsAtCompileTime, cols_ct);
return std::make_tuple( m,
std::make_tuple
(
std::make_tuple(head(m, 1), 0, 0, 1, 1, 1, rotgen::Dynamic)
, std::make_tuple(head(m, 5), 0, 0, 1, 5, 1, rotgen::Dynamic)
, std::make_tuple(head(m,11), 0, 0, 1,11, 1, rotgen::Dynamic)
, std::make_tuple(head<1>(m), 0, 0, 1, 1, 1, 1)
, std::make_tuple(head<4>(m), 0, 0, 1, 4, 1, 4)
, std::make_tuple(head<9>(m), 0, 0, 1, 9, 1, 9)
, std::make_tuple(tail(m, 1), 0,10, 1, 1, 1, rotgen::Dynamic)
, std::make_tuple(tail(m, 5), 0, 6, 1, 5, 1, rotgen::Dynamic)
, std::make_tuple(tail(m,11), 0, 0, 1,11, 1, rotgen::Dynamic)
, std::make_tuple(tail<1>(m), 0,10, 1, 1, 1, 1)
, std::make_tuple(tail<4>(m), 0, 7, 1, 4, 1, 4)
, std::make_tuple(tail<9>(m), 0, 2, 1, 9, 1, 9)
, std::make_tuple(segment(m,0,11), 0, 0, 1, 11, 1, rotgen::Dynamic)
, std::make_tuple(segment(m,0, 7), 0, 0, 1, 7, 1, rotgen::Dynamic)
, std::make_tuple(segment(m,5, 6), 0, 5, 1, 6, 1, rotgen::Dynamic)
, std::make_tuple(segment<11>(m,0), 0, 0, 1, 11, 1, 11)
, std::make_tuple(segment< 7>(m,0), 0, 0, 1, 7, 1, 7)
, std::make_tuple(segment< 6>(m,5), 0, 5, 1, 6, 1, 6)
)
);
}
else
{
using mat_t = rotgen::matrix<T,rotgen::Dynamic,1,O::value>;
mat_t m(11,1);
validate_block_behavior(matrix, block, i_offset, j_offset, ni, nj);
};
for(rotgen::Index i=0;i<11;++i) m(i) = 1 + i;
if constexpr (O::value == rotgen::RowMajor) {
using mat_t = rotgen::matrix<T, 1, rotgen::Dynamic, O::value>;
mat_t m(1, 11);
return std::make_tuple( m,
std::make_tuple
(
std::make_tuple(head(m, 1), 0, 0, 1, 1, rotgen::Dynamic, 1)
, std::make_tuple(head(m, 5), 0, 0, 5, 1, rotgen::Dynamic, 1)
, std::make_tuple(head(m,11), 0, 0,11, 1, rotgen::Dynamic, 1)
, std::make_tuple(head<1>(m), 0, 0, 1, 1, 1, 1)
, std::make_tuple(head<4>(m), 0, 0, 4, 1, 4, 1)
, std::make_tuple(head<9>(m), 0, 0, 9, 1, 9, 1)
, std::make_tuple(tail(m, 1),10, 0, 1, 1, rotgen::Dynamic, 1)
, std::make_tuple(tail(m, 5), 6, 0, 5, 1, rotgen::Dynamic, 1)
, std::make_tuple(tail(m,11), 0, 0,11, 1, rotgen::Dynamic, 1)
, std::make_tuple(tail<1>(m),10, 0, 1, 1, 1, 1)
, std::make_tuple(tail<4>(m), 7, 0, 4, 1, 4, 1)
, std::make_tuple(tail<9>(m), 2, 0, 9, 1, 9, 1)
)
);
}
}();
for (rotgen::Index i = 0; i < 11; ++i)
m(i) = 1 + i;
auto matrix = std::get<0>(refs);
auto blocks = std::get<1>(refs);
run_case(m, head(m, 1), 0, 0, 1, 1, 1, rotgen::Dynamic);
run_case(m, head(m, 5), 0, 0, 1, 5, 1, rotgen::Dynamic);
run_case(m, head(m, 11), 0, 0, 1, 11, 1, rotgen::Dynamic);
run_case(m, head<1>(m), 0, 0, 1, 1, 1, 1);
run_case(m, head<4>(m), 0, 0, 1, 4, 1, 4);
run_case(m, head<9>(m), 0, 0, 1, 9, 1, 9);
run_case(m, tail(m, 1), 0, 10, 1, 1, 1, rotgen::Dynamic);
run_case(m, tail(m, 5), 0, 6, 1, 5, 1, rotgen::Dynamic);
run_case(m, tail(m, 11), 0, 0, 1, 11, 1, rotgen::Dynamic);
run_case(m, tail<1>(m), 0, 10, 1, 1, 1, 1);
run_case(m, tail<4>(m), 0, 7, 1, 4, 1, 4);
run_case(m, tail<9>(m), 0, 2, 1, 9, 1, 9);
run_case(m, segment(m, 0, 11), 0, 0, 1, 11, 1, rotgen::Dynamic);
run_case(m, segment(m, 0, 7), 0, 0, 1, 7, 1, rotgen::Dynamic);
run_case(m, segment(m, 5, 6), 0, 5, 1, 6, 1, rotgen::Dynamic);
run_case(m, segment<11>(m, 0), 0, 0, 1, 11, 1, 11);
run_case(m, segment<7>(m, 0), 0, 0, 1, 7, 1, 7);
run_case(m, segment<6>(m, 5), 0, 5, 1, 6, 1, 6);
} else {
using mat_t = rotgen::matrix<T, rotgen::Dynamic, 1, O::value>;
mat_t m(11, 1);
std::apply([&](auto&&... block_entries)
{
(([&]
{
auto&& [block, i_offset, j_offset, ni, nj, rows_ct, cols_ct] = block_entries;
using block_t = std::remove_reference_t<decltype(block)>;
for (rotgen::Index i = 0; i < 11; ++i)
m(i) = 1 + i;
TTS_EQUAL(block_t::RowsAtCompileTime, rows_ct);
TTS_EQUAL(block_t::ColsAtCompileTime, cols_ct);
validate_block_behavior(matrix, block, i_offset, j_offset, ni, nj);
})(), ...);
}, blocks);
};
run_case(m, head(m, 1), 0, 0, 1, 1, rotgen::Dynamic, 1);
run_case(m, head(m, 5), 0, 0, 5, 1, rotgen::Dynamic, 1);
run_case(m, head(m, 11), 0, 0, 11, 1, rotgen::Dynamic, 1);
run_case(m, head<1>(m), 0, 0, 1, 1, 1, 1);
run_case(m, head<4>(m), 0, 0, 4, 1, 4, 1);
run_case(m, head<9>(m), 0, 0, 9, 1, 9, 1);
run_case(m, tail(m, 1), 10, 0, 1, 1, rotgen::Dynamic, 1);
run_case(m, tail(m, 5), 6, 0, 5, 1, rotgen::Dynamic, 1);
run_case(m, tail(m, 11), 0, 0, 11, 1, rotgen::Dynamic, 1);
run_case(m, tail<1>(m), 10, 0, 1, 1, 1, 1);
run_case(m, tail<4>(m), 7, 0, 4, 1, 4, 1);
run_case(m, tail<9>(m), 2, 0, 9, 1, 9, 1);
}
};