1 /**
2  * Filename    : TestLineSegment.cpp
3  * Description : Unit tests for LineSegment
4  * Organization: European Media Laboratories Research gGmbH
5  * Created     : 2005-05-03
6  *
7  * <!--------------------------------------------------------------------------
8  * This file is part of libSBML.  Please visit http://sbml.org for more
9  * information about SBML, and the latest version of libSBML.
10  *
11  * Copyright (C) 2020 jointly by the following organizations:
12  *     1. California Institute of Technology, Pasadena, CA, USA
13  *     2. University of Heidelberg, Heidelberg, Germany
14  *     3. University College London, London, UK
15  *
16  * Copyright (C) 2019 jointly by the following organizations:
17  *     1. California Institute of Technology, Pasadena, CA, USA
18  *     2. University of Heidelberg, Heidelberg, Germany
19  *
20  * Copyright (C) 2013-2018 jointly by the following organizations:
21  *     1. California Institute of Technology, Pasadena, CA, USA
22  *     2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
23  *     3. University of Heidelberg, Heidelberg, Germany
24  *
25  * Copyright (C) 2009-2013 jointly by the following organizations:
26  *     1. California Institute of Technology, Pasadena, CA, USA
27  *     2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
28  *
29  * Copyright (C) 2004-2008 by European Media Laboratories Research gGmbH,
30  *     Heidelberg, Germany
31  *
32  * This library is free software; you can redistribute it and/or modify it
33  * under the terms of the GNU Lesser General Public License as published by
34  * the Free Software Foundation.  A copy of the license agreement is provided
35  * in the file named "LICENSE.txt" included with this software distribution
36  * and also available online as http://sbml.org/software/libsbml/license.html
37  * ------------------------------------------------------------------------ -->
38  */
39 
40 #include <sbml/common/common.h>
41 #include <sbml/common/extern.h>
42 
43 #include <sbml/SBase.h>
44 #include <sbml/packages/layout/sbml/LineSegment.h>
45 #include <sbml/packages/layout/sbml/Point.h>
46 
47 #include <check.h>
48 
49 LIBSBML_CPP_NAMESPACE_USE
50 
51 BEGIN_C_DECLS
52 
53 static LineSegment_t* LS;
54 static LayoutPkgNamespaces* LN;
55 
56 void
LineSegmentTest_setup(void)57 LineSegmentTest_setup (void)
58 {
59   LS = LineSegment_create();
60 	LN = new LayoutPkgNamespaces();
61 
62   if(LS == NULL)
63   {
64     fail("LineSegment_create(); returned a NULL pointer.");
65   }
66 }
67 
68 void
LineSegmentTest_teardown(void)69 LineSegmentTest_teardown (void)
70 {
71   LineSegment_free(LS);
72 	delete LN;
73 }
74 
START_TEST(test_LineSegment_create)75 START_TEST ( test_LineSegment_create )
76 {
77   fail_unless( SBase_getTypeCode   ((SBase_t*) LS) == SBML_LAYOUT_LINESEGMENT );
78   fail_unless( SBase_getMetaId     ((SBase_t*) LS) == NULL );
79 
80   Point_t *pos=LineSegment_getStart(LS);
81   fail_unless(pos != NULL);
82   fail_unless(Point_getXOffset(pos) == 0.0);
83   fail_unless(Point_getYOffset(pos) == 0.0);
84   fail_unless(Point_getZOffset(pos) == 0.0);
85 
86   pos=LineSegment_getEnd(LS);
87   fail_unless(pos != NULL);
88   fail_unless(Point_getXOffset(pos) == 0.0);
89   fail_unless(Point_getYOffset(pos) == 0.0);
90   fail_unless(Point_getZOffset(pos) == 0.0);
91 
92 }
93 END_TEST
94 
95 
START_TEST(test_LineSegment_createWithPoints)96 START_TEST ( test_LineSegment_createWithPoints )
97 {
98   Point_t *start=new Point(LN,1.1,-2.2,3.3);
99   Point_t *end  =new Point(LN,-4.4,5.5,-6.6);
100 
101   LineSegment_t *ls=new LineSegment(LN, start,end);
102 
103   fail_unless( SBase_getTypeCode   ((SBase_t*) ls) == SBML_LAYOUT_LINESEGMENT );
104   fail_unless( SBase_getMetaId     ((SBase_t*) ls) == NULL );
105 
106   Point_t *pos=LineSegment_getStart(ls);
107   fail_unless(pos != NULL);
108   fail_unless(Point_getXOffset(pos) == Point_getXOffset(start));
109   fail_unless(Point_getYOffset(pos) == Point_getYOffset(start));
110   fail_unless(Point_getZOffset(pos) == Point_getZOffset(start));
111 
112   pos=LineSegment_getEnd(ls);
113   fail_unless(pos != NULL);
114   fail_unless(Point_getXOffset(pos) == Point_getXOffset(end));
115   fail_unless(Point_getYOffset(pos) == Point_getYOffset(end));
116   fail_unless(Point_getZOffset(pos) == Point_getZOffset(end));
117 
118   Point_free(start);
119   Point_free(end);
120 
121   LineSegment_free(ls);
122 
123 }
124 END_TEST
125 
START_TEST(test_LineSegment_createWithPoints_NULL)126 START_TEST ( test_LineSegment_createWithPoints_NULL )
127 {
128   LineSegment_t *ls= new LineSegment(LN,NULL,NULL);
129 
130   fail_unless( SBase_getTypeCode   ((SBase_t*) ls) == SBML_LAYOUT_LINESEGMENT );
131   fail_unless( SBase_getMetaId     ((SBase_t*) ls) == NULL );
132 
133   Point_t *pos=LineSegment_getStart(ls);
134   fail_unless(pos != NULL);
135   fail_unless(Point_getXOffset(pos) == 0.0);
136   fail_unless(Point_getYOffset(pos) == 0.0);
137   fail_unless(Point_getZOffset(pos) == 0.0);
138 
139   pos=LineSegment_getEnd(ls);
140   fail_unless(pos != NULL);
141   fail_unless(Point_getXOffset(pos) == 0.0);
142   fail_unless(Point_getYOffset(pos) == 0.0);
143   fail_unless(Point_getZOffset(pos) == 0.0);
144 
145   LineSegment_free(ls);
146 }
147 END_TEST
148 
START_TEST(test_LineSegment_createWithCoordinates)149 START_TEST ( test_LineSegment_createWithCoordinates )
150 {
151   LineSegment_t* ls=new LineSegment(LN, 1.1,-2.2,3.3,-4.4,5.5,-6.6);
152 
153   fail_unless( SBase_getTypeCode   ((SBase_t*) ls) == SBML_LAYOUT_LINESEGMENT );
154   fail_unless( SBase_getMetaId     ((SBase_t*) ls) == NULL );
155 
156   Point_t *pos=LineSegment_getStart(ls);
157   fail_unless(pos != NULL);
158   fail_unless(pos->getXOffset() ==  1.1);
159   fail_unless(pos->getYOffset() == -2.2);
160   fail_unless(pos->getZOffset() ==  3.3);
161 
162   pos=LineSegment_getEnd(ls);
163   fail_unless(pos != NULL);
164   fail_unless(pos->getXOffset() == -4.4);
165   fail_unless(pos->getYOffset() ==  5.5);
166   fail_unless(pos->getZOffset() == -6.6);
167 
168   LineSegment_free(ls);
169 }
170 END_TEST
171 
START_TEST(test_LineSegment_free_NULL)172 START_TEST (test_LineSegment_free_NULL)
173 {
174   LineSegment_free(NULL);
175 }
176 END_TEST
177 
START_TEST(test_LineSegment_setStart)178 START_TEST (test_LineSegment_setStart)
179 {
180   Point_t *pos=new Point(LN,1.1,-2.2,3.3);
181   LineSegment_setStart(LS,pos);
182 
183   Point_t* POS=LineSegment_getStart(LS);
184 
185   fail_unless(Point_getXOffset(pos) == Point_getXOffset(POS));
186   fail_unless(Point_getYOffset(pos) == Point_getYOffset(POS));
187   fail_unless(Point_getZOffset(pos) == Point_getZOffset(POS));
188   Point_free(pos);
189 }
190 END_TEST
191 
START_TEST(test_LineSegment_setEnd)192 START_TEST (test_LineSegment_setEnd )
193 {
194   Point_t *pos=new Point(LN,-4.4,5.5,-6.6);
195   LineSegment_setEnd(LS,pos);
196 
197   Point_t* POS=LineSegment_getEnd(LS);
198 
199   fail_unless(Point_getXOffset(pos) == Point_getXOffset(POS));
200   fail_unless(Point_getYOffset(pos) == Point_getYOffset(POS));
201   fail_unless(Point_getZOffset(pos) == Point_getZOffset(POS));
202   Point_free(pos);
203 }
204 END_TEST
205 
START_TEST(test_LineSegment_createFrom)206 START_TEST ( test_LineSegment_createFrom )
207 {
208   Point* start = new Point(LN,1.1,-2.2,3.3);
209   Point* end=new Point(LN,-4.4,5.5,-6.6);
210   LineSegment_setStart(LS,start);
211   LineSegment_setEnd(LS,end);
212   LineSegment_t* ls=LineSegment_createFrom(LS);
213 
214 
215   fail_unless( SBase_getTypeCode   ((SBase_t*) ls) == SBML_LAYOUT_LINESEGMENT );
216 
217   if(SBase_isSetMetaId((SBase_t*)LS)){
218     std::string c1=SBase_getMetaId((SBase_t*)LS);
219     std::string c2=SBase_getMetaId((SBase_t*)ls);
220     fail_unless( c1 == c2 );
221   }
222   //   c1=SBase_getNotes((SBase_t*)LS);
223   //   c2=SBase_getNotes((SBase_t*)ls);
224   //
225   //   if(SBase_isSetNotes((SBase_t*)LS))
226   //   {
227   //     fail_unless( strncmp(c1 , c2 ,strlen( c1 ) + 1 ) );
228   //   }
229   //   else
230   //   {
231   //     fail_unless(!(c1 || c2));
232   //   }
233   //
234   //   c1=SBase_getAnnotation((SBase_t*)LS);
235   //   c2=SBase_getAnnotation((SBase_t*)ls);
236   //
237   //   if(SBase_isSetAnnotation((SBase_t*)LS))
238   //   {
239   //     fail_unless( strncmp(c1 , c2 ,strlen( c1 ) + 1) );
240   //   }
241   //   else
242   //   {
243   //     fail_unless(!(c1 || c2));
244   //   }
245 
246   Point_t *pos=LineSegment_getStart(ls);
247   Point_t *POS=LineSegment_getStart(LS);
248   fail_unless(pos != NULL);
249   fail_unless(Point_getXOffset(pos) == Point_getXOffset(POS));
250   fail_unless(Point_getYOffset(pos) == Point_getYOffset(POS));
251   fail_unless(Point_getZOffset(pos) == Point_getZOffset(POS));
252 
253   pos=LineSegment_getEnd(ls);
254   POS=LineSegment_getEnd(LS);
255   fail_unless(pos != NULL);
256   fail_unless(Point_getXOffset(pos) == Point_getXOffset(POS));
257   fail_unless(Point_getYOffset(pos) == Point_getYOffset(POS));
258   fail_unless(Point_getZOffset(pos) == Point_getZOffset(POS));
259 
260   Point_free(start);
261   Point_free(end);
262   LineSegment_free(ls);
263 }
264 END_TEST
265 
START_TEST(test_LineSegment_setStart_NULL)266 START_TEST (test_LineSegment_setStart_NULL )
267 {
268   LineSegment_setStart(LS,NULL);
269 
270   Point_t *pos=LineSegment_getStart(LS);
271   fail_unless(pos != NULL);
272   fail_unless(Point_getXOffset(pos) == 0.0);
273   fail_unless(Point_getYOffset(pos) == 0.0);
274   fail_unless(Point_getZOffset(pos) == 0.0);
275 }
276 END_TEST
277 
START_TEST(test_LineSegment_setEnd_NULL)278 START_TEST (test_LineSegment_setEnd_NULL )
279 {
280   LineSegment_setEnd(LS,NULL);
281   Point_t *pos=LineSegment_getEnd(LS);
282   fail_unless(pos != NULL);
283   fail_unless(Point_getXOffset(pos) == 0.0);
284   fail_unless(Point_getYOffset(pos) == 0.0);
285   fail_unless(Point_getZOffset(pos) == 0.0);
286 }
287 END_TEST
288 
START_TEST(test_LineSegment_copyConstructor)289 START_TEST ( test_LineSegment_copyConstructor )
290 {
291   LineSegment* ls1=new LineSegment();
292   XMLNode notes;
293   ls1->setNotes(&notes);
294   XMLNode annotation;
295   ls1->setAnnotation(&annotation);
296   LineSegment* ls2=new LineSegment(*ls1);
297   delete ls2;
298   delete ls1;
299 }
300 END_TEST
301 
START_TEST(test_LineSegment_assignmentOperator)302 START_TEST ( test_LineSegment_assignmentOperator )
303 {
304   LineSegment* ls1=new LineSegment();
305   XMLNode notes;
306   ls1->setNotes(&notes);
307   XMLNode annotation;
308   ls1->setAnnotation(&annotation);
309   LineSegment ls2=*ls1;
310   delete ls1;
311 }
312 END_TEST
313 
314 
315 Suite *
create_suite_LineSegment(void)316 create_suite_LineSegment (void)
317 {
318   Suite *suite = suite_create("LineSegment");
319   TCase *tcase = tcase_create("LineSegment");
320 
321 
322   tcase_add_checked_fixture( tcase,
323                             LineSegmentTest_setup,
324                             LineSegmentTest_teardown );
325 
326   tcase_add_test( tcase, test_LineSegment_create                );
327   tcase_add_test( tcase, test_LineSegment_createWithPoints      );
328   tcase_add_test( tcase, test_LineSegment_createWithPoints_NULL );
329   tcase_add_test( tcase, test_LineSegment_createWithCoordinates );
330   tcase_add_test( tcase, test_LineSegment_free_NULL             );
331   tcase_add_test( tcase, test_LineSegment_setStart              );
332   tcase_add_test( tcase, test_LineSegment_setStart_NULL         );
333   tcase_add_test( tcase, test_LineSegment_setEnd                );
334   tcase_add_test( tcase, test_LineSegment_setEnd_NULL           );
335   tcase_add_test( tcase, test_LineSegment_createFrom            );
336   tcase_add_test( tcase, test_LineSegment_copyConstructor       );
337   tcase_add_test( tcase, test_LineSegment_assignmentOperator    );
338 
339   suite_add_tcase(suite, tcase);
340 
341   return suite;
342 }
343 
344 
345 END_C_DECLS
346