1 //
2 // Filename : TestRenderCurve.cpp
3 // Description : Tests for the RenderCurve class
4 // Organization: University of Heidelberg
5 // Created : 2009-09-30
6 //
7 // Copyright 2008 University of Heidelberg
8 //
9 // This library is free software; you can redistribute it and/or modify it
10 // under the terms of the GNU Lesser General Public License as published
11 // by the Free Software Foundation; either version 2.1 of the License, or
12 // any later version.
13 //
14 // This library is distributed in the hope that it will be useful, but
15 // WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF
16 // MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. The software and
17 // documentation provided hereunder is on an "as is" basis, and the
18 // University of Heidelberg have no obligations to
19 // provide maintenance, support, updates, enhancements or modifications.
20 // In no event shall the University of Heidelberg be
21 // liable to any party for direct, indirect, special, incidental or
22 // consequential damages, including lost profits, arising out of the use of
23 // this software and its documentation, even if the University of
24 // Heidelberg have been advised of the possibility of such
25 // damage. See the GNU Lesser General Public License for more details.
26 //
27 // You should have received a copy of the GNU Lesser General Public License
28 // along with this library; if not, write to the Free Software Foundation,
29 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
30 //
31 // The original code contained here was initially developed by:
32 //
33 // Ralph Gauges
34 // BIOQUANT/BQ0018
35 // Im Neuenheimer Feld 267
36 // 69120 Heidelberg
37 // Germany
38 //
39 // mailto:ralph.gauges@bioquant.uni-heidelberg.de
40 //
41 // Contributor(s):
42
43
44 #include <sbml/common/common.h>
45 #include <sbml/common/extern.h>
46 #include <sbml/xml/XMLNode.h>
47 #include <sbml/xml/XMLInputStream.h>
48 #include <sbml/packages/layout/sbml/test/utility.h>
49 #include <sbml/packages/render/extension/RenderExtension.h>
50 #include <sbml/packages/render/common/RenderExtensionTypes.h>
51
52 #include <check.h>
53 #include <limits>
54 #include <string>
55
56
57 LIBSBML_CPP_NAMESPACE_USE
58
59 BEGIN_C_DECLS
60
61 static RenderCurve *C;
62 static RenderPkgNamespaces *renderns;
63
64 void
RenderCurveTest_setup(void)65 RenderCurveTest_setup (void)
66 {
67 renderns = new (std::nothrow) RenderPkgNamespaces();
68 C = new (std::nothrow) RenderCurve(renderns);
69
70 if (C == NULL)
71 {
72 fail("new(std::nothrow)RenderCurve(renderns) returned a NULL pointer.");
73 }
74
75 }
76
77 void
RenderCurveTest_teardown(void)78 RenderCurveTest_teardown (void)
79 {
80 delete C;
81 delete renderns;
82 }
83
START_TEST(test_RenderCurve_createMethods)84 START_TEST (test_RenderCurve_createMethods )
85 {
86 fail_unless( C->getNumElements() == 0);
87 RenderPoint* pP=C->createPoint();
88 fail_unless(pP != NULL);
89 fail_unless(C->getNumElements() == 1);
90 RenderCubicBezier* pC=C->createCubicBezier();
91 fail_unless(pC != NULL);
92 fail_unless(C->getNumElements() == 2);
93 pP=NULL;
94 pP=C->getElement(0);
95 fail_unless(pP != NULL);
96 fail_unless(dynamic_cast<RenderCubicBezier*>(pP) == NULL);
97 pP=NULL;
98 pP=C->getElement(1);
99 fail_unless(pP != NULL);
100 fail_unless(dynamic_cast<RenderCubicBezier*>(pP) != NULL);
101 }
102 END_TEST
103
104
START_TEST(test_RenderCurve_addElement)105 START_TEST ( test_RenderCurve_addElement )
106 {
107 fail_unless(C->getNumElements() == 0);
108 RenderPoint* pP=new RenderPoint(renderns);
109 fail_unless(pP != NULL);
110 fail_unless( C->addElement(pP) == LIBSBML_OPERATION_SUCCESS);
111 fail_unless( C->getNumElements() == 1);
112 fail_unless( C->getElement(0) != pP );
113 fail_unless( dynamic_cast<RenderCubicBezier*>(C->getElement(0)) == NULL );
114 delete pP;
115 pP = new RenderPoint(2,1);
116 fail_unless ( pP != NULL );
117 fail_unless( C->addElement(pP) == LIBSBML_LEVEL_MISMATCH);
118 fail_unless( C->getNumElements() == 1);
119 delete pP;
120 RenderCubicBezier* pCB = new RenderCubicBezier( renderns );
121 fail_unless( pCB != NULL);
122 fail_unless( C->addElement(pCB) == LIBSBML_OPERATION_SUCCESS );
123 fail_unless( C->getNumElements() == 2 );
124 fail_unless( C->getElement(1) != pCB );
125 fail_unless( dynamic_cast<RenderCubicBezier*>(C->getElement(1)) != NULL );
126 delete pCB;
127 pCB = new RenderCubicBezier(2,1);
128 fail_unless( pCB != NULL);
129 fail_unless( C->addElement(pCB) == LIBSBML_LEVEL_MISMATCH);
130 fail_unless( C->getNumElements() == 2 );
131 delete pCB;
132 }
133 END_TEST
134
START_TEST(test_RenderCurve_heads)135 START_TEST ( test_RenderCurve_heads )
136 {
137 fail_unless( ! C->isSetStartHead() );
138 fail_unless( ! C->isSetEndHead() );
139 fail_unless( C->getStartHead() == "" );
140 fail_unless( C->getEndHead() == "" );
141 C->setStartHead("SimpleArrow");
142 fail_unless(C->isSetStartHead());
143 fail_unless(C->getStartHead() == "SimpleArrow");
144 C->setEndHead("SimpleCircle");
145 fail_unless(C->isSetEndHead());
146 fail_unless(C->getEndHead() == "SimpleCircle");
147 C->setStartHead("none");
148 fail_unless(! C->isSetStartHead());
149 fail_unless( C->getStartHead() == "none");
150 C->setEndHead("none");
151 fail_unless(! C->isSetEndHead());
152 fail_unless( C->getEndHead() == "none");
153 }
154 END_TEST
155
START_TEST(test_RenderCurve_read)156 START_TEST ( test_RenderCurve_read )
157 {
158 std::string s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
159 "<curve xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" >\n"
160 " <listOfElements>\n"
161 " <element xsi:type=\"RenderPoint\" x=\"0\" y=\"0\"/>\n"
162 " <element xsi:type=\"RenderPoint\" x=\"100%\" y=\"50%\"/>\n"
163 " <element xsi:type=\"RenderPoint\" x=\"100%\" y=\"50%\"/>\n"
164 " <element xsi:type=\"RenderPoint\" x=\"0\" y=\"100%\"/>\n"
165 " </listOfElements>\n"
166 "</curve>\n"
167 ;
168
169 XMLInputStream* pStream= new XMLInputStream(s.c_str(),false);
170 XMLNode* pNode = new XMLNode(*pStream);
171
172 // no attributes
173 RenderCurve c(*pNode);
174 fail_unless(c.getNumElements() == 4);
175 fail_unless(!c.isSetMatrix());
176 fail_unless(!c.isSetStroke());
177 fail_unless(!c.isSetStrokeWidth());
178 fail_unless(!c.isSetDashArray());
179
180 delete pNode;
181 delete pStream;
182
183 // 2D transformation attributes
184 s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
185 "<curve xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" transform=\"0.984808,0.173648,-0.173648,0.984808,0,0\">\n"
186 " <listOfElements>\n"
187 " <element xsi:type=\"RenderPoint\" x=\"0\" y=\"0\"/>\n"
188 " <element xsi:type=\"RenderPoint\" x=\"100%\" y=\"50%\"/>\n"
189 " <element xsi:type=\"RenderPoint\" x=\"100%\" y=\"50%\"/>\n"
190 " <element xsi:type=\"RenderPoint\" x=\"0\" y=\"100%\"/>\n"
191 " </listOfElements>\n"
192 "</curve>\n"
193 ;
194
195 pStream= new XMLInputStream(s.c_str(),false);
196 pNode = new XMLNode(*pStream);
197
198 c = RenderCurve(*pNode);
199 fail_unless(c.getNumElements() == 4);
200 fail_unless(c.isSetMatrix());
201 const double* pMatrix=c.getMatrix2D();
202 fail_unless(pMatrix != NULL);
203 fail_unless(fabs((pMatrix[0] - 0.984808) / 0.984808) < 1e-9);
204 fail_unless(fabs((pMatrix[1] - 0.173648) / 0.173648) < 1e-9);
205 fail_unless(fabs((pMatrix[2] - -0.173648) / -0.173648) < 1e-9);
206 fail_unless(fabs((pMatrix[3] - 0.984808) / 0.984808) < 1e-9);
207 fail_unless(pMatrix[4] < 1e-9);
208 fail_unless(pMatrix[5] < 1e-9);
209 fail_unless(!c.isSetStroke());
210 fail_unless(!c.isSetStrokeWidth());
211 fail_unless(!c.isSetDashArray());
212
213 delete pNode;
214 delete pStream;
215
216 // 1D attributes (stroke, stroke_width, stroke-dasharray
217
218 s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
219 "<curve xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" stroke=\"#00FF00\" stroke-width=\"3\" stroke-dasharray=\"32 , 20\">\n"
220 " <listOfElements>\n"
221 " <element xsi:type=\"RenderPoint\" x=\"0\" y=\"0\"/>\n"
222 " <element xsi:type=\"RenderPoint\" x=\"100%\" y=\"50%\"/>\n"
223 " <element xsi:type=\"RenderPoint\" x=\"100%\" y=\"50%\"/>\n"
224 " <element xsi:type=\"RenderPoint\" x=\"0\" y=\"100%\"/>\n"
225 " </listOfElements>\n"
226 "</curve>\n"
227 ;
228
229 pStream= new XMLInputStream(s.c_str(),false);
230 pNode = new XMLNode(*pStream);
231
232 c = RenderCurve(*pNode);
233 fail_unless(c.getNumElements() == 4);
234 fail_unless(!c.isSetMatrix());
235 fail_unless(c.isSetStroke());
236 fail_unless(c.getStroke() == "#00FF00");
237 fail_unless(c.isSetStrokeWidth());
238 fail_unless(fabs((c.getStrokeWidth() - 3.0) / 3.0) < 1e-9);
239 fail_unless(c.isSetDashArray());
240 const std::vector<unsigned int>& array = c.getDashArray();
241 fail_unless(array.size() == 2);
242 fail_unless(array[0] == 32);
243 fail_unless(array[1] == 20);
244
245 delete pNode;
246 delete pStream;
247 }
248 END_TEST
249
START_TEST(test_RenderCurve_write)250 START_TEST ( test_RenderCurve_write )
251 {
252 std::string s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
253 "<curve xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" >\n"
254 " <listOfElements>\n"
255 " <element xsi:type=\"RenderPoint\" x=\"0\" y=\"0\"/>\n"
256 " <element xsi:type=\"RenderPoint\" x=\"100%\" y=\"50%\"/>\n"
257 " <element xsi:type=\"RenderPoint\" x=\"100%\" y=\"50%\"/>\n"
258 " <element xsi:type=\"RenderPoint\" x=\"0\" y=\"100%\"/>\n"
259 " </listOfElements>\n"
260 "</curve>\n"
261 ;
262
263 XMLInputStream* pStream = new XMLInputStream(s.c_str(),false);
264 XMLNode* pNode1 = new XMLNode(*pStream);
265 fail_unless(pNode1 != NULL);
266 RenderCurve* pC = new RenderCurve(*pNode1);
267 fail_unless(pC != NULL);
268 // create the XMLNode from the object
269 XMLNode* pNode2 = new XMLNode(pC->toXML());
270 fail_unless(pNode1 != NULL);
271 // compare the two nodes
272 fail_unless(pNode1->equals(*pNode2, true));
273 delete pNode1;
274 delete pNode2;
275 delete pStream;
276 delete pC;
277
278 s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
279 "<curve xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" transform=\"0.984808,0.173648,-0.173648,0.984808,0,0\">\n"
280 " <listOfElements>\n"
281 " <element xsi:type=\"RenderPoint\" x=\"0\" y=\"0\"/>\n"
282 " <element xsi:type=\"RenderPoint\" x=\"100%\" y=\"50%\"/>\n"
283 " <element xsi:type=\"RenderPoint\" x=\"100%\" y=\"50%\"/>\n"
284 " <element xsi:type=\"RenderPoint\" x=\"0\" y=\"100%\"/>\n"
285 " </listOfElements>\n"
286 "</curve>\n"
287 ;
288
289 pStream = new XMLInputStream(s.c_str(),false);
290 pNode1 = new XMLNode(*pStream);
291 fail_unless(pNode1 != NULL);
292 pC = new RenderCurve(*pNode1);
293 fail_unless(pC != NULL);
294 // create the XMLNode from the object
295 pNode2 = new XMLNode(pC->toXML());
296 fail_unless(pNode1 != NULL);
297 // compare the two nodes
298 fail_unless(pNode1->equals(*pNode2, true));
299 delete pNode1;
300 delete pNode2;
301 delete pStream;
302 delete pC;
303
304 s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
305 "<curve xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" stroke=\"#00FF00\" stroke-width=\"3\" stroke-dasharray=\"32 , 20\">\n"
306 " <listOfElements>\n"
307 " <element xsi:type=\"RenderPoint\" x=\"0\" y=\"0\"/>\n"
308 " <element xsi:type=\"RenderPoint\" x=\"100%\" y=\"50%\"/>\n"
309 " <element xsi:type=\"RenderPoint\" x=\"100%\" y=\"50%\"/>\n"
310 " <element xsi:type=\"RenderPoint\" x=\"0\" y=\"100%\"/>\n"
311 " </listOfElements>\n"
312 "</curve>\n"
313 ;
314
315 pStream = new XMLInputStream(s.c_str(),false);
316 pNode1 = new XMLNode(*pStream);
317 fail_unless(pNode1 != NULL);
318 pC = new RenderCurve(*pNode1);
319 fail_unless(pC != NULL);
320 // create the XMLNode from the object
321 pNode2 = new XMLNode(pC->toXML());
322 fail_unless(pNode1 != NULL);
323 // compare the two nodes
324 fail_unless(pNode1->equals(*pNode2, true));
325 delete pNode1;
326 delete pNode2;
327 delete pStream;
328 delete pC;
329
330 }
331 END_TEST
332
START_TEST(test_RenderCurve_read_old_style)333 START_TEST ( test_RenderCurve_read_old_style )
334 {
335 // we need to pack the curve in a group because the code to read "old style"
336 // curves is in the Group class.
337 std::string s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
338 "<g xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"
339 " <curve>\n"
340 " <listOfCurveSegments>\n"
341 " <curveSegment xsi:type=\"LineSegment\">\n"
342 " <start x=\"0\" y=\"0\" />\n"
343 " <end x=\"10\" y=\"3\" />\n"
344 " </curveSegment>\n"
345 " <curveSegment xsi:type=\"LineSegment\">\n"
346 " <start x=\"10\" y=\"3\" />\n"
347 " <end x=\"0\" y=\"6\" />\n"
348 " </curveSegment>\n"
349 " </listOfCurveSegments>\n"
350 " </curve>\n"
351 "</g>\n"
352 ;
353
354 XMLInputStream* pStream= new XMLInputStream(s.c_str(),false);
355 XMLNode* pNode = new XMLNode(*pStream);
356
357 RenderGroup g = RenderGroup(*pNode);
358 fail_unless(g.getNumElements() == 1);
359 const Transformation2D* pElement=g.getElement(0);
360 fail_unless(pElement != NULL);
361 if (pElement == NULL) return;
362 fail_unless(pElement->getTypeCode() == SBML_RENDER_CURVE);
363 const RenderCurve* pC=dynamic_cast<const RenderCurve*>(pElement);
364 fail_unless(!pC->isSetMatrix());
365 fail_unless(!pC->isSetStroke());
366 fail_unless(!pC->isSetStrokeWidth());
367 fail_unless(!pC->isSetDashArray());
368 fail_unless(pC->getNumElements() == 3);
369 const RenderPoint* pP=pC->getElement(0);
370 fail_unless( pP != NULL );
371 fail_unless( pP->getTypeCode() == SBML_RENDER_POINT );
372 fail_unless( dynamic_cast<const RenderCubicBezier*>(pP) == NULL);
373 fail_unless( pP->x().getAbsoluteValue() < 1e-9);
374 fail_unless( pP->x().getRelativeValue() < 1e-9);
375 fail_unless( pP->y().getAbsoluteValue() < 1e-9);
376 fail_unless( pP->y().getRelativeValue() < 1e-9);
377 fail_unless( pP->z().getAbsoluteValue() < 1e-9);
378 fail_unless( pP->z().getRelativeValue() < 1e-9);
379 pP=pC->getElement(1);
380 fail_unless( pP != NULL );
381 fail_unless( pP->getTypeCode() == SBML_RENDER_POINT );
382 fail_unless( dynamic_cast<const RenderCubicBezier*>(pP) == NULL);
383 fail_unless( fabs((pP->x().getAbsoluteValue() - 10.0 ) / 10.0) < 1e-9);
384 fail_unless( pP->x().getRelativeValue() < 1e-9);
385 fail_unless( fabs((pP->y().getAbsoluteValue() - 3.0) / 3.0) < 1e-9);
386 fail_unless( pP->y().getRelativeValue() < 1e-9);
387 fail_unless( pP->z().getAbsoluteValue() < 1e-9);
388 fail_unless( pP->z().getRelativeValue() < 1e-9);
389 pP=pC->getElement(2);
390 fail_unless( pP != NULL );
391 fail_unless( pP->getTypeCode() == SBML_RENDER_POINT );
392 fail_unless( dynamic_cast<const RenderCubicBezier*>(pP) == NULL);
393 fail_unless( pP->x().getAbsoluteValue() < 1e-9);
394 fail_unless( pP->x().getRelativeValue() < 1e-9);
395 fail_unless( fabs((pP->y().getAbsoluteValue() - 6.0) / 6.0) < 1e-9);
396 fail_unless( pP->y().getRelativeValue() < 1e-9);
397 fail_unless( pP->z().getAbsoluteValue() < 1e-9);
398 fail_unless( pP->z().getRelativeValue() < 1e-9);
399 delete pNode;
400 delete pStream;
401
402
403 s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
404 "<g xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"
405 " <curve xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"
406 " <listOfCurveSegments>\n"
407 " <curveSegment xsi:type=\"CubicBezier\">\n"
408 " <start x=\"2.0\" y=\"7.71428\"/>\n"
409 " <basePoint1 x=\"10.21428\" y=\"12.0\"/>\n"
410 " <basePoint2 x=\"15.21428\" y=\"17.04464\"/>\n"
411 " <end x=\"24.05357\" y=\"15.83928\"/>\n"
412 " </curveSegment>\n"
413 " <curveSegment xsi:type=\"CubicBezier\">\n"
414 " <start x=\"24.05357\" y=\"15.83928\"/>\n"
415 " <basePoint1 x=\"32.89285\" y=\"14.63392\"/>\n"
416 " <basePoint2 x=\"45.57142\" y=\"7.17856\"/>\n"
417 " <end x=\"45.57142\" y=\"7.17856\"/>\n"
418 " </curveSegment>\n"
419 " <curveSegment xsi:type=\"LineSegment\">\n"
420 " <start x=\"45.57142\" y=\"7.17856\"/>\n"
421 " <end x=\"41.46427\" y=\"2.0\"/>\n"
422 " </curveSegment>\n"
423 " <curveSegment xsi:type=\"CubicBezier\">\n"
424 " <start x=\"41.46427\" y=\"2.0\"/>\n"
425 " <basePoint1 x=\"41.46427\" y=\"2.0\"/>\n"
426 " <basePoint2 x=\"31.9107\" y=\"9.14285\"/>\n"
427 " <end x=\"23.42856\" y=\"9.32142\"/>\n"
428 " </curveSegment>\n"
429 " <curveSegment xsi:type=\"CubicBezier\">\n"
430 " <start x=\"23.42856\" y=\"9.32142\"/>\n"
431 " <basePoint1 x=\"14.94642\" y=\"9.49999\"/>\n"
432 " <basePoint2 x=\"7.5357\" y=\"2.71428\"/>\n"
433 " <end x=\"7.5357\" y=\"2.71428\"/>\n"
434 " </curveSegment>\n"
435 " <curveSegment xsi:type=\"LineSegment\">\n"
436 " <start x=\"7.5357\" y=\"2.71428\"/>\n"
437 " <end x=\"2.0\" y=\"7.71428\"/>\n"
438 " </curveSegment>\n"
439 " </listOfCurveSegments>\n"
440 " </curve>\n"
441 "</g>\n"
442 ;
443
444 pStream= new XMLInputStream(s.c_str(),false);
445 pNode = new XMLNode(*pStream);
446
447 g = RenderGroup(*pNode);
448 fail_unless(g.getNumElements() == 1);
449 pElement=g.getElement(0);
450 fail_unless(pElement != NULL);
451 fail_unless(pElement->getTypeCode() == SBML_RENDER_CURVE);
452 pC=dynamic_cast<const RenderCurve*>(pElement);
453 fail_unless(!pC->isSetMatrix());
454 fail_unless(!pC->isSetStroke());
455 fail_unless(!pC->isSetStrokeWidth());
456 fail_unless(!pC->isSetDashArray());
457 fail_unless(pC->getNumElements() == 7);
458 pP=pC->getElement(0);
459 fail_unless( pP != NULL );
460 fail_unless( pP->getTypeCode() == SBML_RENDER_POINT );
461 fail_unless( dynamic_cast<const RenderCubicBezier*>(pP) == NULL);
462 fail_unless( fabs((pP->x().getAbsoluteValue() - 2.0) / 2.0) < 1e-9);
463 fail_unless( pP->x().getRelativeValue() < 1e-9);
464 fail_unless( fabs((pP->y().getAbsoluteValue() - 7.71428) / 7.71428) < 1e-9);
465 fail_unless( pP->y().getRelativeValue() < 1e-9);
466 fail_unless( pP->z().getAbsoluteValue() < 1e-9);
467 fail_unless( pP->z().getRelativeValue() < 1e-9);
468 pP=pC->getElement(1);
469 fail_unless( pP != NULL );
470 fail_unless( pP->getTypeCode() == SBML_RENDER_CUBICBEZIER );
471 const RenderCubicBezier* pCB = dynamic_cast<const RenderCubicBezier*>(pP);
472 fail_unless( pCB != NULL);
473 fail_unless( fabs((pCB->basePoint1_X().getAbsoluteValue() - 10.21428) / 10.21428) < 1e-9);
474 fail_unless( pCB->basePoint1_X().getRelativeValue() < 1e-9);
475 fail_unless( fabs((pCB->basePoint1_Y().getAbsoluteValue() - 12.0) / 12.0) < 1e-9);
476 fail_unless( pCB->basePoint1_Y().getRelativeValue() < 1e-9);
477 fail_unless( pCB->basePoint1_Z().getAbsoluteValue() < 1e-9);
478 fail_unless( pCB->basePoint1_Z().getRelativeValue() < 1e-9);
479 fail_unless( fabs((pCB->basePoint2_X().getAbsoluteValue() - 15.21428) / 15.21428) < 1e-9);
480 fail_unless( pCB->basePoint2_X().getRelativeValue() < 1e-9);
481 fail_unless( fabs((pCB->basePoint2_Y().getAbsoluteValue() - 17.04464) / 17.04464) < 1e-9);
482 fail_unless( pCB->basePoint2_Y().getRelativeValue() < 1e-9);
483 fail_unless( pCB->basePoint2_Z().getAbsoluteValue() < 1e-9);
484 fail_unless( pCB->basePoint2_Z().getRelativeValue() < 1e-9);
485 fail_unless( fabs((pCB->x().getAbsoluteValue() - 24.05357) / 24.05357) < 1e-9);
486 fail_unless( pCB->x().getRelativeValue() < 1e-9);
487 fail_unless( fabs((pCB->y().getAbsoluteValue() - 15.83928) / 15.83928) < 1e-9);
488 fail_unless( pCB->y().getRelativeValue() < 1e-9);
489 fail_unless( pCB->z().getAbsoluteValue() < 1e-9);
490 fail_unless( pCB->z().getRelativeValue() < 1e-9);
491 pP=pC->getElement(2);
492 fail_unless( pP != NULL );
493 fail_unless( pP->getTypeCode() == SBML_RENDER_CUBICBEZIER );
494 pCB = dynamic_cast<const RenderCubicBezier*>(pP);
495 fail_unless( pCB != NULL);
496 fail_unless( fabs((pCB->basePoint1_X().getAbsoluteValue() - 32.89285) / 32.89285) < 1e-9);
497 fail_unless( pCB->basePoint1_X().getRelativeValue() < 1e-9);
498 fail_unless( fabs((pCB->basePoint1_Y().getAbsoluteValue() - 14.63392) / 14.63392) < 1e-9);
499 fail_unless( pCB->basePoint1_Y().getRelativeValue() < 1e-9);
500 fail_unless( pCB->basePoint1_Z().getAbsoluteValue() < 1e-9);
501 fail_unless( pCB->basePoint1_Z().getRelativeValue() < 1e-9);
502 fail_unless( fabs((pCB->basePoint2_X().getAbsoluteValue() - 45.57142) / 45.57142) < 1e-9);
503 fail_unless( pCB->basePoint2_X().getRelativeValue() < 1e-9);
504 fail_unless( fabs((pCB->basePoint2_Y().getAbsoluteValue() - 7.17856) / 7.17856) < 1e-9);
505 fail_unless( pCB->basePoint2_Y().getRelativeValue() < 1e-9);
506 fail_unless( pCB->basePoint2_Z().getAbsoluteValue() < 1e-9);
507 fail_unless( pCB->basePoint2_Z().getRelativeValue() < 1e-9);
508 fail_unless( fabs((pCB->x().getAbsoluteValue() - 45.57142) / 45.57142) < 1e-9);
509 fail_unless( pCB->x().getRelativeValue() < 1e-9);
510 fail_unless( fabs((pCB->y().getAbsoluteValue() - 7.17856) / 7.17856) < 1e-9);
511 fail_unless( pCB->y().getRelativeValue() < 1e-9);
512 fail_unless( pCB->z().getAbsoluteValue() < 1e-9);
513 fail_unless( pCB->z().getRelativeValue() < 1e-9);
514 pP=pC->getElement(3);
515 fail_unless( pP != NULL );
516 fail_unless( pP->getTypeCode() == SBML_RENDER_POINT );
517 fail_unless( dynamic_cast<const RenderCubicBezier*>(pP) == NULL);
518 fail_unless( fabs((pP->x().getAbsoluteValue() - 41.46427) / 41.46427) < 1e-9);
519 fail_unless( pP->x().getRelativeValue() < 1e-9);
520 fail_unless( fabs((pP->y().getAbsoluteValue() - 2.0) / 2.0) < 1e-9);
521 fail_unless( pP->y().getRelativeValue() < 1e-9);
522 fail_unless( pP->z().getAbsoluteValue() < 1e-9);
523 fail_unless( pP->z().getRelativeValue() < 1e-9);
524 pP=pC->getElement(4);
525 fail_unless( pP != NULL );
526 fail_unless( pP->getTypeCode() == SBML_RENDER_CUBICBEZIER );
527 pCB = dynamic_cast<const RenderCubicBezier*>(pP);
528 fail_unless( pCB != NULL);
529 fail_unless( fabs((pCB->basePoint1_X().getAbsoluteValue() - 41.46427) / 41.46427) < 1e-9);
530 fail_unless( pCB->basePoint1_X().getRelativeValue() < 1e-9);
531 fail_unless( fabs((pCB->basePoint1_Y().getAbsoluteValue() - 2.0) / 2.0) < 1e-9);
532 fail_unless( pCB->basePoint1_Y().getRelativeValue() < 1e-9);
533 fail_unless( pCB->basePoint1_Z().getAbsoluteValue() < 1e-9);
534 fail_unless( pCB->basePoint1_Z().getRelativeValue() < 1e-9);
535 fail_unless( fabs((pCB->basePoint2_X().getAbsoluteValue() - 31.9107) / 31.9107) < 1e-9);
536 fail_unless( pCB->basePoint2_X().getRelativeValue() < 1e-9);
537 fail_unless( fabs((pCB->basePoint2_Y().getAbsoluteValue() - 9.14285) / 9.14285) < 1e-9);
538 fail_unless( pCB->basePoint2_Y().getRelativeValue() < 1e-9);
539 fail_unless( pCB->basePoint2_Z().getAbsoluteValue() < 1e-9);
540 fail_unless( pCB->basePoint2_Z().getRelativeValue() < 1e-9);
541 fail_unless( fabs((pCB->x().getAbsoluteValue() - 23.42856) / 23.42856) < 1e-9);
542 fail_unless( pCB->x().getRelativeValue() < 1e-9);
543 fail_unless( fabs((pCB->y().getAbsoluteValue() - 9.32142) / 9.32142) < 1e-9);
544 fail_unless( pCB->y().getRelativeValue() < 1e-9);
545 fail_unless( pCB->z().getAbsoluteValue() < 1e-9);
546 fail_unless( pCB->z().getRelativeValue() < 1e-9);
547 pP=pC->getElement(5);
548 fail_unless( pP != NULL );
549 fail_unless( pP->getTypeCode() == SBML_RENDER_CUBICBEZIER );
550 pCB = dynamic_cast<const RenderCubicBezier*>(pP);
551 fail_unless( pCB != NULL);
552 fail_unless( fabs((pCB->basePoint1_X().getAbsoluteValue() - 14.94642) / 14.94642) < 1e-9);
553 fail_unless( pCB->basePoint1_X().getRelativeValue() < 1e-9);
554 fail_unless( fabs((pCB->basePoint1_Y().getAbsoluteValue() - 9.49999) / 9.49999) < 1e-9);
555 fail_unless( pCB->basePoint1_Y().getRelativeValue() < 1e-9);
556 fail_unless( pCB->basePoint1_Z().getAbsoluteValue() < 1e-9);
557 fail_unless( pCB->basePoint1_Z().getRelativeValue() < 1e-9);
558 fail_unless( fabs((pCB->basePoint2_X().getAbsoluteValue() - 7.5357) / 7.5357) < 1e-9);
559 fail_unless( pCB->basePoint2_X().getRelativeValue() < 1e-9);
560 fail_unless( fabs((pCB->basePoint2_Y().getAbsoluteValue() - 2.71428) / 2.71428) < 1e-9);
561 fail_unless( pCB->basePoint2_Y().getRelativeValue() < 1e-9);
562 fail_unless( pCB->basePoint2_Z().getAbsoluteValue() < 1e-9);
563 fail_unless( pCB->basePoint2_Z().getRelativeValue() < 1e-9);
564 fail_unless( fabs((pCB->x().getAbsoluteValue() - 7.5357) / 7.5357) < 1e-9);
565 fail_unless( pCB->x().getRelativeValue() < 1e-9);
566 fail_unless( fabs((pCB->y().getAbsoluteValue() - 2.71428) / 2.71428) < 1e-9);
567 fail_unless( pCB->y().getRelativeValue() < 1e-9);
568 fail_unless( pCB->z().getAbsoluteValue() < 1e-9);
569 fail_unless( pCB->z().getRelativeValue() < 1e-9);
570 pP=pC->getElement(6);
571 fail_unless( pP != NULL );
572 fail_unless( pP->getTypeCode() == SBML_RENDER_POINT );
573 fail_unless( dynamic_cast<const RenderCubicBezier*>(pP) == NULL);
574 fail_unless( fabs((pP->x().getAbsoluteValue() - 2.0) / 2.0) < 1e-9);
575 fail_unless( pP->x().getRelativeValue() < 1e-9);
576 fail_unless( fabs((pP->y().getAbsoluteValue() - 7.71428) / 7.71428) < 1e-9);
577 fail_unless( pP->y().getRelativeValue() < 1e-9);
578 fail_unless( pP->z().getAbsoluteValue() < 1e-9);
579 fail_unless( pP->z().getRelativeValue() < 1e-9);
580 delete pNode;
581 delete pStream;
582 }
583 END_TEST
584
585
586 Suite *
create_suite_RenderCurve(void)587 create_suite_RenderCurve (void)
588 {
589 Suite *suite = suite_create("RenderCurve");
590 TCase *tcase = tcase_create("RenderCurve");
591
592
593 tcase_add_checked_fixture( tcase,
594 RenderCurveTest_setup,
595 RenderCurveTest_teardown );
596
597 tcase_add_test( tcase, test_RenderCurve_createMethods );
598 tcase_add_test( tcase, test_RenderCurve_addElement );
599 tcase_add_test( tcase, test_RenderCurve_heads );
600 tcase_add_test( tcase, test_RenderCurve_read );
601 tcase_add_test( tcase, test_RenderCurve_read_old_style );
602 tcase_add_test( tcase, test_RenderCurve_write );
603
604 suite_add_tcase(suite, tcase);
605
606 return suite;
607 }
608
609 END_C_DECLS
610