//================================================================================================== /* ROTGEN - Runtime Overlay for Eigen Copyright : CODE RECKONS SPDX-License-Identifier: BSL-1.0 */ //================================================================================================== #include "unit/tests.hpp" #include TTS_CASE_TPL("Chains of extraction", rotgen::tests::types) ( tts::type< tts::types> ) { constexpr int N = 8; auto a = rotgen::matrix::Random(); auto b = topLeftCorner(a,5,5); TTS_EQUAL(b.startRow(), 0); TTS_EQUAL(b.startCol(), 0); setConstant(b,-7); for(rotgen::Index r=0;r<5;r++) for(rotgen::Index c=0;c<5;c++) TTS_EQUAL(a(r,c), -7); auto bb = bottomRightCorner(b,3,3); TTS_EQUAL(bb.startRow(), 2); TTS_EQUAL(bb.startCol(), 2); setConstant(bb,42); for(rotgen::Index r=2;r<5;r++) for(rotgen::Index c=2;c<5;c++) TTS_EQUAL(a(r,c), 42); auto bbb = row(bb,1); TTS_EQUAL(bbb.startRow(), 1); TTS_EQUAL(bbb.startCol(), 0); setConstant(bbb,99.5); for(rotgen::Index c=3;c<5;c++) TTS_EQUAL(a(3,c), 99.5); auto bbbb = col(bbb,1); TTS_EQUAL(bbbb.startRow(), 0); TTS_EQUAL(bbbb.startCol(), 1); setConstant(bbbb,0.125); TTS_EQUAL(a(3,3), 0.125); }; auto ref_extract ( rotgen::ref > m) { return rotgen::extract(m,0,0,3,4); } auto ref_cextract( rotgen::ref > m) { return rotgen::extract(m,3,4,4,3); } TTS_CASE("Extraction of ref/ref const") { auto m = rotgen::setRandom>(); auto extracted = ref_extract(m); extracted = rotgen::setOnes>(); for(rotgen::Index r=0;r<3;r++) for(rotgen::Index c=0;c<4;c++) TTS_EQUAL(m(r,c), 1.f); auto sliced = ref_cextract(m); rotgen::extract(m,3,4,4,3) = rotgen::setConstant>(5); for(rotgen::Index r=0;r<4;r++) for(rotgen::Index c=0;c<3;c++) TTS_EQUAL(sliced(r,c), 5.f); };