Salome HOME
3f4b82633d44fa213740bd0388dd1a8d58cbbeb0
[tools/medcoupling.git] / src / INTERP_KERNELTest / QuadraticPlanarInterpTest5.cxx
1 // Copyright (C) 2007-2019  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, or (at your option) any later version.
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 "QuadraticPlanarInterpTest.hxx"
22 #include "InterpKernelGeo2DQuadraticPolygon.hxx"
23 #include "InterpKernelGeo2DElementaryEdge.hxx"
24 #include "InterpKernelGeo2DEdgeArcCircle.hxx"
25 #include "InterpKernelGeo2DEdgeLin.hxx"
26
27 #include <cmath>
28 #include <sstream>
29 #include <iostream>
30 #include <iterator>
31
32 using namespace INTERP_KERNEL;
33
34 namespace INTERP_TEST
35 {
36
37 class DoubleEqual
38 {
39 public:
40   DoubleEqual(double eps):_eps(eps) { }
41   bool operator()(double x, double y) { return fabs(x-y)<_eps; }
42 private:
43   double _eps;
44 };
45
46 void QuadraticPlanarInterpTest::checkNonRegressionOmar0000()
47 {
48   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
49   double coords[16]={
50     -0.383022221559489, 0.3213938048432697, -0.5745333323392334, 0.4820907072649046, 0.5745333323392335, 0.4820907072649044, 0.383022221559489, 0.3213938048432696,
51     -0.4787777769493612, 0.4017422560540872, 4.592273826833915e-17, 0.75, 0.4787777769493612, 0.401742256054087, 3.061515884555943e-17, 0.5 };
52   
53   double coords2[16]={
54     -0.383022221559489, -0.1786061951567303, -0.5745333323392334, -0.01790929273509539, 0.5745333323392335, -0.01790929273509556, 0.383022221559489, -0.1786061951567304,
55     -0.4787777769493612, -0.0982577439459128, 4.592273826833915e-17, 0.25, 0.4787777769493612, -0.09825774394591297, 3.061515884555943e-17, 0 };
56
57   int tab8[8]={
58     0, 1, 2, 3, 4, 5, 6, 7 };
59   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
60   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
61   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
62   delete pol1;
63   delete pol2;
64   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
65   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
66   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
67   delete pol1;
68   delete pol2;
69 }
70
71 void QuadraticPlanarInterpTest::checkNonRegressionOmar0001()
72 {
73   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
74   double coords[16]={
75     -0.383022221559489, 0.3213938048432697, -0.5745333323392334, 0.4820907072649046, 0.5745333323392335, 0.4820907072649044, 0.383022221559489, 0.3213938048432696,
76     -0.4787777769493612, 0.4017422560540872, 4.592273826833915e-17, 0.75, 0.4787777769493612, 0.401742256054087, 3.061515884555943e-17, 0.5 };
77   
78   double coords2[16]={
79     -0.383022221559489, 0.3213938048432697, -0.5745333323392334, 0.4820907072649046, 0.5745333323392335, 0.4820907072649044, 0.383022221559489, 0.3213938048432696,
80     -0.4787777769493612, 0.4017422560540872, 4.592273826833915e-17, 0.75, 0.4787777769493612, 0.401742256054087, 3.061515884555943e-17, 0.5 };
81   
82   int tab8[8]={
83     0, 1, 2, 3, 4, 5, 6, 7 };
84   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
85   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
86   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.272708,pol1->intersectWith(*pol2),1.e-6);
87   delete pol1;
88   delete pol2;
89   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
90   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
91   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.272708,pol2->intersectWith(*pol1),1.e-6);
92   delete pol1;
93   delete pol2;
94 }
95
96 void QuadraticPlanarInterpTest::checkNonRegressionOmar0002()
97 {
98   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
99   double coords[16]={
100     -0.383022221559489, 0.3213938048432697, -0.5745333323392334, 0.4820907072649046, 0.5745333323392335, 0.4820907072649044, 0.383022221559489, 0.3213938048432696,
101     -0.4787777769493612, 0.4017422560540872, 4.592273826833915e-17, 0.75, 0.4787777769493612, 0.401742256054087, 3.061515884555943e-17, 0.5 };
102   
103   double coords2[16]={
104     -0.4979288880273356, 0.4178119462962507, -0.6128355544951823, 0.5142300877492316, 0.6128355544951825, 0.5142300877492314, 0.4979288880273357, 0.4178119462962505,
105     -0.555382221261259, 0.4660210170227412, 4.898425415289509e-17, 0.8, 0.5553822212612591, 0.466021017022741, 3.979970649922726e-17, 0.65 };
106
107   int tab8[8]={
108     0, 1, 2, 3, 4, 5, 6, 7 };
109   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
110   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
111   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.122173,pol1->intersectWith(*pol2),1.e-6);
112   delete pol1;
113   delete pol2;
114   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
115   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
116   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.122173,pol2->intersectWith(*pol1),1.e-6);
117   delete pol1;
118   delete pol2;
119 }
120
121 void QuadraticPlanarInterpTest::checkNonRegressionOmar0003()
122 {
123   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
124   double coords[16]={
125     -0.3535533905932737, 0.3535533905932738, -0.5303300858899106, 0.5303300858899107, 0.5303300858899107, 0.5303300858899106, 0.3535533905932738, 0.3535533905932737,
126     -0.4419417382415922, 0.4419417382415922, 4.592273826833915e-17, 0.75, 0.4419417382415922, 0.4419417382415922, 3.061515884555943e-17, 0.5 };
127   
128   double coords2[16]={
129     -0.4979288880273356, 0.4178119462962507, -0.6128355544951823, 0.5142300877492316, 0.6128355544951825, 0.5142300877492314, 0.4979288880273357, 0.4178119462962505,
130     -0.555382221261259, 0.4660210170227412, 4.898425415289509e-17, 0.8, 0.5553822212612591, 0.466021017022741, 3.979970649922726e-17, 0.65 };
131
132   int tab8[8]={
133     0, 1, 2, 3, 4, 5, 6, 7 };
134   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
135   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
136   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.109956,pol1->intersectWith(*pol2),1.e-6);
137   delete pol1;
138   delete pol2;
139   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
140   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
141   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.109956,pol2->intersectWith(*pol1),1.e-6);
142   delete pol1;
143   delete pol2;
144 }
145
146 void QuadraticPlanarInterpTest::checkNonRegressionOmar0004()
147 {
148   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
149   double coords[16]={
150     -0.4596194077712559, 0.4596194077712559, -0.5303300858899106, 0.5303300858899107, 0.5303300858899107, 0.5303300858899106, 0.4596194077712559, 0.4596194077712559,
151     -0.4949747468305832, 0.4949747468305833, 4.592273826833915e-17, 0.75, 0.4949747468305833, 0.4949747468305832, 3.979970649922726e-17, 0.65 };
152
153   double coords2[16]={
154     -0.383022221559489, 0.3213938048432697, -0.6128355544951823, 0.5142300877492316, 0.6128355544951825, 0.5142300877492314, 0.383022221559489, 0.3213938048432696,
155     -0.4979288880273356, 0.4178119462962507, 4.898425415289509e-17, 0.8, 0.4979288880273357, 0.4178119462962505, 3.061515884555943e-17, 0.5 };
156
157   int tab8[8]={
158     0, 1, 2, 3, 4, 5, 6, 7 };
159   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
160   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
161   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.109956,pol1->intersectWith(*pol2),1.e-6);
162   delete pol1;
163   delete pol2;
164   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
165   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
166   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.109956,pol2->intersectWith(*pol1),1.e-6);
167   delete pol1;
168   delete pol2;
169 }
170
171 void QuadraticPlanarInterpTest::checkNonRegressionOmar0005()
172 {
173   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
174   double coords[16]={
175     -0.383022221559489, 0.3213938048432697, -0.6128355544951823, 0.5142300877492316, 0.6128355544951825, 0.5142300877492314, 0.383022221559489, 0.3213938048432696,
176     -0.4979288880273356, 0.4178119462962507, 4.898425415289509e-17, 0.8, 0.4979288880273357, 0.4178119462962505, 3.061515884555943e-17, 0.5 };
177   
178   double coords2[16]={
179     -0.4596194077712559, 0.4596194077712559, -0.5303300858899106, 0.5303300858899107, 0.5303300858899107, 0.5303300858899106, 0.4596194077712559, 0.4596194077712559,
180     -0.4949747468305832, 0.4949747468305833, 4.592273826833915e-17, 0.75, 0.4949747468305833, 0.4949747468305832, 3.979970649922726e-17, 0.65 };
181   
182   int tab8[8]={
183     0, 1, 2, 3, 4, 5, 6, 7 };
184   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
185   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
186   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.109956,pol1->intersectWith(*pol2),1.e-6);
187   delete pol1;
188   delete pol2;
189   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
190   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
191   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.109956,pol2->intersectWith(*pol1),1.e-6);
192   delete pol1;
193   delete pol2;
194 }
195
196 void QuadraticPlanarInterpTest::checkNonRegressionOmar0006()
197 {
198   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
199   double coords[16]={
200     -0.383022221559489, 0.3213938048432697, -0.5362311101832845, 0.4499513267805776, 0.5362311101832846, 0.4499513267805774, 0.383022221559489, 0.3213938048432696,
201     -0.4596266658713867, 0.3856725658119237, 4.28612223837832e-17, 0.7, 0.4596266658713868, 0.3856725658119236, 3.061515884555943e-17, 0.5 };
202   
203   double coords2[16]={
204     -0.1811733315717646, 0.6761480784023478, -0.2070552360820167, 0.7727406610312547, 0.2070552360820166, 0.7727406610312547, 0.1811733315717645, 0.6761480784023478,
205     -0.1941142838268906, 0.7244443697168013, 4.898425415289509e-17, 0.8, 0.1941142838268906, 0.7244443697168013, 4.28612223837832e-17, 0.7 };
206   
207   int tab8[8]={
208     0, 1, 2, 3, 4, 5, 6, 7 };
209   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
210   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
211   std::vector<double> val1,val2;
212   pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
213   double test1_res[4]={0.,0.366519,0.,0.};
214   double test2_res[4]={0.,0.,0.,0.366519};
215   CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-6)));
216   CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-6)));
217   delete pol1;
218   delete pol2;
219 }
220
221 void QuadraticPlanarInterpTest::checkNonRegressionOmar0007()
222 {
223   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
224   double coords[16]={
225     -0.383022221559489, 0.3213938048432697, -0.5362311101832845, 0.4499513267805776, 0.5362311101832846, 0.4499513267805774, 0.383022221559489, 0.3213938048432696,
226     -0.4596266658713867, 0.3856725658119237, 4.28612223837832e-17, 0.7, 0.4596266658713868, 0.3856725658119236, 3.061515884555943e-17, 0.5 };
227   
228   double coords2[16]={
229     -0.4499513267805775, 0.5362311101832846, -0.5142300877492315, 0.6128355544951825, -0.1389185421335442, 0.7878462024097664, -0.1215537243668512, 0.6893654271085455,
230     -0.4820907072649045, 0.5745333323392335, -0.3380946093925595, 0.7250462296293201, -0.1302361332501977, 0.738605814759156, -0.2958327832184895, 0.634415450925655 };
231   
232   int tab8[8]={
233     0, 1, 2, 3, 4, 5, 6, 7 };
234   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
235   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
236   std::vector<double> val1,val2;
237   pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
238   double test1_res[4]={0.,0.366519,0.,0.};
239   double test2_res[4]={0.,0.,0.,0.366519};
240   CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-6)));
241   CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-6)));
242   delete pol1;
243   delete pol2;
244 }
245
246 void QuadraticPlanarInterpTest::checkNonRegressionOmar0008()
247 {
248   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
249   double coords[16]={
250     -0.383022221559489, 0.3213938048432697, -0.5362311101832845, 0.4499513267805776, 0.5362311101832846, 0.4499513267805774, 0.383022221559489, 0.3213938048432696,
251     -0.4596266658713867, 0.3856725658119237, 4.28612223837832e-17, 0.7, 0.4596266658713868, 0.3856725658119236, 3.061515884555943e-17, 0.5 };
252   
253   double coords2[16]={
254     -0.6344154509256549, 0.2958327832184896, -0.72504622962932, 0.3380946093925596, -0.4588611490808367, 0.6553216354311937, -0.401503505445732, 0.5734064310022944,
255     -0.6797308402774874, 0.3169636963055246, -0.6128355544951823, 0.5142300877492316, -0.4301823272632844, 0.614364033216744, -0.5362311101832845, 0.4499513267805776 };
256   
257   int tab8[8]={
258     0, 1, 2, 3, 4, 5, 6, 7 };
259   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
260   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
261   std::vector<double> val1,val2;
262   pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
263   double test1_res[4]={0.,0.18326,0.,0.};
264   double test2_res[4]={0.,0.,0.,0.18326};
265   CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-5)));
266   CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-5)));
267   delete pol1;
268   delete pol2;
269 }
270
271 void QuadraticPlanarInterpTest::checkNonRegressionOmar0009()
272 {
273   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
274   double coords[16]={
275     -0.3863703305156274, -0.1035276180410081, -0.4829629131445342, -0.1294095225512602, 0.4829629131445342, -0.1294095225512604, 0.3863703305156274, -0.1035276180410083,
276     -0.4346666218300808, -0.1164685702961342, 1.416374613080751e-16, 0.5, 0.4346666218300808, -0.1164685702961343, 1.133099690464601e-16, 0.4 };
277   double coords2[16]={
278     0.5, -1.224606353822377e-16, 0.6, -1.469527624586853e-16, -0.6, 7.347638122934263e-17, -0.5, 6.123031769111886e-17,
279     0.55, -1.347066989204615e-16, -1.102145718440139e-16, -0.6, -0.55, 6.735334946023075e-17, -9.184547653667829e-17, -0.5 };
280   
281   int tab8[8]={
282     0, 1, 2, 3, 4, 5, 6, 7 };
283   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
284   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
285   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
286   delete pol1;
287   delete pol2;
288   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
289   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
290   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
291   delete pol1;
292   delete pol2;
293 }
294
295 void QuadraticPlanarInterpTest::checkNonRegressionOmar0010()
296 {
297   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
298   double coords[16]={
299     -0.3863703305156274, -0.1035276180410081, -0.4829629131445342, -0.1294095225512602, 0.4829629131445342, -0.1294095225512604, 0.3863703305156274, -0.1035276180410083,
300 -0.4346666218300808, -0.1164685702961342, 1.416374613080751e-16, 0.5, 0.4346666218300808, -0.1164685702961343, 1.133099690464601e-16, 0.4 };
301   double coords2[16]={
302     0.4346666218300808, -0.1164685702961343, 0.579555495773441, -0.1552914270615124, -0.579555495773441, -0.1552914270615122, -0.4346666218300808, -0.1164685702961342,
303 0.5071110588017609, -0.1358799986788234, -1.102145718440139e-16, -0.6, -0.507111058801761, -0.1358799986788232, -8.266092888301047e-17, -0.45 };
304   
305   int tab8[8]={
306     0, 1, 2, 3, 4, 5, 6, 7 };
307   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
308   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
309   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
310   delete pol1;
311   delete pol2;
312   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
313   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
314   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
315   delete pol1;
316   delete pol2;
317 }
318
319 void QuadraticPlanarInterpTest::checkNonRegressionOmar0011()
320 {
321   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
322   double coords[16]={
323     -0.3863703305156274, -0.1035276180410081, -0.4829629131445342, -0.1294095225512602, 0.4829629131445342, -0.1294095225512604, 0.3863703305156274, -0.1035276180410083,
324 -0.4346666218300808, -0.1164685702961342, 1.416374613080751e-16, 0.5, 0.4346666218300808, -0.1164685702961343, 1.133099690464601e-16, 0.4 };
325   double coords2[16]={
326     0.4829629131445342, -0.1294095225512603, 0.579555495773441, -0.1552914270615124, -0.579555495773441, -0.1552914270615122, -0.4829629131445342, -0.1294095225512602,
327 0.5312592044589877, -0.1423504748063864, -1.102145718440139e-16, -0.6, -0.5312592044589877, -0.1423504748063862, -9.184547653667829e-17, -0.5 };
328   
329   int tab8[8]={
330     0, 1, 2, 3, 4, 5, 6, 7 };
331   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
332   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
333   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
334   double val1,val2,val3;
335   pol1->intersectForPerimeter(*pol2,val1,val2,val3);
336   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val1,1.e-13);
337   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val2,1.e-13);
338   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val3,1.e-13);
339   std::vector<double> val4,val5;
340   pol1->intersectForPerimeterAdvanced(*pol2,val4,val5);
341   double test1_res[4]={0.,0.,0.,0.};
342   CPPUNIT_ASSERT(std::equal(val4.begin(),val4.end(),test1_res,DoubleEqual(1e-13)));
343   CPPUNIT_ASSERT(std::equal(val5.begin(),val5.end(),test1_res,DoubleEqual(1e-13)));
344   delete pol1;
345   delete pol2;
346   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
347   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
348   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
349   pol1->intersectForPerimeter(*pol2,val1,val2,val3);
350   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val1,1.e-13);
351   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val2,1.e-13);
352   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val3,1.e-13);
353   val4.clear(); val5.clear();
354   pol1->intersectForPerimeterAdvanced(*pol2,val4,val5);
355   CPPUNIT_ASSERT(std::equal(val4.begin(),val4.end(),test1_res,DoubleEqual(1e-13)));
356   CPPUNIT_ASSERT(std::equal(val5.begin(),val5.end(),test1_res,DoubleEqual(1e-13)));
357   delete pol1;
358   delete pol2;
359 }
360
361 void QuadraticPlanarInterpTest::checkNonRegressionOmar2511()
362 {
363   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
364   double coords[16]={
365     -0.3863703305156274, -0.1035276180410081, -0.4829629131445342, -0.1294095225512602, 0.4829629131445342, -0.1294095225512604, 0.3863703305156274, -0.1035276180410083,
366     -0.4346666218300808, -0.1164685702961342, 1.416374613080751e-16, 0.5, 0.4346666218300808, -0.1164685702961343, 1.133099690464601e-16, 0.4, };
367   
368   double coords2[16]={
369     0.579555495773441, -0.1552914270615124, -0.579555495773441, -0.1552914270615122, -0.4829629131445342, -0.1294095225512602, 0.4829629131445342, -0.1294095225512603,
370     -1.102145718440139e-16, -0.6, -0.5312592044589877, -0.1423504748063862, -9.184547653667829e-17, -0.5, 0.5312592044589877, -0.1423504748063864, };
371
372   int tab8[8]={
373     0, 1, 2, 3, 4, 5, 6, 7 };
374   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
375   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
376   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
377   double val1,val2,val3;
378   pol1->intersectForPerimeter(*pol2,val1,val2,val3);
379   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val1,1.e-13);
380   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val2,1.e-13);
381   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val3,1.e-13);
382   std::vector<double> val4,val5;
383   pol1->intersectForPerimeterAdvanced(*pol2,val4,val5);
384   double test1_res[4]={0.,0.,0.,0.};
385   CPPUNIT_ASSERT(std::equal(val4.begin(),val4.end(),test1_res,DoubleEqual(1e-13)));
386   CPPUNIT_ASSERT(std::equal(val5.begin(),val5.end(),test1_res,DoubleEqual(1e-13)));
387   delete pol1;
388   delete pol2;
389   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
390   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
391   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
392   pol1->intersectForPerimeter(*pol2,val1,val2,val3);
393   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val1,1.e-13);
394   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val2,1.e-13);
395   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val3,1.e-13);
396   val4.clear(); val5.clear();
397   pol1->intersectForPerimeterAdvanced(*pol2,val4,val5);
398   CPPUNIT_ASSERT(std::equal(val4.begin(),val4.end(),test1_res,DoubleEqual(1e-13)));
399   CPPUNIT_ASSERT(std::equal(val5.begin(),val5.end(),test1_res,DoubleEqual(1e-13)));
400   delete pol1;
401   delete pol2;
402 }
403
404 void QuadraticPlanarInterpTest::checkNonRegressionOmar0012()
405 {
406   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
407   double coords[16]={
408     -1, 1.224606353822377e-16, -1.6, 1.959370166115804e-16, 9.796850830579018e-17, 1.6, 6.123031769111886e-17, 1,
409     -1.3, 1.591988259969091e-16, -1.131370849898476, 1.131370849898476, 7.959941299845453e-17, 1.3, -0.7071067811865475, 0.7071067811865476 };
410   
411   double coords2[16]={
412     6.123031769111886e-18, 1.85, 1.224606353822377e-17, 1.95, 1.224606353822377e-17, 1.55, 6.123031769111886e-18, 1.65,
413     9.18454765366783e-18, 1.9, 0.2, 1.75, 9.18454765366783e-18, 1.6, 0.1, 1.75 };
414   
415   int tab8[8]={
416     0, 1, 2, 3, 4, 5, 6, 7 };
417   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
418   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
419   std::vector<double> val1,val2;
420   pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
421   double test1_res[4]={0.,0.,0.05,0.};
422   double test2_res[4]={0.,0.,0.05,0.};
423   CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-13)));
424   CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-13)));
425   delete pol1;
426   delete pol2;
427   std::vector<int> val3;
428   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
429   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
430   pol1->intersectForPoint(*pol2,val3);
431   int test3_res[4]={0,0,1,0};
432   CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
433   delete pol1;
434   delete pol2;
435 }
436
437 void QuadraticPlanarInterpTest::checkNonRegressionOmar0013()
438 {
439   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
440   double coords[16]={
441     -1, 1.224606353822377e-16, -1.6, 1.959370166115804e-16, 9.796850830579018e-17, 1.6, 6.123031769111886e-17, 1,
442     -1.3, 1.591988259969091e-16, -1.131370849898476, 1.131370849898476, 7.959941299845453e-17, 1.3, -0.7071067811865475, 0.7071067811865476 };
443   
444   double coords2[16]={
445     6.123031769111886e-18, 1.7, 1.224606353822377e-17, 1.8, 1.224606353822377e-17, 1.4, 6.123031769111886e-18, 1.5,
446     9.18454765366783e-18, 1.75, 0.2, 1.6, 9.18454765366783e-18, 1.45, 0.1, 1.6 };
447
448   int tab8[8]={
449     0, 1, 2, 3, 4, 5, 6, 7 };
450   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
451   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
452   std::vector<double> val1,val2;
453   pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
454   double test1_res[4]={0.,0.,0.1,0.};
455   double test2_res[4]={0.,0.,0.1,0.};
456   CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-13)));
457   CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-13)));
458   delete pol1;
459   delete pol2;
460   std::vector<int> val3;
461   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
462   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
463   pol1->intersectForPoint(*pol2,val3);
464   int test3_res[4]={0,0,2,0};
465   CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
466   delete pol1;
467   delete pol2;
468 }
469
470 void QuadraticPlanarInterpTest::checkNonRegressionOmar0014()
471 {
472   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
473   double coords[16]={
474     -1, 1.224606353822377e-16, -1.6, 1.959370166115804e-16, 9.796850830579018e-17, 1.6, 6.123031769111886e-17, 1,
475 -1.3, 1.591988259969091e-16, -1.131370849898476, 1.131370849898476, 7.959941299845453e-17, 1.3, -0.7071067811865475, 0.7071067811865476 };
476   double coords2[16]={
477     6.123031769111886e-18, 1.55, 1.224606353822377e-17, 1.65, 1.224606353822377e-17, 1.25, 6.123031769111886e-18, 1.35,
478 9.18454765366783e-18, 1.6, 0.2, 1.45, 9.18454765366783e-18, 1.3, 0.1, 1.45 };
479   
480   int tab8[8]={
481     0, 1, 2, 3, 4, 5, 6, 7 };
482   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
483   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
484   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
485   delete pol1;
486   delete pol2;
487   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
488   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
489   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
490   delete pol1;
491   delete pol2;
492   //
493   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
494   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
495   std::vector<double> val1,val2;
496   pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
497   double test1_res[4]={0.,0.,0.15,0.};
498   double test2_res[4]={0.05,0.,0.1,0.};
499   CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-13)));
500   CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-13)));
501   delete pol1;
502   delete pol2;
503   std::vector<int> val3;
504   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
505   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
506   pol1->intersectForPoint(*pol2,val3);
507   int test3_res[4]={0,0,3,0};
508   CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
509   delete pol1;
510   delete pol2;
511 }
512
513 void QuadraticPlanarInterpTest::checkNonRegressionOmar0015()
514 {
515   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
516   double coords[16]={
517     -1, 1.224606353822377e-16, -1.6, 1.959370166115804e-16, 9.796850830579018e-17, 1.6, 6.123031769111886e-17, 1,
518 -1.3, 1.591988259969091e-16, -1.131370849898476, 1.131370849898476, 7.959941299845453e-17, 1.3, -0.7071067811865475, 0.7071067811865476 };
519   double coords2[16]={
520     6.123031769111886e-18, 1.4, 1.224606353822377e-17, 1.5, 1.224606353822377e-17, 1.1, 6.123031769111886e-18, 1.2,
521 9.18454765366783e-18, 1.45, 0.2, 1.3, 9.18454765366783e-18, 1.15, 0.1, 1.3 };
522   
523   int tab8[8]={
524     0, 1, 2, 3, 4, 5, 6, 7 };
525   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
526   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
527   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
528   delete pol1;
529   delete pol2;
530   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
531   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
532   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
533   delete pol1;
534   delete pol2;
535   //
536   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
537   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
538   std::vector<double> val1,val2;
539   pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
540   double test1_res[4]={0.,0.,0.2,0.};
541   double test2_res[4]={0.1,0.,0.1,0.};
542   CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-13)));
543   CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-13)));
544   delete pol1;
545   delete pol2;
546   std::vector<int> val3;
547   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
548   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
549   pol1->intersectForPoint(*pol2,val3);
550   int test3_res[4]={0,0,4,0};
551   CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
552   delete pol1;
553   delete pol2;
554 }
555
556 void QuadraticPlanarInterpTest::checkNonRegressionOmar0016()
557 {
558   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
559   double coords[16]={
560     -1, 1.224606353822377e-16, -1.6, 1.959370166115804e-16, 9.796850830579018e-17, 1.6, 6.123031769111886e-17, 1,
561 -1.3, 1.591988259969091e-16, -1.131370849898476, 1.131370849898476, 7.959941299845453e-17, 1.3, -0.7071067811865475, 0.7071067811865476 };
562   double coords2[16]={
563     6.123031769111886e-18, 1.25, 1.224606353822377e-17, 1.35, 1.224606353822377e-17, 0.95, 6.123031769111886e-18, 1.05,
564 9.18454765366783e-18, 1.3, 0.2, 1.15, 9.18454765366783e-18, 0.9999999999999999, 0.1, 1.15 };
565   
566   int tab8[8]={
567     0, 1, 2, 3, 4, 5, 6, 7 };
568   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
569   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
570   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
571   delete pol1;
572   delete pol2;
573   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
574   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
575   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
576   delete pol1;
577   delete pol2;
578   //
579   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
580   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
581   std::vector<double> val1,val2;
582   pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
583   double test1_res[4]={0.,0.,0.15,0.};
584   double test2_res[4]={0.1,0.,0.05,0.};
585   CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-13)));
586   CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-13)));
587   delete pol1;
588   delete pol2;
589   std::vector<int> val3;
590   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
591   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
592   pol1->intersectForPoint(*pol2,val3);
593   int test3_res[4]={0,0,3,0};
594   CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
595   delete pol1;
596   delete pol2;
597 }
598
599 void QuadraticPlanarInterpTest::checkNonRegressionOmar0017()
600 {
601   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
602
603   double coords[16]={
604     -1, 1.224606353822377e-16, -1.6, 1.959370166115804e-16, 9.796850830579018e-17, 1.6, 6.123031769111886e-17, 1,
605     -1.3, 1.591988259969091e-16, -1.131370849898476, 1.131370849898476, 7.959941299845453e-17, 1.3, -0.7071067811865475, 0.7071067811865476 };
606   
607   double coords2[16]={
608     6.123031769111886e-18, 1.1, 1.224606353822377e-17, 1.2, 1.224606353822377e-17, 0.8, 6.123031769111886e-18, 0.9,
609     9.18454765366783e-18, 1.15, 0.2, 1, 9.18454765366783e-18, 0.85, 0.1, 1 };
610
611   int tab8[8]={
612     0, 1, 2, 3, 4, 5, 6, 7 };
613   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
614   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
615   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
616   delete pol1;
617   delete pol2;
618   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
619   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
620   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
621   delete pol1;
622   delete pol2;
623   //
624   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
625   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
626   std::vector<double> val1,val2;
627   pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
628   double test1_res[4]={0.,0.,0.1,0.};
629   double test2_res[4]={0.1,0.,0.,0.};
630   CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-13)));
631   CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-13)));
632   delete pol1;
633   delete pol2;
634   std::vector<int> val3;
635   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
636   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
637   pol1->intersectForPoint(*pol2,val3);
638   int test3_res[4]={0,0,2,0};
639   CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
640   delete pol1;
641   delete pol2;
642 }
643
644 void QuadraticPlanarInterpTest::checkNonRegressionOmar0018()
645 {
646   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
647
648   double coords[16]={
649     -1, 1.224606353822377e-16, -1.6, 1.959370166115804e-16, 9.796850830579018e-17, 1.6, 6.123031769111886e-17, 1,
650     -1.3, 1.591988259969091e-16, -1.131370849898476, 1.131370849898476, 7.959941299845453e-17, 1.3, -0.7071067811865475, 0.7071067811865476 };
651   
652   double coords2[16]={
653     6.123031769111886e-18, 0.95, 1.224606353822377e-17, 1.05, 1.224606353822377e-17, 0.6499999999999999, 6.123031769111886e-18, 0.75,
654     9.18454765366783e-18, 1, 0.2, 0.85, 9.18454765366783e-18, 0.7, 0.1, 0.85 };
655
656   int tab8[8]={
657     0, 1, 2, 3, 4, 5, 6, 7 };
658   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
659   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
660   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
661   delete pol1;
662   delete pol2;
663   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
664   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
665   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
666   delete pol1;
667   delete pol2;
668   //
669   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
670   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
671   std::vector<double> val1,val2;
672   pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
673   double test1_res[4]={0.,0.,0.05,0.};
674   double test2_res[4]={0.05,0.,0.,0.};
675   CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-13)));
676   CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-13)));
677   delete pol1;
678   delete pol2;
679   std::vector<int> val3;
680   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
681   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
682   pol1->intersectForPoint(*pol2,val3);
683   int test3_res[4]={0,0,1,0};
684   CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
685   delete pol1;
686   delete pol2;
687 }
688
689 void QuadraticPlanarInterpTest::checkNonRegressionOmar0019()
690 {
691   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
692
693   double coords[16]={
694     -0.5, 6.123031769111886e-17, -0.8, 9.796850830579018e-17, 0.8, 0, 0.5, 0,
695     -0.65, 7.959941299845453e-17, 4.898425415289509e-17, 0.8, 0.65, 0, 3.061515884555943e-17, 0.5 };
696   
697   double coords2[16]={
698     0.9500000000000001, 1.836909530733566e-17, 0.8, 3.673819061467131e-17, 1.4, 0, 1.25, 0,
699     0.8750000000000001, 2.755364296100349e-17, 1.1, 0.3, 1.325, 0, 1.1, 0.15 };
700
701   int tab8[8]={
702     0, 1, 2, 3, 4, 5, 6, 7 };
703   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
704   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
705   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
706   delete pol1;
707   delete pol2;
708   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
709   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
710   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
711   delete pol1;
712   delete pol2;
713 }
714
715 void QuadraticPlanarInterpTest::checkNonRegressionOmar0020()
716 {
717   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
718
719   double coords[16]={
720     -0.5, 6.123031769111886e-17, -0.8, 9.796850830579018e-17, 0.8, 0, 0.5, 0,
721     -0.65, 7.959941299845453e-17, 4.898425415289509e-17, 0.8, 0.65, 0, 3.061515884555943e-17, 0.5 };
722   
723   double coords2[16]={
724     0.05000000000000002, 1.836909530733566e-17, -0.09999999999999998, 3.673819061467131e-17, 0.5, 0, 0.35, 0,
725     -0.02499999999999997, 2.755364296100349e-17, 0.2, 0.3, 0.425, 0, 0.2, 0.15 };
726   
727   int tab8[8]={
728     0, 1, 2, 3, 4, 5, 6, 7 };
729   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
730   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
731   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
732   delete pol1;
733   delete pol2;
734   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
735   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
736   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
737   delete pol1;
738   delete pol2;
739   //
740   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
741   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
742   std::vector<double> val1,val2;
743   pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
744   double test1_res[4]={0.,0.,0.,0.};
745   double test2_res[4]={0.,0.,0.,0.};
746   CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-6)));
747   CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-6)));
748   delete pol1;
749   delete pol2;
750   std::vector<int> val3;
751   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
752   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
753   pol1->intersectForPoint(*pol2,val3);
754   int test3_res[4]={0,0,0,0};
755   CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
756   delete pol1;
757   delete pol2;
758 }
759
760 void QuadraticPlanarInterpTest::checkNonRegressionOmar0021()
761 {
762   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
763
764   double coords[16]={
765     -0.5, 6.123031769111886e-17, -0.8, 9.796850830579018e-17, 0.8, 0, 0.5, 0,
766     -0.65, 7.959941299845453e-17, 4.898425415289509e-17, 0.8, 0.65, 0, 3.061515884555943e-17, 0.5 };
767   
768   double coords2[16]={
769     -1, -0.07999999999999999, -1.15, -0.07999999999999996, -0.55, -0.08, -0.7, -0.08,
770     -1.075, -0.07999999999999997, -0.85, 0.22, -0.625, -0.08, -0.85, 0.06999999999999999 };
771   
772   int tab8[8]={
773     0, 1, 2, 3, 4, 5, 6, 7 };
774   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
775   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
776   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0311485,pol1->intersectWith(*pol2),1.e-7);
777   delete pol1;
778   delete pol2;
779   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
780   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
781   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0311485,pol2->intersectWith(*pol1),1.e-7);
782   delete pol1;
783   delete pol2;
784   //
785   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
786   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
787   std::vector<double> val1,val2;
788   pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
789   double test1_res[4]={0.162251,0.151523,0.,0.};
790   double test2_res[4]={0.,0.311383,0.,0.0978193};
791   CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-6)));
792   CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-6)));
793   delete pol1;
794   delete pol2;
795   std::vector<int> val3;
796   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
797   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
798   pol1->intersectForPoint(*pol2,val3);
799   int test3_res[4]={2,2,0,0};
800   CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
801   delete pol1;
802   delete pol2;
803 }
804 void QuadraticPlanarInterpTest::checkNonRegressionOmar0022()
805 {
806   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
807
808   double coords[16]={
809     -0.5, 6.123031769111886e-17, -0.8, 9.796850830579018e-17, 0.8, 0, 0.5, 0,
810     -0.65, 7.959941299845453e-17, 4.898425415289509e-17, 0.8, 0.65, 0, 3.061515884555943e-17, 0.5 };
811   
812   double coords2[16]={
813     0.15, -0.07999999999999999, 0, -0.07999999999999996, 0.6, -0.08, 0.45, -0.08,
814     0.07500000000000001, -0.07999999999999997, 0.3, 0.22, 0.5249999999999999, -0.08, 0.3, 0.06999999999999999 };
815   
816   int tab8[8]={
817     0, 1, 2, 3, 4, 5, 6, 7 };
818   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
819   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
820   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00902229,pol1->intersectWith(*pol2),1.e-8);
821   delete pol1;
822   delete pol2;
823   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
824   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
825   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00902229,pol2->intersectWith(*pol1),1.e-8);
826   delete pol1;
827   delete pol2;
828 }
829
830 void QuadraticPlanarInterpTest::checkNonRegressionOmar0023()
831 {
832   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
833
834   double coords[16]={
835     -0.5, 6.123031769111886e-17, -0.8, 9.796850830579018e-17, 0.8, 0, 0.5, 0,
836     -0.65, 7.959941299845453e-17, 4.898425415289509e-17, 0.8, 0.65, 0, 3.061515884555943e-17, 0.5, };
837   
838   double coords2[16]={
839     0.4156854249492381, 0.5656854249492381, 0.2656854249492381, 0.5656854249492381, 0.8656854249492381, 0.5656854249492381, 0.7156854249492381, 0.5656854249492381,
840     0.3406854249492381, 0.5656854249492381, 0.5656854249492381, 0.8656854249492381, 0.7906854249492381, 0.5656854249492381, 0.5656854249492381, 0.7156854249492381 };
841   
842   int tab8[8]={
843     0, 1, 2, 3, 4, 5, 6, 7 };
844   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
845   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
846   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0215659,pol1->intersectWith(*pol2),1.e-7);
847   delete pol1;
848   delete pol2;
849   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
850   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
851   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0215659,pol2->intersectWith(*pol1),1.e-7);
852   delete pol1;
853   delete pol2;
854 }
855
856 void QuadraticPlanarInterpTest::checkNonRegressionOmar0024()
857 {
858   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
859
860   double coords[16]={
861     -0.5, 6.123031769111886e-17, -0.8, 9.796850830579018e-17, 0.8, 0, 0.5, 0,
862 -0.65, 7.959941299845453e-17, 4.898425415289509e-17, 0.8, 0.65, 0, 3.061515884555943e-17, 0.5 };
863   double coords2[16]={
864     0.5656854249492381, 0.5656854249492381, 0.4156854249492382, 0.5656854249492381, 1.015685424949238, 0.5656854249492381, 0.8656854249492382, 0.5656854249492381,
865 0.4906854249492382, 0.5656854249492381, 0.7156854249492381, 0.8656854249492381, 0.9406854249492381, 0.5656854249492381, 0.7156854249492381, 0.7156854249492381 };
866   
867   int tab8[8]={
868     0, 1, 2, 3, 4, 5, 6, 7 };
869   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
870   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
871   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00877657,pol1->intersectWith(*pol2),1.e-8);
872   delete pol1;
873   delete pol2;
874   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
875   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
876   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00877657,pol2->intersectWith(*pol1),1.e-8);
877   delete pol1;
878   delete pol2;
879 }
880
881 void QuadraticPlanarInterpTest::checkNonRegressionOmar2524()
882 {
883   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
884
885   double coords[16]={
886     -0.5, 6.123031769111886e-17, -0.8, 9.796850830579018e-17, 0.8, 0, 0.5, 0,
887 -0.65, 7.959941299845453e-17, 4.898425415289509e-17, 0.8, 0.65, 0, 3.061515884555943e-17, 0.5 };
888   double coords2[16]={
889     0.4156854249492382, 0.5656854249492381, 1.015685424949238, 0.5656854249492381, 0.8656854249492382, 0.5656854249492381, 0.5656854249492381, 0.5656854249492381,
890 0.7156854249492381, 0.8656854249492381, 0.9406854249492381, 0.5656854249492381, 0.7156854249492381, 0.7156854249492381, 0.4906854249492382, 0.5656854249492381 };
891   
892   int tab8[8]={
893     0, 1, 2, 3, 4, 5, 6, 7 };
894   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
895   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
896   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00877657,pol1->intersectWith(*pol2),1.e-8);
897   delete pol1;
898   delete pol2;
899   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
900   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
901   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00877657,pol2->intersectWith(*pol1),1.e-8);
902   delete pol1;
903   delete pol2;
904 }
905
906 void QuadraticPlanarInterpTest::checkNonRegressionOmar0025()
907 {
908   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
909
910   double coords[16]={
911     -0.5, 6.123031769111886e-17, -0.8, 9.796850830579018e-17, 0.8, 0, 0.5, 0,
912     -0.65, 7.959941299845453e-17, 4.898425415289509e-17, 0.8, 0.65, 0, 3.061515884555943e-17, 0.5 };
913   
914   double coords2[16]={
915     0.715685424949238, 0.5656854249492381, 0.565685424949238, 0.5656854249492381, 1.165685424949238, 0.5656854249492381, 1.015685424949238, 0.5656854249492381,
916     0.6406854249492381, 0.5656854249492381, 0.8656854249492381, 0.8656854249492381, 1.090685424949238, 0.5656854249492381, 0.8656854249492381, 0.7156854249492381 };
917
918   int tab8[8]={
919     0, 1, 2, 3, 4, 5, 6, 7 };
920   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
921   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
922   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
923   delete pol1;
924   delete pol2;
925   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
926   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
927   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
928   delete pol1;
929   delete pol2;
930   //
931   std::vector<int> val3;
932   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
933   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
934   pol1->intersectForPoint(*pol2,val3);
935   int test3_res[4]={0,1,0,0};
936   CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
937   delete pol1;
938   delete pol2;
939 }
940
941 void QuadraticPlanarInterpTest::checkNonRegressionOmar0026()
942 {
943   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
944
945   double coords[16]={
946     -0.4, 4.898425415289509e-17, -0.75, 9.184547653667829e-17, 0.75, 0, 0.4, 0,
947     -0.575, 7.041486534478669e-17, 4.592273826833915e-17, 0.75, 0.575, 0, 2.449212707644755e-17, 0.4 };
948   
949   double coords2[16]={
950     0.1, 0.95, 0.2, 0.95, -0.2, 0.95, -0.1, 0.95,
951     0.15, 0.95, 1.224606353822377e-17, 0.75, -0.15, 0.95, 6.123031769111886e-18, 0.85 };
952   
953   int tab8[8]={
954     0, 1, 2, 3, 4, 5, 6, 7 };
955   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
956   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
957   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
958   delete pol1;
959   delete pol2;
960   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
961   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
962   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
963   delete pol1;
964   delete pol2;
965   //
966   std::vector<int> val3;
967   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
968   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
969   pol1->intersectForPoint(*pol2,val3);
970   int test3_res[4]={0,1,0,0};
971   CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
972   delete pol1;
973   delete pol2;
974 }
975
976 void QuadraticPlanarInterpTest::checkNonRegressionOmar0027()
977 {
978   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
979
980   double coords[16]={
981     -0.4, 4.898425415289509e-17, -0.75, 9.184547653667829e-17, 0.75, 0, 0.4, 0,
982     -0.575, 7.041486534478669e-17, 4.592273826833915e-17, 0.75, 0.575, 0, 2.449212707644755e-17, 0.4 };
983   
984   double coords2[16]={
985     -0.1, 0.7, -0.2, 0.7, 0.2, 0.7, 0.1, 0.7,
986     -0.15, 0.7, 1.224606353822377e-17, 0.8999999999999999, 0.15, 0.7, 6.123031769111886e-18, 0.7999999999999999 };
987   
988   int tab8[8]={
989     0, 1, 2, 3, 4, 5, 6, 7 };
990   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
991   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
992   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00712309,pol1->intersectWith(*pol2),1.e-8);
993   delete pol1;
994   delete pol2;
995   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
996   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
997   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00712309,pol2->intersectWith(*pol1),1.e-8);
998   delete pol1;
999   delete pol2;
1000   //
1001   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1002   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1003   std::vector<double> val1,val2;
1004   pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
1005   double test1_res[4]={0.,0.222704,0.,0.};
1006   double test2_res[4]={0.1,0.0465335,0.1,0.092554};
1007   CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-6)));
1008   CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-6)));
1009   delete pol1;
1010   delete pol2;
1011   std::vector<int> val3;
1012   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1013   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1014   pol1->intersectForPoint(*pol2,val3);
1015   int test3_res[4]={0,4,0,0};
1016   CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
1017   delete pol1;
1018   delete pol2;
1019 }
1020
1021 void QuadraticPlanarInterpTest::checkNonRegressionOmar0028()
1022 {
1023   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
1024
1025   double coords[16]={
1026     -0.4, 4.898425415289509e-17, -0.75, 9.184547653667829e-17, 0.75, 0, 0.4, 0,
1027     -0.575, 7.041486534478669e-17, 4.592273826833915e-17, 0.75, 0.575, 0, 2.449212707644755e-17, 0.4 };
1028   
1029   double coords2[16]={
1030     -0.07071067811865477, 0.4792893218813453, -0.1414213562373095, 0.4085786437626905, 0.1414213562373095, 0.6914213562373095, 0.07071067811865477, 0.6207106781186548,
1031     -0.1060660171779822, 0.4439339828220179, -0.1414213562373095, 0.6914213562373096, 0.1060660171779822, 0.6560660171779822, -0.07071067811865475, 0.6207106781186548 };
1032   
1033   int tab8[8]={
1034     0, 1, 2, 3, 4, 5, 6, 7 };
1035   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1036   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1037   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0471239,pol1->intersectWith(*pol2),1.e-7);
1038   delete pol1;
1039   delete pol2;
1040   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1041   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1042   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0471239,pol2->intersectWith(*pol1),1.e-7);
1043   delete pol1;
1044   delete pol2;
1045   //
1046   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1047   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1048   std::vector<double> val1,val2;
1049   pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
1050   double test1_res[4]={0.,0.,0.,0.};
1051   double test2_res[4]={0.1,0.628319,0.1,0.314159};
1052   CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-6)));
1053   CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-6)));
1054   delete pol1;
1055   delete pol2;
1056   std::vector<int> val3;
1057   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1058   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1059   pol1->intersectForPoint(*pol2,val3);
1060   int test3_res[4]={0,1,0,0};
1061   CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
1062   delete pol1;
1063   delete pol2;
1064 }
1065
1066 void QuadraticPlanarInterpTest::checkNonRegressionOmar0029()
1067 {
1068   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
1069   double coords[16]={
1070     -0.4, 4.898425415289509e-17, -0.75, 9.184547653667829e-17, 0.75, 0, 0.4, 0,
1071     -0.575, 7.041486534478669e-17, 4.592273826833915e-17, 0.75, 0.575, 0, 2.449212707644755e-17, 0.4 };
1072   
1073   double coords2[16]={
1074     -0.07071067811865477, 0.1292893218813453, -0.1414213562373095, 0.05857864376269051, 0.1414213562373095, 0.3414213562373095, 0.07071067811865477, 0.2707106781186548,
1075     -0.1060660171779822, 0.09393398282201787, -0.1414213562373095, 0.3414213562373095, 0.1060660171779822, 0.3060660171779822, -0.07071067811865475, 0.2707106781186548 };
1076   
1077   int tab8[8]={
1078     0, 1, 2, 3, 4, 5, 6, 7 };
1079   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1080   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1081   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
1082   delete pol1;
1083   delete pol2;
1084   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1085   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1086   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
1087   delete pol1;
1088   delete pol2;
1089   //
1090   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1091   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1092   std::vector<double> val1,val2;
1093   pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
1094   double test1_res[4]={0.,0.,0.,0.};
1095   double test2_res[4]={0.,0.,0.,0.};
1096   CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-13)));
1097   CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-13)));
1098   delete pol1;
1099   delete pol2;
1100   std::vector<int> val3;
1101   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1102   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1103   pol1->intersectForPoint(*pol2,val3);
1104   int test3_res[4]={0,0,0,1};
1105   CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
1106   delete pol1;
1107   delete pol2;
1108 }
1109
1110 void QuadraticPlanarInterpTest::checkNonRegressionOmar0030()
1111 {
1112   INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
1113   double coords[16]={
1114     -0.4, 4.898425415289509e-17, -0.75, 9.184547653667829e-17, 0.75, 0, 0.4, 0,
1115     -0.575, 7.041486534478669e-17, 4.592273826833915e-17, 0.75, 0.575, 0, 2.449212707644755e-17, 0.4 };
1116   
1117   double coords2[16]={
1118     -0.4889087296526012, 0.3889087296526012, -0.5889087296526012, 0.3889087296526012, -0.1889087296526012, 0.3889087296526012, -0.2889087296526012, 0.3889087296526012,
1119     -0.5389087296526012, 0.3889087296526012, -0.3889087296526012, 0.5889087296526012, -0.2389087296526012, 0.3889087296526012, -0.3889087296526012, 0.4889087296526012 };
1120   
1121   int tab8[8]={
1122     0, 1, 2, 3, 4, 5, 6, 7 };
1123   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1124   QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1125   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0471239,pol1->intersectWith(*pol2),1.e-7);
1126   delete pol1;
1127   delete pol2;
1128   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1129   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1130   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0471239,pol2->intersectWith(*pol1),1.e-7);
1131   delete pol1;
1132   delete pol2;
1133   //
1134   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1135   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1136   std::vector<double> val1,val2;
1137   pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
1138   double test1_res[4]={0.,0.,0.,0.};
1139   double test2_res[4]={0.1,0.628319,0.1,0.314159};
1140   CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-6)));
1141   CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-6)));
1142   delete pol1;
1143   delete pol2;
1144   std::vector<int> val3;
1145   pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1146   pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1147   pol1->intersectForPoint(*pol2,val3);
1148   int test3_res[4]={0,1,0,0};
1149   CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
1150   delete pol1;
1151   delete pol2;
1152 }
1153
1154 void QuadraticPlanarInterpTest::checkIsInOrOut()
1155 {
1156   double coords[8]={   0.30662641093707971,  -0.47819928619088981,
1157                       -0.47819928619088964,  0.30662641093707987,
1158                        0.0, 0.0,
1159                        0.4, 0.4
1160   };
1161   coords[4] = (coords[0] + coords[2]) / 2.0;
1162   coords[5] = (coords[1] + coords[3]) / 2.0;
1163
1164   int tab4[4]={ 0, 1, 2, 3};
1165   QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab4,4);
1166   Node * n = new Node(0.3175267678416348, -0.4890996430954449);
1167
1168   CPPUNIT_ASSERT(! pol1->isInOrOut(n)); // node should be out
1169   n->decrRef();
1170   delete pol1;
1171 }
1172
1173 void QuadraticPlanarInterpTest::checkGetMiddleOfPoints()
1174 {
1175   { // from testIntersect2DMeshWith1DLine6()
1176     double p1[] = {0.51641754716735844, 2.0};
1177     double p2[] = {0.0, 1.0};
1178     double e_center[] = {-0.71, 2.0};
1179     double mid[] = {0.0,0.0}; // out
1180     double mide[] = {0.0,0.0}; // expected
1181
1182     Node * start = new Node(0.,0.); Node * end = new Node(0.,0.); // unused
1183     // start, end, center_x, center_y, radius, angle0, angle
1184     EdgeArcCircle e(start, end, e_center, 1.2264175471673588, -0.9533904350433241, 0.95339043504332388);
1185
1186     e.getMiddleOfPoints(p1, p2, mid);
1187     CPPUNIT_ASSERT_DOUBLES_EQUAL(0.37969180470645592, mid[0], 1.e-7);
1188     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.4372640310451197, mid[1], 1.e-7);
1189
1190     e.getMiddleOfPoints(p2, p1, mid);
1191     CPPUNIT_ASSERT_DOUBLES_EQUAL(0.37969180470645592, mid[0], 1.e-7);
1192     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.4372640310451197, mid[1], 1.e-7);
1193
1194     start->decrRef(); end->decrRef();
1195   }
1196   { // from testSwig2Intersect2DMeshWith1DLine11()
1197     double p1[] = {-1., 0.23453685964236054};
1198     double p2[] = {-0.23453685964235979, 1.0};
1199     double e_center[] = {-4.85, 4.85};
1200     double mid[] = {0.0,0.0}; // out
1201
1202     Node * start = new Node(0.,0.); Node * end = new Node(0.,0.); // unused
1203     // start, end, center_x, center_y, radius, angle0, angle
1204     EdgeArcCircle e(start, end, e_center, 6.0104076400856474, -0.69522150912422953, -0.18035330854643861);
1205
1206     e.getMiddleOfPoints(p1, p2, mid);
1207     CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.6, mid[0], 1.e-7);
1208     CPPUNIT_ASSERT_DOUBLES_EQUAL(0.6, mid[1], 1.e-7);
1209
1210     e.getMiddleOfPoints(p2, p1, mid);
1211     CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.6, mid[0], 1.e-7);
1212     CPPUNIT_ASSERT_DOUBLES_EQUAL(0.6, mid[1], 1.e-7);
1213
1214     start->decrRef(); end->decrRef();
1215   }
1216   { // from testSwig2Intersect2DMeshWith1DLine11()
1217     double p1[] = {-0.1303327636866019, -1.0};
1218     double p2[] = {-1.0, -0.1303327636866019};
1219     double e_center[] = {-1.9833333333333298, -1.9833333333333298};
1220     double mid[] = {0.0,0.0}; // out
1221
1222     Node * start = new Node(0.,0.); Node * end = new Node(0.,0.); // unused
1223     // start, end, center_x, center_y, radius, angle0, angle
1224     EdgeArcCircle e(start, end, e_center, 2.0977501175200861, 1.0829141821052615, -0.59503203741562627);
1225
1226     e.getMiddleOfPoints(p1, p2, mid);
1227     CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.5, mid[0], 1.e-7);
1228     CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.5, mid[1], 1.e-7);
1229
1230     e.getMiddleOfPoints(p2, p1, mid);
1231     CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.5, mid[0], 1.e-7);
1232     CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.5, mid[1], 1.e-7);
1233
1234     start->decrRef(); end->decrRef();
1235   }
1236 }
1237
1238 void QuadraticPlanarInterpTest::checkGetMiddleOfPointsOriented()
1239 {
1240   { // from testSwig2Colinearize2D3()
1241     double p1[] = {-0.70710678118654746, 0.70710678118654757};
1242     double p2[] = {-0.70710678118654768, -0.70710678118654746};
1243     double e_center[] = {0., 0.};
1244     double mid[] = {0.0,0.0}; // out
1245
1246     Node * start = new Node(0.,0.); Node * end = new Node(0.,0.); // unused
1247     // start, end, center_x, center_y, radius, angle0, angle
1248     EdgeArcCircle e(start, end, e_center, 1.0, -0.7853981633974485, -1.5707963267948966);
1249
1250     e.getMiddleOfPointsOriented(p1, p2, mid);
1251     CPPUNIT_ASSERT_DOUBLES_EQUAL(1., mid[0], 1.e-7);
1252     CPPUNIT_ASSERT_DOUBLES_EQUAL(0., mid[1], 1.e-7);
1253
1254     e.getMiddleOfPoints(p1, p2, mid);
1255     CPPUNIT_ASSERT_DOUBLES_EQUAL(-1., mid[0], 1.e-7);
1256     CPPUNIT_ASSERT_DOUBLES_EQUAL(0., mid[1], 1.e-7);
1257
1258     e.getMiddleOfPointsOriented(p2, p1, mid);
1259     CPPUNIT_ASSERT_DOUBLES_EQUAL(-1., mid[0], 1.e-7);
1260     CPPUNIT_ASSERT_DOUBLES_EQUAL(0., mid[1], 1.e-7);
1261
1262     start->decrRef(); end->decrRef();
1263   }
1264 }
1265
1266 }