9 #include "utilities.hpp"
19 #include "sbml/SBMLDocument.h"
20 #include "sbml/Model.h"
21 #include "sbml/Rule.h"
22 #include "sbml/Species.h"
23 #include "sbml/Parameter.h"
24 #include "sbml/math/ASTNode.h"
52 CPPUNIT_ASSERT(content.empty() ==
false);
53 CPPUNIT_ASSERT(pDataModel->
getModel() != NULL);
55 CPPUNIT_ASSERT(pDocument != NULL);
56 Model* pModel = pDocument->getModel();
57 CPPUNIT_ASSERT(pModel != NULL);
60 CPPUNIT_ASSERT(pModel->getNumCompartments() == 1);
61 Compartment* pCompartment = pModel->getCompartment(0);
62 CPPUNIT_ASSERT(pCompartment->getConstant() ==
false);
63 CPPUNIT_ASSERT(pModel->getNumSpecies() == 2);
64 Species* pSpecies = pModel->getSpecies(1);
65 std::string idSpeciesS, idSpeciesA;
67 if (pSpecies->getName() ==
"S")
69 idSpeciesS = pSpecies->getId();
73 idSpeciesA = pSpecies->getId();
76 CPPUNIT_ASSERT(pSpecies->getHasOnlySubstanceUnits() ==
true);
77 pSpecies = pModel->getSpecies(0);
79 if (pSpecies->getName() ==
"S")
81 idSpeciesS = pSpecies->getId();
85 idSpeciesA = pSpecies->getId();
88 CPPUNIT_ASSERT(!idSpeciesS.empty());
89 CPPUNIT_ASSERT(!idSpeciesA.empty());
90 CPPUNIT_ASSERT(pSpecies->getHasOnlySubstanceUnits() ==
true);
91 CPPUNIT_ASSERT(pModel->getNumRules() == 2);
92 CPPUNIT_ASSERT(pModel->getNumInitialAssignments() == 2);
93 const InitialAssignment* pAssignment1 = pModel->getInitialAssignment(0);
94 CPPUNIT_ASSERT(pAssignment1 != NULL);
95 CPPUNIT_ASSERT(pModel->getNumParameters() == 1);
96 Parameter* pParameter = pModel->getParameter(0);
97 CPPUNIT_ASSERT(pParameter != NULL);
103 const InitialAssignment* pAssignment2 = NULL;
105 if (pAssignment1->getSymbol() == pParameter->getId())
107 pAssignment2 = pModel->getInitialAssignment(1);
111 pAssignment2 = pAssignment1;
112 pAssignment1 = pModel->getInitialAssignment(1);
115 assert(pAssignment2 != NULL);
118 const ASTNode* pMath = pAssignment1->getMath();
119 CPPUNIT_ASSERT(pMath != NULL);
120 CPPUNIT_ASSERT(pMath->getType() == AST_DIVIDE);
121 CPPUNIT_ASSERT(pMath->getNumChildren() == 2);
122 const ASTNode* pChild1 = pMath->getChild(0);
123 CPPUNIT_ASSERT(pChild1 != NULL);
124 const ASTNode* pChild2 = NULL;
127 if (pChild1->getType() == AST_DIVIDE)
129 pChild2 = pMath->getChild(1);
134 pChild1 = pMath->getChild(1);
137 CPPUNIT_ASSERT(pChild2 != NULL);
138 CPPUNIT_ASSERT(pChild1->getType() == AST_DIVIDE);
139 CPPUNIT_ASSERT(pChild2->getType() == AST_REAL);
140 CPPUNIT_ASSERT((fabs(pChild2->getReal() - 2.0) / 2.0) < 1e-9);
141 CPPUNIT_ASSERT(pChild1->getNumChildren() == 2);
142 pChild2 = pChild1->getChild(1);
143 CPPUNIT_ASSERT(pChild2 != NULL);
144 pChild1 = pChild1->getChild(0);
145 CPPUNIT_ASSERT(pChild1 != NULL);
146 CPPUNIT_ASSERT(pChild1->getType() == AST_NAME);
147 CPPUNIT_ASSERT(pChild2->getType() == AST_NAME);
148 CPPUNIT_ASSERT(pChild1->getName() == idSpeciesS);
149 CPPUNIT_ASSERT(pChild2->getName() == pCompartment->getId());
152 pMath = pAssignment2->getMath();
153 CPPUNIT_ASSERT(pMath->getNumChildren() == 2);
154 CPPUNIT_ASSERT(pMath->getType() == AST_TIMES);
155 pChild1 = pMath->getChild(0);
156 CPPUNIT_ASSERT(pChild1 != NULL);
158 if (pChild1->getType() == AST_PLUS)
160 pChild2 = pMath->getChild(1);
165 pChild1 = pMath->getChild(1);
168 CPPUNIT_ASSERT(pChild2 != NULL);
169 CPPUNIT_ASSERT(pChild1->getType() == AST_PLUS);
170 CPPUNIT_ASSERT(pChild2->getType() == AST_NAME);
171 CPPUNIT_ASSERT(pChild2->getName() == pCompartment->getId());
172 CPPUNIT_ASSERT(pChild1->getNumChildren() == 2);
173 pChild2 = pChild1->getChild(0);
174 pChild1 = pChild1->getChild(1);
175 CPPUNIT_ASSERT(pChild2->getType() == AST_REAL);
177 if ((fabs(pChild2->getReal() - 12.0) / 12.0) < 1e-9)
179 CPPUNIT_ASSERT((fabs(pChild1->getReal() - 6.0) / 6.0) < 1e-9);
183 CPPUNIT_ASSERT((fabs(pChild2->getReal() - 6.0) / 6.0) < 1e-9);
184 CPPUNIT_ASSERT((fabs(pChild1->getReal() - 12.0) / 12.0) < 1e-9);
188 const Rule* pRule1 = pModel->getRule(0);
189 CPPUNIT_ASSERT(pRule1 != NULL);
190 const AssignmentRule* pARule1 =
dynamic_cast<const AssignmentRule*
>(pRule1);
191 CPPUNIT_ASSERT(pARule1 != NULL);
192 const Rule* pRule2 = NULL;
193 const AssignmentRule* pARule2 = NULL;
195 if (pARule1->getVariable() == pCompartment->getId())
197 pRule2 = pModel->getRule(1);
198 pARule2 =
dynamic_cast<const AssignmentRule*
>(pRule2);
204 pRule1 = pModel->getRule(1);
205 pARule1 =
dynamic_cast<const AssignmentRule*
>(pRule1);
208 CPPUNIT_ASSERT(pRule1 != NULL);
209 CPPUNIT_ASSERT(pARule1 != NULL);
210 CPPUNIT_ASSERT(pRule2 != NULL);
211 CPPUNIT_ASSERT(pARule2 != NULL);
214 pMath = pARule1->getMath();
215 CPPUNIT_ASSERT(pMath != 0);
216 CPPUNIT_ASSERT(pMath->getType() == AST_PLUS);
217 CPPUNIT_ASSERT(pMath->getNumChildren() == 2);
218 pChild2 = pMath->getChild(0);
219 pChild1 = pMath->getChild(1);
220 CPPUNIT_ASSERT(pChild2->getType() == AST_REAL);
222 if ((fabs(pChild2->getReal() - 3.0) / 3.0) < 1e-9)
224 CPPUNIT_ASSERT((fabs(pChild1->getReal() - 4.0) / 4.0) < 1e-9);
228 CPPUNIT_ASSERT((fabs(pChild2->getReal() - 4.0) / 4.0) < 1e-9);
229 CPPUNIT_ASSERT((fabs(pChild1->getReal() - 3.0) / 3.0) < 1e-9);
235 pMath = pARule2->getMath();
236 CPPUNIT_ASSERT(pMath != NULL);
237 CPPUNIT_ASSERT(pMath->getType() == AST_TIMES);
238 CPPUNIT_ASSERT(pMath->getNumChildren() == 2);
239 pChild1 = pMath->getChild(0);
240 CPPUNIT_ASSERT(pChild1 != NULL);
242 if (pChild1->getType() == AST_NAME)
244 pChild2 = pMath->getChild(1);
249 pChild1 = pMath->getChild(1);
252 CPPUNIT_ASSERT(pChild1 != NULL);
253 CPPUNIT_ASSERT(pChild2 != NULL);
254 CPPUNIT_ASSERT(pChild1->getType() == AST_NAME);
255 CPPUNIT_ASSERT(pChild1->getName() == pCompartment->getId());
256 CPPUNIT_ASSERT(pChild2->getType() == AST_TIMES);
257 CPPUNIT_ASSERT(pChild2->getNumChildren() == 2);
258 pChild1 = pChild2->getChild(0);
260 if (pChild1->getType() == AST_REAL)
262 pChild2 = pChild2->getChild(1);
269 pChild1 = pMath->getChild(1);
272 CPPUNIT_ASSERT(pChild1 != NULL);
273 CPPUNIT_ASSERT(pChild2 != NULL);
274 CPPUNIT_ASSERT(pChild1->getType() == AST_REAL);
275 CPPUNIT_ASSERT((fabs(pChild1->getReal() - 3.0) / 3.0) < 1e-9);
276 CPPUNIT_ASSERT(pChild2->getType() == AST_DIVIDE);
277 CPPUNIT_ASSERT(pChild2->getNumChildren() == 2);
278 pChild1 = pChild2->getChild(0);
279 pChild2 = pChild2->getChild(1);
280 CPPUNIT_ASSERT(pChild1 != NULL);
281 CPPUNIT_ASSERT(pChild1->getType() == AST_NAME);
282 CPPUNIT_ASSERT(pChild1->getName() == idSpeciesA);
283 CPPUNIT_ASSERT(pChild2 != NULL);
284 CPPUNIT_ASSERT(pChild2->getType() == AST_NAME);
285 CPPUNIT_ASSERT(pChild2->getName() == pCompartment->getId());
291 CPPUNIT_ASSERT(result ==
true);
300 CPPUNIT_ASSERT(pCCompartment != NULL);
302 const CExpression* pExpr = pCCompartment->getExpressionPtr();
303 CPPUNIT_ASSERT(pExpr != NULL);
305 CPPUNIT_ASSERT(pEvalNode != NULL);
309 CPPUNIT_ASSERT(pOperator != NULL);
310 CPPUNIT_ASSERT(pOperator->
getChild() != NULL);
312 CPPUNIT_ASSERT(pEvalNode != NULL);
316 if (fabs((pNumberNode->
getValue() - 3.0) / 3.0) < 1e-6)
318 CPPUNIT_ASSERT(pNumberNode->
getSibling() != NULL);
320 CPPUNIT_ASSERT(pEvalNode != NULL);
323 CPPUNIT_ASSERT(fabs((pNumberNode->
getValue() - 4.0) / 4.0) < 1e-6);
324 CPPUNIT_ASSERT(pNumberNode->
getSibling() == NULL);
328 CPPUNIT_ASSERT(fabs((pNumberNode->
getValue() - 4.0) / 4.0) < 1e-6);
329 CPPUNIT_ASSERT(pNumberNode->
getSibling() != NULL);
331 CPPUNIT_ASSERT(pEvalNode != NULL);
334 CPPUNIT_ASSERT(fabs((pNumberNode->
getValue() - 3.0) / 3.0) < 1e-6);
335 CPPUNIT_ASSERT(pNumberNode->
getSibling() == NULL);
340 CPPUNIT_ASSERT(pMetabA != NULL);
342 const CMetab* pMetabS = NULL;
352 CPPUNIT_ASSERT(pMetabA != NULL);
355 CPPUNIT_ASSERT(pMetabS != NULL);
363 for (
unsigned int i = 0; i < iMax; ++i)
372 CPPUNIT_ASSERT(pModelValue != NULL);
374 pExpr = pModelValue->getInitialExpressionPtr();
375 CPPUNIT_ASSERT(pExpr != NULL);
376 pEvalNode = pExpr->getRoot();
377 CPPUNIT_ASSERT(pEvalNode != NULL);
380 CPPUNIT_ASSERT(pOperator != NULL);
382 CPPUNIT_ASSERT(pOperator->
getChild() != NULL);
383 CPPUNIT_ASSERT(pOperator->
getChild()->getSibling() != NULL);
387 CPPUNIT_ASSERT(pNumberNode != NULL);
388 CPPUNIT_ASSERT(fabs((pNumberNode->
getValue() - 2.0) / 2.0) < 1e-6);
389 CPPUNIT_ASSERT(pNumberNode->
getSibling() == NULL);
391 CPPUNIT_ASSERT(pEvalNode != NULL);
394 CPPUNIT_ASSERT(pOperator != NULL);
396 CPPUNIT_ASSERT(pOperator->
getChild() != NULL);
397 CPPUNIT_ASSERT(pOperator->
getChild()->getSibling() != NULL);
401 CPPUNIT_ASSERT(pObjectNode != NULL);
402 CPPUNIT_ASSERT(pObjectNode->
getSibling() == NULL);
406 CPPUNIT_ASSERT(!objectCN.empty());
407 std::vector<CCopasiContainer*> listOfContainers;
408 listOfContainers.push_back(const_cast<CModel*>(pCModel));
410 CPPUNIT_ASSERT(pObject != NULL);
412 CPPUNIT_ASSERT(pObject->
getObjectName() == std::string(
"InitialVolume"));
416 CPPUNIT_ASSERT(pEvalNode != NULL);
421 CPPUNIT_ASSERT(pEvalNode != NULL);
424 CPPUNIT_ASSERT(pObjectNode != NULL);
428 CPPUNIT_ASSERT(!objectCN.empty());
430 CPPUNIT_ASSERT(pObject != NULL);
431 CPPUNIT_ASSERT(pObject->isReference() ==
true);
432 CPPUNIT_ASSERT(pObject->getObjectName() == std::string(
"InitialParticleNumber"));
433 CPPUNIT_ASSERT(pObject->getObjectParent() == pMetabS);
435 CPPUNIT_ASSERT(pEvalNode != NULL);
438 CPPUNIT_ASSERT(pObjectNode != NULL);
442 CPPUNIT_ASSERT(!objectCN.empty());
444 CPPUNIT_ASSERT(pObject != NULL);
445 CPPUNIT_ASSERT(pObject->isReference() ==
true);
446 CPPUNIT_ASSERT(pObject->getObjectName() == std::string(
"InitialValue"));
452 CPPUNIT_ASSERT(pExpr != NULL);
453 pEvalNode = pExpr->getRoot();
454 CPPUNIT_ASSERT(pEvalNode != NULL);
458 CPPUNIT_ASSERT(pOperator != NULL);
459 CPPUNIT_ASSERT(pOperator->
getChild() != NULL);
461 CPPUNIT_ASSERT(pEvalNode != NULL);
465 if (fabs((pNumberNode->
getValue() - 12.0) / 12.0) < 1e-6)
467 CPPUNIT_ASSERT(pNumberNode->
getSibling() != NULL);
469 CPPUNIT_ASSERT(pEvalNode != NULL);
472 CPPUNIT_ASSERT(fabs((pNumberNode->
getValue() - 6.0) / 6.0) < 1e-6);
473 CPPUNIT_ASSERT(pNumberNode->
getSibling() == NULL);
477 CPPUNIT_ASSERT(fabs((pNumberNode->
getValue() - 6.0) / 6.0) < 1e-6);
478 CPPUNIT_ASSERT(pNumberNode->
getSibling() != NULL);
480 CPPUNIT_ASSERT(pEvalNode != NULL);
483 CPPUNIT_ASSERT(fabs((pNumberNode->
getValue() - 12.0) / 12.0) < 1e-6);
484 CPPUNIT_ASSERT(pNumberNode->
getSibling() == NULL);
489 CPPUNIT_ASSERT(pExpr != NULL);
490 pEvalNode = pExpr->getRoot();
491 CPPUNIT_ASSERT(pEvalNode != NULL);
494 CPPUNIT_ASSERT(pOperator != NULL);
496 CPPUNIT_ASSERT(pOperator->
getChild() != NULL);
497 CPPUNIT_ASSERT(pOperator->
getChild()->getSibling() != NULL);
499 CPPUNIT_ASSERT(pEvalNode != NULL);
502 CPPUNIT_ASSERT(pNumberNode != NULL);
503 CPPUNIT_ASSERT(fabs((pNumberNode->
getValue() - 3.0) / 3.0) < 1e-6);
504 CPPUNIT_ASSERT(pNumberNode->
getSibling() == NULL);
507 CPPUNIT_ASSERT(pEvalNode != NULL);
510 CPPUNIT_ASSERT(pOperator != NULL);
512 CPPUNIT_ASSERT(pOperator->
getChild() != NULL);
513 CPPUNIT_ASSERT(pOperator->
getChild()->getSibling() != NULL);
515 CPPUNIT_ASSERT(pEvalNode != NULL);
518 CPPUNIT_ASSERT(pObjectNode != NULL);
522 CPPUNIT_ASSERT(!objectCN.empty());
524 CPPUNIT_ASSERT(pObject != NULL);
525 CPPUNIT_ASSERT(pObject->isReference() ==
true);
526 CPPUNIT_ASSERT(pObject->getObjectName() == std::string(
"Volume"));
527 CPPUNIT_ASSERT(pObject->getObjectParent() == pCCompartment);
528 CPPUNIT_ASSERT(pObjectNode->
getSibling() == NULL);
531 CPPUNIT_ASSERT(pEvalNode != NULL);
534 CPPUNIT_ASSERT(pOperator != NULL);
536 CPPUNIT_ASSERT(pOperator->
getChild() != NULL);
538 CPPUNIT_ASSERT(pEvalNode != NULL);
541 CPPUNIT_ASSERT(pObjectNode != NULL);
545 CPPUNIT_ASSERT(!objectCN.empty());
547 CPPUNIT_ASSERT(pObject != NULL);
548 CPPUNIT_ASSERT(pObject->isReference() ==
true);
549 CPPUNIT_ASSERT(pObject->getObjectName() == std::string(
"ParticleNumber"));
550 CPPUNIT_ASSERT(pObject->getObjectParent() == pMetabA);
552 CPPUNIT_ASSERT(pEvalNode != NULL);
555 CPPUNIT_ASSERT(pObjectNode != NULL);
559 CPPUNIT_ASSERT(!objectCN.empty());
561 CPPUNIT_ASSERT(pObject != NULL);
562 CPPUNIT_ASSERT(pObject->isReference() ==
true);
563 CPPUNIT_ASSERT(pObject->getObjectName() == std::string(
"Value"));
564 CPPUNIT_ASSERT(pObjectNode->
getSibling() == NULL);
576 CPPUNIT_ASSERT(content.empty() ==
false);
577 CPPUNIT_ASSERT(pDataModel->
getModel() != NULL);
579 CPPUNIT_ASSERT(pDocument != NULL);
580 Model* pModel = pDocument->getModel();
581 CPPUNIT_ASSERT(pModel != NULL);
584 CPPUNIT_ASSERT(pModel->getNumCompartments() == 1);
585 Compartment* pCompartment = pModel->getCompartment(0);
586 CPPUNIT_ASSERT(pCompartment->getConstant() ==
false);
587 CPPUNIT_ASSERT(pModel->getNumSpecies() == 2);
588 Species* pSpecies = pModel->getSpecies(1);
589 std::string idSpeciesS, idSpeciesA;
591 if (pSpecies->getName() ==
"S")
593 idSpeciesS = pSpecies->getId();
597 idSpeciesA = pSpecies->getId();
600 CPPUNIT_ASSERT(pSpecies->getHasOnlySubstanceUnits() ==
true);
601 pSpecies = pModel->getSpecies(0);
603 if (pSpecies->getName() ==
"S")
605 idSpeciesS = pSpecies->getId();
609 idSpeciesA = pSpecies->getId();
612 CPPUNIT_ASSERT(!idSpeciesS.empty());
613 CPPUNIT_ASSERT(!idSpeciesA.empty());
614 CPPUNIT_ASSERT(pSpecies->getHasOnlySubstanceUnits() ==
true);
615 CPPUNIT_ASSERT(pModel->getNumRules() == 1);
616 CPPUNIT_ASSERT(pModel->getNumInitialAssignments() == 2);
617 const InitialAssignment* pAssignment1 = pModel->getInitialAssignment(0);
618 CPPUNIT_ASSERT(pAssignment1 != NULL);
619 CPPUNIT_ASSERT(pModel->getNumParameters() == 1);
620 CPPUNIT_ASSERT(pModel->getNumEvents() == 1);
621 Parameter* pParameter = pModel->getParameter(0);
622 CPPUNIT_ASSERT(pParameter != NULL);
628 const InitialAssignment* pAssignment2 = NULL;
630 if (pAssignment1->getSymbol() == pParameter->getId())
632 pAssignment2 = pModel->getInitialAssignment(1);
636 pAssignment2 = pAssignment1;
637 pAssignment1 = pModel->getInitialAssignment(1);
640 assert(pAssignment2 != NULL);
643 const ASTNode* pMath = pAssignment1->getMath();
644 CPPUNIT_ASSERT(pMath != NULL);
645 CPPUNIT_ASSERT(pMath->getType() == AST_DIVIDE);
646 CPPUNIT_ASSERT(pMath->getNumChildren() == 2);
647 const ASTNode* pChild1 = pMath->getChild(0);
648 CPPUNIT_ASSERT(pChild1 != NULL);
649 const ASTNode* pChild2 = NULL;
652 if (pChild1->getType() == AST_DIVIDE)
654 pChild2 = pMath->getChild(1);
659 pChild1 = pMath->getChild(1);
662 CPPUNIT_ASSERT(pChild2 != NULL);
663 CPPUNIT_ASSERT(pChild1->getType() == AST_DIVIDE);
664 CPPUNIT_ASSERT(pChild2->getType() == AST_REAL);
665 CPPUNIT_ASSERT((fabs(pChild2->getReal() - 2.0) / 2.0) < 1e-9);
666 CPPUNIT_ASSERT(pChild1->getNumChildren() == 2);
667 pChild2 = pChild1->getChild(1);
668 CPPUNIT_ASSERT(pChild2 != NULL);
669 pChild1 = pChild1->getChild(0);
670 CPPUNIT_ASSERT(pChild1 != NULL);
671 CPPUNIT_ASSERT(pChild1->getType() == AST_NAME);
672 CPPUNIT_ASSERT(pChild2->getType() == AST_NAME);
673 CPPUNIT_ASSERT(pChild1->getName() == idSpeciesS);
674 CPPUNIT_ASSERT(pChild2->getName() == pCompartment->getId());
677 pMath = pAssignment2->getMath();
678 CPPUNIT_ASSERT(pMath->getNumChildren() == 2);
679 CPPUNIT_ASSERT(pMath->getType() == AST_TIMES);
680 pChild1 = pMath->getChild(0);
681 CPPUNIT_ASSERT(pChild1 != NULL);
683 if (pChild1->getType() == AST_PLUS)
685 pChild2 = pMath->getChild(1);
690 pChild1 = pMath->getChild(1);
693 CPPUNIT_ASSERT(pChild2 != NULL);
694 CPPUNIT_ASSERT(pChild1->getType() == AST_PLUS);
695 CPPUNIT_ASSERT(pChild2->getType() == AST_NAME);
696 CPPUNIT_ASSERT(pChild2->getName() == pCompartment->getId());
697 CPPUNIT_ASSERT(pChild1->getNumChildren() == 2);
698 pChild2 = pChild1->getChild(0);
699 pChild1 = pChild1->getChild(1);
700 CPPUNIT_ASSERT(pChild2->getType() == AST_REAL);
702 if ((fabs(pChild2->getReal() - 12.0) / 12.0) < 1e-9)
704 CPPUNIT_ASSERT((fabs(pChild1->getReal() - 6.0) / 6.0) < 1e-9);
708 CPPUNIT_ASSERT((fabs(pChild2->getReal() - 6.0) / 6.0) < 1e-9);
709 CPPUNIT_ASSERT((fabs(pChild1->getReal() - 12.0) / 12.0) < 1e-9);
713 const Rule* pRule1 = pModel->getRule(0);
714 CPPUNIT_ASSERT(pRule1 != NULL);
715 const AssignmentRule* pARule1 =
dynamic_cast<const AssignmentRule*
>(pRule1);
716 CPPUNIT_ASSERT(pARule1 != NULL);
721 pMath = pARule1->getMath();
722 CPPUNIT_ASSERT(pMath != NULL);
723 CPPUNIT_ASSERT(pMath->getType() == AST_TIMES);
724 CPPUNIT_ASSERT(pMath->getNumChildren() == 2);
725 pChild1 = pMath->getChild(0);
726 CPPUNIT_ASSERT(pChild1 != NULL);
728 if (pChild1->getType() == AST_NAME)
730 pChild2 = pMath->getChild(1);
735 pChild1 = pMath->getChild(1);
738 CPPUNIT_ASSERT(pChild1 != NULL);
739 CPPUNIT_ASSERT(pChild2 != NULL);
740 CPPUNIT_ASSERT(pChild1->getType() == AST_NAME);
741 CPPUNIT_ASSERT(pChild1->getName() == pCompartment->getId());
742 CPPUNIT_ASSERT(pChild2->getType() == AST_TIMES);
743 CPPUNIT_ASSERT(pChild2->getNumChildren() == 2);
744 pChild1 = pChild2->getChild(0);
746 if (pChild1->getType() == AST_REAL)
748 pChild2 = pChild2->getChild(1);
755 pChild1 = pMath->getChild(1);
758 CPPUNIT_ASSERT(pChild1 != NULL);
759 CPPUNIT_ASSERT(pChild2 != NULL);
760 CPPUNIT_ASSERT(pChild1->getType() == AST_REAL);
761 CPPUNIT_ASSERT((fabs(pChild1->getReal() - 3.0) / 3.0) < 1e-9);
762 CPPUNIT_ASSERT(pChild2->getType() == AST_DIVIDE);
763 CPPUNIT_ASSERT(pChild2->getNumChildren() == 2);
764 pChild1 = pChild2->getChild(0);
765 pChild2 = pChild2->getChild(1);
766 CPPUNIT_ASSERT(pChild1 != NULL);
767 CPPUNIT_ASSERT(pChild1->getType() == AST_NAME);
768 CPPUNIT_ASSERT(pChild1->getName() == idSpeciesA);
769 CPPUNIT_ASSERT(pChild2 != NULL);
770 CPPUNIT_ASSERT(pChild2->getType() == AST_NAME);
771 CPPUNIT_ASSERT(pChild2->getName() == pCompartment->getId());
777 CPPUNIT_ASSERT(result ==
true);
786 CPPUNIT_ASSERT(pCCompartment != NULL);
790 CPPUNIT_ASSERT(pMetabA != NULL);
792 const CMetab* pMetabS = NULL;
794 if (pMetabA->getObjectName() ==
"A")
802 CPPUNIT_ASSERT(pMetabA != NULL);
805 CPPUNIT_ASSERT(pMetabS != NULL);
806 CPPUNIT_ASSERT(pMetabA->getObjectName() ==
"A");
813 for (
unsigned int i = 0; i < iMax; ++i)
822 CPPUNIT_ASSERT(pModelValue != NULL);
824 const CExpression* pExpr = pModelValue->getInitialExpressionPtr();
825 CPPUNIT_ASSERT(pExpr != NULL);
827 CPPUNIT_ASSERT(pEvalNode != NULL);
830 CPPUNIT_ASSERT(pOperator != NULL);
832 CPPUNIT_ASSERT(pOperator->
getChild() != NULL);
833 CPPUNIT_ASSERT(pOperator->
getChild()->getSibling() != NULL);
837 CPPUNIT_ASSERT(pNumberNode != NULL);
838 CPPUNIT_ASSERT(fabs((pNumberNode->
getValue() - 2.0) / 2.0) < 1e-6);
839 CPPUNIT_ASSERT(pNumberNode->
getSibling() == NULL);
841 CPPUNIT_ASSERT(pEvalNode != NULL);
844 CPPUNIT_ASSERT(pOperator != NULL);
846 CPPUNIT_ASSERT(pOperator->
getChild() != NULL);
847 CPPUNIT_ASSERT(pOperator->
getChild()->getSibling() != NULL);
851 CPPUNIT_ASSERT(pObjectNode != NULL);
852 CPPUNIT_ASSERT(pObjectNode->
getSibling() == NULL);
856 CPPUNIT_ASSERT(!objectCN.empty());
857 std::vector<CCopasiContainer*> listOfContainers;
858 listOfContainers.push_back(const_cast<CModel*>(pCModel));
860 CPPUNIT_ASSERT(pObject != NULL);
862 CPPUNIT_ASSERT(pObject->
getObjectName() == std::string(
"InitialVolume"));
866 CPPUNIT_ASSERT(pEvalNode != NULL);
871 CPPUNIT_ASSERT(pEvalNode != NULL);
874 CPPUNIT_ASSERT(pObjectNode != NULL);
878 CPPUNIT_ASSERT(!objectCN.empty());
880 CPPUNIT_ASSERT(pObject != NULL);
881 CPPUNIT_ASSERT(pObject->isReference() ==
true);
882 CPPUNIT_ASSERT(pObject->getObjectName() == std::string(
"InitialParticleNumber"));
883 CPPUNIT_ASSERT(pObject->getObjectParent() == pMetabS);
885 CPPUNIT_ASSERT(pEvalNode != NULL);
888 CPPUNIT_ASSERT(pObjectNode != NULL);
892 CPPUNIT_ASSERT(!objectCN.empty());
894 CPPUNIT_ASSERT(pObject != NULL);
895 CPPUNIT_ASSERT(pObject->isReference() ==
true);
896 CPPUNIT_ASSERT(pObject->getObjectName() == std::string(
"InitialValue"));
901 pExpr = pMetabA->getInitialExpressionPtr();
902 CPPUNIT_ASSERT(pExpr != NULL);
903 pEvalNode = pExpr->getRoot();
904 CPPUNIT_ASSERT(pEvalNode != NULL);
908 CPPUNIT_ASSERT(pOperator != NULL);
909 CPPUNIT_ASSERT(pOperator->
getChild() != NULL);
911 CPPUNIT_ASSERT(pEvalNode != NULL);
915 if (fabs((pNumberNode->
getValue() - 12.0) / 12.0) < 1e-6)
917 CPPUNIT_ASSERT(pNumberNode->
getSibling() != NULL);
919 CPPUNIT_ASSERT(pEvalNode != NULL);
922 CPPUNIT_ASSERT(fabs((pNumberNode->
getValue() - 6.0) / 6.0) < 1e-6);
923 CPPUNIT_ASSERT(pNumberNode->
getSibling() == NULL);
927 CPPUNIT_ASSERT(fabs((pNumberNode->
getValue() - 6.0) / 6.0) < 1e-6);
928 CPPUNIT_ASSERT(pNumberNode->
getSibling() != NULL);
930 CPPUNIT_ASSERT(pEvalNode != NULL);
933 CPPUNIT_ASSERT(fabs((pNumberNode->
getValue() - 12.0) / 12.0) < 1e-6);
934 CPPUNIT_ASSERT(pNumberNode->
getSibling() == NULL);
939 CPPUNIT_ASSERT(pExpr != NULL);
940 pEvalNode = pExpr->getRoot();
941 CPPUNIT_ASSERT(pEvalNode != NULL);
944 CPPUNIT_ASSERT(pOperator != NULL);
946 CPPUNIT_ASSERT(pOperator->
getChild() != NULL);
947 CPPUNIT_ASSERT(pOperator->
getChild()->getSibling() != NULL);
949 CPPUNIT_ASSERT(pEvalNode != NULL);
952 CPPUNIT_ASSERT(pNumberNode != NULL);
953 CPPUNIT_ASSERT(fabs((pNumberNode->
getValue() - 3.0) / 3.0) < 1e-6);
954 CPPUNIT_ASSERT(pNumberNode->
getSibling() == NULL);
957 CPPUNIT_ASSERT(pEvalNode != NULL);
960 CPPUNIT_ASSERT(pOperator != NULL);
962 CPPUNIT_ASSERT(pOperator->
getChild() != NULL);
963 CPPUNIT_ASSERT(pOperator->
getChild()->getSibling() != NULL);
965 CPPUNIT_ASSERT(pEvalNode != NULL);
968 CPPUNIT_ASSERT(pObjectNode != NULL);
972 CPPUNIT_ASSERT(!objectCN.empty());
974 CPPUNIT_ASSERT(pObject != NULL);
975 CPPUNIT_ASSERT(pObject->isReference() ==
true);
976 CPPUNIT_ASSERT(pObject->getObjectName() == std::string(
"Volume"));
977 CPPUNIT_ASSERT(pObject->getObjectParent() == pCCompartment);
978 CPPUNIT_ASSERT(pObjectNode->
getSibling() == NULL);
981 CPPUNIT_ASSERT(pEvalNode != NULL);
984 CPPUNIT_ASSERT(pOperator != NULL);
986 CPPUNIT_ASSERT(pOperator->
getChild() != NULL);
988 CPPUNIT_ASSERT(pEvalNode != NULL);
991 CPPUNIT_ASSERT(pObjectNode != NULL);
995 CPPUNIT_ASSERT(!objectCN.empty());
997 CPPUNIT_ASSERT(pObject != NULL);
998 CPPUNIT_ASSERT(pObject->isReference() ==
true);
999 CPPUNIT_ASSERT(pObject->getObjectName() == std::string(
"ParticleNumber"));
1000 CPPUNIT_ASSERT(pObject->getObjectParent() == pMetabA);
1002 CPPUNIT_ASSERT(pEvalNode != NULL);
1005 CPPUNIT_ASSERT(pObjectNode != NULL);
1009 CPPUNIT_ASSERT(!objectCN.empty());
1010 pObject = pDataModel->
ObjectFromName(listOfContainers, objectCN);
1011 CPPUNIT_ASSERT(pObject != NULL);
1012 CPPUNIT_ASSERT(pObject->isReference() ==
true);
1013 CPPUNIT_ASSERT(pObject->getObjectName() == std::string(
"Value"));
1014 CPPUNIT_ASSERT(pObjectNode->
getSibling() == NULL);
1018 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1019 "<!-- generated with COPASI 4.6.34 (Debug) (http://www.copasi.org) at 2010-11-02 12:24:37 UTC -->\n"
1020 "<?oxygen RNGSchema=\"http://www.copasi.org/static/schema/CopasiML.rng\" type=\"xml\"?>\n"
1021 "<COPASI xmlns=\"http://www.copasi.org/static/schema\" versionMajor=\"1\" versionMinor=\"0\" versionDevel=\"34\">\n"
1022 " <Model key=\"Model_1\" name=\"New Model\" simulationType=\"time\" timeUnit=\"s\" volumeUnit=\"ml\" areaUnit=\"m²\" lengthUnit=\"m\" quantityUnit=\"µmol\" type=\"deterministic\" avogadroConstant=\"6.02214e+23\">\n"
1023 " <MiriamAnnotation>\n"
1025 " xmlns:dcterms=\"http://purl.org/dc/terms/\"\n"
1026 " xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n"
1027 " <rdf:Description rdf:about=\"#Model_1\">\n"
1028 " <dcterms:created>\n"
1029 " <rdf:Description>\n"
1030 " <dcterms:W3CDTF>2010-11-02T13:22:15Z</dcterms:W3CDTF>\n"
1031 " </rdf:Description>\n"
1032 " </dcterms:created>\n"
1033 " </rdf:Description>\n"
1036 " </MiriamAnnotation>\n"
1038 " <html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta name=\"qrichtext\" content=\"1\" /></head><body style=\"font-size:13pt;font-family:Lucida Grande\">\n"
1039 "<p>Model with variable volume compartment, micromol quantity units and a reference to the species initial amount.</p>\n"
1040 "<p>On export this should create an SBML file with the hasOnlySubstanceUnits flag on the species set.</p>\n"
1041 "<p>Assignments and initial assignment expressions to species should be multiplied by the compartment volume on export and references to species in expressions should be divided by the volume.</p>\n"
1042 "<p>On reimport these modifications should be reversed.</p>\n"
1045 " <ListOfCompartments>\n"
1046 " <Compartment key=\"Compartment_0\" name=\"compartment\" simulationType=\"assignment\" dimensionality=\"3\">\n"
1051 " </ListOfCompartments>\n"
1052 " <ListOfMetabolites>\n"
1053 " <Metabolite key=\"Metabolite_0\" name=\"A\" simulationType=\"reactions\" compartment=\"Compartment_0\">\n"
1054 " <InitialExpression>\n"
1056 " </InitialExpression>\n"
1058 " <Metabolite key=\"Metabolite_1\" name=\"S\" simulationType=\"assignment\" compartment=\"Compartment_0\">\n"
1060 " <CN=Root,Model=New Model,Vector=Compartments[compartment],Vector=Metabolites[A],Reference=Concentration>*3\n"
1063 " </ListOfMetabolites>\n"
1064 " <ListOfModelValues>\n"
1065 " <ModelValue key=\"ModelValue_0\" name=\"K\" simulationType=\"fixed\">\n"
1066 " <InitialExpression>\n"
1067 " <CN=Root,Model=New Model,Vector=Compartments[compartment],Vector=Metabolites[S],Reference=InitialConcentration>/2.0\n"
1068 " </InitialExpression>\n"
1070 " </ListOfModelValues>\n"
1071 " <StateTemplate>\n"
1072 " <StateTemplateVariable objectReference=\"Model_1\"/>\n"
1073 " <StateTemplateVariable objectReference=\"Metabolite_1\"/>\n"
1074 " <StateTemplateVariable objectReference=\"Compartment_0\"/>\n"
1075 " <StateTemplateVariable objectReference=\"Metabolite_0\"/>\n"
1076 " <StateTemplateVariable objectReference=\"ModelValue_0\"/>\n"
1077 " </StateTemplate>\n"
1078 " <InitialState type=\"initialState\">\n"
1079 " 0 4.215499050000001e+17 7 0 0 \n"
1080 " </InitialState>\n"
1086 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1087 "<!-- generated with COPASI 4.6.34 (Debug) (http://www.copasi.org) at 2010-11-02 12:29:26 UTC -->\n"
1088 "<?oxygen RNGSchema=\"http://www.copasi.org/static/schema/CopasiML.rng\" type=\"xml\"?>\n"
1089 "<COPASI xmlns=\"http://www.copasi.org/static/schema\" versionMajor=\"1\" versionMinor=\"0\" versionDevel=\"34\">\n"
1090 " <Model key=\"Model_1\" name=\"New Model\" simulationType=\"time\" timeUnit=\"s\" volumeUnit=\"ml\" areaUnit=\"m²\" lengthUnit=\"m\" quantityUnit=\"µmol\" type=\"deterministic\" avogadroConstant=\"6.02214e+23\">\n"
1092 " <html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta name=\"qrichtext\" content=\"1\" /></head><body style=\"font-size:13pt;font-family:Lucida Grande\">\n"
1093 "<p>Model with variable volume compartment, micromol quantity units and a reference to the species initial amount.</p>\n"
1094 "<p>This time the volume is variable because there is an event assignment to it.</p>\n"
1095 "<p>On export this should create an SBML file with the hasOnlySubstanceUnits flag on the species set.</p>\n"
1096 "<p>Assignments and initial assignment expressions to species should be multiplied by the compartment volume on export and references to species in expressions should be divided by the volume.</p>\n"
1097 "<p>On reimport these modifications should be reversed.</p>\n"
1100 " <ListOfCompartments>\n"
1101 " <Compartment key=\"Compartment_0\" name=\"compartment\" simulationType=\"fixed\" dimensionality=\"3\">\n"
1103 " </ListOfCompartments>\n"
1104 " <ListOfMetabolites>\n"
1105 " <Metabolite key=\"Metabolite_0\" name=\"A\" simulationType=\"reactions\" compartment=\"Compartment_0\">\n"
1106 " <InitialExpression>\n"
1108 " </InitialExpression>\n"
1110 " <Metabolite key=\"Metabolite_1\" name=\"S\" simulationType=\"assignment\" compartment=\"Compartment_0\">\n"
1112 " <CN=Root,Model=New Model,Vector=Compartments[compartment],Vector=Metabolites[A],Reference=Concentration>*3\n"
1115 " </ListOfMetabolites>\n"
1116 " <ListOfModelValues>\n"
1117 " <ModelValue key=\"ModelValue_0\" name=\"K\" simulationType=\"fixed\">\n"
1118 " <InitialExpression>\n"
1119 " <CN=Root,Model=New Model,Vector=Compartments[compartment],Vector=Metabolites[S],Reference=InitialConcentration>/2.0\n"
1120 " </InitialExpression>\n"
1122 " </ListOfModelValues>\n"
1124 " <Event key=\"Event_0\" name=\"event_1\" order=\"1\">\n"
1125 " <TriggerExpression>\n"
1126 " <CN=Root,Model=New Model,Reference=Time> gt 3.0\n"
1127 " </TriggerExpression>\n"
1128 " <ListOfAssignments>\n"
1129 " <Assignment targetKey=\"Metabolite_0\">\n"
1134 " <Assignment targetKey=\"Compartment_0\">\n"
1139 " </ListOfAssignments>\n"
1141 " </ListOfEvents>\n"
1142 " <StateTemplate>\n"
1143 " <StateTemplateVariable objectReference=\"Model_1\"/>\n"
1144 " <StateTemplateVariable objectReference=\"Metabolite_1\"/>\n"
1145 " <StateTemplateVariable objectReference=\"Metabolite_0\"/>\n"
1146 " <StateTemplateVariable objectReference=\"ModelValue_0\"/>\n"
1147 " <StateTemplateVariable objectReference=\"Compartment_0\"/>\n"
1148 " </StateTemplate>\n"
1149 " <InitialState type=\"initialState\">\n"
1150 " 0 4.215499050000001e+17 7.5878986554e+19 0 7 \n"
1151 " </InitialState>\n"
const CExpression * getExpressionPtr() const
Header file of class CExpression.
SBMLDocument * getCurrentSBMLDocument()
Header file of class CModelEntity and CModelValue.
CCopasiNode< Data > * getSibling()
CCopasiVectorN< CEvent > & getEvents()
const CCopasiVector< CMetab > & getMetabolites() const
const std::string & getObjectName() const
const CCopasiVectorN< CModelValue > & getModelValues() const
std::string exportSBMLToString(CProcessReport *pExportHandler, int sbmlLevel, int sbmlVersion)
virtual size_t size() const
const CRegisteredObjectName & getObjectCN() const
const C_FLOAT64 & getValue() const
bool newModel(CProcessReport *pProcessReport, const bool &deleteOldData)
static CCopasiDataModel * pCOPASIDATAMODEL
const Type & getType() const
static const char * MODEL_STRING_1
static const char * MODEL_STRING_2
bool load_cps_model_from_stream(std::istream &is, CCopasiDataModel &dataModel)
static Type type(const Type &type)
static CCopasiDataModel * addDatamodel()
CCopasiVectorNS< CCompartment > & getCompartments()
static Type subType(const Type &type)
bool importSBMLFromString(const std::string &sbmlDocumentText, CProcessReport *pImportHandler=NULL, const bool &deleteOldData=true)
CCopasiVectorNS< CReaction > & getReactions()
static void init(int argc, char *argv[], const bool &withGui=false)
Header file of class CEvent.
const CModelEntity::Status & getStatus() const
CCopasiNode< Data > * getChild()
CCopasiObject * ObjectFromName(const std::vector< CCopasiContainer * > &listOfContainer, const CCopasiObjectName &CN) const
CCopasiContainer * getObjectParent() const
const CExpression * getInitialExpressionPtr() const