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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/esys2/escript/test/DataAlgorithmAdapter/DataAlgorithmAdapterTestCase.cpp revision 100 by jgs, Wed Dec 15 03:48:48 2004 UTC trunk/escript/test/DataAlgorithmAdapterTestCase.cpp revision 713 by gross, Thu Apr 27 05:03:44 2006 UTC
# Line 1  Line 1 
1    // $Id$
2  /*  /*
3   *****************************************************************************   *****************************************************************************
4   *                                                                           *   *                                                                           *
# Line 11  Line 12 
12   *                                                                           *   *                                                                           *
13   *****************************************************************************   *****************************************************************************
14  */  */
15  #include "escript/Data/DataAlgorithm.h"  
16    #include "escript/DataExpanded.h"
17    #include "escript/DataArrayView.h"
18    #include "escript/DataAlgorithm.h"
19  #include "DataAlgorithmAdapterTestCase.h"  #include "DataAlgorithmAdapterTestCase.h"
20    
21  #include <iostream>  #include <iostream>
# Line 36  void DataAlgorithmAdapterTestCase::tearD Line 40  void DataAlgorithmAdapterTestCase::tearD
40  }  }
41    
42  void DataAlgorithmAdapterTestCase::testAll() {  void DataAlgorithmAdapterTestCase::testAll() {
43    
44    cout << endl;    cout << endl;
45    DataAlgorithmAdapter<FMax> myMax(numeric_limits<double>::min());  
46    myMax(1);    cout << "\tTesting FMax." << endl;
47    myMax(2);  
48    myMax(3);    FMax fmax;
49    assert(myMax.getResult()==3);    assert(std::abs(fmax(5,6)-6)<=REL_TOL*6);
50    DataAlgorithmAdapter<AbsMax> Lsup(numeric_limits<double>::min());    assert(std::abs(fmax(5,-6)-5)<=REL_TOL*5);
51      assert(std::abs(fmax(0,0)-0)<=REL_TOL*0);
52      assert(std::abs(fmax(15,-96)-15)<=REL_TOL*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(std::abs(sup.getResult()-3)<=REL_TOL*3);
61    
62      cout << "\tTesting AbsMax." << endl;
63    
64      AbsMax absmax;
65      assert(std::abs(absmax(5,6)-6)<=REL_TOL*6);
66      assert(std::abs(absmax(5,-6)-6)<=REL_TOL*6);
67      assert(std::abs(absmax(0,0)-0)<=REL_TOL*6);
68      assert(std::abs(absmax(15,-96)-96)<=REL_TOL*6);
69    
70      DataAlgorithmAdapter<AbsMax> Lsup(0);
71      Lsup.resetResult();
72    Lsup(-2);    Lsup(-2);
73    Lsup(2);    Lsup(2);
74    Lsup(5);    Lsup(5);
75    Lsup(-1000);    Lsup(-10);
76    assert(Lsup.getResult()==1000);    assert(std::abs(Lsup.getResult()-10)<=REL_TOL*10);
77    
78      cout << "\tTesting FMin." << endl;
79    
80      FMin fmin;
81      assert(std::abs(fmin(5,6)-5)<=REL_TOL*5);
82      assert(std::abs(fmin(5,-6)-(-6))<=REL_TOL*6);
83      assert(std::abs(fmin(0,0)-0)<=REL_TOL*0);
84      assert(std::abs(fmin(15,-96)-(-96))<=REL_TOL*96);
85    
86    DataAlgorithmAdapter<FMin> inf(numeric_limits<double>::max());    DataAlgorithmAdapter<FMin> inf(numeric_limits<double>::max());
87      inf.resetResult();
88    inf(1);    inf(1);
89      inf(12);
90    inf(2);    inf(2);
91    assert(inf.getResult() == 1);    inf(99);
92    cout << "Size: " << sizeof(DataAlgorithmAdapter<FMin>) << endl;    assert(std::abs(inf.getResult()-1)<=REL_TOL*1);
93    
94      cout << "\tTesting Length." << endl;
95    
96      Length lngth;
97      assert(std::abs(lngth(5,6)-std::sqrt(61.0))<=REL_TOL*std::sqrt(61.0));
98      assert(std::abs(lngth(5,-6)-std::sqrt(61.0))<=REL_TOL*std::sqrt(61.0));
99      assert(std::abs(lngth(0,0)-std::sqrt(0.0))<=REL_TOL*std::sqrt(61.0));
100      assert(std::abs(lngth(15,-96)-std::sqrt(9441.0))<=REL_TOL*std::sqrt(61.0));
101    
102      DataAlgorithmAdapter<Length> length(0);
103      length.resetResult();
104      length(2);
105      length(4);
106      length(6);
107      length(8);
108      assert(std::abs(length.getResult()-std::sqrt(120.0))<=REL_TOL*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(std::abs(length.getResult()-std::sqrt(41.0))<=REL_TOL*std::sqrt(41.0));
115    
116      cout << "\tTesting Trace." << endl;
117    
118      Trace trce;
119      assert(std::abs(trce(5,6)-11)<=REL_TOL*11);
120      assert(std::abs(trce(5,-6)-(-1))<=REL_TOL*1);
121      assert(std::abs(trce(0,0)-0)<=REL_TOL*0);
122      assert(std::abs(trce(15,-96)-(-81))<=REL_TOL*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(std::abs(trace.getResult()-15)<=REL_TOL*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(std::abs(trace.getResult()-17.5)<=REL_TOL*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(std::abs(escript::algorithm(dataExp,fmin_func,numeric_limits<double>::max())-0)<=REL_TOL*0);
176        FMax fmax_func;
177        assert(std::abs(escript::algorithm(dataExp,fmax_func,numeric_limits<double>::max()*-1)-5)<=REL_TOL*5);
178    
179        // test algorithm on DataTagged
180        assert(std::abs(escript::algorithm(dataTag,fmin_func,numeric_limits<double>::max())-0)<=REL_TOL*0);
181        assert(std::abs(escript::algorithm(dataTag,fmax_func,numeric_limits<double>::max()*-1)-5)<=REL_TOL*5);
182    
183        // test algorithm on DataConstant
184        assert(std::abs(escript::algorithm(dataCon,fmin_func,numeric_limits<double>::max())-0)<=REL_TOL*0);
185        assert(std::abs(escript::algorithm(dataCon,fmax_func,numeric_limits<double>::max()*-1)-5)<=REL_TOL*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(std::abs(dataExp2.getDataPoint(0,0)()-0)<=REL_TOL*0);
234        FMax fmax_func;
235        escript::dp_algorithm(dataExp,dataExp2,fmax_func,numeric_limits<double>::max()*-1);
236        assert(std::abs(dataExp2.getDataPoint(0,0)()-5)<=REL_TOL*5);
237    
238        // test dp_algorithm on DataTagged
239        escript::dp_algorithm(dataTag,dataTag2,fmin_func,numeric_limits<double>::max());
240        assert(std::abs(dataTag2.getDataPoint(0,0)()-0)<=REL_TOL*0);
241        escript::dp_algorithm(dataTag,dataTag2,fmax_func,numeric_limits<double>::max()*-1);
242        assert(std::abs(dataTag2.getDataPoint(0,0)()-5)<=REL_TOL*5);
243    
244        // test dp_algorithm on DataConstant
245        escript::dp_algorithm(dataCon,dataCon2,fmin_func,numeric_limits<double>::max());
246        assert(std::abs(dataCon2.getDataPoint(0,0)()-0)<=REL_TOL*0);
247        escript::dp_algorithm(dataCon,dataCon2,fmax_func,numeric_limits<double>::max()*-1);
248        assert(std::abs(dataCon2.getDataPoint(0,0)()-5)<=REL_TOL*5);
249    
250      }
251    
252  }  }
253    
254  TestSuite* DataAlgorithmAdapterTestCase::suite ()  TestSuite* DataAlgorithmAdapterTestCase::suite ()
# Line 62  TestSuite* DataAlgorithmAdapterTestCase: Line 258  TestSuite* DataAlgorithmAdapterTestCase:
258    TestSuite *testSuite = new TestSuite ("DataAlgorithmAdapterTestCase");    TestSuite *testSuite = new TestSuite ("DataAlgorithmAdapterTestCase");
259    
260    testSuite->addTest (new TestCaller< DataAlgorithmAdapterTestCase>("testAll",&DataAlgorithmAdapterTestCase::testAll));    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;    return testSuite;
264  }  }
   

Legend:
Removed from v.100  
changed lines
  Added in v.713

  ViewVC Help
Powered by ViewVC 1.1.26