/[escript]/trunk/escript/test/DataAlgorithmAdapterTestCase.cpp
ViewVC logotype

Contents of /trunk/escript/test/DataAlgorithmAdapterTestCase.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 682 - (show annotations)
Mon Mar 27 02:43:09 2006 UTC (13 years, 6 months ago) by robwdcock
File size: 7713 byte(s)
+ NEW BUILD SYSTEM

This commit contains the new build system with cross-platform support.
Most things work are before though you can have more control.

ENVIRONMENT settings have changed:
+ You no longer require LD_LIBRARY_PATH or PYTHONPATH to point to the
esysroot for building and testing performed via scons
+ ACcESS altix users: It is recommended you change your modules to load
the latest intel compiler and other libraries required by boost to match
the setup in svn (you can override). The correct modules are as follows

module load intel_cc.9.0.026
export
MODULEPATH=${MODULEPATH}:/data/raid2/toolspp4/modulefiles/gcc-3.3.6
module load boost/1.33.0/python-2.4.1
module load python/2.4.1
module load numarray/1.3.3


1 // $Id$
2 /*
3 *****************************************************************************
4 * *
5 * COPYRIGHT ACcESS - All Rights Reserved *
6 * *
7 * This software is the property of ACcESS. No part of this code *
8 * may be copied in any form or by any means without the expressed written *
9 * consent of ACcESS. Copying, use or modification of this software *
10 * by any unauthorised person is illegal unless that person has a software *
11 * license agreement with ACcESS. *
12 * *
13 *****************************************************************************
14 */
15
16 #include "escript/DataExpanded.h"
17 #include "escript/DataArrayView.h"
18 #include "escript/DataAlgorithm.h"
19 #include "DataAlgorithmAdapterTestCase.h"
20
21 #include <iostream>
22 #include <algorithm>
23 #include <math.h>
24 #include <limits>
25
26 using namespace CppUnitTest;
27 using namespace std;
28 using namespace escript;
29
30 void DataAlgorithmAdapterTestCase::setUp() {
31 //
32 // This is called before each test is run
33
34 }
35
36 void DataAlgorithmAdapterTestCase::tearDown() {
37 //
38 // This is called after each test has been run
39
40 }
41
42 void DataAlgorithmAdapterTestCase::testAll() {
43
44 cout << endl;
45
46 cout << "\tTesting FMax." << endl;
47
48 FMax fmax;
49 assert(fmax(5,6)==6);
50 assert(fmax(5,-6)==5);
51 assert(fmax(0,0)==0);
52 assert(fmax(15,-96)==15);
53
54 DataAlgorithmAdapter<FMax> sup(numeric_limits<double>::max()*-1);
55 sup.resetResult();
56 sup(-1);
57 sup(-2);
58 sup(-14);
59 sup(3);
60 assert(sup.getResult()==3);
61
62 cout << "\tTesting AbsMax." << endl;
63
64 AbsMax absmax;
65 assert(absmax(5,6)==6);
66 assert(absmax(5,-6)==6);
67 assert(absmax(0,0)==0);
68 assert(absmax(15,-96)==96);
69
70 DataAlgorithmAdapter<AbsMax> Lsup(0);
71 Lsup.resetResult();
72 Lsup(-2);
73 Lsup(2);
74 Lsup(5);
75 Lsup(-10);
76 assert(Lsup.getResult()==10);
77
78 cout << "\tTesting FMin." << endl;
79
80 FMin fmin;
81 assert(fmin(5,6)==5);
82 assert(fmin(5,-6)==-6);
83 assert(fmin(0,0)==0);
84 assert(fmin(15,-96)==-96);
85
86 DataAlgorithmAdapter<FMin> inf(numeric_limits<double>::max());
87 inf.resetResult();
88 inf(1);
89 inf(12);
90 inf(2);
91 inf(99);
92 assert(inf.getResult()==1);
93
94 cout << "\tTesting Length." << endl;
95
96 Length lngth;
97 assert(lngth(5,6)==std::sqrt(61.0));
98 assert(lngth(5,-6)==std::sqrt(61.0));
99 assert(lngth(0,0)==std::sqrt(0.0));
100 assert(lngth(15,-96)==std::sqrt(9441.0));
101
102 DataAlgorithmAdapter<Length> length(0);
103 length.resetResult();
104 length(2);
105 length(4);
106 length(6);
107 length(8);
108 assert(length.getResult()==std::sqrt(120.0));
109 length.resetResult();
110 length(1.5);
111 length(2.5);
112 length(3.5);
113 length(4.5);
114 assert(length.getResult()==std::sqrt(41.0));
115
116 cout << "\tTesting Trace." << endl;
117
118 Trace trce;
119 assert(trce(5,6)==11);
120 assert(trce(5,-6)==-1);
121 assert(trce(0,0)==0);
122 assert(trce(15,-96)==-81);
123
124 DataAlgorithmAdapter<Trace> trace(0);
125 trace.resetResult();
126 trace(1);
127 trace(2);
128 trace(3);
129 trace(4);
130 trace(5);
131 assert(trace.getResult()==15);
132 trace.resetResult();
133 trace(1.5);
134 trace(2.5);
135 trace(3.5);
136 trace(4.5);
137 trace(5.5);
138 assert(trace.getResult()==17.5);
139
140 }
141
142 void DataAlgorithmAdapterTestCase::testAlgorithm() {
143
144 cout << endl;
145
146 {
147
148 cout << "\tTest algorithm on Data objects with a single rank 2 data-point." << endl;
149
150 // define the shape for the DataArrayView
151 DataArrayView::ShapeType shape;
152 shape.push_back(2);
153 shape.push_back(3);
154
155 // allocate the data for the DataArrayView
156 DataArrayView::ValueType dataArray(DataArrayView::noValues(shape),0);
157
158 // construct DataArrayView
159 DataArrayView dataView(dataArray,shape);
160
161 // assign values to the data point
162 for (int i=0;i<shape[0];i++) {
163 for (int j=0;j<shape[1];j++) {
164 dataView(i,j)=dataView.index(i,j);
165 }
166 }
167
168 // create a few Data objects from the created DataArrayView
169 DataExpanded dataExp(dataView,FunctionSpace());
170 DataConstant dataCon(dataView,FunctionSpace());
171 DataTagged dataTag(dataCon);
172
173 // test algorithm on DataExpanded
174 FMin fmin_func;
175 assert(escript::algorithm(dataExp,fmin_func,numeric_limits<double>::max())==0);
176 FMax fmax_func;
177 assert(escript::algorithm(dataExp,fmax_func,numeric_limits<double>::max()*-1)==5);
178
179 // test algorithm on DataTagged
180 assert(escript::algorithm(dataTag,fmin_func,numeric_limits<double>::max())==0);
181 assert(escript::algorithm(dataTag,fmax_func,numeric_limits<double>::max()*-1)==5);
182
183 // test algorithm on DataConstant
184 assert(escript::algorithm(dataCon,fmin_func,numeric_limits<double>::max())==0);
185 assert(escript::algorithm(dataCon,fmax_func,numeric_limits<double>::max()*-1)==5);
186
187 }
188
189 }
190
191 void DataAlgorithmAdapterTestCase::testDpAlgorithm() {
192
193 cout << endl;
194
195 {
196
197 cout << "\tTest dp_algorithm on Data objects with a single rank 2 data-point." << endl;
198
199 // define the shapes for the DataArrayViews
200 DataArrayView::ShapeType shape;
201 shape.push_back(2);
202 shape.push_back(3);
203 DataArrayView::ShapeType shape2;
204
205 // allocate the data for the DataArrayViews
206 DataArrayView::ValueType dataArray(DataArrayView::noValues(shape),0);
207 DataArrayView::ValueType dataArray2(DataArrayView::noValues(shape2),0);
208
209 // construct DataArrayViews
210 DataArrayView dataView(dataArray,shape);
211 DataArrayView dataView2(dataArray2,shape2);
212
213 // assign values to the data point
214 for (int i=0;i<shape[0];i++) {
215 for (int j=0;j<shape[1];j++) {
216 dataView(i,j)=dataView.index(i,j);
217 }
218 }
219
220 // create a few Data objects from the created DataArrayViews
221 DataExpanded dataExp(dataView,FunctionSpace());
222 DataConstant dataCon(dataView,FunctionSpace());
223 DataTagged dataTag(dataCon);
224
225 // and create Data objects to receive the results of the dp_algorithm calls
226 DataExpanded dataExp2(dataView2,FunctionSpace());
227 DataConstant dataCon2(dataView2,FunctionSpace());
228 DataTagged dataTag2(dataCon2);
229
230 // test dp_algorithm on DataExpanded
231 FMin fmin_func;
232 escript::dp_algorithm(dataExp,dataExp2,fmin_func,numeric_limits<double>::max());
233 assert(dataExp2.getDataPoint(0,0)()==0);
234 FMax fmax_func;
235 escript::dp_algorithm(dataExp,dataExp2,fmax_func,numeric_limits<double>::max()*-1);
236 assert(dataExp2.getDataPoint(0,0)()==5);
237
238 // test dp_algorithm on DataTagged
239 escript::dp_algorithm(dataTag,dataTag2,fmin_func,numeric_limits<double>::max());
240 assert(dataTag2.getDataPoint(0,0)()==0);
241 escript::dp_algorithm(dataTag,dataTag2,fmax_func,numeric_limits<double>::max()*-1);
242 assert(dataTag2.getDataPoint(0,0)()==5);
243
244 // test dp_algorithm on DataConstant
245 escript::dp_algorithm(dataCon,dataCon2,fmin_func,numeric_limits<double>::max());
246 assert(dataCon2.getDataPoint(0,0)()==0);
247 escript::dp_algorithm(dataCon,dataCon2,fmax_func,numeric_limits<double>::max()*-1);
248 assert(dataCon2.getDataPoint(0,0)()==5);
249
250 }
251
252 }
253
254 TestSuite* DataAlgorithmAdapterTestCase::suite ()
255 {
256 //
257 // create the suite of tests to perform.
258 TestSuite *testSuite = new TestSuite ("DataAlgorithmAdapterTestCase");
259
260 testSuite->addTest (new TestCaller< DataAlgorithmAdapterTestCase>("testAll",&DataAlgorithmAdapterTestCase::testAll));
261 testSuite->addTest (new TestCaller<DataAlgorithmAdapterTestCase>("testAlgorithm",&DataAlgorithmAdapterTestCase::testAlgorithm));
262 testSuite->addTest (new TestCaller<DataAlgorithmAdapterTestCase>("testDpAlgorithm",&DataAlgorithmAdapterTestCase::testDpAlgorithm));
263 return testSuite;
264 }

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

  ViewVC Help
Powered by ViewVC 1.1.26