END_TEST START_TEST (test_SBMLConvert_convertToL2v4_DuplicateAnnotations_model) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(2, 1); Model_t * m = SBMLDocument_createModel(d); char * annotation = "<rdf/>\n<rdf/>"; int i = SBase_setAnnotationString((SBase_t *) (m), annotation); fail_unless( SBMLDocument_getLevel (d) == 2, NULL ); fail_unless( SBMLDocument_getVersion(d) == 1, NULL ); fail_unless( XMLNode_getNumChildren(SBase_getAnnotation((SBase_t *) (m))) == 2); fail_unless( SBMLDocument_setLevelAndVersion(d, 2, 4) == 1, NULL ); fail_unless( SBMLDocument_getLevel (d) == 2, NULL ); fail_unless( SBMLDocument_getVersion(d) == 4, NULL ); m = SBMLDocument_getModel(d); fail_unless( XMLNode_getNumChildren(SBase_getAnnotation((SBase_t *) (m))) == 1); SBMLDocument_free(d); }
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); }
END_TEST START_TEST (test_SBMLConvert_convertToL1_Species_Amount) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(2, 4); Model_t *m = SBMLDocument_createModel(d); const char *sid = "C"; Compartment_t *c = Compartment_create(2, 4); Species_t *s = Species_create(2, 4); Compartment_setId ( c, sid ); Model_addCompartment( m, c ); Species_setCompartment ( s, sid ); Species_setInitialAmount( s, 2.34 ); Model_addSpecies ( m, s ); fail_unless( SBMLDocument_setLevelAndVersion(d, 1, 2) == 1, NULL ); fail_unless( Species_getInitialAmount(s) == 2.34, NULL ); SBMLDocument_free(d); }
END_TEST START_TEST (test_SBMLConvert_convertFromL3) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(3, 1); Model_t *m = SBMLDocument_createModel(d); const char *sid = "C"; Compartment_t *c = Model_createCompartment(m); Compartment_setId ( c, sid ); Compartment_setSize ( c, 1.2 ); Compartment_setConstant( c, 1); Compartment_setSpatialDimensionsAsDouble(c, 3.4); fail_unless(SBMLDocument_setLevelAndVersion(d, 1, 1) == 0); fail_unless(SBMLDocument_setLevelAndVersion(d, 1, 2) == 0); fail_unless(SBMLDocument_setLevelAndVersion(d, 2, 1) == 0); fail_unless(SBMLDocument_setLevelAndVersion(d, 2, 2) == 0); fail_unless(SBMLDocument_setLevelAndVersion(d, 2, 3) == 0); fail_unless(SBMLDocument_setLevelAndVersion(d, 2, 4) == 0); fail_unless(SBMLDocument_setLevelAndVersion(d, 3, 1) == 1); }
END_TEST START_TEST (test_SBMLConvert_invalidLevelVersion) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(2, 1); Model_t *m = SBMLDocument_createModel(d); const char *sid = "C"; Compartment_t *c = Model_createCompartment(m); Compartment_setId ( c, sid ); Compartment_setSize ( c, 1.2 ); Compartment_setUnits( c, "volume"); fail_unless(SBMLDocument_setLevelAndVersion(d, 1, 3) == 0); fail_unless(SBMLDocument_setLevelAndVersion(d, 2, 5) == 0); fail_unless(SBMLDocument_setLevelAndVersion(d, 3, 2) == 0); fail_unless(SBMLDocument_setLevelAndVersion(d, 4, 1) == 0); }
END_TEST START_TEST (test_SBMLConvert_convertToL3_defaultUnits) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(1, 2); Model_t *m = SBMLDocument_createModel(d); const char *sid = "C"; Compartment_t *c = Model_createCompartment(m); Compartment_setId ( c, sid ); Compartment_setSize ( c, 1.2 ); Compartment_setUnits( c, "volume"); fail_unless(Model_getNumUnitDefinitions(m) == 0); fail_unless( SBMLDocument_setLevelAndVersion(d, 3, 1) == 1, NULL); fail_unless(Model_getNumUnitDefinitions(m) == 2); UnitDefinition_t *ud = Model_getUnitDefinition(m, 0); fail_unless (ud != NULL); fail_unless (!strcmp(UnitDefinition_getId( ud), "volume")); fail_unless(UnitDefinition_getNumUnits(ud) == 1); Unit_t * u = UnitDefinition_getUnit(ud, 0); fail_unless(Unit_getKind(u) == UNIT_KIND_LITRE); fail_unless(Unit_getExponent(u) == 1); fail_unless(Unit_getMultiplier(u) == 1); fail_unless(Unit_getScale(u) == 0); ud = Model_getUnitDefinition(m, 1); fail_unless (ud != NULL); fail_unless (!strcmp(UnitDefinition_getId( ud), "time")); fail_unless(UnitDefinition_getNumUnits(ud) == 1); u = UnitDefinition_getUnit(ud, 0); fail_unless(Unit_getKind(u) == UNIT_KIND_SECOND); fail_unless(Unit_getExponent(u) == 1); fail_unless(Unit_getMultiplier(u) == 1); fail_unless(Unit_getScale(u) == 0); fail_unless(!strcmp(Model_getTimeUnits(m), "time")); SBMLDocument_free(d); }
END_TEST START_TEST (test_SBMLConvert_convertToL1_Species_Concentration) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(2, 1); Model_t *m = SBMLDocument_createModel(d); const char *sid = "C"; Compartment_t *c = Compartment_create(2, 1); Species_t *s = Species_create(2, 1); Compartment_setId ( c, sid ); Compartment_setSize ( c, 1.2 ); Model_addCompartment( m, c ); Species_setId ( s, "s" ); Species_setCompartment ( s, sid ); Species_setInitialConcentration( s, 2.34 ); Model_addSpecies ( m, s ); fail_unless( SBMLDocument_setLevelAndVersion(d, 1, 2) == 1, NULL); /** * These tests will fail under Cygwin because of a minimal * setlocale() implementation (see setlocale manpage). */ #ifndef CYGWIN fail_unless( Species_getInitialAmount(Model_getSpecies(m, 0)) == 2.808, NULL ); #endif Species_t * s1 = Model_getSpecies(m, 0); fail_unless (s1 != NULL); fail_unless (!strcmp(Species_getCompartment(s1), "C")); fail_unless(Compartment_getSize(Model_getCompartmentById(m, "C")) == 1.2); fail_unless(Species_getInitialConcentration(s1) == 2.34); fail_unless(Species_isSetInitialConcentration(s1) == 1); SBMLDocument_free(d); }
END_TEST START_TEST (test_SBMLConvert_convertFromL3_conversionFactor) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(3, 1); Model_t *m = SBMLDocument_createModel(d); const char *sid = "P"; Model_setConversionFactor(m, sid); Parameter_t *c = Model_createParameter(m); Parameter_setId ( c, sid ); Parameter_setConstant( c, 1); fail_unless(SBMLDocument_setLevelAndVersion(d, 1, 1) == 0); fail_unless(SBMLDocument_setLevelAndVersion(d, 1, 2) == 0); fail_unless(SBMLDocument_setLevelAndVersion(d, 2, 1) == 0); fail_unless(SBMLDocument_setLevelAndVersion(d, 2, 2) == 0); fail_unless(SBMLDocument_setLevelAndVersion(d, 2, 3) == 0); fail_unless(SBMLDocument_setLevelAndVersion(d, 2, 4) == 0); fail_unless(SBMLDocument_setLevelAndVersion(d, 3, 1) == 1); }
int main (int argc, char *argv[]) { unsigned int latestLevel = SBMLDocument_getDefaultLevel(); unsigned int latestVersion = SBMLDocument_getDefaultVersion(); unsigned int errors; SBMLDocument_t *d; if (argc != 3) { printf("Usage: convertSBML input-filename output-filename\n"); printf("This program will attempt to convert a model either to\n"); printf("SBML Level %d Version %d (if the model is not already) or, if", latestLevel, latestVersion); printf("the model is already expressed in Level %d Version %d, this\n", latestLevel, latestVersion); printf("program will attempt to convert the model to Level 1 Version 2.\n"); return 1; } d = readSBML(argv[1]); errors = SBMLDocument_getNumErrors(d); if (errors > 0) { printf("Encountered the following SBML error(s):\n"); SBMLDocument_printErrors(d, stdout); printf("Conversion skipped. Please correct the problems above first.\n"); return errors; } else { unsigned int olevel = SBMLDocument_getLevel(d); unsigned int oversion = SBMLDocument_getVersion(d); int success; if (olevel < latestLevel || oversion < latestVersion) { printf("Attempting to convert model to SBML Level %d Version %d.\n", latestLevel, latestVersion); success = SBMLDocument_setLevelAndVersion(d, latestLevel, latestVersion); } else { printf("Attempting to convert model to SBML Level 1 Version 2.\n"); success = SBMLDocument_setLevelAndVersion(d, 1, 2); } errors = SBMLDocument_getNumErrors(d); if (!success) { printf("Unable to perform conversion due to the following:\n"); SBMLDocument_printErrors(d, stdout); printf("Conversion skipped. Either libSBML does not (yet) have\n"); printf("ability to convert this model, or (automatic) conversion\n"); printf("is not possible in this case.\n"); } else if (errors > 0) { printf("Information may have been lost in conversion; but a valid model "); printf("was produced by the conversion.\nThe following information "); printf("was provided:\n"); SBMLDocument_printErrors(d, stdout); writeSBML(d, argv[2]); } else { printf("Conversion completed.\n"); writeSBML(d, argv[2]); } } SBMLDocument_free(d); return errors; }