END_TEST START_TEST (test_ListOf_append) { Model_t *m = Model_create(2, 4); Model_createCompartment(m); ListOf_t *loc = Model_getListOfCompartments(m); fail_unless(ListOf_size(loc) == 1); SBase_t *c = (SBase_t*)Compartment_create(2, 4); int i = ListOf_append(loc, c); fail_unless(i == LIBSBML_OPERATION_SUCCESS); fail_unless(ListOf_size(loc) == 2); SBase_t *sp = (SBase_t*)Species_create(2, 4); i = ListOf_append(loc, sp); fail_unless(i == LIBSBML_INVALID_OBJECT); fail_unless(ListOf_size(loc) == 2); Model_free(m); Species_free((Species_t*)sp); }
END_TEST START_TEST (test_SBMLDocument_setLevelAndVersion_Error) { SBMLDocument_t *d = SBMLDocument_create(); SBMLDocument_setLevelAndVersion(d, 2, 1); Model_t *m1 = Model_create(2, 1); /* add unitDefinition */ Unit_t * u = Unit_create(2, 1); Unit_setKind(u, UnitKind_forName("mole")); Unit_setOffset(u, 3.2); UnitDefinition_t *ud = UnitDefinition_create(2, 1); UnitDefinition_setId(ud, "ud"); UnitDefinition_addUnit(ud, u); Model_addUnitDefinition(m1, ud); SBMLDocument_setModel(d, m1); fail_unless(SBMLDocument_setLevelAndVersionStrict(d,2,2) == 0); fail_unless(SBMLDocument_setLevelAndVersionStrict(d,2,3) == 0); fail_unless(SBMLDocument_setLevelAndVersionStrict(d,1,2) == 0); fail_unless(SBMLDocument_setLevelAndVersionStrict(d,1,1) == 0); SBMLDocument_free(d); Model_free(m1); Unit_free(u); UnitDefinition_free(ud); }
END_TEST START_TEST (test_L3_Model_free_NULL) { Model_free(NULL); }
END_TEST START_TEST (test_SBMLDocument_setModel) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(2, 4); Model_t *m1 = Model_create(2, 4); Model_t *m2 = Model_create(2, 4); Model_t *mout; fail_unless(SBMLDocument_getModel(d) == NULL); fail_unless( SBMLDocument_isSetModel(d) == 0 ); int i = SBMLDocument_setModel(d, m1); fail_unless ( i == LIBSBML_OPERATION_SUCCESS ); mout = SBMLDocument_getModel(d); fail_unless(mout != NULL); fail_unless(mout != m1); fail_unless( SBMLDocument_isSetModel(d) == 1 ); /* Reflexive case (pathological) */ i = SBMLDocument_setModel(d, SBMLDocument_getModel(d)); fail_unless ( i == LIBSBML_OPERATION_SUCCESS ); mout = SBMLDocument_getModel(d); fail_unless(mout != NULL); fail_unless(mout != m1); i = SBMLDocument_setModel(d, m2); fail_unless ( i == LIBSBML_OPERATION_SUCCESS ); mout = SBMLDocument_getModel(d); fail_unless(mout != NULL); fail_unless(mout != m2); SBMLDocument_free(d); Model_free(m1); Model_free(m2); }
END_TEST START_TEST (test_L3_Model_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); Model_t *m = Model_createWithNS (sbmlns); fail_unless( SBase_getTypeCode ((SBase_t *) m) == SBML_MODEL ); fail_unless( SBase_getMetaId ((SBase_t *) m) == NULL ); fail_unless( SBase_getNotes ((SBase_t *) m) == NULL ); fail_unless( SBase_getAnnotation((SBase_t *) m) == NULL ); fail_unless( SBase_getLevel ((SBase_t *) m) == 3 ); fail_unless( SBase_getVersion ((SBase_t *) m) == 1 ); fail_unless( Model_getNamespaces (m) != NULL ); fail_unless( XMLNamespaces_getLength(Model_getNamespaces(m)) == 2 ); fail_unless( Model_getId (m) == NULL ); fail_unless( Model_getName (m) == NULL ); fail_unless( Model_getSubstanceUnits(m) == NULL ); fail_unless( Model_getTimeUnits(m) == NULL ); fail_unless( Model_getVolumeUnits(m) == NULL ); fail_unless( Model_getAreaUnits(m) == NULL ); fail_unless( Model_getLengthUnits(m) == NULL ); fail_unless( Model_getConversionFactor(m) == NULL ); fail_unless( !Model_isSetId (m) ); fail_unless( !Model_isSetName (m) ); fail_unless( !Model_isSetSubstanceUnits(m) ); fail_unless( !Model_isSetTimeUnits(m) ); fail_unless( !Model_isSetVolumeUnits(m) ); fail_unless( !Model_isSetAreaUnits(m) ); fail_unless( !Model_isSetLengthUnits(m) ); fail_unless( !Model_isSetConversionFactor(m) ); Model_free(m); XMLNamespaces_free(xmlns); SBMLNamespaces_free(sbmlns); }
END_TEST START_TEST (test_SBMLDocument_setModel3) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(2, 2); Model_t *m1 = Model_create(2, 2); int i = SBMLDocument_setModel(d, m1); fail_unless ( i == LIBSBML_OPERATION_SUCCESS); fail_unless (SBMLDocument_getModel(d) != 0); SBMLDocument_free(d); Model_free(m1); }
END_TEST START_TEST (test_SBMLDocument_setModel1) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(2, 2); Model_t *m1 = Model_create(2, 1); int i = SBMLDocument_setModel(d, m1); fail_unless ( i == LIBSBML_VERSION_MISMATCH); fail_unless (SBMLDocument_getModel(d) == 0); SBMLDocument_free(d); Model_free(m1); }
END_TEST START_TEST (test_SBMLDocument_setLevelAndVersion) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(2, 2); Model_t *m1 = Model_create(2, 2); SBMLDocument_setModel(d, m1); fail_unless(SBMLDocument_setLevelAndVersionNonStrict(d,2,3) == 1); fail_unless(SBMLDocument_setLevelAndVersionNonStrict(d,2,1) == 1); fail_unless(SBMLDocument_setLevelAndVersionNonStrict(d,1,2) == 1); fail_unless(SBMLDocument_setLevelAndVersionNonStrict(d,1,1) == 0); SBMLDocument_free(d); Model_free(m1); }
END_TEST START_TEST (test_create_l1v1_units) { Model_t *m; Compartment_t *c; KineticLaw_t *kl; Parameter_t *p; Reaction_t *r; Species_t *s; SpeciesReference_t *sr; Unit_t *u; UnitDefinition_t *ud; /** * <sbml level="1" version="1"> */ m = Model_create(2, 4); /** * <unitDefinition name="substance"> * <listOfUnits> * <unit kind="mole" scale="-3"/> * </listOfUnits> * </unitDefinition> */ ud = Model_createUnitDefinition(m); UnitDefinition_setName(ud, "substance"); u = Model_createUnit(m); Unit_setKind(u,UNIT_KIND_MOLE); Unit_setScale(u, -3); /** * <unitDefinition name="mls"> * <listOfUnits> * <unit kind="mole" scale="-3"/> * <unit kind="liter" exponent="-1"/> * <unit kind="second" exponent="-1"/> * </listOfUnits> * </unitDefinition> */ ud = Model_createUnitDefinition(m); UnitDefinition_setName(ud, "mls"); u = Model_createUnit(m); Unit_setKind(u, UNIT_KIND_MOLE); Unit_setScale(u, -3); u = Model_createUnit(m); Unit_setKind(u, UNIT_KIND_LITER); Unit_setExponent(u, -1); u = Model_createUnit(m); Unit_setKind(u, UNIT_KIND_SECOND); Unit_setExponent(u, -1); /** * <listOfCompartments> * <compartment name="cell"/> * </listOfCompartments> */ c = Model_createCompartment(m); Compartment_setName(c, "cell"); /** * <listOfSpecies> * <specie name="x0" compartment="cell" initialAmount="1"/> * <specie name="x1" compartment="cell" initialAmount="1"/> * <specie name="s1" compartment="cell" initialAmount="1"/> * <specie name="s2" compartment="cell" initialAmount="1"/> * </listOfSpecies> */ s = Model_createSpecies(m); Species_setName(s, "x0"); Species_setCompartment(s, "cell"); Species_setInitialAmount(s, 1); s = Model_createSpecies(m); Species_setName(s, "x1"); Species_setCompartment(s, "cell"); Species_setInitialAmount(s, 1); s = Model_createSpecies(m); Species_setName(s, "s1"); Species_setCompartment(s, "cell"); Species_setInitialAmount(s, 1); s = Model_createSpecies(m); Species_setName(s, "s2"); Species_setCompartment(s, "cell"); Species_setInitialAmount(s, 1); /** * <listOfParameters> * <parameter name="vm" value="2" units="mls"/> * <parameter name="km" value="2"/> * </listOfParameters> */ p = Model_createParameter(m); Parameter_setName (p, "vm"); Parameter_setUnits(p, "mls"); Parameter_setValue(p, 2); p = Model_createParameter(m); Parameter_setName (p, "km"); Parameter_setValue(p, 2); /** * <reaction name="v1"> * <listOfReactants> * <specieReference specie="x0"/> * </listOfReactants> * <listOfProducts> * <specieReference specie="s1"/> * </listOfProducts> * <kineticLaw formula="(vm * s1)/(km + s1)"/> * </reaction> */ r = Model_createReaction(m); Reaction_setName(r, "v1"); sr = Model_createReactant(m); SpeciesReference_setSpecies(sr, "x0"); sr = Model_createProduct(m); SpeciesReference_setSpecies(sr, "s1"); kl = Model_createKineticLaw(m); KineticLaw_setFormula(kl, "(vm * s1)/(km + s1)"); /** * <reaction name="v2"> * <listOfReactants> * <specieReference specie="s1"/> * </listOfReactants> * <listOfProducts> * <specieReference specie="s2"/> * </listOfProducts> * <kineticLaw formula="(vm * s2)/(km + s2)"/> * </reaction> */ r = Model_createReaction(m); Reaction_setName(r, "v2"); sr = Model_createReactant(m); SpeciesReference_setSpecies(sr, "s1"); sr = Model_createProduct(m); SpeciesReference_setSpecies(sr, "s2"); kl = Model_createKineticLaw(m); KineticLaw_setFormula(kl, "(vm * s2)/(km + s2)"); /** * <reaction name="v3"> * <listOfReactants> * <specieReference specie="s2"/> * </listOfReactants> * <listOfProducts> * <specieReference specie="x1"/> * </listOfProducts> * <kineticLaw formula="(vm * s1)/(km + s1)"/> * </reaction> */ r = Model_createReaction(m); Reaction_setName(r, "v3"); sr = Model_createReactant(m); SpeciesReference_setSpecies(sr, "s2"); sr = Model_createProduct(m); SpeciesReference_setSpecies(sr, "x1"); kl = Model_createKineticLaw(m); KineticLaw_setFormula(kl, "(vm * s1)/(km + s1)"); Model_free(m); }
void L3ModelTest_teardown (void) { Model_free(M); }
int main(int argc, char **argv) { double c = 1e-8; /* number of kilobases separating the two sites */ double kb; double u = 1e-6; double relerr, relerr_tol = 0.004; double odeAbsTol = 1e-7; double odeRelTol = 1e-3; int twoNsmp = 20; int ok = 1; int i, verbose = 0; const char *statlbl; size_t stateDim = Strobeck_stateDim(); double ystrobeck[stateDim], y_ode[stateDim], y_eq0[stateDim]; Model *model = Model_alloc("Strobeck", twoNsmp); ODE *ode = ODE_new(model, odeAbsTol, odeRelTol); assert(Model_stateDim(model) == stateDim); switch (argc) { case 1: break; case 2: if(strncmp(argv[1], "-v", 2) != 0) eprintf("usage: xstrobeck [-v]\n"); verbose = 1; break; default: eprintf("usage: xhill [-v]\n"); } /* Set up pophist */ EpochLink *linkedList = NULL; linkedList = EpochLink_new(linkedList, 300.0, 1e5); linkedList = EpochLink_new(linkedList, strtod("Inf", 0), 1e2); PopHist *ph = PopHist_fromEpochLink(linkedList); for(kb = 1.0; kb <= 300; kb += 5.0) { double sep_bases = kb * 1000; Strobeck_evolveDiscrete(ystrobeck, ph, c * sep_bases, u); double sigdsq_hill = Strobeck_get_sigdsq(ystrobeck, twoNsmp); double sigdsq_eq0 = ODE_ldEq(ode, c * sep_bases, u, ph, 0); for(i = 0; i < Model_stateDim(model); ++i) y_eq0[i] = ODE_stateVal(ode, i); double sigdsq_ode = ODE_ld(ode, c * sep_bases, u, ph); for(i = 0; i < Model_stateDim(model); ++i) y_ode[i] = ODE_stateVal(ode, i); if(verbose) { printf("%8s %8s %8s %8s %8s %8s\n", "param", "c", "hill", "ode", "relerr", "eqEpoch0"); } for(i = 0; i < Model_stateDim(model); ++i) { char buff[10]; snprintf(buff, sizeof(buff), "y[%d]", i); relerr = fabs(y_ode[i] - ystrobeck[i]) / fabs(ystrobeck[i]); if(verbose) printf("%8s %8.6f %8.6f %8.6f %8.6f %8.6f\n", buff, c * sep_bases, ystrobeck[i], y_ode[i], relerr, y_eq0[i]); } relerr = fabs(sigdsq_hill - sigdsq_ode) / fabs(sigdsq_hill); if(relerr > relerr_tol) { ok = 0; statlbl = "FAIL"; } else statlbl = "OK"; if(verbose) { printf("%8s %8.6f %8.6f %8.6f %8.6f %8.6f %6s\n", "sigdsq", c * sep_bases, sigdsq_hill, sigdsq_ode, relerr, sigdsq_eq0, statlbl); } } if(verbose) { printf("c=%lg u=%lg\n", c, u); PopHist_print(ph, stdout); } if(verbose) printf("State labels:"); for(i = 0; i < Model_stateDim(model); ++i) { const char *lbl = Model_stateLbl(model, i); if(verbose) printf(" %s", lbl); } if(verbose) putchar('\n'); Model_free(model); ODE_free(ode); EpochLink_free(linkedList); PopHist_free(ph); if(ok) unitTstResult("Strobeck", "OK"); else unitTstResult("Strobeck", "FAIL"); return 0; }