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