END_TEST /** * setMathFromFormula() is no longer necessary. LibSBML now keeps formula * strings and math ASTs synchronized automatically. This (now modified) * test is kept around to demonstrate the behavioral change. */ START_TEST (test_KineticLaw_setMathFromFormula) { const char *initial_formula = "k3 / k2"; char* formula; fail_unless( !KineticLaw_isSetMath (kl) ); fail_unless( !KineticLaw_isSetFormula(kl) ); KineticLaw_setFormula(kl, initial_formula); fail_unless( KineticLaw_isSetMath (kl) ); fail_unless( KineticLaw_isSetFormula(kl) ); formula = SBML_formulaToString( KineticLaw_getMath(kl) ); fail_unless( !strcmp(formula, initial_formula) ); safe_free(formula); }
END_TEST START_TEST (test_KineticLaw_setMath1) { ASTNode_t *math = ASTNode_createWithType(AST_TIMES); ASTNode_t *a = ASTNode_create(); ASTNode_t *b = ASTNode_create(); ASTNode_setName(a, "a"); ASTNode_setName(b, "b"); ASTNode_addChild(math, a); ASTNode_addChild(math, b); char *formula; const ASTNode_t *math1; int i = KineticLaw_setMath(kl, math); fail_unless( i == LIBSBML_OPERATION_SUCCESS); fail_unless( KineticLaw_isSetMath(kl) ); math1 = KineticLaw_getMath(kl); fail_unless( math1 != NULL ); formula = SBML_formulaToString(math1); fail_unless( formula != NULL ); fail_unless( !strcmp(formula, "a * b") ); ASTNode_free(math); }
END_TEST START_TEST (test_KineticLaw_setMath) { ASTNode_t *math = SBML_parseFormula("k3 / k2"); char *formula; const ASTNode_t *math1; KineticLaw_setMath(kl, math); math1 = KineticLaw_getMath(kl); fail_unless( math1 != NULL ); formula = SBML_formulaToString(math1); fail_unless( formula != NULL ); fail_unless( !strcmp(formula, "k3 / k2") ); fail_unless( KineticLaw_getMath(kl) != math ); fail_unless( KineticLaw_isSetMath(kl) ); safe_free(formula); /* Reflexive case (pathological) */ KineticLaw_setMath(kl, (ASTNode_t *) KineticLaw_getMath(kl)); math1 = KineticLaw_getMath(kl); fail_unless( math1 != NULL ); formula = SBML_formulaToString(math1); fail_unless( formula != NULL ); fail_unless( !strcmp(formula, "k3 / k2") ); fail_unless( KineticLaw_getMath(kl) != math ); safe_free(formula); KineticLaw_setMath(kl, NULL); fail_unless( !KineticLaw_isSetMath(kl) ); if (KineticLaw_getMath(kl) != NULL) { fail( "KineticLaw_setMath(kl, NULL) did not clear ASTNode." ); } ASTNode_free(math); }
END_TEST START_TEST (test_KineticLaw_setMath3) { int i = KineticLaw_setMath(kl, NULL); fail_unless( i == LIBSBML_OPERATION_SUCCESS); fail_unless( !KineticLaw_isSetMath(kl) ); }
END_TEST START_TEST (test_KineticLaw_setBadFormula) { const char *formula = "k1 X0"; KineticLaw_setFormula(kl, formula); fail_unless( !KineticLaw_isSetFormula(kl) ); fail_unless( !KineticLaw_isSetMath(kl) ); }
END_TEST /** * setFormulaFromMath() is no longer necessary. LibSBML now keeps formula * strings and math ASTs synchronized automatically. This (now modified) * test is kept around to demonstrate the behavioral change. */ START_TEST (test_KineticLaw_setFormulaFromMath) { ASTNode_t *math = SBML_parseFormula("k1 * X0"); fail_unless( !KineticLaw_isSetMath (kl) ); fail_unless( !KineticLaw_isSetFormula(kl) ); KineticLaw_setMath(kl, math); fail_unless( KineticLaw_isSetMath(kl) ); fail_unless( KineticLaw_isSetFormula(kl) ); fail_unless( !strcmp(KineticLaw_getFormula(kl), "k1 * X0") ); ASTNode_free(math); }
END_TEST START_TEST (test_KineticLaw_setMath2) { ASTNode_t *math = ASTNode_createWithType(AST_TIMES); ASTNode_t *a = ASTNode_create(); ASTNode_setName(a, "a"); ASTNode_addChild(math, a); int i = KineticLaw_setMath(kl, math); fail_unless( i == LIBSBML_INVALID_OBJECT); fail_unless( !KineticLaw_isSetMath(kl) ); ASTNode_free(math); }
void printReactionMath (unsigned int n, Reaction_t *r) { char *formula; KineticLaw_t *kl; if (Reaction_isSetKineticLaw(r)) { kl = Reaction_getKineticLaw(r); if ( KineticLaw_isSetMath(kl) ) { formula = SBML_formulaToString( KineticLaw_getMath(kl) ); printf("Reaction %d, formula: %s\n", n, formula); free(formula); } } }
void printReactionMath (unsigned int n, Reaction_t *r) { char *formula; KineticLaw_t *kl; if (Reaction_isSetKineticLaw(r)) { kl = Reaction_getKineticLaw(r); if ( KineticLaw_isSetMath(kl) ) { formula = SBML_formulaToDot( KineticLaw_getMath(kl) ); fprintf(fout, "subgraph cluster%u {\n", noClusters); fprintf(fout, "label=\"Reaction: %s\";\n%s\n", Reaction_getId(r), formula); free(formula); noClusters++; } } }