69 |
{ |
{ |
70 |
using namespace escript::DataTypes; |
using namespace escript::DataTypes; |
71 |
cout << endl; |
cout << endl; |
|
{ |
|
|
// first we test the deep copy |
|
|
cout << "\tTest deep copy DataConstant" << endl; |
|
|
DataTypes::ShapeType shape; |
|
|
shape.push_back(2); |
|
|
shape.push_back(3); |
|
|
DataTypes::ValueType data(DataTypes::noValues(shape),1); |
|
|
DataConstant* dc=new DataConstant(FunctionSpace(),shape,data); |
|
|
Data d(dc); |
|
|
|
|
|
Data* deep=d.copySelf(); // test self copy |
|
|
for (int i=0;i<DataTypes::noValues(shape);++i) |
|
|
{ |
|
|
if (d.getDataAtOffset(i)!=deep->getDataAtOffset(i)) |
|
|
assert(false); |
|
|
} |
|
|
d.setToZero(); |
|
|
for (int i=0;i<DataTypes::noValues(shape);++i) |
|
|
{ |
|
|
if (d.getDataAtOffset(i)==deep->getDataAtOffset(i)) |
|
|
assert(false); |
|
|
} |
|
|
d.copy(*deep); // test copy from object |
|
|
for (int i=0;i<DataTypes::noValues(shape);++i) |
|
|
{ |
|
|
if (d.getDataAtOffset(i)!=deep->getDataAtOffset(i)) |
|
|
assert(false); |
|
|
} |
|
|
d.setToZero(); |
|
|
for (int i=0;i<DataTypes::noValues(shape);++i) |
|
|
{ |
|
|
if (d.getDataAtOffset(i)==deep->getDataAtOffset(i)) |
|
|
assert(false); |
|
|
} |
|
|
delete deep; |
|
|
} |
|
72 |
|
|
73 |
|
DataTypes::ShapeType shape; |
74 |
|
shape.push_back(2); |
75 |
|
shape.push_back(3); |
76 |
|
DataTypes::ValueType data(DataTypes::noValues(shape),1); |
77 |
|
const int NUMDATS=3; |
78 |
|
Data* dats[NUMDATS]; |
79 |
|
char* strs[]={"DataConstant", "DataTagged", "DataExpanded"}; |
80 |
|
dats[0]=new Data(new DataConstant(FunctionSpace(),shape,data)); |
81 |
|
dats[1]=new Data(new DataTagged(FunctionSpace(),shape,data)); |
82 |
|
dats[2]=new Data(new DataExpanded(FunctionSpace(),shape,data)); |
83 |
|
|
84 |
|
for (int k=0;k<NUMDATS;++k) |
85 |
{ |
{ |
86 |
// first we test the deep copy |
cout << "\tTest deep copy " << strs[k] << endl; |
87 |
cout << "\tTest deep copy DataExpanded" << endl; |
Data* d=dats[k]; |
88 |
DataTypes::ShapeType shape; |
Data* deep=d->copySelf(); // test self copy |
|
shape.push_back(2); |
|
|
shape.push_back(3); |
|
|
DataTypes::ValueType data(DataTypes::noValues(shape),1); |
|
|
DataExpanded* dc=new DataExpanded(FunctionSpace(),shape,data); |
|
|
Data d(dc); |
|
|
|
|
|
Data* deep=d.copySelf(); // test self copy |
|
89 |
for (int i=0;i<DataTypes::noValues(shape);++i) |
for (int i=0;i<DataTypes::noValues(shape);++i) |
90 |
{ |
{ |
91 |
if (d.getDataAtOffset(i)!=deep->getDataAtOffset(i)) |
if (d->getDataAtOffset(i)!=deep->getDataAtOffset(i)) |
92 |
assert(false); |
assert(false); |
93 |
} |
} |
94 |
d.setToZero(); |
d->setToZero(); |
95 |
for (int i=0;i<DataTypes::noValues(shape);++i) |
for (int i=0;i<DataTypes::noValues(shape);++i) |
96 |
{ |
{ |
97 |
if (d.getDataAtOffset(i)==deep->getDataAtOffset(i)) |
if (d->getDataAtOffset(i)==deep->getDataAtOffset(i)) |
98 |
assert(false); |
assert(false); |
99 |
} |
} |
100 |
d.copy(*deep); // test copy from object |
d->copy(*deep); // test copy from object |
101 |
for (int i=0;i<DataTypes::noValues(shape);++i) |
for (int i=0;i<DataTypes::noValues(shape);++i) |
102 |
{ |
{ |
103 |
if (d.getDataAtOffset(i)!=deep->getDataAtOffset(i)) |
if (d->getDataAtOffset(i)!=deep->getDataAtOffset(i)) |
104 |
assert(false); |
assert(false); |
105 |
} |
} |
106 |
d.setToZero(); |
d->setToZero(); |
107 |
for (int i=0;i<DataTypes::noValues(shape);++i) |
for (int i=0;i<DataTypes::noValues(shape);++i) |
108 |
{ |
{ |
109 |
if (d.getDataAtOffset(i)==deep->getDataAtOffset(i)) |
if (d->getDataAtOffset(i)==deep->getDataAtOffset(i)) |
|
assert(false); |
|
|
} |
|
|
delete deep; |
|
|
} |
|
|
{ |
|
|
// first we test the deep copy |
|
|
cout << "\tTest deep copy DataTagged" << endl; |
|
|
DataTypes::ShapeType shape; |
|
|
shape.push_back(2); |
|
|
shape.push_back(3); |
|
|
DataTypes::ValueType data(DataTypes::noValues(shape),1); |
|
|
DataTagged* dc=new DataTagged(FunctionSpace(),shape,data); |
|
|
Data d(dc); |
|
|
|
|
|
Data* deep=d.copySelf(); // test self copy |
|
|
for (int i=0;i<DataTypes::noValues(shape);++i) |
|
|
{ |
|
|
if (d.getDataAtOffset(i)!=deep->getDataAtOffset(i)) |
|
|
assert(false); |
|
|
} |
|
|
d.setToZero(); |
|
|
for (int i=0;i<DataTypes::noValues(shape);++i) |
|
|
{ |
|
|
if (d.getDataAtOffset(i)==deep->getDataAtOffset(i)) |
|
|
assert(false); |
|
|
} |
|
|
d.copy(*deep); // test copy from object |
|
|
for (int i=0;i<DataTypes::noValues(shape);++i) |
|
|
{ |
|
|
if (d.getDataAtOffset(i)!=deep->getDataAtOffset(i)) |
|
|
assert(false); |
|
|
} |
|
|
d.setToZero(); |
|
|
for (int i=0;i<DataTypes::noValues(shape);++i) |
|
|
{ |
|
|
if (d.getDataAtOffset(i)==deep->getDataAtOffset(i)) |
|
110 |
assert(false); |
assert(false); |
111 |
} |
} |
112 |
delete deep; |
delete deep; |
113 |
|
delete dats[k]; |
114 |
} |
} |
115 |
|
|
116 |
} |
} |
119 |
|
|
120 |
using namespace escript::DataTypes; |
using namespace escript::DataTypes; |
121 |
cout << endl; |
cout << endl; |
|
|
|
|
{ |
|
|
|
|
|
cout << "\tTest get-slicing DataConstant" << endl; |
|
|
|
|
|
DataTypes::ShapeType viewShape; |
|
|
viewShape.push_back(2); |
|
|
viewShape.push_back(3); |
|
|
Data data(1.3,viewShape,FunctionSpace(),false); |
|
|
|
|
|
//cout << data.toString() << endl; |
|
|
|
|
|
DataTypes::RegionType region; |
|
|
region.push_back(DataTypes::RegionType::value_type(0,0)); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,0)); |
|
|
|
|
|
Data slice1(data.getSlice(region)); |
|
|
|
|
|
//cout << slice1.toString() << endl; |
|
|
|
|
|
assert(slice1.getDataPointRank()==0); |
|
|
assert(slice1.getDataPoint(0,0)==1.3); |
|
|
|
|
|
region.clear(); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,1)); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,1)); |
|
|
|
|
|
Data slice2(data.getSlice(region)); |
|
|
|
|
|
//cout << slice2.toString() << endl; |
|
|
|
|
|
assert(slice2.getDataPointRank()==2); |
|
|
int off1=slice2.getDataOffset(0,0); |
|
|
// assert(slice2.getDataPoint(0,0)(0,0)==1.3); |
|
|
assert(slice2.getDataAtOffset(off1+getRelIndex(slice2.getDataPointShape(),0,0))==1.3); |
|
|
|
|
|
region.clear(); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,1)); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,2)); |
|
|
|
|
|
Data slice3(data.getSlice(region)); |
|
|
|
|
|
//cout << slice3.toString() << endl; |
|
|
|
|
|
assert(slice3.getDataPointRank()==2); |
|
|
off1=slice3.getDataOffset(0,0); |
|
|
// assert(slice3.getDataPoint(0,0)(0,0)==1.3); |
|
|
// assert(slice3.getDataPoint(0,0)(0,1)==1.3); |
|
|
assert(slice3.getDataAtOffset(off1+getRelIndex(slice3.getDataPointShape(),0,0))==1.3); |
|
|
assert(slice3.getDataAtOffset(off1+getRelIndex(slice3.getDataPointShape(),0,1))==1.3); |
|
|
|
|
|
} |
|
|
|
|
|
{ |
|
|
|
|
|
cout << "\tTest set-slicing DataConstant" << endl; |
|
|
|
|
|
DataTypes::ShapeType viewShape; |
|
|
Data source(10.0,viewShape,FunctionSpace(),false); |
|
|
|
|
|
//cout << source.toString() << endl; |
|
|
|
|
|
viewShape.push_back(2); |
|
|
viewShape.push_back(3); |
|
|
Data target(1.3,viewShape,FunctionSpace(),false); |
|
|
|
|
|
//cout << target.toString() << endl; |
|
|
|
|
|
DataTypes::RegionType region; |
|
|
region.push_back(DataTypes::RegionType::value_type(0,0)); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,0)); |
|
|
|
|
|
target.setSlice(source,region); |
|
|
|
|
|
//cout << target.toString() << endl; |
|
|
|
|
|
int off1=target.getDataOffset(0,0); |
|
|
assert(target.getDataAtOffset(off1+getRelIndex(target.getDataPointShape(),0,0)==source.getDataPoint(0,0))); |
|
|
|
|
|
} |
|
|
|
|
122 |
{ |
{ |
123 |
|
DataTypes::ShapeType viewShape; |
124 |
|
viewShape.push_back(2); |
125 |
|
viewShape.push_back(3); |
126 |
|
|
127 |
|
const int NUMDATS=3; |
128 |
|
char* strs[]={"DataConstant", "DataTagged","DataExpanded"}; |
129 |
|
bool tags[]={false,true,false}; // is the slice of this data supposed to be tagged |
130 |
|
Data* dats[NUMDATS]; |
131 |
|
for (int k=0;k<NUMDATS;++k) |
132 |
|
{ |
133 |
|
dats[k]=new Data(1.3, viewShape); |
134 |
|
} |
135 |
|
dats[1]->tag(); |
136 |
|
dats[2]->expand(); |
137 |
|
for (int k=0;k<NUMDATS;++k) |
138 |
|
{ |
139 |
|
cout << "\tTest get-slicing " << strs[k] << endl; |
140 |
|
dats[k]->getDataAtOffset(dats[k]->getDataOffset(0,0)+getRelIndex(viewShape,0,0))=1.0; |
141 |
|
dats[k]->getDataAtOffset(dats[k]->getDataOffset(0,0)+getRelIndex(viewShape,1,1))=2.0; |
142 |
|
|
143 |
|
DataTypes::RegionType region; |
144 |
|
region.push_back(DataTypes::RegionType::value_type(0,0)); |
145 |
|
region.push_back(DataTypes::RegionType::value_type(0,0)); |
146 |
|
|
147 |
|
Data slice1(dats[k]->getSlice(region)); |
148 |
|
|
149 |
|
if (tags[k]) {assert(slice1.isTagged());} |
150 |
|
assert(slice1.getDataPointRank()==0); |
151 |
|
assert(slice1.getDataPoint(0,0)==1.0); |
152 |
|
|
153 |
cout << "\tTest get-slicing DataTagged" << endl; |
// |
154 |
// |
// create a rank 2 slice with one value |
155 |
// create a DataTagged with a default value only |
|
156 |
|
region.clear(); |
157 |
DataTypes::ShapeType viewShape; |
region.push_back(DataTypes::RegionType::value_type(0,1)); |
158 |
viewShape.push_back(2); |
region.push_back(DataTypes::RegionType::value_type(0,1)); |
159 |
viewShape.push_back(3); |
|
160 |
Data data(1.3,viewShape,FunctionSpace(),false); |
Data slice2(dats[k]->getSlice(region)); |
161 |
data.tag(); |
|
162 |
data.getDataAtOffset(data.getDataOffset(0,0)+getRelIndex(viewShape,0,0))=1.0; |
//cout << slice2.toString() << endl; |
163 |
data.getDataAtOffset(data.getDataOffset(0,0)+getRelIndex(viewShape,1,1))=2.0; |
|
164 |
// data.getDataPoint(0,0)(0,0)=1.0; |
if (tags[k]) {assert(slice2.isTagged());} |
165 |
// data.getDataPoint(0,0)(1,1)=2.0; |
assert(slice2.getDataPointRank()==2); |
166 |
|
|
167 |
//cout << data.toString() << endl; |
assert(slice2.getDataAtOffset(slice2.getDataOffset(0,0)+getRelIndex(slice2.getDataPointShape(),0,0))==1.0); |
|
// |
|
|
// create a scalar slice |
|
|
|
|
|
DataTypes::RegionType region; |
|
|
region.push_back(DataTypes::RegionType::value_type(0,0)); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,0)); |
|
|
|
|
|
Data slice1(data.getSlice(region)); |
|
|
//cout << slice1.toString() << endl; |
|
|
|
|
|
assert(slice1.isTagged()); |
|
|
assert(slice1.getDataPointRank()==0); |
|
|
assert(slice1.getDataPoint(0,0)==1.0); |
|
|
// |
|
|
// create a rank 2 slice with one value |
|
|
|
|
|
region.clear(); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,1)); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,1)); |
|
|
|
|
|
Data slice2(data.getSlice(region)); |
|
|
|
|
|
//cout << slice2.toString() << endl; |
|
|
|
|
|
assert(slice2.isTagged()); |
|
|
assert(slice2.getDataPointRank()==2); |
|
|
|
|
|
assert(slice2.getDataAtOffset(slice2.getDataOffset(0,0)+getRelIndex(slice2.getDataPointShape(),0,0))==1.0); |
|
|
|
|
|
// |
|
|
// create a rank 2 slice with four values |
|
|
|
|
|
region.clear(); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,2)); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,2)); |
|
|
|
|
|
Data slice3(data.getSlice(region)); |
|
|
|
|
|
//cout << slice3.toString() << endl; |
|
|
|
|
|
assert(slice3.isTagged()); |
|
|
assert(slice3.getDataPointRank()==2); |
|
|
assert(getRef(slice3,0,0,0,0)==1.0); |
|
|
assert(getRef(slice3,0,0,0,1)==1.3); |
|
|
assert(getRef(slice3,0,0,1,0)==1.3); |
|
|
assert(getRef(slice3,0,0,1,1)==2.0); |
|
|
|
|
|
// |
|
|
// add a value for tag "1" |
|
|
|
|
|
DataTypes::ValueType viewData(6); |
|
|
for (int i=0;i<viewData.size();i++) { |
|
|
viewData[i]=i; |
|
|
} |
|
|
// DataArrayView dataView(viewData,viewShape); |
|
|
|
|
|
// data.setTaggedValueFromCPP(1, dataView); |
|
|
data.setTaggedValueFromCPP(1, viewShape, viewData); |
|
168 |
|
|
169 |
|
// |
170 |
|
// create a rank 2 slice with four values |
171 |
|
|
172 |
|
region.clear(); |
173 |
|
region.push_back(DataTypes::RegionType::value_type(0,2)); |
174 |
|
region.push_back(DataTypes::RegionType::value_type(0,2)); |
175 |
|
|
176 |
|
Data slice3(dats[k]->getSlice(region)); |
177 |
|
|
178 |
|
//cout << slice3.toString() << endl; |
179 |
|
|
180 |
|
if (tags[k]) {assert(slice3.isTagged());} |
181 |
|
assert(slice3.getDataPointRank()==2); |
182 |
|
assert(getRef(slice3,0,0,0,0)==1.0); |
183 |
|
assert(getRef(slice3,0,0,0,1)==1.3); |
184 |
|
assert(getRef(slice3,0,0,1,0)==1.3); |
185 |
|
assert(getRef(slice3,0,0,1,1)==2.0); |
186 |
|
} |
187 |
|
|
188 |
|
// now some extra tests for tagged data (dats[1]) |
189 |
|
|
190 |
|
// |
191 |
|
// add a value for tag "1" |
192 |
|
|
193 |
|
DataTypes::ValueType viewData(6); |
194 |
|
for (int i=0;i<viewData.size();i++) { |
195 |
|
viewData[i]=i; |
196 |
|
} |
197 |
|
dats[1]->setTaggedValueFromCPP(1, viewShape, viewData); |
198 |
|
|
199 |
// |
// |
200 |
// create a full slice |
// create a full slice |
201 |
|
|
202 |
region.clear(); |
DataTypes::RegionType region; |
203 |
region.push_back(DataTypes::RegionType::value_type(0,2)); |
region.push_back(DataTypes::RegionType::value_type(0,2)); |
204 |
region.push_back(DataTypes::RegionType::value_type(0,3)); |
region.push_back(DataTypes::RegionType::value_type(0,3)); |
205 |
|
|
206 |
Data slice4(data.getSlice(region)); |
Data slice4(dats[1]->getSlice(region)); |
207 |
|
|
208 |
//cout << slice4.toString() << endl; |
assert(slice4.isTagged()); |
209 |
|
assert(slice4.getDataPointRank()==2); |
210 |
assert(slice4.isTagged()); |
assert(getRef(slice4,0,0,0,0)==0); |
211 |
assert(slice4.getDataPointRank()==2); |
assert(getRef(slice4,0,0,0,1)==2); |
212 |
assert(getRef(slice4,0,0,0,0)==0); |
assert(getRef(slice4,0,0,0,2)==4); |
213 |
assert(getRef(slice4,0,0,0,1)==2); |
assert(getRef(slice4,0,0,1,0)==1); |
214 |
assert(getRef(slice4,0,0,0,2)==4); |
assert(getRef(slice4,0,0,1,1)==3); |
215 |
assert(getRef(slice4,0,0,1,0)==1); |
assert(getRef(slice4,0,0,1,2)==5); |
216 |
assert(getRef(slice4,0,0,1,1)==3); |
|
217 |
assert(getRef(slice4,0,0,1,2)==5); |
for (int k=0;k<NUMDATS;++k) |
218 |
|
{ |
219 |
|
delete dats[k]; |
220 |
|
} |
221 |
|
} |
222 |
|
|
223 |
|
{ |
224 |
|
DataTypes::ShapeType viewShape; |
225 |
|
viewShape.push_back(2); |
226 |
|
viewShape.push_back(3); |
227 |
|
|
228 |
|
const int NUMDATS=3; |
229 |
|
char* strs[]={"DataConstant", "DataTagged","DataExpanded"}; |
230 |
|
bool tags[]={false,true,false}; // is the slice of this data supposed to be tagged |
231 |
|
Data* dats[NUMDATS]; |
232 |
|
Data* src[NUMDATS]; |
233 |
|
for (int k=0;k<NUMDATS;++k) |
234 |
|
{ |
235 |
|
dats[k]=new Data(1.3, viewShape); |
236 |
|
src[k]=new Data(10,DataTypes::scalarShape); |
237 |
} |
} |
238 |
|
dats[1]->tag(); |
239 |
|
src[1]->tag(); |
240 |
|
dats[2]->expand(); |
241 |
|
src[2]->expand(); |
242 |
|
|
243 |
|
for (int k=0;k<NUMDATS;++k) |
244 |
{ |
{ |
245 |
|
cout << "\tTest set-slicing " << strs[k] << endl; |
246 |
|
Data target(1.3,viewShape); |
247 |
|
if (k==2) {target.expand();} |
248 |
|
DataTypes::RegionType region; |
249 |
|
region.push_back(DataTypes::RegionType::value_type(1,1)); |
250 |
|
region.push_back(DataTypes::RegionType::value_type(1,1)); |
251 |
|
target.setSlice(*(src[k]),region); |
252 |
|
assert(getRef(target,0,0,1,1)==src[k]->getDataPoint(0,0)); |
253 |
|
} |
254 |
|
|
255 |
|
// some extra tests on tagged data |
256 |
|
|
257 |
cout << "\tTest set-slicing DataTagged" << endl; |
// |
258 |
|
// add a value for tag "1" to target |
|
// |
|
|
// create a source DataTagged with a scalar default value only |
|
|
|
|
|
DataTypes::ShapeType viewShape; |
|
|
Data source(10.0,viewShape,FunctionSpace(),false); |
|
|
source.tag(); |
|
|
|
|
|
//cout << "source:\n" << source.toString() << endl; |
|
|
|
|
|
// |
|
|
// create a target DataTagged with a rank 2 default value only |
|
|
|
|
|
viewShape.push_back(2); |
|
|
viewShape.push_back(3); |
|
|
Data target(1.3,viewShape,FunctionSpace(),false); |
|
|
target.tag(); |
|
|
|
|
|
//cout << "target:\n" << target.toString() << endl; |
|
|
|
|
|
// |
|
|
// set a slice in target from source |
|
|
|
|
|
DataTypes::RegionType region; |
|
|
region.push_back(DataTypes::RegionType::value_type(1,1)); |
|
|
region.push_back(DataTypes::RegionType::value_type(1,1)); |
|
|
|
|
|
target.setSlice(source,region); |
|
|
|
|
|
//cout << "target:\n" << target.toString() << endl; |
|
|
|
|
|
assert(target.isTagged()); |
|
|
assert(target.getDataPointRank()==2); |
|
|
assert(getRef(target,0,0,0,0)==1.3); |
|
|
assert(getRef(target,0,0,0,1)==1.3); |
|
|
assert(getRef(target,0,0,0,2)==1.3); |
|
|
assert(getRef(target,0,0,1,0)==1.3); |
|
|
assert(getRef(target,0,0,1,1)==source.getDataPoint(0,0)); |
|
|
assert(getRef(target,0,0,1,2)==1.3); |
|
|
|
|
|
// |
|
|
// add a value for tag "1" to target |
|
|
|
|
|
DataTypes::ValueType viewData(6); |
|
|
for (int i=0;i<viewData.size();i++) { |
|
|
viewData[i]=i; |
|
|
} |
|
|
// DataArrayView dataView(viewData,viewShape); |
|
|
// |
|
|
// target.setTaggedValueFromCPP(1, dataView); |
|
|
target.setTaggedValueFromCPP(1, viewShape, viewData); |
|
|
|
|
|
//cout << "target:\n" << target.toString() << endl; |
|
|
|
|
|
// |
|
|
// set a slice in target from source |
|
259 |
|
|
260 |
region.clear(); |
DataTypes::ValueType viewData(6); |
261 |
region.push_back(DataTypes::RegionType::value_type(0,0)); |
for (int i=0;i<viewData.size();i++) { |
262 |
region.push_back(DataTypes::RegionType::value_type(1,1)); |
viewData[i]=i; |
263 |
|
} |
264 |
|
|
265 |
target.setSlice(source,region); |
Data target(1.3,viewShape,FunctionSpace(),false); |
266 |
|
target.tag(); |
267 |
|
target.setTaggedValueFromCPP(1, viewShape, viewData); |
268 |
|
|
269 |
//cout << "target:\n" << target.toString() << endl; |
//cout << "target:\n" << target.toString() << endl; |
270 |
|
|
|
assert(target.isTagged()); |
|
|
assert(target.getDataPointRank()==2); |
|
|
assert(getRef(target,0,0,0,0)==0); |
|
|
assert(getRef(target,0,0,0,1)==source.getDataPoint(0,0)); |
|
|
assert(getRef(target,0,0,0,2)==4); |
|
|
assert(getRef(target,0,0,1,0)==1); |
|
|
assert(getRef(target,0,0,1,1)==3); |
|
|
assert(getRef(target,0,0,1,2)==5); |
|
|
|
|
|
// |
|
|
// add a value for tag "2" to source |
|
|
|
|
|
DataTypes::ShapeType viewShape2; |
|
|
DataTypes::ValueType viewData2(1); |
|
|
viewData2[0]=6; |
|
|
// DataArrayView dataView2(viewData2,viewShape2); |
|
|
// |
|
|
// source.setTaggedValueFromCPP(2, dataView2); |
|
|
source.setTaggedValueFromCPP(2, viewShape2, viewData2); |
|
|
|
|
|
//cout << "source:\n" << source.toString() << endl; |
|
|
|
|
271 |
// |
// |
272 |
// set a slice in target from source |
// set a slice in target from source |
273 |
|
|
274 |
region.clear(); |
DataTypes::RegionType region; |
275 |
region.push_back(DataTypes::RegionType::value_type(0,0)); |
region.push_back(DataTypes::RegionType::value_type(0,0)); |
276 |
region.push_back(DataTypes::RegionType::value_type(1,1)); |
region.push_back(DataTypes::RegionType::value_type(1,1)); |
277 |
|
|
278 |
|
target.setSlice(*src[1],region); |
279 |
|
|
280 |
|
assert(target.isTagged()); |
281 |
|
assert(target.getDataPointRank()==2); |
282 |
|
assert(getRef(target,0,0,0,0)==0); |
283 |
|
assert(getRef(target,0,0,0,1)==src[1]->getDataPoint(0,0)); |
284 |
|
assert(getRef(target,0,0,0,2)==4); |
285 |
|
assert(getRef(target,0,0,1,0)==1); |
286 |
|
assert(getRef(target,0,0,1,1)==3); |
287 |
|
assert(getRef(target,0,0,1,2)==5); |
288 |
|
|
289 |
|
// |
290 |
|
// add a value for tag "2" to source |
291 |
|
|
292 |
|
DataTypes::ShapeType viewShape2; |
293 |
|
DataTypes::ValueType viewData2(1); |
294 |
|
viewData2[0]=6; |
295 |
|
src[1]->setTaggedValueFromCPP(2, viewShape2, viewData2); |
296 |
|
|
297 |
|
region.clear(); |
298 |
|
region.push_back(DataTypes::RegionType::value_type(0,0)); |
299 |
|
region.push_back(DataTypes::RegionType::value_type(1,1)); |
300 |
|
|
301 |
target.setSlice(source,region); |
target.setSlice(*src[1],region); |
302 |
|
|
303 |
//cout << "target:\n" << target.toString() << endl; |
assert(target.isTagged()); |
304 |
|
assert(target.getDataPointRank()==2); |
|
assert(target.isTagged()); |
|
|
assert(target.getDataPointRank()==2); |
|
305 |
|
|
306 |
// use a non-existant tag so we get a pointer to the default value |
// use a non-existant tag so we get a pointer to the default value |
307 |
// ie: the first element in the data array |
// ie: the first element in the data array |
308 |
DataAbstract::ValueType::value_type* targetData=target.getSampleDataByTag(9); |
DataAbstract::ValueType::value_type* targetData=target.getSampleDataByTag(9); |
309 |
for (int i=0; i<target.getLength(); i++) { |
for (int i=0; i<target.getLength(); i++) { |
310 |
assert(targetData[i]>=0); |
assert(targetData[i]>=0); |
|
} |
|
|
assert(targetData[0]==1.3); |
|
|
assert(targetData[1]==1.3); |
|
|
assert(targetData[2]==10); |
|
|
assert(targetData[3]==10); |
|
|
assert(targetData[4]==1.3); |
|
|
assert(targetData[5]==1.3); |
|
|
assert(targetData[6]==0); |
|
|
assert(targetData[7]==1); |
|
|
assert(targetData[8]==10); |
|
|
assert(targetData[9]==3); |
|
|
assert(targetData[10]==4); |
|
|
assert(targetData[11]==5); |
|
|
assert(targetData[12]==1.3); |
|
|
assert(targetData[13]==1.3); |
|
|
assert(targetData[14]==6); |
|
|
assert(targetData[15]==10); |
|
|
assert(targetData[16]==1.3); |
|
|
assert(targetData[17]==1.3); |
|
|
|
|
311 |
} |
} |
312 |
|
assert(targetData[0]==1.3); |
313 |
|
assert(targetData[1]==1.3); |
314 |
|
assert(targetData[2]==10); |
315 |
|
assert(targetData[3]==1.3); |
316 |
|
assert(targetData[4]==1.3); |
317 |
|
assert(targetData[5]==1.3); |
318 |
|
assert(targetData[6]==0); |
319 |
|
assert(targetData[7]==1); |
320 |
|
assert(targetData[8]==10); |
321 |
|
assert(targetData[9]==3); |
322 |
|
assert(targetData[10]==4); |
323 |
|
assert(targetData[11]==5); |
324 |
|
assert(targetData[12]==1.3); |
325 |
|
assert(targetData[13]==1.3); |
326 |
|
assert(targetData[14]==6); |
327 |
|
assert(targetData[15]==1.3); |
328 |
|
assert(targetData[16]==1.3); |
329 |
|
assert(targetData[17]==1.3); |
330 |
|
|
|
{ |
|
|
|
|
|
cout << "\tTest get-slicing DataExpanded" << endl; |
|
|
|
|
|
DataTypes::ShapeType viewShape; |
|
|
viewShape.push_back(2); |
|
|
viewShape.push_back(3); |
|
|
Data temp(1.3,viewShape,FunctionSpace(),true); |
|
|
|
|
|
getRef(temp,0,0,0,0)=0.0; |
|
|
getRef(temp,0,0,1,1)=1.0; |
|
|
|
|
|
DataTypes::RegionType region; |
|
|
region.push_back(DataTypes::RegionType::value_type(0,0)); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,0)); |
|
|
|
|
|
Data slice(temp.getSlice(region)); |
|
|
|
|
|
assert(slice.getDataPointRank()==0); |
|
|
assert(slice.getDataPoint(0,0)==0.0); |
|
|
|
|
|
region.clear(); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,1)); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,1)); |
|
|
|
|
|
slice=temp.getSlice(region); |
|
|
|
|
|
assert(slice.getDataPointRank()==2); |
|
|
assert(getRef(slice,0,0,0,0)==0.0); |
|
|
|
|
|
region.clear(); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,2)); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,2)); |
|
|
|
|
|
slice=temp.getSlice(region); |
|
|
|
|
|
assert(getRef(slice,0,0,0,0)==0.0); |
|
|
assert(getRef(slice,0,0,1,1)==1.0); |
|
|
|
|
|
} |
|
331 |
|
|
332 |
|
for (int k=0;k<NUMDATS;++k) |
333 |
{ |
{ |
334 |
|
delete dats[k]; |
335 |
cout << "\tTest set-slicing DataExpanded" << endl; |
delete src[k]; |
|
|
|
|
DataTypes::ShapeType viewShape; |
|
|
Data source(10.0,viewShape,FunctionSpace(),true); |
|
|
|
|
|
viewShape.push_back(2); |
|
|
viewShape.push_back(3); |
|
|
Data target(1.3,viewShape,FunctionSpace(),true); |
|
|
|
|
|
DataTypes::RegionType region; |
|
|
region.push_back(DataTypes::RegionType::value_type(0,0)); |
|
|
region.push_back(DataTypes::RegionType::value_type(0,0)); |
|
|
|
|
|
target.setSlice(source,region); |
|
|
|
|
|
assert(getRef(target,0,0,0,0)==source.getDataPoint(0,0)); |
|
|
|
|
336 |
} |
} |
337 |
|
|
338 |
|
} |
339 |
} |
} |
340 |
|
|
341 |
void DataTestCase::testAll() { |
void DataTestCase::testAll() { |