From 811e955491ea6bdb972dd1fabdeb0c1e2e3bbe6b Mon Sep 17 00:00:00 2001 From: Christian Zimmermann Date: Sun, 11 Jun 2023 03:06:30 +0200 Subject: [PATCH] WIP: EIndex tests --- src/include/ranges/eindex.cc.h | 32 +++++++++++++++++++++-- src/include/ranges/eindex.h | 13 +++++++-- src/tests/operation_unit_test.cc | 45 ++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 4 deletions(-) diff --git a/src/include/ranges/eindex.cc.h b/src/include/ranges/eindex.cc.h index 9af559c..d9adc46 100644 --- a/src/include/ranges/eindex.cc.h +++ b/src/include/ranges/eindex.cc.h @@ -35,17 +35,45 @@ namespace CNORXZ } template - decltype(auto) eindexPtr(const Sptr,L>& i) + decltype(auto) eindexPtr(const Sptr>& i) { return eindexPtr( lindexPtr( i ) ); } template - decltype(auto) eindexPtr(const Sptr,L>& i, CSizeT l) + decltype(auto) eindexPtr(const Sptr>& i, CSizeT l) { return eindexPtr( i ); } + template + decltype(auto) eplex(const Sptr& i) + { + const SizeT isize = i->lmax().val() + CXZ_ASSERT(isize % S == 0, "index max (= " << isize + << " ) not dividable by extension size = " << S); + auto ci = std::make_shared( CRangeFactory(isize/L).create() ); + auto ei = eindexPtr( std::make_shared>( SRangeFactory().create() ) ); + if constexpr(L2 == 0){ + return spackp(ci,ei); + } + else { + return spackp(lindex(ci),ei); + } + } + + template + decltype(auto) eplex(const Sptr& i, CSizeT s, CSizeT l) + { + return eplex(i); + } + + template + decltype(auto) eplex(const Sptr& i, CSizeT s, CSizeT l1, CSizeT l2) + { + return eplex(i); + } + } #endif diff --git a/src/include/ranges/eindex.h b/src/include/ranges/eindex.h index 55bd8f5..ad14c58 100644 --- a/src/include/ranges/eindex.h +++ b/src/include/ranges/eindex.h @@ -35,10 +35,19 @@ namespace CNORXZ decltype(auto) eindexPtr(const Sptr,L>>& i); template - decltype(auto) eindexPtr(const Sptr,L>& i); + decltype(auto) eindexPtr(const Sptr>& i); template - decltype(auto) eindexPtr(const Sptr,L>& i, CSizeT l); + decltype(auto) eindexPtr(const Sptr>& i, CSizeT l); + + template + decltype(auto) eplex(const Sptr& i); + + template + decltype(auto) eplex(const Sptr& i, CSizeT s, CSizeT l); + + template + decltype(auto) eplex(const Sptr& i, CSizeT s, CSizeT l1, CSizeT l2); } diff --git a/src/tests/operation_unit_test.cc b/src/tests/operation_unit_test.cc index 2e2bb4c..308fb56 100644 --- a/src/tests/operation_unit_test.cc +++ b/src/tests/operation_unit_test.cc @@ -94,6 +94,51 @@ namespace //COpRoot mOR1i2i; }; + class OpCont_CR_CR_Test2 : public ::testing::Test + { + protected: + + typedef MIndex,EIndex> MCCI; + + OpCont_CR_CR_Test() + { + mSize1 = 12; + mSize2 = 11; + SizeT off = 20; + mData1 = Numbers::get(off, mSize1); + mData2 = Numbers::get(off += mSize1 , mSize2); + mData11 = Numbers::get(off += mSize2, mSize1*mSize1); + mData12 = Numbers::get(off += mSize1*mSize1, mSize1*mSize2); + auto cr1 = CRangeFactory(mSize1).create(); + auto cr2 = CRangeFactory(mSize2).create(); + mCI1i = std::make_shared(cr1); + mCI1j = std::make_shared(cr1); + mCI2i = std::make_shared(cr2); + mCI2j = std::make_shared(cr2); + mCC1i1j = mindexPtr(mCI1i*eplex(mCI1j,4,1,2)); + mCC1j1i = mindexPtr(eplex(mCI1j,4,1,2)*mCI1i); + mOC1i1j.init(mCC1i1j); + mOR1j1i.init(mData11.data(), mCC1j1i); + mOR1i1j.init(mData11.data(), mCC1i1j); + } + + SizeT mSize1; + SizeT mSize2; + Vector mData1; + Vector mData2; + Vector mData11; + Vector mData12; + Sptr mCI1i; + Sptr mCI1j; + Sptr mCI2i; + Sptr mCI2j; + Sptr mCC1i1j; + Sptr mCC1j1i; + OpCont mOC1i1j; + COpRoot mOR1j1i; + COpRoot mOR1i1j; + }; + TEST_F(OpCont_CR_Test, Basics) { EXPECT_EQ(mOp2.data(), mData1.data());