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