//================================================================================================== /* ROTGEN - Runtime Overlay for Eigen Copyright : CODE RECKONS SPDX-License-Identifier: BSL-1.0 */ //================================================================================================== #include "unit/tests.hpp" #include #include TTS_CASE_TPL("outer_stride<0> interactions", rotgen::tests::types) ( tts::type< tts::types> ) { using mat_t = rotgen::matrix; T contiguous[] = {1,2,3, 4,5,6, 7,8,9, 10,11,12}; rotgen::map> m(&contiguous[0], 4, 3); TTS_EQUAL(m.innerStride(), 1); TTS_EQUAL(m.outerStride(), O::value == rotgen::ColMajor ? 4 : 3); if constexpr(O::value == rotgen::ColMajor) { T padded[] = {1,2,3,4, 99, 5,6,7,8, 99,9,10,11,12}; rotgen::map> sp(&padded[0], 4, 3); TTS_EQUAL(sp.innerStride(), 1); TTS_EQUAL(sp.outerStride(), 5); rotgen::map> dp(&padded[0], 4, 3,rotgen::outer_stride(5)); TTS_EQUAL(dp.innerStride(), 1); TTS_EQUAL(dp.outerStride(), 5); TTS_EQUAL(m , sp); TTS_EQUAL(m , dp); TTS_EQUAL(dp, sp); } else { T padded[] = {1,2,3, 99, 4,5,6, 99, 7,8,9, 99, 10,11,12}; rotgen::map> sp(&padded[0], 4, 3); TTS_EQUAL(sp.innerStride(), 1); TTS_EQUAL(sp.outerStride(), 4); rotgen::map> dp(&padded[0], 4, 3,rotgen::outer_stride(4)); TTS_EQUAL(dp.innerStride(), 1); TTS_EQUAL(dp.outerStride(), 4); TTS_EQUAL(m , sp); TTS_EQUAL(m , dp); TTS_EQUAL(dp, sp); } }; void process_ref(rotgen::ref> ) {} void process_ref(rotgen::ref>) {} void process_ref(rotgen::ref>) {} void process_ref(rotgen::ref>) {} TTS_CASE_TPL("Extraction of outer_stride blocks", rotgen::tests::types) ( tts::type< tts::types> ) { using mat_t = rotgen::matrix; if constexpr(O::value == rotgen::ColMajor) { T padded[] = {1,2,3,4, 99, 5,6,7,8, 99,9,10,11,12}; rotgen::map> sp(&padded[0], 4, 3); rotgen::map> dp(&padded[0], 4, 3,rotgen::outer_stride(5)); TTS_EXPECT_COMPILES(sp, { process_ref(extract(sp,0, 0, 3, 2)); } ); TTS_EXPECT_COMPILES(dp, { process_ref(extract(dp,0, 0, 3, 2)); } ); } else { T padded[] = {1,2,3, 99, 4,5,6, 99, 7,8,9, 99, 10,11,12}; rotgen::map> sp(&padded[0], 4, 3); rotgen::map> dp(&padded[0], 4, 3,rotgen::outer_stride(4)); TTS_EXPECT_COMPILES(sp, { process_ref(extract(sp,0, 0, 3, 2)); } ); TTS_EXPECT_COMPILES(dp, { process_ref(extract(dp,0, 0, 3, 2)); } ); } };