Fix handling of temporary data passed as ref

See merge request oss/rotgen!44
This commit is contained in:
Joel Falcou 2025-10-29 18:08:15 +01:00
parent 8c66778d7e
commit e4ae70d0c5
3 changed files with 75 additions and 26 deletions

View file

@ -83,15 +83,40 @@ requires(N > 1)
return -1;
}
TTS_CASE("Reference overload on stroage order check")
TTS_CASE("Reference overload on storage order check")
{
rotgen::matrix<float> mat_dyn(1, 3);
rotgen::matrix<float, -1, 3, rotgen::ColMajor> mat_col(1, 3);
rotgen::matrix<float, -1, 3, rotgen::RowMajor> mat_row(1, 3);
using col3 = rotgen::matrix<float, -1, 3, rotgen::ColMajor>;
using row3 = rotgen::matrix<float, -1, 3, rotgen::RowMajor>;
rotgen::matrixXf mat_dyn(1, 3);
col3 mat_col(1, 3);
row3 mat_row(1, 3);
TTS_EQUAL(f(mat_dyn), +2);
TTS_EQUAL(g<3>(mat_dyn), +1);
TTS_EQUAL(g<3>(mat_col), +1);
TTS_EQUAL(g<3>(mat_row), -1);
TTS_EQUAL(f(rotgen::map<rotgen::matrixXf, 1>(mat_dyn.data(), 1, 3)), +2);
TTS_EQUAL(g<3>(rotgen::map<rotgen::matrixXf, 1>(mat_dyn.data(), 1, 3)), +1);
TTS_EQUAL(g<3>(rotgen::map<col3, 1>(mat_dyn.data(), 1, 3)), +1);
TTS_EQUAL(g<3>(rotgen::map<row3, 1>(mat_dyn.data(), 1, 3)), -1);
TTS_EQUAL(f(rotgen::map<rotgen::matrixXf, 1, rotgen::outer_stride<>>(
mat_dyn.data(), 1, 3, rotgen::outer_stride<>{1})),
+2);
TTS_EQUAL(g<3>(rotgen::map<rotgen::matrixXf, 1, rotgen::outer_stride<>>(
mat_dyn.data(), 1, 3, rotgen::outer_stride<>{1})),
+1);
TTS_EQUAL(g<3>(rotgen::map<col3, 1, rotgen::outer_stride<>>(
mat_dyn.data(), 1, 3, rotgen::outer_stride<>{1})),
+1);
TTS_EQUAL(g<3>(rotgen::map<row3, 1, rotgen::outer_stride<>>(
mat_dyn.data(), 1, 3, rotgen::outer_stride<>{1})),
-1);
TTS_EQUAL(f(rotgen::extract(mat_dyn, 0, 0, 1, 3)), +2);
TTS_EQUAL(g<3>(rotgen::extract(mat_dyn, 0, 0, 1, 3)), +1);
TTS_EQUAL(g<3>(rotgen::extract(mat_col, 0, 0, 1, 3)), +1);
TTS_EQUAL(g<3>(rotgen::extract(mat_row, 0, 0, 1, 3)), -1);
};