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