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