WIP: fix compile errors regarding first extension operation test
This commit is contained in:
parent
1919d373df
commit
717e4a6548
6 changed files with 76 additions and 16 deletions
|
@ -7,6 +7,12 @@
|
||||||
|
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
template <SizeT I>
|
||||||
|
UPos CIndex::stepSize(const IndexId<I>& id) const
|
||||||
|
{
|
||||||
|
return UPos(id == this->id() ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
template <class Index>
|
template <class Index>
|
||||||
decltype(auto) CIndex::reformat(const Sptr<Index>& ind) const
|
decltype(auto) CIndex::reformat(const Sptr<Index>& ind) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -38,7 +38,9 @@ namespace CNORXZ
|
||||||
|
|
||||||
SizeT dim() const; // = 1
|
SizeT dim() const; // = 1
|
||||||
Sptr<RangeType> range() const;
|
Sptr<RangeType> range() const;
|
||||||
UPos stepSize(const IndexId<0>& id) const;
|
|
||||||
|
template <SizeT I>
|
||||||
|
UPos stepSize(const IndexId<I>& id) const;
|
||||||
|
|
||||||
String stringMeta() const;
|
String stringMeta() const;
|
||||||
SizeT meta() const;
|
SizeT meta() const;
|
||||||
|
|
|
@ -629,13 +629,26 @@ namespace CNORXZ
|
||||||
* Traits and Helper-Classes *
|
* Traits and Helper-Classes *
|
||||||
*********************************/
|
*********************************/
|
||||||
|
|
||||||
template <SizeT N, class BPosT, class OPosT>
|
template <class BPosT, class OPosT, SizeT N>
|
||||||
decltype(auto) mkEPos(const BPosT& a, const OPosT& b)
|
decltype(auto) MkEPos<BPosT,OPosT,N>::mk(const BPosT& a, const OPosT& b)
|
||||||
{
|
{
|
||||||
return mkiEPos(a, b, std::make_index_sequence<N>{});
|
return mkiEPos(a, b, std::make_index_sequence<N>{});
|
||||||
}
|
}
|
||||||
|
|
||||||
template <SizeT N, class BPosT, class OPosT, SizeT... Is>
|
template <class BPosT, class NPosT, class OPosT, SizeT N>
|
||||||
|
decltype(auto) MkEPos<MPos<BPosT,NPosT>,OPosT,N>::mk(const MPos<BPosT,NPosT>& a, const OPosT& b)
|
||||||
|
{
|
||||||
|
const BPosT& ax = static_cast<const BPosT&>(a);
|
||||||
|
return MPos<decltype(mkEPos<N>(ax,b)),NPosT>(mkEPos<N>(ax,b), a.next());
|
||||||
|
}
|
||||||
|
|
||||||
|
template <SizeT N, class BPosT, class OPosT>
|
||||||
|
decltype(auto) mkEPos(const BPosT& a, const OPosT& b)
|
||||||
|
{
|
||||||
|
return MkEPos<BPosT,OPosT,N>::mk(a,b);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class BPosT, class OPosT, SizeT... Is>
|
||||||
decltype(auto) mkiEPos(const BPosT& a, const OPosT& b, std::index_sequence<Is...> is)
|
decltype(auto) mkiEPos(const BPosT& a, const OPosT& b, std::index_sequence<Is...> is)
|
||||||
{
|
{
|
||||||
return EPos<BPosT,decltype(b*SPos<Is>())...>(a, b*SPos<Is>()...);
|
return EPos<BPosT,decltype(b*SPos<Is>())...>(a, b*SPos<Is>()...);
|
||||||
|
|
|
@ -308,7 +308,7 @@ namespace CNORXZ
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
struct epos_size
|
struct epos_size
|
||||||
{
|
{
|
||||||
static constexpr SizeT value = 0;
|
static constexpr SizeT value = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class OPosT1, class OPosT2, class... OPosTs>
|
template <class OPosT1, class OPosT2, class... OPosTs>
|
||||||
|
@ -339,10 +339,22 @@ namespace CNORXZ
|
||||||
|
|
||||||
template <class PosT> struct pos_type_is_consecutive { CXZ_CVAL_TRUE; };
|
template <class PosT> struct pos_type_is_consecutive { CXZ_CVAL_TRUE; };
|
||||||
|
|
||||||
|
template <class BPosT, class OPosT, SizeT N>
|
||||||
|
struct MkEPos
|
||||||
|
{
|
||||||
|
static decltype(auto) mk(const BPosT& a, const OPosT& b);
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class BPosT, class NPosT, class OPosT, SizeT N>
|
||||||
|
struct MkEPos<MPos<BPosT,NPosT>,OPosT,N>
|
||||||
|
{
|
||||||
|
static decltype(auto) mk(const MPos<BPosT,NPosT>& a, const OPosT& b);
|
||||||
|
};
|
||||||
|
|
||||||
template <SizeT N, class BPosT, class OPosT>
|
template <SizeT N, class BPosT, class OPosT>
|
||||||
decltype(auto) mkEPos(const BPosT& a, const OPosT& b);
|
decltype(auto) mkEPos(const BPosT& a, const OPosT& b);
|
||||||
|
|
||||||
template <SizeT N, class BPosT, class OPosT, SizeT... Is>
|
template <class BPosT, class OPosT, SizeT... Is>
|
||||||
decltype(auto) mkiEPos(const BPosT& a, const OPosT& b, std::index_sequence<Is...> is);
|
decltype(auto) mkiEPos(const BPosT& a, const OPosT& b, std::index_sequence<Is...> is);
|
||||||
|
|
||||||
/**************************************************
|
/**************************************************
|
||||||
|
@ -377,6 +389,8 @@ namespace CNORXZ
|
||||||
{ static constexpr bool value = is_static_pos_type<BPosT>::value and (is_static_pos_type<OPosTs>::value and ...); };
|
{ static constexpr bool value = is_static_pos_type<BPosT>::value and (is_static_pos_type<OPosTs>::value and ...); };
|
||||||
template <class BPosT, class... OPosTs> struct is_epos_type<EPos<BPosT,OPosTs...>> { CXZ_CVAL_TRUE; };
|
template <class BPosT, class... OPosTs> struct is_epos_type<EPos<BPosT,OPosTs...>> { CXZ_CVAL_TRUE; };
|
||||||
|
|
||||||
|
template <class BPosT, class NPosT> struct is_epos_type<MPos<BPosT,NPosT>> { static constexpr bool value = is_epos_type<BPosT>::value or is_epos_type<NPosT>::value; };
|
||||||
|
|
||||||
template <class BPosT, class NPosT>
|
template <class BPosT, class NPosT>
|
||||||
struct static_pos_size<MPos<BPosT,NPosT>>
|
struct static_pos_size<MPos<BPosT,NPosT>>
|
||||||
{
|
{
|
||||||
|
@ -389,6 +403,12 @@ namespace CNORXZ
|
||||||
static constexpr SizeT value = sizeof...(OPosTs);
|
static constexpr SizeT value = sizeof...(OPosTs);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <class BPosT, class NPosT>
|
||||||
|
struct epos_size<MPos<BPosT,NPosT>>
|
||||||
|
{
|
||||||
|
static constexpr SizeT value = epos_size<BPosT>::value * epos_size<NPosT>::value;
|
||||||
|
};
|
||||||
|
|
||||||
template <class BPosT, class... OPosTs>
|
template <class BPosT, class... OPosTs>
|
||||||
struct pos_type_is_consecutive<EPos<BPosT,OPosTs...>>
|
struct pos_type_is_consecutive<EPos<BPosT,OPosTs...>>
|
||||||
{
|
{
|
||||||
|
|
|
@ -87,11 +87,6 @@ namespace CNORXZ
|
||||||
return mRangePtr;
|
return mRangePtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
UPos CIndex::stepSize(const IndexId<0>& id) const
|
|
||||||
{
|
|
||||||
return UPos(id == this->id() ? 1 : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
String CIndex::stringMeta() const
|
String CIndex::stringMeta() const
|
||||||
{
|
{
|
||||||
return toString(IB::mPos);
|
return toString(IB::mPos);
|
||||||
|
|
|
@ -70,7 +70,7 @@ namespace
|
||||||
//mCC1j2i = mindexPtr(mCI1j*mCI2i);
|
//mCC1j2i = mindexPtr(mCI1j*mCI2i);
|
||||||
mOC1i1j.init(mCC1i1j);
|
mOC1i1j.init(mCC1i1j);
|
||||||
mOR1j1i.init(mData11.data(), mCC1j1i);
|
mOR1j1i.init(mData11.data(), mCC1j1i);
|
||||||
mOR1i1j.init(mData11.data(), mCC1i1j);
|
mOR1i1j.init(mData12.data(), mCC1i1j);
|
||||||
}
|
}
|
||||||
|
|
||||||
SizeT mSize1;
|
SizeT mSize1;
|
||||||
|
@ -120,7 +120,7 @@ namespace
|
||||||
mCC1j1i = mindexPtr(eplex<4,1,2>(mCI1j)*mCI1i);
|
mCC1j1i = mindexPtr(eplex<4,1,2>(mCI1j)*mCI1i);
|
||||||
mOC1i1j.init(mCC1i1j);
|
mOC1i1j.init(mCC1i1j);
|
||||||
mOR1j1i.init(mData11.data(), mCC1j1i);
|
mOR1j1i.init(mData11.data(), mCC1j1i);
|
||||||
mOR1i1j.init(mData11.data(), mCC1i1j);
|
mOR1i1j.init(mData12.data(), mCC1i1j);
|
||||||
}
|
}
|
||||||
|
|
||||||
SizeT mSize1;
|
SizeT mSize1;
|
||||||
|
@ -230,4 +230,28 @@ namespace
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(OpCont_CR_CR_Test2, Assignment)
|
||||||
|
{
|
||||||
|
mOC1i1j = mOR1j1i;
|
||||||
|
for(SizeT i = 0; i != mCI1i->pmax().val(); ++i){
|
||||||
|
for(SizeT j = 0; j != mCI1j->pmax().val(); ++j){
|
||||||
|
const SizeT jS = mCI1j->pmax().val();
|
||||||
|
const SizeT iS = mCI1i->pmax().val();
|
||||||
|
EXPECT_EQ(mOC1i1j.data()[i*jS+j], mOR1j1i.data()[j*iS+i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(OpCont_CR_CR_Test2, Multiply)
|
||||||
|
{
|
||||||
|
mOC1i1j = mOR1j1i * mOR1i1j;
|
||||||
|
for(SizeT i = 0; i != mCI1i->pmax().val(); ++i){
|
||||||
|
for(SizeT j = 0; j != mCI1j->pmax().val(); ++j){
|
||||||
|
const SizeT jS = mCI1j->pmax().val();
|
||||||
|
const SizeT iS = mCI1i->pmax().val();
|
||||||
|
EXPECT_EQ(mOC1i1j.data()[i*jS+j], mOR1j1i.data()[j*iS+i] * mOR1i1j.data()[i*jS+j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue