1 /**
2  * \file    TestSBMLParentObject.cpp
3  * \brief   SBML parent object unit tests
4  * \author  Sarah Keating
5  *
6  * <!--------------------------------------------------------------------------
7  * This file is part of libSBML.  Please visit http://sbml.org for more
8  * information about SBML, and the latest version of libSBML.
9  *
10  * Copyright (C) 2020 jointly by the following organizations:
11  *     1. California Institute of Technology, Pasadena, CA, USA
12  *     2. University of Heidelberg, Heidelberg, Germany
13  *     3. University College London, London, UK
14  *
15  * Copyright (C) 2019 jointly by the following organizations:
16  *     1. California Institute of Technology, Pasadena, CA, USA
17  *     2. University of Heidelberg, Heidelberg, Germany
18  *
19  * Copyright (C) 2013-2018 jointly by the following organizations:
20  *     1. California Institute of Technology, Pasadena, CA, USA
21  *     2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
22  *     3. University of Heidelberg, Heidelberg, Germany
23  *
24  * Copyright (C) 2009-2013 jointly by the following organizations:
25  *     1. California Institute of Technology, Pasadena, CA, USA
26  *     2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
27  *
28  * Copyright (C) 2006-2008 by the California Institute of Technology,
29  *     Pasadena, CA, USA
30  *
31  * Copyright (C) 2002-2005 jointly by the following organizations:
32  *     1. California Institute of Technology, Pasadena, CA, USA
33  *     2. Japan Science and Technology Agency, Japan
34  *
35  * This library is free software; you can redistribute it and/or modify it
36  * under the terms of the GNU Lesser General Public License as published by
37  * the Free Software Foundation.  A copy of the license agreement is provided
38  * in the file named "LICENSE.txt" included with this software distribution
39  * and also available online as http://sbml.org/software/libsbml/license.html
40  * ---------------------------------------------------------------------- -->*/
41 
42 #include <sbml/common/common.h>
43 
44 #include <sbml/SBase.h>
45 #include <sbml/Compartment.h>
46 #include <sbml/CompartmentType.h>
47 #include <sbml/Constraint.h>
48 #include <sbml/Delay.h>
49 #include <sbml/Event.h>
50 #include <sbml/EventAssignment.h>
51 #include <sbml/FunctionDefinition.h>
52 #include <sbml/InitialAssignment.h>
53 #include <sbml/KineticLaw.h>
54 #include <sbml/ListOf.h>
55 #include <sbml/Model.h>
56 #include <sbml/Parameter.h>
57 #include <sbml/Reaction.h>
58 #include <sbml/SBMLDocument.h>
59 #include <sbml/Species.h>
60 #include <sbml/SpeciesReference.h>
61 #include <sbml/ModifierSpeciesReference.h>
62 #include <sbml/SpeciesType.h>
63 
64 #include <sbml/AlgebraicRule.h>
65 #include <sbml/AssignmentRule.h>
66 #include <sbml/RateRule.h>
67 
68 #include <sbml/Unit.h>
69 #include <sbml/UnitDefinition.h>
70 #include <sbml/units/FormulaUnitsData.h>
71 
72 #include <sbml/math/ASTNode.h>
73 #include <sbml/math/FormulaParser.h>
74 
75 #include <check.h>
76 
77 /** @cond doxygenIgnored */
78 
79 using namespace std;
80 LIBSBML_CPP_NAMESPACE_USE
81 
82 /** @endcond */
83 
84 
85 BEGIN_C_DECLS
86 
START_TEST(test_Compartment_parent_add)87 START_TEST ( test_Compartment_parent_add )
88 {
89   Compartment *c = new Compartment(2, 4);
90   c->setId("c");
91   Model *m = new Model(2, 4);
92 
93   m->addCompartment(c);
94 
95   delete c;
96 
97   ListOf *lo = m->getListOfCompartments();
98 
99   fail_unless(lo == m->getCompartment(0)->getParentSBMLObject());
100   fail_unless(m == lo->getParentSBMLObject());
101 
102   delete m;
103 }
104 END_TEST
105 
106 
START_TEST(test_CompartmentType_parent_add)107 START_TEST ( test_CompartmentType_parent_add )
108 {
109   CompartmentType *ct = new CompartmentType(2, 4);
110   Model *m = new Model(2, 4);
111   ct->setId("ct");
112   m->addCompartmentType(ct);
113 
114   delete ct;
115 
116   ListOf *lo = m->getListOfCompartmentTypes();
117 
118   fail_unless(lo == m->getCompartmentType(0)->getParentSBMLObject());
119   fail_unless(m == lo->getParentSBMLObject());
120 
121   delete m;
122 }
123 END_TEST
124 
125 
START_TEST(test_Constraint_parent_add)126 START_TEST ( test_Constraint_parent_add )
127 {
128   Constraint *ct = new Constraint(2, 4);
129   Model *m = new Model(2, 4);
130   ASTNode_t* math = SBML_parseFormula("a-k");
131   ct->setMath(math);
132   ASTNode_free(math);
133   m->addConstraint(ct);
134 
135   delete ct;
136 
137   ListOf *lo = m->getListOfConstraints();
138 
139   fail_unless(lo == m->getConstraint(0)->getParentSBMLObject());
140   fail_unless(m == lo->getParentSBMLObject());
141 
142   delete m;
143 }
144 END_TEST
145 
146 
START_TEST(test_Delay_parent_add)147 START_TEST ( test_Delay_parent_add )
148 {
149   Delay *d = new Delay(2, 4);
150   Event *e = new Event(2, 4);
151   ASTNode_t* math = SBML_parseFormula("1");
152   d->setMath(math);
153   ASTNode_free(math);
154 
155   e->setDelay(d);
156 
157   delete d;
158 
159   fail_unless(e == e->getDelay()->getParentSBMLObject());
160 
161   delete e;
162 }
163 END_TEST
164 
165 
START_TEST(test_Event_parent_add)166 START_TEST ( test_Event_parent_add )
167 {
168   Event *e = new Event(2, 4);
169   Trigger *t = new Trigger(2, 4);
170   ASTNode_t* math = SBML_parseFormula("true");
171   t->setMath(math);
172   ASTNode_free(math);
173   e->setTrigger(t);
174   e->createEventAssignment();
175   Model *m = new Model(2, 4);
176 
177   m->addEvent(e);
178 
179   ListOf *lo = m->getListOfEvents();
180 
181   fail_unless(lo == m->getEvent(0)->getParentSBMLObject());
182   fail_unless(m == lo->getParentSBMLObject());
183 
184   delete e;
185   delete t;
186   delete m;
187 }
188 END_TEST
189 
190 
START_TEST(test_EventAssignment_parent_add)191 START_TEST ( test_EventAssignment_parent_add )
192 {
193   Event *e = new Event(2, 4);
194   EventAssignment *ea = new EventAssignment(2, 4);
195   ea->setVariable("c");
196   ASTNode_t* math = SBML_parseFormula("K+L");
197   ea->setMath(math);
198   ASTNode_free(math);
199 
200   e->addEventAssignment(ea);
201 
202   delete ea;
203 
204   ListOf *lo = e->getListOfEventAssignments();
205 
206   fail_unless(lo == e->getEventAssignment(0)->getParentSBMLObject());
207   fail_unless(e == lo->getParentSBMLObject());
208 
209   delete e;
210 }
211 END_TEST
212 
213 
START_TEST(test_FunctionDefinition_parent_add)214 START_TEST ( test_FunctionDefinition_parent_add )
215 {
216   FunctionDefinition *fd = new FunctionDefinition(2, 4);
217   Model *m = new Model(2, 4);
218   fd->setId("fd");
219   ASTNode_t* math = SBML_parseFormula("l");
220   fd->setMath(math);
221   ASTNode_free(math);
222 
223   m->addFunctionDefinition(fd);
224 
225   delete fd;
226 
227   ListOf *lo = m->getListOfFunctionDefinitions();
228 
229   fail_unless(lo == m->getFunctionDefinition(0)->getParentSBMLObject());
230   fail_unless(m == lo->getParentSBMLObject());
231 
232   delete m;
233 }
234 END_TEST
235 
236 
START_TEST(test_InitialAssignment_parent_add)237 START_TEST ( test_InitialAssignment_parent_add )
238 {
239   InitialAssignment *ia = new InitialAssignment(2, 4);
240   Model *m = new Model(2, 4);
241   ia->setSymbol("c");
242   ASTNode_t* math = SBML_parseFormula("9");
243   ia->setMath(math);
244   ASTNode_free(math);
245 
246   m->addInitialAssignment(ia);
247 
248   delete ia;
249 
250   ListOf *lo = m->getListOfInitialAssignments();
251 
252   fail_unless(lo == m->getInitialAssignment(0)->getParentSBMLObject());
253   fail_unless(m == lo->getParentSBMLObject());
254 
255   delete m;
256 }
257 END_TEST
258 
259 
START_TEST(test_KineticLaw_parent_add)260 START_TEST ( test_KineticLaw_parent_add )
261 {
262   KineticLaw* kl=new KineticLaw(2, 4);
263   ASTNode_t* math = SBML_parseFormula("a");
264   kl->setMath(math);
265   ASTNode_free(math);
266 
267   Reaction * r = new Reaction(2, 4);
268 
269   r->setKineticLaw(kl);
270 
271   fail_unless(r == r->getKineticLaw()->getParentSBMLObject());
272 
273   delete r;
274   delete kl;
275 }
276 END_TEST
277 
278 
START_TEST(test_KineticLaw_Parameter_parent_add)279 START_TEST ( test_KineticLaw_Parameter_parent_add )
280 {
281   KineticLaw* kl=new KineticLaw(2, 4);
282 
283   Parameter *p = new Parameter(2, 4);
284   p->setId("jake");
285   kl->addParameter(p);
286   delete p;
287 
288   fail_unless(kl->getNumParameters() == 1);
289   fail_unless(kl->getParameter(0)->getId() == "jake");
290 
291   ListOfParameters *lop = kl->getListOfParameters();
292 
293   fail_unless(kl == lop->getParentSBMLObject());
294   fail_unless(lop == kl->getParameter(0)->getParentSBMLObject());
295 
296   delete kl;
297 }
298 END_TEST
299 
300 
START_TEST(test_Model_parent_add)301 START_TEST ( test_Model_parent_add )
302 {
303   SBMLDocument *d = new SBMLDocument(2, 4);
304   Model *m = new Model(2, 4);
305 
306   d->setModel(m);
307 
308   fail_unless(d == d->getModel()->getParentSBMLObject());
309 
310   delete d;
311   delete m;
312 }
313 END_TEST
314 
315 
START_TEST(test_Parameter_parent_add)316 START_TEST ( test_Parameter_parent_add )
317 {
318   Parameter *ia = new Parameter(2, 4);
319   Model *m = new Model(2, 4);
320   ia->setId("p");
321 
322   m->addParameter(ia);
323 
324   delete ia;
325 
326   ListOf *lo = m->getListOfParameters();
327 
328   fail_unless(lo == m->getParameter(0)->getParentSBMLObject());
329   fail_unless(m == lo->getParentSBMLObject());
330 
331   delete m;
332 }
333 END_TEST
334 
335 
START_TEST(test_Reaction_parent_add)336 START_TEST ( test_Reaction_parent_add )
337 {
338   Reaction *ia = new Reaction(2, 4);
339   Model *m = new Model(2, 4);
340   ia->setId("k");
341 
342   m->addReaction(ia);
343 
344   delete ia;
345 
346   ListOf *lo = m->getListOfReactions();
347 
348   fail_unless(lo == m->getReaction(0)->getParentSBMLObject());
349   fail_unless(m == lo->getParentSBMLObject());
350 
351   delete m;
352 }
353 END_TEST
354 
355 
356 
START_TEST(test_Rule_parent_add)357 START_TEST ( test_Rule_parent_add )
358 {
359   Rule *ia = new RateRule(2, 4);
360   ia->setVariable("a");
361   ASTNode_t* math = SBML_parseFormula("9");
362   ia->setMath(math);
363   ASTNode_free(math);
364   Model *m = new Model(2, 4);
365 
366   m->addRule(ia);
367 
368   delete ia;
369 
370   ListOf *lo = m->getListOfRules();
371 
372   fail_unless(lo == m->getRule(0)->getParentSBMLObject());
373   fail_unless(m == lo->getParentSBMLObject());
374 
375   delete m;
376 }
377 END_TEST
378 
379 
380 
START_TEST(test_Species_parent_add)381 START_TEST ( test_Species_parent_add )
382 {
383   Species *ia = new Species(2, 4);
384   ia->setId("s");
385   ia->setCompartment("c");
386   Model *m = new Model(2, 4);
387 
388   m->addSpecies(ia);
389 
390   delete ia;
391 
392   ListOf *lo = m->getListOfSpecies();
393 
394   fail_unless(lo == m->getSpecies(0)->getParentSBMLObject());
395   fail_unless(m == lo->getParentSBMLObject());
396 
397   delete m;
398 }
399 END_TEST
400 
401 
402 
START_TEST(test_SpeciesReference_Product_parent_add)403 START_TEST ( test_SpeciesReference_Product_parent_add )
404 {
405   SpeciesReference *sr = new SpeciesReference(2, 4);
406   Reaction *r = new Reaction(2, 4);
407   sr->setSpecies("p");
408 
409   r->addProduct(sr);
410 
411   delete sr;
412 
413   ListOf *lo = r->getListOfProducts();
414 
415   fail_unless(lo == r->getProduct(0)->getParentSBMLObject());
416   fail_unless(r == lo->getParentSBMLObject());
417 
418   delete r;
419 }
420 END_TEST
421 
422 
START_TEST(test_SpeciesReference_Reactant_parent_add)423 START_TEST ( test_SpeciesReference_Reactant_parent_add )
424 {
425   SpeciesReference *sr = new SpeciesReference(2, 4);
426   Reaction *r = new Reaction(2, 4);
427 
428   sr->setSpecies("s");
429   r->addReactant(sr);
430 
431   delete sr;
432 
433   ListOf *lo = r->getListOfReactants();
434 
435   fail_unless(lo == r->getReactant(0)->getParentSBMLObject());
436   fail_unless(r == lo->getParentSBMLObject());
437 
438   delete r;
439 }
440 END_TEST
441 
442 
START_TEST(test_SpeciesReference_Modifier_parent_add)443 START_TEST ( test_SpeciesReference_Modifier_parent_add )
444 {
445   ModifierSpeciesReference *sr = new ModifierSpeciesReference(2, 4);
446   sr->setSpecies("s");
447   Reaction *r = new Reaction(2, 4);
448 
449   r->addModifier(sr);
450 
451   delete sr;
452 
453   ListOf *lo = r->getListOfModifiers();
454 
455   fail_unless(lo == r->getModifier(0)->getParentSBMLObject());
456   fail_unless(r == lo->getParentSBMLObject());
457 
458   delete r;
459 }
460 END_TEST
461 
462 
START_TEST(test_SpeciesType_parent_add)463 START_TEST ( test_SpeciesType_parent_add )
464 {
465   SpeciesType *ia = new SpeciesType(2, 4);
466   ia->setId("s");
467   Model *m = new Model(2, 4);
468 
469   m->addSpeciesType(ia);
470 
471   delete ia;
472 
473   ListOf *lo = m->getListOfSpeciesTypes();
474 
475   fail_unless(lo == m->getSpeciesType(0)->getParentSBMLObject());
476   fail_unless(m == lo->getParentSBMLObject());
477 
478   delete m;
479 }
480 END_TEST
481 
482 
START_TEST(test_StoichiometryMath_parent_add)483 START_TEST ( test_StoichiometryMath_parent_add )
484 {
485   StoichiometryMath *m = new StoichiometryMath(2, 4);
486   ASTNode_t* math = SBML_parseFormula("1");
487   m->setMath(math);
488   ASTNode_free(math);
489   SpeciesReference *sr = new SpeciesReference(2, 4);
490 
491   sr->setStoichiometryMath(m);
492 
493   delete m;
494 
495   fail_unless(sr == sr->getStoichiometryMath()->getParentSBMLObject());
496 
497   delete sr;
498 }
499 END_TEST
500 
501 
START_TEST(test_Trigger_parent_add)502 START_TEST ( test_Trigger_parent_add )
503 {
504   Trigger *d = new Trigger(2, 4);
505   ASTNode_t* math = SBML_parseFormula("false");
506   d->setMath(math);
507   ASTNode_free(math);
508   Event *e = new Event(2, 4);
509 
510   e->setTrigger(d);
511 
512   delete d;
513 
514   fail_unless(e == e->getTrigger()->getParentSBMLObject());
515 
516   delete e;
517 }
518 END_TEST
519 
520 
START_TEST(test_Unit_parent_add)521 START_TEST ( test_Unit_parent_add )
522 {
523   UnitDefinition* ud=new UnitDefinition(2, 4);
524 
525   Unit * u = new Unit(2, 4);
526   u->setKind(UNIT_KIND_MOLE);
527   ud->addUnit(u);
528   delete u;
529 
530   fail_unless(ud->getNumUnits() == 1);
531 
532   ListOf *lo = ud->getListOfUnits();
533 
534   fail_unless(lo == ud->getUnit(0)->getParentSBMLObject());
535   fail_unless(ud == lo->getParentSBMLObject());
536 
537   delete ud;
538 }
539 END_TEST
540 
541 
START_TEST(test_UnitDefinition_parent_add)542 START_TEST ( test_UnitDefinition_parent_add )
543 {
544   UnitDefinition *ia = new UnitDefinition(2, 4);
545   Model *m = new Model(2, 4);
546   ia->setId("u");
547   ia->createUnit();
548 
549   m->addUnitDefinition(ia);
550 
551   delete ia;
552 
553   ListOf *lo = m->getListOfUnitDefinitions();
554 
555   fail_unless(lo == m->getUnitDefinition(0)->getParentSBMLObject());
556   fail_unless(m == lo->getParentSBMLObject());
557 
558   delete m;
559 }
560 END_TEST
561 
562 
START_TEST(test_Compartment_parent_create)563 START_TEST ( test_Compartment_parent_create )
564 {
565   Model *m = new Model(2, 4);
566   Compartment *c = m->createCompartment();
567 
568   ListOf *lo = m->getListOfCompartments();
569 
570   fail_unless(lo == m->getCompartment(0)->getParentSBMLObject());
571   fail_unless(lo == c->getParentSBMLObject());
572   fail_unless(m == lo->getParentSBMLObject());
573 
574   delete m;
575 }
576 END_TEST
577 
578 
START_TEST(test_CompartmentType_parent_create)579 START_TEST ( test_CompartmentType_parent_create )
580 {
581   Model *m = new Model(2, 4);
582   CompartmentType *ct = m->createCompartmentType();
583 
584   ListOf *lo = m->getListOfCompartmentTypes();
585 
586   fail_unless(lo == m->getCompartmentType(0)->getParentSBMLObject());
587   fail_unless(lo == ct->getParentSBMLObject());
588   fail_unless(m == lo->getParentSBMLObject());
589 
590   delete m;
591 }
592 END_TEST
593 
594 
START_TEST(test_Constraint_parent_create)595 START_TEST ( test_Constraint_parent_create )
596 {
597   Model *m = new Model(2, 4);
598   Constraint *ct = m->createConstraint();
599 
600   ListOf *lo = m->getListOfConstraints();
601 
602   fail_unless(lo == m->getConstraint(0)->getParentSBMLObject());
603   fail_unless(lo == ct->getParentSBMLObject());
604   fail_unless(m == lo->getParentSBMLObject());
605 
606   delete m;
607 }
608 END_TEST
609 
610 
START_TEST(test_Event_parent_create)611 START_TEST ( test_Event_parent_create )
612 {
613   Model *m = new Model(2, 4);
614   Event *e = m->createEvent();
615 
616   ListOf *lo = m->getListOfEvents();
617 
618   fail_unless(lo == m->getEvent(0)->getParentSBMLObject());
619   fail_unless(lo == e->getParentSBMLObject());
620   fail_unless(m == lo->getParentSBMLObject());
621 
622   delete m;
623 }
624 END_TEST
625 
626 
START_TEST(test_EventAssignment_parent_create)627 START_TEST ( test_EventAssignment_parent_create )
628 {
629   Event *e = new Event(2, 4);
630 
631   EventAssignment *ea = e->createEventAssignment();
632 
633   ListOf *lo = e->getListOfEventAssignments();
634 
635   fail_unless(lo == e->getEventAssignment(0)->getParentSBMLObject());
636   fail_unless(lo == ea->getParentSBMLObject());
637   fail_unless(e == lo->getParentSBMLObject());
638 
639   delete e;
640 }
641 END_TEST
642 
643 
START_TEST(test_EventAssignment_parent_create_model)644 START_TEST ( test_EventAssignment_parent_create_model )
645 {
646   Model *m = new Model(2, 4);
647   Event *e = m->createEvent();
648 
649   EventAssignment *ea = m->createEventAssignment();
650 
651   ListOf *lo = e->getListOfEventAssignments();
652 
653   fail_unless(lo == e->getEventAssignment(0)->getParentSBMLObject());
654   fail_unless(lo == ea->getParentSBMLObject());
655   fail_unless(e == lo->getParentSBMLObject());
656 
657   delete m;
658 }
659 END_TEST
660 
661 
START_TEST(test_FunctionDefinition_parent_create)662 START_TEST ( test_FunctionDefinition_parent_create )
663 {
664   Model *m = new Model(2, 4);
665   FunctionDefinition *fd = m->createFunctionDefinition();
666 
667   ListOf *lo = m->getListOfFunctionDefinitions();
668 
669   fail_unless(lo == m->getFunctionDefinition(0)->getParentSBMLObject());
670   fail_unless(lo == fd->getParentSBMLObject());
671   fail_unless(m == lo->getParentSBMLObject());
672 
673   delete m;
674 }
675 END_TEST
676 
677 
START_TEST(test_InitialAssignment_parent_create)678 START_TEST ( test_InitialAssignment_parent_create )
679 {
680   Model *m = new Model(2, 4);
681   InitialAssignment *ia = m->createInitialAssignment();
682 
683   ListOf *lo = m->getListOfInitialAssignments();
684 
685   fail_unless(lo == m->getInitialAssignment(0)->getParentSBMLObject());
686   fail_unless(lo == ia->getParentSBMLObject());
687   fail_unless(m == lo->getParentSBMLObject());
688 
689   delete m;
690 }
691 END_TEST
692 
693 
START_TEST(test_KineticLaw_parent_create)694 START_TEST ( test_KineticLaw_parent_create )
695 {
696   Reaction * r = new Reaction(2, 4);
697   KineticLaw* kl = r->createKineticLaw();
698 
699   fail_unless(r == kl->getParentSBMLObject());
700 
701   delete r;
702 }
703 END_TEST
704 
705 
START_TEST(test_KineticLaw_parent_create_model)706 START_TEST ( test_KineticLaw_parent_create_model )
707 {
708   Model *m = new Model(2, 4);
709   Reaction * r = m->createReaction();
710   KineticLaw* kl = r->createKineticLaw();
711 
712   fail_unless(r == kl->getParentSBMLObject());
713   fail_unless(r == r->getKineticLaw()->getParentSBMLObject());
714 
715   delete m;
716 }
717 END_TEST
718 
719 
START_TEST(test_KineticLaw_Parameter_parent_create)720 START_TEST ( test_KineticLaw_Parameter_parent_create )
721 {
722   KineticLaw* kl=new KineticLaw(2, 4);
723   Parameter * p = kl->createParameter();
724 
725   fail_unless(kl->getNumParameters() == 1);
726 
727   ListOfParameters *lop = kl->getListOfParameters();
728 
729   fail_unless(kl == lop->getParentSBMLObject());
730   fail_unless(lop == p->getParentSBMLObject());
731   fail_unless(lop == kl->getParameter(0)->getParentSBMLObject());
732 
733   delete kl;
734 }
735 END_TEST
736 
737 
START_TEST(test_KineticLaw_Parameter_parent_create_model)738 START_TEST ( test_KineticLaw_Parameter_parent_create_model )
739 {
740   Model *m = new Model(2, 4);
741   Reaction *r = m->createReaction();
742   KineticLaw* kl = m->createKineticLaw();
743   Parameter * p = m->createKineticLawParameter();
744 
745   fail_unless(kl->getNumParameters() == 1);
746 
747   ListOfParameters *lop = kl->getListOfParameters();
748 
749   fail_unless(r == kl->getParentSBMLObject());
750   fail_unless(kl == lop->getParentSBMLObject());
751   fail_unless(lop == p->getParentSBMLObject());
752   fail_unless(lop == kl->getParameter(0)->getParentSBMLObject());
753 
754   delete m;
755 }
756 END_TEST
757 
758 
START_TEST(test_Model_parent_create)759 START_TEST ( test_Model_parent_create )
760 {
761   SBMLDocument *d = new SBMLDocument(2, 4);
762   Model *m = d->createModel();
763 
764   fail_unless(d == m->getParentSBMLObject());
765 
766   delete d;
767 }
768 END_TEST
769 
770 
START_TEST(test_Parameter_parent_create)771 START_TEST ( test_Parameter_parent_create )
772 {
773   Model *m = new Model(2, 4);
774   Parameter *p = m->createParameter();
775 
776   ListOf *lo = m->getListOfParameters();
777 
778   fail_unless(lo == m->getParameter(0)->getParentSBMLObject());
779   fail_unless(lo == p->getParentSBMLObject());
780   fail_unless(m == lo->getParentSBMLObject());
781 
782   delete m;
783 }
784 END_TEST
785 
786 
START_TEST(test_Reaction_parent_create)787 START_TEST ( test_Reaction_parent_create )
788 {
789   Model *m = new Model(2, 4);
790   Reaction *r = m->createReaction();
791 
792   ListOf *lo = m->getListOfReactions();
793 
794   fail_unless(lo == m->getReaction(0)->getParentSBMLObject());
795   fail_unless(lo == r->getParentSBMLObject());
796   fail_unless(m == lo->getParentSBMLObject());
797 
798   delete m;
799 }
800 END_TEST
801 
802 
803 
START_TEST(test_AlgebraicRule_parent_create)804 START_TEST ( test_AlgebraicRule_parent_create )
805 {
806   Model *m = new Model(2, 4);
807   AlgebraicRule *r = m->createAlgebraicRule();
808 
809   ListOf *lo = m->getListOfRules();
810 
811   fail_unless(lo == m->getRule(0)->getParentSBMLObject());
812   fail_unless(lo == r->getParentSBMLObject());
813   fail_unless(m == lo->getParentSBMLObject());
814 
815   delete m;
816 }
817 END_TEST
818 
819 
START_TEST(test_AssignmentRule_parent_create)820 START_TEST ( test_AssignmentRule_parent_create )
821 {
822   Model *m = new Model(2, 4);
823   AssignmentRule *r = m->createAssignmentRule();
824 
825   ListOf *lo = m->getListOfRules();
826 
827   fail_unless(lo == m->getRule(0)->getParentSBMLObject());
828   fail_unless(lo == r->getParentSBMLObject());
829   fail_unless(m == lo->getParentSBMLObject());
830 
831   delete m;
832 }
833 END_TEST
834 
835 
START_TEST(test_RateRule_parent_create)836 START_TEST ( test_RateRule_parent_create )
837 {
838   Model *m = new Model(2, 4);
839   RateRule *r = m->createRateRule();
840 
841   ListOf *lo = m->getListOfRules();
842 
843   fail_unless(lo == m->getRule(0)->getParentSBMLObject());
844   fail_unless(lo == r->getParentSBMLObject());
845   fail_unless(m == lo->getParentSBMLObject());
846 
847   delete m;
848 }
849 END_TEST
850 
851 
START_TEST(test_Species_parent_create)852 START_TEST ( test_Species_parent_create )
853 {
854   Model *m = new Model(2, 4);
855   Species *s = m->createSpecies();
856 
857   ListOf *lo = m->getListOfSpecies();
858 
859   fail_unless(lo == s->getParentSBMLObject());
860   fail_unless(lo == m->getSpecies(0)->getParentSBMLObject());
861   fail_unless(m == lo->getParentSBMLObject());
862 
863   delete m;
864 }
865 END_TEST
866 
867 
START_TEST(test_SpeciesReference_Product_parent_create)868 START_TEST ( test_SpeciesReference_Product_parent_create )
869 {
870   Reaction *r = new Reaction(2, 4);
871   SpeciesReference *sr = r->createProduct();
872 
873   ListOf *lo = r->getListOfProducts();
874 
875   fail_unless(lo == r->getProduct(0)->getParentSBMLObject());
876   fail_unless(lo == sr->getParentSBMLObject());
877   fail_unless(r == lo->getParentSBMLObject());
878 
879   delete r;
880 }
881 END_TEST
882 
883 
START_TEST(test_SpeciesReference_Product_parent_create_model)884 START_TEST ( test_SpeciesReference_Product_parent_create_model )
885 {
886   Model *m = new Model(2, 4);
887   Reaction *r = m->createReaction();
888   SpeciesReference *sr = m->createProduct();
889 
890   ListOf *lo = r->getListOfProducts();
891 
892   fail_unless(lo == r->getProduct(0)->getParentSBMLObject());
893   fail_unless(lo == sr->getParentSBMLObject());
894   fail_unless(r == lo->getParentSBMLObject());
895 
896   delete m;
897 }
898 END_TEST
899 
900 
START_TEST(test_SpeciesReference_Reactant_parent_create)901 START_TEST ( test_SpeciesReference_Reactant_parent_create )
902 {
903   Reaction *r = new Reaction(2, 4);
904   SpeciesReference *sr = r->createReactant();
905 
906   ListOf *lo = r->getListOfReactants();
907 
908   fail_unless(lo == r->getReactant(0)->getParentSBMLObject());
909   fail_unless(lo == sr->getParentSBMLObject());
910   fail_unless(r == lo->getParentSBMLObject());
911 
912   delete r;
913 }
914 END_TEST
915 
916 
START_TEST(test_SpeciesReference_Reactant_parent_create_model)917 START_TEST ( test_SpeciesReference_Reactant_parent_create_model )
918 {
919   Model *m = new Model(2, 4);
920   Reaction *r = m->createReaction();
921   SpeciesReference *sr = m->createReactant();
922 
923   ListOf *lo = r->getListOfReactants();
924 
925   fail_unless(lo == r->getReactant(0)->getParentSBMLObject());
926   fail_unless(lo == sr->getParentSBMLObject());
927   fail_unless(r == lo->getParentSBMLObject());
928 
929   delete m;
930 }
931 END_TEST
932 
933 
START_TEST(test_SpeciesReference_Modifier_parent_create)934 START_TEST ( test_SpeciesReference_Modifier_parent_create )
935 {
936   Reaction *r = new Reaction(2, 4);
937   ModifierSpeciesReference *sr = r->createModifier();
938 
939   ListOf *lo = r->getListOfModifiers();
940 
941   fail_unless(lo == sr->getParentSBMLObject());
942   fail_unless(lo == r->getModifier(0)->getParentSBMLObject());
943   fail_unless(r == lo->getParentSBMLObject());
944 
945   delete r;
946 }
947 END_TEST
948 
949 
START_TEST(test_SpeciesReference_Modifier_parent_create_model)950 START_TEST ( test_SpeciesReference_Modifier_parent_create_model )
951 {
952   Model *m = new Model(2, 4);
953   Reaction *r = m->createReaction();
954   ModifierSpeciesReference *sr = m->createModifier();
955 
956   ListOf *lo = r->getListOfModifiers();
957 
958   fail_unless(lo == sr->getParentSBMLObject());
959   fail_unless(lo == r->getModifier(0)->getParentSBMLObject());
960   fail_unless(r == lo->getParentSBMLObject());
961 
962   delete m;
963 }
964 END_TEST
965 
966 
START_TEST(test_SpeciesType_parent_create)967 START_TEST ( test_SpeciesType_parent_create )
968 {
969   Model *m = new Model(2, 4);
970   SpeciesType *st = m->createSpeciesType();
971 
972   ListOf *lo = m->getListOfSpeciesTypes();
973 
974   fail_unless(lo == m->getSpeciesType(0)->getParentSBMLObject());
975   fail_unless(lo == st->getParentSBMLObject());
976   fail_unless(m == lo->getParentSBMLObject());
977 
978   delete m;
979 }
980 END_TEST
981 
982 
START_TEST(test_Unit_parent_create)983 START_TEST ( test_Unit_parent_create )
984 {
985   UnitDefinition* ud = new UnitDefinition(2, 4);
986   Unit * u = ud->createUnit();
987 
988   fail_unless(ud->getNumUnits() == 1);
989 
990   ListOf *lo = ud->getListOfUnits();
991 
992   fail_unless(lo == ud->getUnit(0)->getParentSBMLObject());
993   fail_unless(lo == u->getParentSBMLObject());
994   fail_unless(ud == lo->getParentSBMLObject());
995 
996   delete ud;
997 }
998 END_TEST
999 
1000 
START_TEST(test_Unit_parent_create_model)1001 START_TEST ( test_Unit_parent_create_model )
1002 {
1003   Model *m = new Model(2, 4);
1004   UnitDefinition* ud = m->createUnitDefinition();
1005   Unit * u = m->createUnit();
1006 
1007   fail_unless(ud->getNumUnits() == 1);
1008 
1009   ListOf *lo = ud->getListOfUnits();
1010 
1011   fail_unless(lo == ud->getUnit(0)->getParentSBMLObject());
1012   fail_unless(lo == u->getParentSBMLObject());
1013   fail_unless(ud == lo->getParentSBMLObject());
1014 
1015   delete m;
1016 }
1017 END_TEST
1018 
1019 
START_TEST(test_UnitDefinition_parent_create)1020 START_TEST ( test_UnitDefinition_parent_create )
1021 {
1022   Model *m = new Model(2, 4);
1023   UnitDefinition *ud = m->createUnitDefinition();
1024 
1025   ListOf *lo = m->getListOfUnitDefinitions();
1026 
1027   fail_unless(lo == m->getUnitDefinition(0)->getParentSBMLObject());
1028   fail_unless(lo == ud->getParentSBMLObject());
1029   fail_unless(m == lo->getParentSBMLObject());
1030 
1031   delete m;
1032 }
1033 END_TEST
1034 
1035 
START_TEST(test_Compartment_parent_NULL)1036 START_TEST ( test_Compartment_parent_NULL )
1037 {
1038   SBMLDocument *d = new SBMLDocument();
1039   Model *m = d->createModel();
1040   Compartment *c = m->createCompartment();
1041 
1042   Compartment *c1 = c->clone();
1043   delete d;
1044 
1045   fail_unless(c1->getAncestorOfType(SBML_MODEL) == NULL);
1046   fail_unless(c1->getParentSBMLObject() == NULL);
1047   fail_unless (c1->getSBMLDocument() == NULL);
1048 
1049   delete c1;
1050 }
1051 END_TEST
1052 
1053 
START_TEST(test_CompartmentType_parent_NULL)1054 START_TEST ( test_CompartmentType_parent_NULL )
1055 {
1056   SBMLDocument *d = new SBMLDocument(2, 4);
1057   Model *m = d->createModel();
1058   CompartmentType *c = m->createCompartmentType();
1059 
1060   CompartmentType *c1 = c->clone();
1061   delete d;
1062 
1063   fail_unless(c1->getAncestorOfType(SBML_MODEL) == NULL);
1064   fail_unless(c1->getParentSBMLObject() == NULL);
1065   fail_unless (c1->getSBMLDocument() == NULL);
1066 
1067   delete c1;
1068 }
1069 END_TEST
1070 
1071 
START_TEST(test_Constraint_parent_NULL)1072 START_TEST ( test_Constraint_parent_NULL )
1073 {
1074   SBMLDocument *d = new SBMLDocument();
1075   Model *m = d->createModel();
1076   Constraint *c = m->createConstraint();
1077 
1078   Constraint *c1 = c->clone();
1079   delete d;
1080 
1081   fail_unless(c1->getAncestorOfType(SBML_MODEL) == NULL);
1082   fail_unless(c1->getParentSBMLObject() == NULL);
1083   fail_unless (c1->getSBMLDocument() == NULL);
1084 
1085   delete c1;
1086 }
1087 END_TEST
1088 
1089 
START_TEST(test_Event_parent_NULL)1090 START_TEST ( test_Event_parent_NULL )
1091 {
1092   SBMLDocument *d = new SBMLDocument(2, 4);
1093   Model *m = d->createModel();
1094   Event *c = m->createEvent();
1095   EventAssignment *ea = c->createEventAssignment();
1096   Trigger *t = new Trigger(2, 4);
1097   ASTNode math;
1098   t->setMath(&math);
1099   Delay *dy = new Delay(2, 4);
1100   dy->setMath(&math);
1101   c->setTrigger(t);
1102   c->setDelay(dy);
1103 
1104   fail_unless(c->getAncestorOfType(SBML_MODEL) == m);
1105   fail_unless(c->getTrigger()->getParentSBMLObject() == c);
1106   fail_unless (c->getDelay()->getSBMLDocument() == d);
1107   fail_unless(ea->getAncestorOfType(SBML_EVENT) == c);
1108 
1109   Event *c1 = c->clone();
1110   delete d;
1111   delete t;
1112   delete dy;
1113 
1114   fail_unless(c1->getAncestorOfType(SBML_MODEL) == NULL);
1115   fail_unless(c1->getParentSBMLObject() == NULL);
1116   fail_unless (c1->getSBMLDocument() == NULL);
1117 
1118   fail_unless(c1->getEventAssignment(0)->getAncestorOfType(SBML_MODEL) == NULL);
1119   fail_unless(c1->getEventAssignment(0)->getAncestorOfType(SBML_EVENT) == c1);
1120   fail_unless(c1->getEventAssignment(0)->getParentSBMLObject() != NULL);
1121   fail_unless(c1->getEventAssignment(0)->getSBMLDocument() == NULL);
1122 
1123   fail_unless(c1->getTrigger()->getAncestorOfType(SBML_MODEL) == NULL);
1124   fail_unless(c1->getTrigger()->getAncestorOfType(SBML_EVENT) == c1);
1125   fail_unless(c1->getTrigger()->getParentSBMLObject() != NULL);
1126   fail_unless(c1->getTrigger()->getSBMLDocument() == NULL);
1127 
1128   fail_unless(c1->getDelay()->getAncestorOfType(SBML_MODEL) == NULL);
1129   fail_unless(c1->getDelay()->getAncestorOfType(SBML_EVENT) == c1);
1130   fail_unless(c1->getDelay()->getParentSBMLObject() != NULL);
1131   fail_unless(c1->getDelay()->getSBMLDocument() == NULL);
1132 
1133   delete c1;
1134 }
1135 END_TEST
1136 
1137 
START_TEST(test_FunctionDefinition_parent_NULL)1138 START_TEST ( test_FunctionDefinition_parent_NULL )
1139 {
1140   SBMLDocument *d = new SBMLDocument();
1141   Model *m = d->createModel();
1142   FunctionDefinition *c = m->createFunctionDefinition();
1143 
1144   FunctionDefinition *c1 = c->clone();
1145   delete d;
1146 
1147   fail_unless(c1->getAncestorOfType(SBML_MODEL) == NULL);
1148   fail_unless(c1->getParentSBMLObject() == NULL);
1149   fail_unless (c1->getSBMLDocument() == NULL);
1150 
1151   delete c1;
1152 }
1153 END_TEST
1154 
1155 
START_TEST(test_InitialAssignment_parent_NULL)1156 START_TEST ( test_InitialAssignment_parent_NULL )
1157 {
1158   SBMLDocument *d = new SBMLDocument();
1159   Model *m = d->createModel();
1160   InitialAssignment *c = m->createInitialAssignment();
1161 
1162   InitialAssignment *c1 = c->clone();
1163   delete d;
1164 
1165   fail_unless(c1->getAncestorOfType(SBML_MODEL) == NULL);
1166   fail_unless(c1->getParentSBMLObject() == NULL);
1167   fail_unless (c1->getSBMLDocument() == NULL);
1168 
1169   delete c1;
1170 }
1171 END_TEST
1172 
1173 
START_TEST(test_KineticLaw_parent_NULL)1174 START_TEST ( test_KineticLaw_parent_NULL )
1175 {
1176   Reaction * r = new Reaction(2, 4);
1177   KineticLaw *kl = r->createKineticLaw();
1178   Parameter *p = kl->createParameter();
1179 
1180   fail_unless(r == kl->getParentSBMLObject());
1181   fail_unless(r == p->getAncestorOfType(SBML_REACTION));
1182   fail_unless(kl == p->getAncestorOfType(SBML_KINETIC_LAW));
1183 
1184   KineticLaw *kl1 = kl->clone();
1185 
1186   fail_unless(kl1->getParentSBMLObject() == NULL);
1187   fail_unless(kl1->getParameter(0)->getAncestorOfType(SBML_REACTION) == NULL);
1188   fail_unless(kl1 == kl1->getParameter(0)->getAncestorOfType(SBML_KINETIC_LAW));
1189 
1190   delete r;
1191   delete kl1;
1192 }
1193 END_TEST
1194 
1195 
START_TEST(test_Parameter_parent_NULL)1196 START_TEST ( test_Parameter_parent_NULL )
1197 {
1198   SBMLDocument *d = new SBMLDocument();
1199   Model *m = d->createModel();
1200   Parameter *c = m->createParameter();
1201 
1202   Parameter *c1 = c->clone();
1203   delete d;
1204 
1205   fail_unless(c1->getAncestorOfType(SBML_MODEL) == NULL);
1206   fail_unless(c1->getParentSBMLObject() == NULL);
1207   fail_unless (c1->getSBMLDocument() == NULL);
1208 
1209   delete c1;
1210 }
1211 END_TEST
1212 
1213 
START_TEST(test_Reaction_parent_NULL)1214 START_TEST ( test_Reaction_parent_NULL )
1215 {
1216   SBMLDocument *d = new SBMLDocument();
1217   Model *m = d->createModel();
1218   Reaction *c = m->createReaction();
1219   SpeciesReference *sr = c->createReactant();
1220   KineticLaw *kl = c->createKineticLaw();
1221 
1222   fail_unless(c->getAncestorOfType(SBML_MODEL) == m);
1223   fail_unless (c->getSBMLDocument() == d);
1224   fail_unless(sr->getAncestorOfType(SBML_REACTION) == c);
1225   fail_unless(kl->getAncestorOfType(SBML_REACTION) == c);
1226 
1227   Reaction *c1 = c->clone();
1228   delete d;
1229 
1230   fail_unless(c1->getAncestorOfType(SBML_MODEL) == NULL);
1231   fail_unless(c1->getParentSBMLObject() == NULL);
1232   fail_unless (c1->getSBMLDocument() == NULL);
1233 
1234   SpeciesReference *sr1 = c1->getReactant(0);
1235   fail_unless(sr1->getAncestorOfType(SBML_MODEL) == NULL);
1236   fail_unless(sr1->getAncestorOfType(SBML_REACTION) == c1);
1237   fail_unless (sr1->getSBMLDocument() == NULL);
1238 
1239   fail_unless(c1->getKineticLaw()->getAncestorOfType(SBML_MODEL) == NULL);
1240   fail_unless(c1->getKineticLaw()->getAncestorOfType(SBML_REACTION) == c1);
1241   fail_unless (c1->getKineticLaw()->getSBMLDocument() == NULL);
1242 
1243 
1244   delete c1;
1245 }
1246 END_TEST
1247 
1248 
START_TEST(test_Species_parent_NULL)1249 START_TEST ( test_Species_parent_NULL )
1250 {
1251   SBMLDocument *d = new SBMLDocument();
1252   Model *m = d->createModel();
1253   Species *c = m->createSpecies();
1254 
1255   Species *c1 = c->clone();
1256   delete d;
1257 
1258   fail_unless(c1->getAncestorOfType(SBML_MODEL) == NULL);
1259   fail_unless(c1->getParentSBMLObject() == NULL);
1260   fail_unless (c1->getSBMLDocument() == NULL);
1261 
1262   delete c1;
1263 }
1264 END_TEST
1265 
1266 
START_TEST(test_SpeciesType_parent_NULL)1267 START_TEST ( test_SpeciesType_parent_NULL )
1268 {
1269   SBMLDocument *d = new SBMLDocument(2, 4);
1270   Model *m = d->createModel();
1271   SpeciesType *c = m->createSpeciesType();
1272 
1273   SpeciesType *c1 = c->clone();
1274   delete d;
1275 
1276   fail_unless(c1->getAncestorOfType(SBML_MODEL) == NULL);
1277   fail_unless(c1->getParentSBMLObject() == NULL);
1278   fail_unless (c1->getSBMLDocument() == NULL);
1279 
1280   delete c1;
1281 }
1282 END_TEST
1283 
1284 
START_TEST(test_UnitDefinition_parent_NULL)1285 START_TEST ( test_UnitDefinition_parent_NULL )
1286 {
1287   SBMLDocument *d = new SBMLDocument();
1288   Model *m = d->createModel();
1289   UnitDefinition *c = m->createUnitDefinition();
1290   Unit *u = c->createUnit();
1291 
1292   fail_unless(u->getAncestorOfType(SBML_UNIT_DEFINITION) == c);
1293 
1294   UnitDefinition *c1 = c->clone();
1295   delete d;
1296 
1297   fail_unless(c1->getAncestorOfType(SBML_MODEL) == NULL);
1298   fail_unless(c1->getParentSBMLObject() == NULL);
1299   fail_unless (c1->getSBMLDocument() == NULL);
1300 
1301   fail_unless(c1->getUnit(0)->getAncestorOfType(SBML_UNIT_DEFINITION) == c1);
1302   fail_unless(c1->getUnit(0)->getParentSBMLObject() != NULL);
1303   fail_unless (c1->getUnit(0)->getSBMLDocument() == NULL);
1304 
1305   delete c1;
1306 }
1307 END_TEST
1308 
1309 
START_TEST(test_Compartment_parent_mismatch)1310 START_TEST ( test_Compartment_parent_mismatch )
1311 {
1312   Compartment *c = new Compartment(2, 3);
1313   c->setId("c");
1314   Model *m = new Model(2, 4);
1315 
1316   int success = m->addCompartment(c);
1317 
1318   fail_unless(success == LIBSBML_VERSION_MISMATCH);
1319 
1320   delete c;
1321   delete m;
1322 }
1323 END_TEST
1324 
1325 
START_TEST(test_CompartmentType_parent_mismatch)1326 START_TEST ( test_CompartmentType_parent_mismatch )
1327 {
1328   CompartmentType *ct = new CompartmentType(2, 4);
1329   Model *m = new Model(3, 1);
1330   ct->setId("ct");
1331 
1332   int success = m->addCompartmentType(ct);
1333 
1334   fail_unless(success == LIBSBML_LEVEL_MISMATCH);
1335 
1336   delete ct;
1337   delete m;
1338 }
1339 END_TEST
1340 
1341 
START_TEST(test_Constraint_parent_mismatch)1342 START_TEST ( test_Constraint_parent_mismatch )
1343 {
1344   Constraint *ct = NULL;
1345   Model *m = new Model(2, 4);
1346 
1347   int success = m->addConstraint(ct);
1348 
1349   fail_unless(success == LIBSBML_OPERATION_FAILED);
1350 
1351   delete ct;
1352   delete m;
1353 }
1354 END_TEST
1355 
1356 
START_TEST(test_Delay_parent_mismatch)1357 START_TEST ( test_Delay_parent_mismatch )
1358 {
1359   Event *e = new Event(3, 1);
1360   Delay *d = NULL;
1361 
1362   int success = e->setDelay(d);
1363 
1364   fail_unless(success == LIBSBML_OPERATION_SUCCESS);
1365 
1366   delete e;
1367   delete d;
1368 }
1369 END_TEST
1370 
1371 
START_TEST(test_Event_parent_mismatch)1372 START_TEST ( test_Event_parent_mismatch )
1373 {
1374   Event *e = new Event(3, 1);
1375   Model *m = new Model(3, 1);
1376 
1377   int success = m->addEvent(e);
1378 
1379   fail_unless(success == LIBSBML_INVALID_OBJECT);
1380 
1381   delete e;
1382   delete m;
1383 }
1384 END_TEST
1385 
1386 
START_TEST(test_EventAssignment_parent_mismatch)1387 START_TEST ( test_EventAssignment_parent_mismatch )
1388 {
1389   SBMLNamespaces sbmlns(3, 1);
1390   Event *e = new Event(&sbmlns);
1391   //sbmlns->addPackageNamespace("comp", 1);
1392   sbmlns.addNamespace("http://www.sbml.org/sbml/level3/version1/comp/version1", "comp");
1393   EventAssignment *ea = new EventAssignment(&sbmlns);
1394   ea->setVariable("c");
1395   ASTNode_t* math = SBML_parseFormula("K+L");
1396   ea->setMath(math);
1397   ASTNode_free(math);
1398 
1399   int success = e->addEventAssignment(ea);
1400 
1401   fail_unless(success == LIBSBML_NAMESPACES_MISMATCH);
1402 
1403   delete e;
1404   delete ea;
1405 }
1406 END_TEST
1407 
1408 
START_TEST(test_KineticLaw_parent_mismatch)1409 START_TEST ( test_KineticLaw_parent_mismatch )
1410 {
1411   KineticLaw* kl=new KineticLaw(2, 3);
1412   ASTNode_t* math = SBML_parseFormula("true");
1413   kl->setMath(math);
1414   ASTNode_free(math);
1415 
1416   Reaction * r = new Reaction(2, 4);
1417 
1418   int success = r->setKineticLaw(kl);
1419 
1420   fail_unless(success == LIBSBML_VERSION_MISMATCH);
1421 
1422   delete r;
1423   delete kl;
1424 }
1425 END_TEST
1426 
1427 
START_TEST(test_Model_parent_mismatch)1428 START_TEST ( test_Model_parent_mismatch )
1429 {
1430   SBMLNamespaces sbmlns(3, 1);
1431   SBMLDocument *d = new SBMLDocument(&sbmlns);
1432   //sbmlns->addPackageNamespace("comp", 1);
1433   sbmlns.addNamespace("http://www.sbml.org/sbml/level3/version1/comp/version1", "comp");
1434   Model *m = new Model(&sbmlns);
1435 
1436   int success = d->setModel(m);
1437 
1438   fail_unless(success == LIBSBML_NAMESPACES_MISMATCH);
1439 
1440   delete d;
1441   delete m;
1442 }
1443 END_TEST
1444 
1445 
START_TEST(test_StoichiometryMath_parent_mismatch)1446 START_TEST ( test_StoichiometryMath_parent_mismatch )
1447 {
1448   StoichiometryMath *m = new StoichiometryMath(2, 4);
1449   SpeciesReference *sr = new SpeciesReference(2, 4);
1450 
1451   int success = sr->setStoichiometryMath(m);
1452 
1453   fail_unless(success == LIBSBML_INVALID_OBJECT);
1454 
1455   delete sr;
1456   delete m;
1457 }
1458 END_TEST
1459 
1460 
START_TEST(test_Priority_parent_mismatch)1461 START_TEST ( test_Priority_parent_mismatch )
1462 {
1463   Event *e = new Event(3, 1);
1464   Priority *p= new Priority(3, 1);
1465   ASTNode_t* math = SBML_parseFormula("K+L");
1466   p->setMath(math);
1467   ASTNode_free(math);
1468 
1469   int success = e->setPriority(p);
1470 
1471   fail_unless(success == LIBSBML_OPERATION_SUCCESS);
1472 
1473   success = e->setPriority(e->getPriority());
1474 
1475   fail_unless(success == LIBSBML_OPERATION_SUCCESS);
1476 
1477   delete e;
1478   delete p;
1479 }
1480 END_TEST
1481 
1482 
START_TEST(test_Trigger_parent_mismatch)1483 START_TEST ( test_Trigger_parent_mismatch )
1484 {
1485   Event *e = new Event(3, 1);
1486   Trigger *t= new Trigger(2, 4);
1487   ASTNode_t* math = SBML_parseFormula("true");
1488   t->setMath(math);
1489   ASTNode_free(math);
1490 
1491   int success = e->setTrigger(t);
1492 
1493   fail_unless(success == LIBSBML_LEVEL_MISMATCH);
1494 
1495   delete e;
1496   delete t;
1497 }
1498 END_TEST
1499 
1500 
1501 Suite *
create_suite_ParentObject(void)1502 create_suite_ParentObject (void)
1503 {
1504   Suite *suite = suite_create("ParentObject");
1505   TCase *tcase = tcase_create("ParentObject");
1506 
1507   tcase_add_test( tcase, test_Compartment_parent_add );
1508   tcase_add_test( tcase, test_CompartmentType_parent_add );
1509   tcase_add_test( tcase, test_Constraint_parent_add );
1510   tcase_add_test( tcase, test_Delay_parent_add );
1511   tcase_add_test( tcase, test_Event_parent_add );
1512   tcase_add_test( tcase, test_EventAssignment_parent_add );
1513   tcase_add_test( tcase, test_FunctionDefinition_parent_add );
1514   tcase_add_test( tcase, test_InitialAssignment_parent_add );
1515   tcase_add_test( tcase, test_KineticLaw_parent_add );
1516   tcase_add_test( tcase, test_KineticLaw_Parameter_parent_add );
1517   tcase_add_test( tcase, test_Model_parent_add );
1518   tcase_add_test( tcase, test_Parameter_parent_add );
1519   tcase_add_test( tcase, test_Reaction_parent_add );
1520   tcase_add_test( tcase, test_Rule_parent_add );
1521   tcase_add_test( tcase, test_Species_parent_add );
1522   tcase_add_test( tcase, test_SpeciesReference_Product_parent_add );
1523   tcase_add_test( tcase, test_SpeciesReference_Reactant_parent_add );
1524   tcase_add_test( tcase, test_SpeciesReference_Modifier_parent_add );
1525   tcase_add_test( tcase, test_SpeciesType_parent_add );
1526   tcase_add_test( tcase, test_StoichiometryMath_parent_add );
1527   tcase_add_test( tcase, test_Trigger_parent_add );
1528   tcase_add_test( tcase, test_Unit_parent_add );
1529   tcase_add_test( tcase, test_UnitDefinition_parent_add );
1530   tcase_add_test( tcase, test_Compartment_parent_create );
1531   tcase_add_test( tcase, test_CompartmentType_parent_create );
1532   tcase_add_test( tcase, test_Constraint_parent_create );
1533   tcase_add_test( tcase, test_Event_parent_create );
1534   tcase_add_test( tcase, test_EventAssignment_parent_create );
1535   tcase_add_test( tcase, test_EventAssignment_parent_create_model );
1536   tcase_add_test( tcase, test_FunctionDefinition_parent_create );
1537   tcase_add_test( tcase, test_InitialAssignment_parent_create );
1538   tcase_add_test( tcase, test_KineticLaw_parent_create );
1539   tcase_add_test( tcase, test_KineticLaw_parent_create_model );
1540   tcase_add_test( tcase, test_KineticLaw_Parameter_parent_create );
1541   tcase_add_test( tcase, test_KineticLaw_Parameter_parent_create_model );
1542   tcase_add_test( tcase, test_Model_parent_create );
1543   tcase_add_test( tcase, test_Parameter_parent_create );
1544   tcase_add_test( tcase, test_Reaction_parent_create );
1545   tcase_add_test( tcase, test_AlgebraicRule_parent_create );
1546   tcase_add_test( tcase, test_AssignmentRule_parent_create );
1547   tcase_add_test( tcase, test_RateRule_parent_create );
1548   tcase_add_test( tcase, test_Species_parent_create );
1549   tcase_add_test( tcase, test_SpeciesReference_Product_parent_create );
1550   tcase_add_test( tcase, test_SpeciesReference_Product_parent_create_model );
1551   tcase_add_test( tcase, test_SpeciesReference_Reactant_parent_create );
1552   tcase_add_test( tcase, test_SpeciesReference_Reactant_parent_create_model );
1553   tcase_add_test( tcase, test_SpeciesReference_Modifier_parent_create );
1554   tcase_add_test( tcase, test_SpeciesReference_Modifier_parent_create_model );
1555   tcase_add_test( tcase, test_SpeciesType_parent_create );
1556   tcase_add_test( tcase, test_Unit_parent_create );
1557   tcase_add_test( tcase, test_Unit_parent_create_model );
1558   tcase_add_test( tcase, test_UnitDefinition_parent_create );
1559   tcase_add_test( tcase, test_Compartment_parent_NULL );
1560   tcase_add_test( tcase, test_CompartmentType_parent_NULL );
1561   tcase_add_test( tcase, test_Constraint_parent_NULL );
1562   tcase_add_test( tcase, test_Event_parent_NULL );
1563   tcase_add_test( tcase, test_FunctionDefinition_parent_NULL );
1564   tcase_add_test( tcase, test_InitialAssignment_parent_NULL );
1565   tcase_add_test( tcase, test_KineticLaw_parent_NULL );
1566   tcase_add_test( tcase, test_Parameter_parent_NULL );
1567   tcase_add_test( tcase, test_Reaction_parent_NULL );
1568   tcase_add_test( tcase, test_Species_parent_NULL );
1569   tcase_add_test( tcase, test_SpeciesType_parent_NULL );
1570   tcase_add_test( tcase, test_UnitDefinition_parent_NULL );
1571   tcase_add_test( tcase, test_Compartment_parent_mismatch );
1572   tcase_add_test( tcase, test_CompartmentType_parent_mismatch );
1573   tcase_add_test( tcase, test_Constraint_parent_mismatch );
1574   tcase_add_test( tcase, test_Delay_parent_mismatch );
1575   tcase_add_test( tcase, test_Event_parent_mismatch );
1576   tcase_add_test( tcase, test_EventAssignment_parent_mismatch );
1577   tcase_add_test( tcase, test_KineticLaw_parent_mismatch );
1578   tcase_add_test( tcase, test_Model_parent_mismatch );
1579   tcase_add_test( tcase, test_StoichiometryMath_parent_mismatch );
1580   tcase_add_test( tcase, test_Priority_parent_mismatch );
1581   tcase_add_test( tcase, test_Trigger_parent_mismatch );
1582 
1583   suite_add_tcase(suite, tcase);
1584 
1585   return suite;
1586 }
1587 
1588 END_C_DECLS
1589 
1590