mrange: solve lower-dim-reformat issue
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
ab13d97b03
commit
d66164e874
2 changed files with 20 additions and 4 deletions
|
@ -551,6 +551,12 @@ namespace CNORXZ
|
||||||
GMIndex<FormatT,Indices...>&
|
GMIndex<FormatT,Indices...>&
|
||||||
GMIndex<FormatT,Indices...>::reformat(const Vector<SizeT>& f, const Vector<SizeT>& s)
|
GMIndex<FormatT,Indices...>::reformat(const Vector<SizeT>& f, const Vector<SizeT>& s)
|
||||||
{
|
{
|
||||||
|
if(f.size() == 1){
|
||||||
|
CXZ_ASSERT(s.size() == 1, "f.size() != s.size()");
|
||||||
|
CXZ_ASSERT(s[0] == lmax().val(), "got inconsistent size; expeected "
|
||||||
|
<< lmax().val() << ", got " << s[0]);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
if constexpr(std::is_same<FormatT,None>::value){
|
if constexpr(std::is_same<FormatT,None>::value){
|
||||||
CXZ_ASSERT(CNORXZ::formatIsTrivial(f,s),
|
CXZ_ASSERT(CNORXZ::formatIsTrivial(f,s),
|
||||||
"cannot reformat MIndex with format type = None");
|
"cannot reformat MIndex with format type = None");
|
||||||
|
@ -590,9 +596,7 @@ namespace CNORXZ
|
||||||
mIPack[i]->reformat(nf,ns);
|
mIPack[i]->reformat(nf,ns);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// TODO: IMPLEMENT!!!
|
CXZ_ERROR("reformating with lower-dimensional formats is not possible; use sub-indices instead");
|
||||||
// check trivial format in this partition
|
|
||||||
CXZ_ERROR("reformating with lower-dimensional formats has not yet been implemented");
|
|
||||||
}
|
}
|
||||||
}, NoF {});
|
}, NoF {});
|
||||||
mFormat = FormatT(nformat);
|
mFormat = FormatT(nformat);
|
||||||
|
|
|
@ -66,6 +66,7 @@ namespace
|
||||||
{
|
{
|
||||||
GMIndex<MFormat<4>,CIndex,CIndex,CIndex,CIndex> mi(mRange);
|
GMIndex<MFormat<4>,CIndex,CIndex,CIndex,CIndex> mi(mRange);
|
||||||
MIndex<CIndex,CIndex,CIndex,CIndex,CIndex> mi2(mRange2);
|
MIndex<CIndex,CIndex,CIndex,CIndex,CIndex> mi2(mRange2);
|
||||||
|
GMIndex<MFormat<4>,CIndex,GMIndex<MFormat<3>,CIndex,CIndex,CIndex>,CIndex,CIndex> mi32(mRange);
|
||||||
EXPECT_EQ(mi.lmax().val(), mRange->size());
|
EXPECT_EQ(mi.lmax().val(), mRange->size());
|
||||||
EXPECT_EQ(mi2.lmax().val(), mRange2->size());
|
EXPECT_EQ(mi2.lmax().val(), mRange2->size());
|
||||||
auto yi = indexAs<YIndex>( mRange->begin() );
|
auto yi = indexAs<YIndex>( mRange->begin() );
|
||||||
|
@ -79,9 +80,20 @@ namespace
|
||||||
|
|
||||||
yi.setFormat( YFormat( Vector<SizeT>{ mi2.format()[CSizeT<0>{}].val(), mi2.format()[CSizeT<1>{}].val(), mi2.format()[CSizeT<2>{}].val(), mi2.format()[CSizeT<4>{}].val() } ) );
|
yi.setFormat( YFormat( Vector<SizeT>{ mi2.format()[CSizeT<0>{}].val(), mi2.format()[CSizeT<1>{}].val(), mi2.format()[CSizeT<2>{}].val(), mi2.format()[CSizeT<4>{}].val() } ) );
|
||||||
VCHECK(toString(yi.deepFormat()));
|
VCHECK(toString(yi.deepFormat()));
|
||||||
|
|
||||||
mi.reformat( yi.deepFormat(), yi.deepMax() );
|
mi.reformat( yi.deepFormat(), yi.deepMax() );
|
||||||
VCHECK(toString(mi.deepFormat()));
|
VCHECK(toString(mi.deepFormat()));
|
||||||
VCHECK(toString(mi.deepMax()));
|
VCHECK(toString(mi.deepMax()));
|
||||||
|
|
||||||
|
yi.setFormat( YFormat( Vector<SizeT>{ 13, 143, 1, 15015 } ) );
|
||||||
|
VCHECK(toString(yi.deepFormat()));
|
||||||
|
mi.reformat( yi.deepFormat(), yi.deepMax() );
|
||||||
|
VCHECK(toString(mi.deepFormat()));
|
||||||
|
VCHECK(toString(mi.deepMax()));
|
||||||
|
|
||||||
|
mi32.reformat( Vector<SizeT> { 105,1,2310,1155 }, Vector<SizeT> { 11,105,13,2 } );
|
||||||
|
VCHECK(toString(yi.deepFormat()));
|
||||||
|
mi32.reformat( yi.deepFormat(), yi.deepMax() );
|
||||||
|
VCHECK(toString(mi32.deepFormat()));
|
||||||
|
VCHECK(toString(mi32.deepMax()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue