Salome HOME
49cae918fc8e4f61b083862935548527eb7a5fc5
[modules/med.git] / src / MEDCouplingCorba / Test / MEDCouplingMeshFieldFactoryComponentClt.cxx
1 // Copyright (C) 2007-2013  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19 // Author : Anthony Geay (CEA/DEN)
20
21 #include "MEDCouplingMeshFieldFactoryComponentClt.hxx"
22 #include "MEDCouplingMeshFieldFactoryComponent.hxx"
23 #include "MEDCouplingUMesh.hxx"
24 #include "MEDCouplingUMeshClient.hxx"
25 #include "MEDCoupling1GTUMesh.hxx"
26 #include "MEDCoupling1SGTUMeshClient.hxx"
27 #include "MEDCoupling1DGTUMeshClient.hxx"
28 #include "MEDCouplingExtrudedMesh.hxx"
29 #include "MEDCouplingExtrudedMeshClient.hxx"
30 #include "MEDCouplingCMesh.hxx"
31 #include "MEDCouplingCMeshClient.hxx"
32 #include "MEDCouplingCurveLinearMesh.hxx"
33 #include "MEDCouplingCurveLinearMeshClient.hxx"
34 #include "MEDCouplingFieldDouble.hxx"
35 #include "MEDCouplingFieldDoubleClient.hxx"
36 #include "MEDCouplingFieldTemplate.hxx"
37 #include "MEDCouplingFieldTemplateClient.hxx"
38 #include "MEDCouplingMultiFields.hxx"
39 #include "MEDCouplingMultiFieldsClient.hxx"
40 #include "MEDCouplingFieldOverTime.hxx"
41 #include "MEDCouplingFieldOverTimeClient.hxx"
42 #include "DataArrayDoubleClient.hxx"
43 #include "DataArrayIntClient.hxx"
44 #include <fstream>
45 #include <pthread.h>
46
47 SALOME_TEST::MEDCouplingMeshFieldFactory_ptr SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::_objC;
48
49 ParaMEDMEM::MEDCouplingUMesh *SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::_mesh_from_distant=0;
50
51 int SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::_argc=0;
52
53 char **SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::_argv=0;
54
55 CORBA::ORB_var SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::_orb;
56
57 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkBaseCorbaFetching()
58 {
59   _orb=CORBA::ORB_init(_argc,_argv);
60   std::ifstream ifs(SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildFileNameForIOR().c_str());
61   std::string ior;
62   ifs >> ior;
63   CORBA::Object_var obj=_orb->string_to_object(ior.c_str());
64   _objC=SALOME_TEST::MEDCouplingMeshFieldFactory::_narrow(obj);
65   CPPUNIT_ASSERT(!CORBA::is_nil(_objC));
66 }
67
68
69
70 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkContentOfFetched1DMesh()
71 {
72   SALOME_MED::MEDCouplingUMeshCorbaInterface_ptr meshPtr=_objC->get1DMesh();
73   _mesh_from_distant=ParaMEDMEM::MEDCouplingUMeshClient::New(meshPtr);
74   char *meshName=meshPtr->getName();
75   std::string meshNameCpp(meshName);
76   CPPUNIT_ASSERT(meshNameCpp=="1DMeshForCorba");
77   CORBA::string_free(meshName);
78   meshPtr->UnRegister();
79   CORBA::release(meshPtr);
80   CPPUNIT_ASSERT_EQUAL(3,_mesh_from_distant->getSpaceDimension());
81   CPPUNIT_ASSERT_EQUAL(1,_mesh_from_distant->getMeshDimension());
82   ParaMEDMEM::MEDCouplingUMesh *meshRef=SALOME_TEST::MEDCouplingCorbaServBasicsTest::build1DMesh();
83   CPPUNIT_ASSERT(_mesh_from_distant->isEqual(meshRef,1e-12));
84   meshRef->decrRef();
85   _mesh_from_distant->decrRef();
86 }
87
88 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFetching2D()
89 {
90   SALOME_MED::MEDCouplingUMeshCorbaInterface_ptr meshPtr=_objC->get2DMesh();
91   _mesh_from_distant=ParaMEDMEM::MEDCouplingUMeshClient::New(meshPtr);
92   meshPtr->UnRegister();
93   CORBA::release(meshPtr);
94   CPPUNIT_ASSERT_EQUAL(2,_mesh_from_distant->getSpaceDimension());
95   CPPUNIT_ASSERT_EQUAL(2,_mesh_from_distant->getMeshDimension());
96 }
97
98 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkContentOfFetched2DMesh()
99 {
100   ParaMEDMEM::MEDCouplingUMesh *meshRef=SALOME_TEST::MEDCouplingCorbaServBasicsTest::build2DMesh();
101   CPPUNIT_ASSERT(_mesh_from_distant->isEqual(meshRef,1e-12));
102   meshRef->decrRef();
103   _mesh_from_distant->decrRef();
104 }
105
106 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkMultiFetchingToTestMemoryManagement()
107 {
108   for(int i=0;i<1000;i++)
109     {
110       SALOME_MED::MEDCouplingUMeshCorbaInterface_ptr meshPtr=_objC->get2DMesh();
111       _mesh_from_distant=ParaMEDMEM::MEDCouplingUMeshClient::New(meshPtr);
112       meshPtr->UnRegister();
113       CORBA::release(meshPtr);
114       ParaMEDMEM::MEDCouplingUMesh *meshRef=SALOME_TEST::MEDCouplingCorbaServBasicsTest::build2DMesh();
115       CPPUNIT_ASSERT(_mesh_from_distant->isEqual(meshRef,1e-12));
116       meshRef->decrRef();
117       _mesh_from_distant->decrRef();
118     }
119 }
120
121 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFetching3D()
122 {
123   SALOME_MED::MEDCouplingUMeshCorbaInterface_ptr meshPtr=_objC->get3DMesh();
124   _mesh_from_distant=ParaMEDMEM::MEDCouplingUMeshClient::New(meshPtr);
125   meshPtr->UnRegister();
126   CORBA::release(meshPtr);
127   CPPUNIT_ASSERT_EQUAL(3,_mesh_from_distant->getSpaceDimension());
128   CPPUNIT_ASSERT_EQUAL(3,_mesh_from_distant->getMeshDimension());
129 }
130
131 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkContentOfFetched3DMesh()
132 {
133   ParaMEDMEM::MEDCouplingUMesh *meshRef=SALOME_TEST::MEDCouplingCorbaServBasicsTest::build3DMesh();
134   CPPUNIT_ASSERT(_mesh_from_distant->isEqual(meshRef,1e-12));
135   meshRef->decrRef();
136   _mesh_from_distant->decrRef();
137 }
138
139 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFetching3DSurf()
140 {
141   SALOME_MED::MEDCouplingUMeshCorbaInterface_ptr meshPtr=_objC->get3DSurfMesh();
142   _mesh_from_distant=ParaMEDMEM::MEDCouplingUMeshClient::New(meshPtr);
143   meshPtr->UnRegister();
144   CORBA::release(meshPtr);
145   CPPUNIT_ASSERT_EQUAL(3,_mesh_from_distant->getSpaceDimension());
146   CPPUNIT_ASSERT_EQUAL(2,_mesh_from_distant->getMeshDimension());
147 }
148
149 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkContentOfFetched3DSurfMesh()
150 {
151   ParaMEDMEM::MEDCouplingUMesh *meshRef=SALOME_TEST::MEDCouplingCorbaServBasicsTest::build3DSurfMesh();
152   CPPUNIT_ASSERT(_mesh_from_distant->isEqual(meshRef,1e-12));
153   meshRef->decrRef();
154   _mesh_from_distant->decrRef();
155 }
156
157 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFetching0D()
158 {
159   SALOME_MED::MEDCouplingUMeshCorbaInterface_ptr meshPtr=_objC->get0DMesh();
160   _mesh_from_distant=ParaMEDMEM::MEDCouplingUMeshClient::New(meshPtr);
161   meshPtr->UnRegister();
162   CORBA::release(meshPtr);
163   ParaMEDMEM::MEDCouplingUMesh *meshRef=SALOME_TEST::MEDCouplingCorbaServBasicsTest::build0DMesh();
164   CPPUNIT_ASSERT_EQUAL(3,_mesh_from_distant->getSpaceDimension());
165   CPPUNIT_ASSERT_EQUAL(0,_mesh_from_distant->getMeshDimension());
166   CPPUNIT_ASSERT(_mesh_from_distant->isEqual(meshRef,1e-12));
167   meshRef->decrRef();
168   _mesh_from_distant->decrRef();
169 }
170
171 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFetchingM1D()
172 {
173   SALOME_MED::MEDCouplingUMeshCorbaInterface_ptr meshPtr=_objC->getM1DMesh();
174   _mesh_from_distant=ParaMEDMEM::MEDCouplingUMeshClient::New(meshPtr);
175   meshPtr->UnRegister();
176   CORBA::release(meshPtr);
177   ParaMEDMEM::MEDCouplingUMesh *meshRef=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildM1DMesh();
178   CPPUNIT_ASSERT_EQUAL(-1,_mesh_from_distant->getMeshDimension());
179   CPPUNIT_ASSERT(_mesh_from_distant->isEqual(meshRef,1e-12));
180   meshRef->decrRef();
181   _mesh_from_distant->decrRef();
182 }
183
184 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFetchingExtruded()
185 {
186   SALOME_MED::MEDCouplingExtrudedMeshCorbaInterface_ptr meshPtr=_objC->getExtrudedMesh();
187   ParaMEDMEM::MEDCouplingExtrudedMesh *meshFromDistant=ParaMEDMEM::MEDCouplingExtrudedMeshClient::New(meshPtr);
188   meshPtr->UnRegister();
189   CORBA::release(meshPtr);
190   ParaMEDMEM::MEDCouplingUMesh *meshRef2;
191   ParaMEDMEM::MEDCouplingExtrudedMesh *meshRef=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildExtrudedMesh(meshRef2);
192   CPPUNIT_ASSERT(meshFromDistant->isEqual(meshRef,1e-12));
193   CPPUNIT_ASSERT(meshFromDistant->getMesh2D()->isEqual(meshRef2,1e-12));
194   meshRef2->decrRef();
195   meshRef->decrRef();
196   meshFromDistant->decrRef();
197 }
198
199 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFetchingCMesh()
200 {
201   SALOME_MED::MEDCouplingCMeshCorbaInterface_ptr meshPtr=_objC->getCMesh();
202   ParaMEDMEM::MEDCouplingCMesh *meshFromDistant=ParaMEDMEM::MEDCouplingCMeshClient::New(meshPtr);
203   meshPtr->UnRegister();
204   CORBA::release(meshPtr);
205   ParaMEDMEM::MEDCouplingCMesh *meshRef=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildCMesh();
206   CPPUNIT_ASSERT(meshFromDistant->isEqual(meshRef,1e-12));
207   meshRef->decrRef();
208   meshFromDistant->decrRef();
209 }
210
211 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFetchingCurveLinearMesh()
212 {
213   SALOME_MED::MEDCouplingCurveLinearMeshCorbaInterface_ptr meshPtr=_objC->getCLMesh();
214   ParaMEDMEM::MEDCouplingCurveLinearMesh *meshFromDistant=ParaMEDMEM::MEDCouplingCurveLinearMeshClient::New(meshPtr);
215   meshPtr->UnRegister();
216   CORBA::release(meshPtr);
217   ParaMEDMEM::MEDCouplingCurveLinearMesh *meshRef=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildCLMesh();
218   CPPUNIT_ASSERT(meshFromDistant->isEqual(meshRef,1e-12));
219   meshRef->decrRef();
220   meshFromDistant->decrRef();
221 }
222
223 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFetching1SGTUMesh()
224 {
225   SALOME_MED::MEDCoupling1SGTUMeshCorbaInterface_ptr meshPtr=_objC->get1SGTUMesh();
226   ParaMEDMEM::MEDCoupling1SGTUMesh *meshFromDistant=ParaMEDMEM::MEDCoupling1SGTUMeshClient::New(meshPtr);
227   meshPtr->UnRegister();
228   CORBA::release(meshPtr);
229   ParaMEDMEM::MEDCoupling1SGTUMesh *meshRef=SALOME_TEST::MEDCouplingCorbaServBasicsTest::build1SGTUMesh();
230   CPPUNIT_ASSERT(meshFromDistant->isEqual(meshRef,1e-12));
231   meshRef->decrRef();
232   meshFromDistant->decrRef();
233 }
234
235 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFetching1DGTUMesh()
236 {
237   SALOME_MED::MEDCoupling1DGTUMeshCorbaInterface_ptr meshPtr=_objC->get1DGTUMesh();
238   ParaMEDMEM::MEDCoupling1DGTUMesh *meshFromDistant=ParaMEDMEM::MEDCoupling1DGTUMeshClient::New(meshPtr);
239   meshPtr->UnRegister();
240   CORBA::release(meshPtr);
241   ParaMEDMEM::MEDCoupling1DGTUMesh *meshRef=SALOME_TEST::MEDCouplingCorbaServBasicsTest::build1DGTUMesh();
242   CPPUNIT_ASSERT(meshFromDistant->isEqual(meshRef,1e-12));
243   meshRef->decrRef();
244   meshFromDistant->decrRef();
245 }
246
247 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaField2DNTFetching()
248 {
249   SALOME_MED::MEDCouplingFieldDoubleCorbaInterface_ptr fieldPtr=_objC->getFieldScalarOn2DNT();
250   ParaMEDMEM::MEDCouplingFieldDouble *fieldCpp=ParaMEDMEM::MEDCouplingFieldDoubleClient::New(fieldPtr);
251   fieldPtr->UnRegister();
252   CORBA::release(fieldPtr);
253   ParaMEDMEM::MEDCouplingFieldDouble *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildFieldScalarOn2DNT();
254   CPPUNIT_ASSERT(fieldCpp->isEqual(refField,1.e-12,1.e-15));
255   CPPUNIT_ASSERT_THROW(fieldCpp->setTime(1.23,4,5),INTERP_KERNEL::Exception);
256   refField->decrRef();
257   fieldCpp->decrRef();
258 }
259
260 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaField2DNTMultiFetching()
261 {
262   SALOME_MED::MEDCouplingFieldDoubleCorbaInterface_ptr fieldPtr=_objC->getFieldScalarOn2DNT();
263   ParaMEDMEM::MEDCouplingFieldDouble *fieldCpp=ParaMEDMEM::MEDCouplingFieldDoubleClient::New(fieldPtr);
264   ParaMEDMEM::MEDCouplingFieldDouble *fieldCpp2=ParaMEDMEM::MEDCouplingFieldDoubleClient::New(fieldPtr);
265   fieldPtr->UnRegister();
266   CORBA::release(fieldPtr);
267   CPPUNIT_ASSERT(fieldCpp->isEqual(fieldCpp2,1.e-12,1.e-15));
268   fieldCpp->decrRef();
269   fieldCpp2->decrRef();
270 }
271
272 void *SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaField2DNTMultiFetchingMTStatic(void *stack)
273 {
274   char *stackS=(char *)stack;
275   CORBA::Object_var obj=_orb->string_to_object(stackS);
276   SALOME_MED::MEDCouplingFieldDoubleCorbaInterface_ptr fieldPtr=SALOME_MED::MEDCouplingFieldDoubleCorbaInterface::_narrow(obj);
277   ParaMEDMEM::MEDCouplingFieldDouble *fieldCpp=ParaMEDMEM::MEDCouplingFieldDoubleClient::New(fieldPtr);
278   CORBA::release(fieldPtr);
279   return fieldCpp;
280 }
281
282 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaField2DNTMultiFetchingMT()
283 {
284   const int nbOfThreads=8;
285   SALOME_MED::MEDCouplingFieldDoubleCorbaInterface_ptr fieldPtr=_objC->getFieldScalarOn2DNT();
286   //doing nbOfThreads-1 Register.
287   char *ior=_orb->object_to_string(fieldPtr);
288   pthread_t threads[nbOfThreads];
289   ParaMEDMEM::MEDCouplingFieldDouble *rets[nbOfThreads];
290   for(int i=0;i<nbOfThreads;i++)
291     pthread_create(&threads[i],0,checkCorbaField2DNTMultiFetchingMTStatic,ior);
292   for(int i=0;i<nbOfThreads;i++)
293     pthread_join(threads[i],(void **)&rets[i]);
294   for(int i=0;i<nbOfThreads-1;i++)
295     CPPUNIT_ASSERT(rets[i]->isEqual(rets[i+1],1.e-12,1.e-15));
296   for(int i=0;i<nbOfThreads;i++)
297     rets[i]->decrRef();
298   fieldPtr->UnRegister();
299   CORBA::release(fieldPtr);
300   CORBA::string_free(ior);
301 }
302
303 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFieldNode2DNTFetching()
304 {
305   SALOME_MED::MEDCouplingFieldDoubleCorbaInterface_ptr fieldPtr=_objC->getFieldNodeScalarOn2DNT();
306   ParaMEDMEM::MEDCouplingFieldDouble *fieldCpp=ParaMEDMEM::MEDCouplingFieldDoubleClient::New(fieldPtr);
307   fieldPtr->UnRegister();
308   CORBA::release(fieldPtr);
309   ParaMEDMEM::MEDCouplingFieldDouble *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildFieldNodeScalarOn2DNT();
310   CPPUNIT_ASSERT(fieldCpp->isEqual(refField,1.e-12,1.e-15));
311   CPPUNIT_ASSERT_THROW(fieldCpp->setTime(1.23,4,5),INTERP_KERNEL::Exception);
312   refField->decrRef();
313   fieldCpp->decrRef();
314 }
315
316 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaField3DNTFetching()
317 {
318   SALOME_MED::MEDCouplingFieldDoubleCorbaInterface_ptr fieldPtr=_objC->getFieldScalarOn3DNT();
319   ParaMEDMEM::MEDCouplingFieldDouble *fieldCpp=ParaMEDMEM::MEDCouplingFieldDoubleClient::New(fieldPtr);
320   fieldPtr->UnRegister();
321   CORBA::release(fieldPtr);
322   ParaMEDMEM::MEDCouplingFieldDouble *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildFieldScalarOn3DNT();
323   CPPUNIT_ASSERT(fieldCpp->isEqual(refField,1.e-12,1.e-15));
324   CPPUNIT_ASSERT_THROW(fieldCpp->setTime(1.23,4,5),INTERP_KERNEL::Exception);
325   refField->decrRef();
326   fieldCpp->decrRef();
327 }
328
329 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaField3DSurfWTFetching()
330 {
331   SALOME_MED::MEDCouplingFieldDoubleCorbaInterface_ptr fieldPtr=_objC->getFieldScalarOn3DSurfWT();
332   //
333   char *fieldName=fieldPtr->getName();
334   std::string fieldNameCpp(fieldName);
335   CPPUNIT_ASSERT(fieldNameCpp=="toto25");
336   CORBA::string_free(fieldName);
337   SALOME_TYPES::ListOfString *comps=fieldPtr->getInfoOnComponents();
338   CPPUNIT_ASSERT_EQUAL(3,(int)comps->length());
339   CPPUNIT_ASSERT(std::string((*comps)[0])=="aaa");
340   CPPUNIT_ASSERT(std::string((*comps)[1])=="bbbb");
341   CPPUNIT_ASSERT(std::string((*comps)[2])=="ccccc");
342   delete comps;
343   //
344   ParaMEDMEM::MEDCouplingFieldDouble *fieldCpp=ParaMEDMEM::MEDCouplingFieldDoubleClient::New(fieldPtr);
345   fieldPtr->UnRegister();
346   CORBA::release(fieldPtr);
347   ParaMEDMEM::MEDCouplingFieldDouble *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildFieldScalarOn3DSurfWT();
348   CPPUNIT_ASSERT(fieldCpp->isEqual(refField,1.e-12,1.e-15));
349   int dt,it;
350   fieldCpp->getTime(dt,it);
351   CPPUNIT_ASSERT_EQUAL(1,dt);
352   CPPUNIT_ASSERT_EQUAL(4,it);
353   refField->decrRef();
354   fieldCpp->decrRef();
355 }
356
357 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaField3DSurfCOTIFetching()
358 {
359   SALOME_MED::MEDCouplingFieldDoubleCorbaInterface_ptr fieldPtr=_objC->getFieldScalarOn3DSurfCOTI();
360   ParaMEDMEM::MEDCouplingFieldDouble *fieldCpp=ParaMEDMEM::MEDCouplingFieldDoubleClient::New(fieldPtr);
361   fieldPtr->UnRegister();
362   CORBA::release(fieldPtr);
363   ParaMEDMEM::MEDCouplingFieldDouble *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildFieldScalarOn3DSurfCOTI();
364   CPPUNIT_ASSERT(fieldCpp->isEqual(refField,1.e-12,1.e-15));
365   int dt,it;
366   fieldCpp->getStartTime(dt,it);
367   CPPUNIT_ASSERT_EQUAL(1,dt);
368   CPPUNIT_ASSERT_EQUAL(4,it);
369   fieldCpp->getEndTime(dt,it);
370   CPPUNIT_ASSERT_EQUAL(2,dt);
371   CPPUNIT_ASSERT_EQUAL(8,it);
372   refField->decrRef();
373   fieldCpp->decrRef();
374 }
375
376 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaField2DLTFetching()
377 {
378   SALOME_MED::MEDCouplingFieldDoubleCorbaInterface_ptr fieldPtr=_objC->getFieldScalarOn2DLT();
379   ParaMEDMEM::MEDCouplingFieldDouble *fieldCpp=ParaMEDMEM::MEDCouplingFieldDoubleClient::New(fieldPtr);
380   fieldPtr->UnRegister();
381   CORBA::release(fieldPtr);
382   double res[4];
383   const double pos[2]={0.3,-0.2};
384   fieldCpp->getValueOn(pos,10.,res);
385   CPPUNIT_ASSERT_DOUBLES_EQUAL(25.4,res[0],1e-12);
386   CPPUNIT_ASSERT_DOUBLES_EQUAL(25.04,res[1],1e-12);
387   CPPUNIT_ASSERT_DOUBLES_EQUAL(25.004,res[2],1e-12);
388   CPPUNIT_ASSERT_DOUBLES_EQUAL(25.0004,res[3],1e-12);
389   ParaMEDMEM::MEDCouplingFieldDouble *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildFieldScalarOn2DLT();
390   CPPUNIT_ASSERT(fieldCpp->isEqual(refField,1.e-12,1.e-15));
391   int dt,it;
392   CPPUNIT_ASSERT_DOUBLES_EQUAL(6.7,fieldCpp->getStartTime(dt,it),1e-14);
393   CPPUNIT_ASSERT_EQUAL(25,dt);
394   CPPUNIT_ASSERT_EQUAL(26,it);
395   CPPUNIT_ASSERT_DOUBLES_EQUAL(17.2,fieldCpp->getEndTime(dt,it),1e-14);
396   CPPUNIT_ASSERT_EQUAL(125,dt);
397   CPPUNIT_ASSERT_EQUAL(126,it);
398   refField->decrRef();
399   fieldCpp->decrRef();
400 }
401
402 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFieldGaussPt2DWTFetching()
403 {
404   SALOME_MED::MEDCouplingFieldDoubleCorbaInterface_ptr fieldPtr=_objC->getFieldGaussPt2DWT();
405   ParaMEDMEM::MEDCouplingFieldDouble *fieldCpp=ParaMEDMEM::MEDCouplingFieldDoubleClient::New(fieldPtr);
406   fieldPtr->UnRegister();
407   CORBA::release(fieldPtr);
408   //
409   ParaMEDMEM::MEDCouplingFieldDouble *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildFieldGaussPt2DWT();
410   CPPUNIT_ASSERT(fieldCpp->isEqual(refField,1.e-12,1.e-15));
411   refField->decrRef();
412   fieldCpp->decrRef();
413 }
414
415 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFieldGaussPtNE2DWTFetching()
416 {
417   SALOME_MED::MEDCouplingFieldDoubleCorbaInterface_ptr fieldPtr=_objC->getFieldGaussPtNE2DWT();
418   ParaMEDMEM::MEDCouplingFieldDouble *fieldCpp=ParaMEDMEM::MEDCouplingFieldDoubleClient::New(fieldPtr);
419   fieldPtr->UnRegister();
420   CORBA::release(fieldPtr);
421   //
422   ParaMEDMEM::MEDCouplingFieldDouble *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildFieldGaussPtNE2DWT();
423   CPPUNIT_ASSERT(fieldCpp->isEqual(refField,1.e-12,1.e-15));
424   refField->decrRef();
425   fieldCpp->decrRef();
426 }
427
428 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFieldVectorOnExtrudedWT()
429 {
430   SALOME_MED::MEDCouplingFieldDoubleCorbaInterface_ptr fieldPtr=_objC->getFieldVectorOnExtrudedWT();
431   ParaMEDMEM::MEDCouplingFieldDouble *fieldCpp=ParaMEDMEM::MEDCouplingFieldDoubleClient::New(fieldPtr);
432   fieldPtr->UnRegister();
433   CORBA::release(fieldPtr);
434   //
435   ParaMEDMEM::MEDCouplingFieldDouble *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildFieldVectorOnExtrudedWT();
436   CPPUNIT_ASSERT(fieldCpp->isEqual(refField,1.e-12,1.e-15));
437   refField->decrRef();
438   fieldCpp->decrRef();
439 }
440
441 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFieldVectorOnCMeshWT()
442 {
443   SALOME_MED::MEDCouplingFieldDoubleCorbaInterface_ptr fieldPtr=_objC->getFieldVectorOnCMeshWT();
444   ParaMEDMEM::MEDCouplingFieldDouble *fieldCpp=ParaMEDMEM::MEDCouplingFieldDoubleClient::New(fieldPtr);
445   fieldPtr->UnRegister();
446   CORBA::release(fieldPtr);
447   //
448   ParaMEDMEM::MEDCouplingFieldDouble *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildFieldVectorOnCMeshWT();
449   CPPUNIT_ASSERT(fieldCpp->isEqual(refField,1.e-12,1.e-15));
450   refField->decrRef();
451   fieldCpp->decrRef();
452 }
453
454 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFieldTemplateCellOn2D()
455 {
456   SALOME_MED::MEDCouplingFieldTemplateCorbaInterface_ptr fieldPtr=_objC->getFieldTemplateCellOn2D();
457   ParaMEDMEM::MEDCouplingFieldTemplate *fieldCpp=ParaMEDMEM::MEDCouplingFieldTemplateClient::New(fieldPtr);
458   fieldPtr->UnRegister();
459   CORBA::release(fieldPtr);
460   //
461   ParaMEDMEM::MEDCouplingFieldTemplate *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildFieldTemplateCellOn2D();
462   CPPUNIT_ASSERT(fieldCpp->isEqual(refField,1.e-12,1.e-15));
463   refField->decrRef();
464   fieldCpp->decrRef();
465 }
466
467 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFieldTemplateNodeOn2D()
468 {
469   SALOME_MED::MEDCouplingFieldTemplateCorbaInterface_ptr fieldPtr=_objC->getFieldTemplateNodeOn2D();
470   ParaMEDMEM::MEDCouplingFieldTemplate *fieldCpp=ParaMEDMEM::MEDCouplingFieldTemplateClient::New(fieldPtr);
471   fieldPtr->UnRegister();
472   CORBA::release(fieldPtr);
473   //
474   ParaMEDMEM::MEDCouplingFieldTemplate *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildFieldTemplateNodeOn2D();
475   CPPUNIT_ASSERT(fieldCpp->isEqual(refField,1.e-12,1.e-15));
476   refField->decrRef();
477   fieldCpp->decrRef();
478 }
479
480 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFieldTemplateGaussPtOn2D()
481 {
482   SALOME_MED::MEDCouplingFieldTemplateCorbaInterface_ptr fieldPtr=_objC->getFieldTemplateGaussPtOn2D();
483   ParaMEDMEM::MEDCouplingFieldTemplate *fieldCpp=ParaMEDMEM::MEDCouplingFieldTemplateClient::New(fieldPtr);
484   fieldPtr->UnRegister();
485   CORBA::release(fieldPtr);
486   //
487   ParaMEDMEM::MEDCouplingFieldTemplate *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildFieldTemplateGaussPtOn2D();
488   CPPUNIT_ASSERT(fieldCpp->isEqual(refField,1.e-12,1.e-15));
489   refField->decrRef();
490   fieldCpp->decrRef();
491 }
492
493 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFieldTemplateGaussNEOn2D()
494 {
495   SALOME_MED::MEDCouplingFieldTemplateCorbaInterface_ptr fieldPtr=_objC->getFieldTemplateGaussNEOn2D();
496   ParaMEDMEM::MEDCouplingFieldTemplate *fieldCpp=ParaMEDMEM::MEDCouplingFieldTemplateClient::New(fieldPtr);
497   fieldPtr->UnRegister();
498   CORBA::release(fieldPtr);
499   //
500   ParaMEDMEM::MEDCouplingFieldTemplate *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildFieldTemplateGaussNEOn2D();
501   CPPUNIT_ASSERT(fieldCpp->isEqual(refField,1.e-12,1.e-15));
502   refField->decrRef();
503   fieldCpp->decrRef();
504 }
505
506 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaMultiFields1()
507 {
508   SALOME_MED::MEDCouplingMultiFieldsCorbaInterface_ptr fieldPtr=_objC->getMultiFields1();
509   ParaMEDMEM::MEDCouplingMultiFields *fieldCpp=ParaMEDMEM::MEDCouplingMultiFieldsClient::New(fieldPtr);
510   fieldPtr->UnRegister();
511   CORBA::release(fieldPtr);
512   //
513   ParaMEDMEM::MEDCouplingMultiFields *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildMultiFields1();
514   CPPUNIT_ASSERT(fieldCpp->isEqual(refField,1.e-12,1.e-15));
515   refField->decrRef();
516   fieldCpp->decrRef();
517 }
518
519 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaArrayDouble1()
520 {
521   SALOME_MED::DataArrayDoubleCorbaInterface_ptr fieldPtr=_objC->getArrayDouble1();
522   //
523   char *fieldName=fieldPtr->getName();
524   std::string fieldNameCpp(fieldName);
525   CPPUNIT_ASSERT(fieldNameCpp=="toto");
526   CORBA::string_free(fieldName);
527   SALOME_TYPES::ListOfString *comps=fieldPtr->getInfoOnComponents();
528   CPPUNIT_ASSERT_EQUAL(3,(int)comps->length());
529   CPPUNIT_ASSERT(std::string((*comps)[0])=="sss");
530   CPPUNIT_ASSERT(std::string((*comps)[1])=="ppp");
531   CPPUNIT_ASSERT(std::string((*comps)[2])=="ttt");
532   delete comps;
533   //
534   ParaMEDMEM::DataArrayDouble *fieldCpp=ParaMEDMEM::DataArrayDoubleClient::New(fieldPtr);
535   fieldPtr->UnRegister();
536   CORBA::release(fieldPtr);
537   //
538   ParaMEDMEM::DataArrayDouble *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildArrayDouble1();
539   CPPUNIT_ASSERT(fieldCpp->isEqual(*refField,1.e-12));
540   refField->decrRef();
541   fieldCpp->decrRef();
542 }
543
544 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaArrayDouble2()
545 {
546   SALOME_MED::DataArrayDoubleCorbaInterface_ptr fieldPtr=_objC->getArrayDouble2();
547   ParaMEDMEM::DataArrayDouble *fieldCpp=ParaMEDMEM::DataArrayDoubleClient::New(fieldPtr);
548   fieldPtr->UnRegister();
549   CORBA::release(fieldPtr);
550   //
551   ParaMEDMEM::DataArrayDouble *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildArrayDouble2();
552   CPPUNIT_ASSERT(fieldCpp->isEqual(*refField,1.e-12));
553   refField->decrRef();
554   fieldCpp->decrRef();
555 }
556
557 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaArrayDouble3()
558 {
559   SALOME_MED::DataArrayDoubleCorbaInterface_ptr fieldPtr=_objC->getArrayDouble3();
560   ParaMEDMEM::DataArrayDouble *fieldCpp=ParaMEDMEM::DataArrayDoubleClient::New(fieldPtr);
561   fieldPtr->UnRegister();
562   CORBA::release(fieldPtr);
563   //
564   ParaMEDMEM::DataArrayDouble *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildArrayDouble3();
565   CPPUNIT_ASSERT(fieldCpp->isEqual(*refField,1.e-12));
566   refField->decrRef();
567   fieldCpp->decrRef();
568 }
569
570 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaArrayInt1()
571 {
572   SALOME_MED::DataArrayIntCorbaInterface_ptr fieldPtr=_objC->getArrayInt1();
573   ParaMEDMEM::DataArrayInt *fieldCpp=ParaMEDMEM::DataArrayIntClient::New(fieldPtr);
574   fieldPtr->UnRegister();
575   CORBA::release(fieldPtr);
576   //
577   ParaMEDMEM::DataArrayInt *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildArrayInt1();
578   CPPUNIT_ASSERT(fieldCpp->isEqual(*refField));
579   refField->decrRef();
580   fieldCpp->decrRef();
581 }
582
583 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaArrayInt2()
584 {
585   SALOME_MED::DataArrayIntCorbaInterface_ptr fieldPtr=_objC->getArrayInt2();
586   ParaMEDMEM::DataArrayInt *fieldCpp=ParaMEDMEM::DataArrayIntClient::New(fieldPtr);
587   fieldPtr->UnRegister();
588   CORBA::release(fieldPtr);
589   //
590   ParaMEDMEM::DataArrayInt *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildArrayInt2();
591   CPPUNIT_ASSERT(fieldCpp->isEqual(*refField));
592   refField->decrRef();
593   fieldCpp->decrRef();
594 }
595
596 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaArrayInt3()
597 {
598   SALOME_MED::DataArrayIntCorbaInterface_ptr fieldPtr=_objC->getArrayInt3();
599   ParaMEDMEM::DataArrayInt *fieldCpp=ParaMEDMEM::DataArrayIntClient::New(fieldPtr);
600   fieldPtr->UnRegister();
601   CORBA::release(fieldPtr);
602   //
603   ParaMEDMEM::DataArrayInt *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildArrayInt3();
604   CPPUNIT_ASSERT(fieldCpp->isEqual(*refField));
605   refField->decrRef();
606   fieldCpp->decrRef();
607 }
608
609 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaFetchingCoords1()
610 {
611   SALOME_MED::MEDCouplingUMeshCorbaInterface_ptr meshPtr=_objC->get3DSurfMesh();
612   SALOME_MED::DataArrayDoubleCorbaInterface_ptr cooPtr=meshPtr->getCoords();
613   meshPtr->UnRegister();
614   CORBA::release(meshPtr);
615   ParaMEDMEM::DataArrayDouble *cooCpp=ParaMEDMEM::DataArrayDoubleClient::New(cooPtr);
616   ParaMEDMEM::MEDCouplingUMesh *meshRef=SALOME_TEST::MEDCouplingCorbaServBasicsTest::build3DSurfMesh();
617   //
618   CPPUNIT_ASSERT(meshRef->getCoords()->isEqual(*cooCpp,1e-12));
619   //
620   cooPtr->UnRegister();
621   CORBA::release(cooPtr);
622   cooCpp->decrRef();
623   meshRef->decrRef();
624 }
625
626 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::checkCorbaMultiFields2()
627 {
628   SALOME_MED::MEDCouplingFieldOverTimeCorbaInterface_ptr fotPtr=_objC->getMultiFields2();
629   ParaMEDMEM::MEDCouplingFieldOverTimeClient *fotc=ParaMEDMEM::MEDCouplingFieldOverTimeClient::New(fotPtr);
630   fotPtr->UnRegister();
631   CORBA::release(fotPtr);
632   //
633   ParaMEDMEM::MEDCouplingFieldOverTime *refField=SALOME_TEST::MEDCouplingCorbaServBasicsTest::buildMultiFields2();
634   CPPUNIT_ASSERT(fotc->isEqual(refField,1.e-12,1.e-15));
635   refField->decrRef();
636   std::vector<double> ts=fotc->getTimeSteps();
637   CPPUNIT_ASSERT_EQUAL(6,(int)ts.size());
638   const double expected[6]={0.2,0.7,1.2,1.35,1.7,2.7};
639   for(int i=0;i<6;i++)
640     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected[i],ts[i],1e-12);
641   fotc->decrRef();
642 }
643
644 void SALOME_TEST::MEDCouplingCorbaServBasicsTestClt::shutdownServer()
645 {
646   _objC->shutdownOrb();
647 }