void myInitialAssignment_initTargetSpeciesReference( myInitialAssignment *assign, myReaction **reactions, unsigned int num_of_reactions) { unsigned int i, j; InitialAssignment_t *origin; myReaction *re; mySpeciesReference *product, *reactant; const char *origin_symbol; origin = myInitialAssignment_getOrigin(assign); origin_symbol = InitialAssignment_getSymbol(origin); for (i = 0; i < num_of_reactions; i++) { re = reactions[i]; for (j = 0; j < re->num_of_products; j++) { product = re->products[j]; if (SpeciesReference_isSetId(product->origin) && strcmp(origin_symbol, SpeciesReference_getId(product->origin)) == 0) { myInitialAssignment_setTargetSpeciesReference(assign, product); return; } } for (j = 0; j < re->num_of_reactants; j++) { reactant = re->reactants[j]; if (SpeciesReference_isSetId(reactant->origin) && strcmp(origin_symbol, SpeciesReference_getId(reactant->origin)) == 0) { myInitialAssignment_setTargetSpeciesReference(assign, reactant); return; } } } }
END_TEST START_TEST (test_SpeciesReference_setId) { const char *species = "X0"; SpeciesReference_setId(SR, species); fail_unless( !strcmp(SpeciesReference_getId(SR), species) ); fail_unless( SpeciesReference_isSetId(SR) ); if (SpeciesReference_getId(SR) == species) { fail("SpeciesReference_setId(...) did not make a copy of string."); } /* Reflexive case (pathological) */ SpeciesReference_setId(SR, SpeciesReference_getId(SR)); fail_unless( !strcmp(SpeciesReference_getId(SR), species) ); SpeciesReference_setId(SR, NULL); fail_unless( !SpeciesReference_isSetId(SR) ); if (SpeciesReference_getId(SR) != NULL) { fail("SpeciesReference_setId(SR, NULL) did not clear string."); } }
END_TEST START_TEST (test_Reaction_addProductBySpecies) { Species_t *s = Species_create(2, 4); Species_setId(s, "s"); Reaction_addProductBySpecies(R, s, 2.0, "sr", 0); fail_unless( Reaction_getNumReactants(R) == 0 ); fail_unless( Reaction_getNumProducts (R) == 1 ); fail_unless( Reaction_getNumModifiers(R) == 0 ); SpeciesReference_t *sr = Reaction_getProduct(R, 0); fail_unless(!strcmp(SpeciesReference_getSpecies(sr), "s")); fail_unless(util_isEqual(SpeciesReference_getStoichiometry(sr), 2.0) == 1); fail_unless(!strcmp(SpeciesReference_getId(sr), "sr")); fail_unless(SpeciesReference_getConstant(sr) == 0); fail_unless(Reaction_addProductBySpecies(R, s, 1.0, "sr", 0) == LIBSBML_DUPLICATE_OBJECT_ID); fail_unless( Reaction_getNumProducts (R) == 1 ); Species_free(s); }
END_TEST START_TEST (test_L3_SpeciesReference_id) { const char *id = "mitochondria"; fail_unless( !SpeciesReference_isSetId(SR) ); SpeciesReference_setId(SR, id); fail_unless( !strcmp(SpeciesReference_getId(SR), id) ); fail_unless( SpeciesReference_isSetId(SR) ); if (SpeciesReference_getId(SR) == id) { fail("SpeciesReference_setId(...) did not make a copy of string."); } }
END_TEST START_TEST (test_SpeciesReference_setId4) { int i = SpeciesReference_setId(sr, "cell"); fail_unless( i == LIBSBML_OPERATION_SUCCESS ); fail_unless( SpeciesReference_isSetId(sr) ); fail_unless( !strcmp(SpeciesReference_getId(sr), "cell" )); i = SpeciesReference_setId(sr, NULL); fail_unless( i == LIBSBML_OPERATION_SUCCESS ); fail_unless( !SpeciesReference_isSetId(sr) ); }
END_TEST START_TEST (test_L3_SpeciesReference_createWithNS ) { XMLNamespaces_t *xmlns = XMLNamespaces_create(); XMLNamespaces_add(xmlns, "http://www.sbml.org", "testsbml"); SBMLNamespaces_t *sbmlns = SBMLNamespaces_create(3,1); SBMLNamespaces_addNamespaces(sbmlns,xmlns); SpeciesReference_t *sr = SpeciesReference_createWithNS (sbmlns); fail_unless( SBase_getTypeCode ((SBase_t *) sr) == SBML_SPECIES_REFERENCE ); fail_unless( SBase_getMetaId ((SBase_t *) sr) == NULL ); fail_unless( SBase_getNotes ((SBase_t *) sr) == NULL ); fail_unless( SBase_getAnnotation((SBase_t *) sr) == NULL ); fail_unless( SBase_getLevel ((SBase_t *) sr) == 3 ); fail_unless( SBase_getVersion ((SBase_t *) sr) == 1 ); fail_unless( SpeciesReference_getNamespaces (sr) != NULL ); fail_unless( XMLNamespaces_getLength(SpeciesReference_getNamespaces(sr)) == 2 ); fail_unless( SpeciesReference_getId (sr) == NULL ); fail_unless( SpeciesReference_getName (sr) == NULL ); fail_unless( SpeciesReference_getSpecies (sr) == NULL ); fail_unless( util_isNaN(SpeciesReference_getStoichiometry (sr)) ); fail_unless( SpeciesReference_getConstant(sr) == 0 ); fail_unless( !SpeciesReference_isSetId (sr) ); fail_unless( !SpeciesReference_isSetName (sr) ); fail_unless( !SpeciesReference_isSetSpecies (sr) ); fail_unless( !SpeciesReference_isSetStoichiometry (sr) ); fail_unless( !SpeciesReference_isSetConstant(sr) ); SpeciesReference_free(sr); XMLNamespaces_free(xmlns); SBMLNamespaces_free(sbmlns); }
END_TEST START_TEST (test_SBMLConvert_convertToL3_stoichiometryMath) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(2, 1); Model_t *m = SBMLDocument_createModel(d); Compartment_t *c = Model_createCompartment(m); Compartment_setId ( c, "c" ); Species_t *s = Model_createSpecies(m); Species_setId(s, "s"); Species_setCompartment(s, "c"); Reaction_t * r = Model_createReaction(m); SpeciesReference_t *sr = Reaction_createReactant(r); SpeciesReference_setSpecies(sr, "s"); StoichiometryMath_t *sm = SpeciesReference_createStoichiometryMath(sr); ASTNode_t * ast = SBML_parseFormula("c*2"); StoichiometryMath_setMath(sm, ast); fail_unless(Model_getNumRules(m) == 0); fail_unless(SpeciesReference_isSetId(sr) == 0); fail_unless( SBMLDocument_setLevelAndVersionNonStrict(d, 3, 1) == 1); m = SBMLDocument_getModel(d); r = Model_getReaction(m, 0); sr = Reaction_getReactant(r, 0); fail_unless(Model_getNumRules(m) == 1); fail_unless(SpeciesReference_isSetId(sr) == 1); Rule_t *rule = Model_getRule(m, 0); fail_unless( strcmp(SpeciesReference_getId(sr), Rule_getVariable(rule)) == 0 ); SBMLDocument_free(d); }
END_TEST START_TEST (test_Reaction_addModifierBySpecies) { Species_t *s = Species_create(2, 4); Species_setId(s, "s"); Reaction_addModifierBySpecies(R, s, "sr"); fail_unless( Reaction_getNumReactants(R) == 0 ); fail_unless( Reaction_getNumProducts (R) == 0 ); fail_unless( Reaction_getNumModifiers(R) == 1 ); SpeciesReference_t *sr = Reaction_getModifier(R, 0); fail_unless(!strcmp(SpeciesReference_getSpecies(sr), "s")); fail_unless(!strcmp(SpeciesReference_getId(sr), "sr")); fail_unless(Reaction_addModifierBySpecies(R, s, "sr") == LIBSBML_DUPLICATE_OBJECT_ID); fail_unless( Reaction_getNumModifiers (R) == 1 ); Species_free(s); }
void myRule_initTarget( myRule *rule, mySpecies **species, unsigned int num_of_species, myParameter **parameters, unsigned int num_of_parameters, myCompartment **compartments, unsigned int num_of_compartments, myReaction **reactions, unsigned int num_of_reactions) { unsigned int i, j; Rule_t *origin; const char *origin_var; mySpecies *sp; myParameter *param; myCompartment *comp; myReaction *re; mySpeciesReference *product, *reactant; origin = myRule_getOrigin(rule); origin_var = Rule_getVariable(origin); for (i = 0; i < num_of_species; i++) { sp = species[i]; if (strcmp(origin_var, Species_getId(sp->origin)) == 0) { myRule_setTargetSpecies(rule, sp); mySpecies_setDependingRule(sp, rule); return; } } for (i = 0; i < num_of_parameters; i++) { param = parameters[i]; if (strcmp(origin_var, Parameter_getId(param->origin)) == 0) { myRule_setTargetParameter(rule, param); myParameter_setDependingRule(param, rule); return; } } for (i = 0; i < num_of_compartments; i++) { comp = compartments[i]; if (strcmp(origin_var, Compartment_getId(comp->origin)) == 0) { myRule_setTargetCompartment(rule, comp); myCompartment_setDependingRule(comp, rule); return; } } for (i=0; i < num_of_reactions; i++) { re = reactions[i]; for (j = 0; j < re->num_of_products; j++) { product = re->products[j]; if (SpeciesReference_isSetId(product->origin) && strcmp(origin_var, SpeciesReference_getId(product->origin)) == 0) { myRule_setTargetSpeciesReference(rule, product); mySpeciesReference_setDependingRule(product, rule); return; } } for (j = 0; j < re->num_of_reactants; j++) { reactant = re->reactants[j]; if (SpeciesReference_isSetId(reactant->origin) && strcmp(origin_var, SpeciesReference_getId(reactant->origin)) == 0) { myRule_setTargetSpeciesReference(rule, reactant); mySpeciesReference_setDependingRule(reactant, rule); return; } } } }