URange cast for PRanges + fix mpi test
This commit is contained in:
parent
f55c38cc65
commit
bd8970ae33
3 changed files with 19 additions and 3 deletions
|
@ -359,7 +359,10 @@ namespace CNORXZ
|
|||
template <typename T>
|
||||
static inline Sptr<URange<MetaT>> transform(const RangePtr& r)
|
||||
{
|
||||
if(r->type() == typeid(URange<T>)){
|
||||
if(r->type() == typeid(PRange<URange<T>>)){
|
||||
return transform<T>( std::dynamic_pointer_cast<PRange<URange<T>>>(r)->derive() );
|
||||
}
|
||||
else if(r->type() == typeid(URange<T>)){
|
||||
auto rr = std::dynamic_pointer_cast<URange<T>>(r);
|
||||
Vector<MetaT> v(rr->size());
|
||||
std::transform(rr->begin(), rr->end(), v.begin(),
|
||||
|
|
|
@ -51,7 +51,9 @@ namespace CNORXZ
|
|||
auto jb = global->begin();
|
||||
auto je = global->begin();
|
||||
MArray<RangePtr> o(geom);
|
||||
o(k) = operation( [&](const SizeT x){ jb = n*x; je = n*(x+1)-1; return jb.prange(je); } , xpr(k) );
|
||||
o(k) = operation( [&](const SizeT x){
|
||||
jb = n*x; je = n*(x+1)-1; return jb.prange(je);
|
||||
} , xpr(k) );
|
||||
return o;
|
||||
}
|
||||
}
|
||||
|
@ -66,7 +68,7 @@ namespace CNORXZ
|
|||
}
|
||||
}
|
||||
assert(o);
|
||||
auto loc = rangeCast<YRange>(global);
|
||||
auto loc = rangeCast<YRange>(o);
|
||||
auto geo = rangeCast<YRange>(geom);
|
||||
RRangeFactory<YRange,YRange> xx(loc, geo);
|
||||
return RRangeFactory<YRange,YRange>(loc, geo).create();
|
||||
|
|
|
@ -34,6 +34,14 @@ namespace
|
|||
CXZ_ASSERT(getNumRanks() == 4, "exptected 4 ranks");
|
||||
Vector<Int> xs(12);
|
||||
Vector<Int> ts(16);
|
||||
for(SizeT i = 0; i != xs.size(); ++i){
|
||||
const Int x = static_cast<Int>(i) - static_cast<Int>(xs.size()/2);
|
||||
xs[i] = x;
|
||||
}
|
||||
for(SizeT i = 0; i != ts.size(); ++i){
|
||||
const Int t = static_cast<Int>(i) - static_cast<Int>(ts.size()/2);
|
||||
ts[i] = t;
|
||||
}
|
||||
mXRange = URangeFactory<Int>(xs).create();
|
||||
mTRange = URangeFactory<Int>(ts).create();
|
||||
Vector<RangePtr> rs { mTRange, mXRange, mXRange, mXRange };
|
||||
|
@ -55,6 +63,9 @@ namespace
|
|||
TEST_F(RRange_Test, Basics)
|
||||
{
|
||||
EXPECT_EQ(mRRange->size(), mGRange->size());
|
||||
typedef UIndex<Int> UI;
|
||||
MIndex<UI,UI,UI,UI> mi(mRRange->sub(1));
|
||||
EXPECT_EQ(mi.lmax().val(), mGRange->size()/mRRange->sub(0)->size());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue