END_TEST START_TEST (test_SBMLConvertStrict_convertSBO) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(2, 4); Model_t * m = SBMLDocument_createModel(d); /* create a compartment with SBO */ Compartment_t * c = Model_createCompartment(m); Compartment_setId(c, "c"); SBase_setSBOTerm((SBase_t *) (c), 240); fail_unless( SBMLDocument_setLevelAndVersionStrict(d, 2, 3) == 1 ); fail_unless( SBMLDocument_getLevel (d) == 2, NULL ); fail_unless( SBMLDocument_getVersion(d) == 3, NULL ); fail_unless( SBMLDocument_setLevelAndVersionStrict(d, 2, 2) == 1 ); fail_unless( SBMLDocument_getLevel (d) == 2, NULL ); fail_unless( SBMLDocument_getVersion(d) == 2, NULL ); /* check that sbo term has been removed */ Compartment_t *c1 = Model_getCompartment(SBMLDocument_getModel(d), 0); fail_unless (SBase_getSBOTerm((SBase_t *) (c1)) == -1, NULL ); SBMLDocument_free(d); }
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_SBMLConvertStrict_convertNonStrictSBO) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(2, 4); Model_t * m = SBMLDocument_createModel(d); /* create a compartment with SBO */ Compartment_t * c = Model_createCompartment(m); Compartment_setId(c, "c"); Compartment_setConstant(c, 0); SBase_setSBOTerm((SBase_t *) (c), 64); /* conversion to L2V3 and L2V2 should fail due to bad SBO * but to L2V1 and L1 should pass as sbo terms not applicable */ fail_unless( SBMLDocument_setLevelAndVersionStrict(d, 2, 3) == 0 ); fail_unless( SBMLDocument_getLevel (d) == 2, NULL ); fail_unless( SBMLDocument_getVersion(d) == 4, NULL ); fail_unless( SBMLDocument_setLevelAndVersionStrict(d, 2, 2) == 0 ); fail_unless( SBMLDocument_getLevel (d) == 2, NULL ); fail_unless( SBMLDocument_getVersion(d) == 4, NULL ); fail_unless( SBMLDocument_setLevelAndVersionStrict(d, 2, 1) == 1 ); fail_unless( SBMLDocument_getLevel (d) == 2, NULL ); fail_unless( SBMLDocument_getVersion(d) == 1, NULL ); /* check that sbo term has been removed */ Compartment_t *c1 = Model_getCompartment(SBMLDocument_getModel(d), 0); fail_unless (SBase_getSBOTerm((SBase_t *) (c1)) == -1, NULL ); fail_unless( SBMLDocument_setLevelAndVersionStrict(d, 1, 2) == 1 ); fail_unless( SBMLDocument_getLevel (d) == 1, NULL ); fail_unless( SBMLDocument_getVersion(d) == 2, NULL ); /* check that sbo term has been removed */ Compartment_t *c2 = Model_getCompartment(SBMLDocument_getModel(d), 0); fail_unless (SBase_getSBOTerm((SBase_t *) (c2)) == -1, NULL ); SBMLDocument_free(d); }
int main (int argc, char *argv[]) { const char *filename; SBMLDocument_t *d; Model_t *m; unsigned int level, version; if (argc != 2) { printf("Usage: printSBML filename\n"); return 2; } filename = argv[1]; d = readSBML(filename); SBMLDocument_printErrors(d, stdout); m = SBMLDocument_getModel(d); level = SBMLDocument_getLevel (d); version = SBMLDocument_getVersion(d); printf("\n"); printf("File: %s (Level %u, version %u)\n", filename, level, version); if (m == NULL) { printf("No model present."); return 1; } printf(" "); printf(" model id: %s\n", Model_isSetId(m) ? Model_getId(m) : "(empty)"); printf( "functionDefinitions: %d\n", Model_getNumFunctionDefinitions(m) ); printf( " unitDefinitions: %d\n", Model_getNumUnitDefinitions (m) ); printf( " compartmentTypes: %d\n", Model_getNumCompartmentTypes (m) ); printf( " specieTypes: %d\n", Model_getNumSpeciesTypes (m) ); printf( " compartments: %d\n", Model_getNumCompartments (m) ); printf( " species: %d\n", Model_getNumSpecies (m) ); printf( " parameters: %d\n", Model_getNumParameters (m) ); printf( " initialAssignments: %d\n", Model_getNumInitialAssignments (m) ); printf( " rules: %d\n", Model_getNumRules (m) ); printf( " constraints: %d\n", Model_getNumConstraints (m) ); printf( " reactions: %d\n", Model_getNumReactions (m) ); printf( " events: %d\n", Model_getNumEvents (m) ); printf( "\n" ); SBMLDocument_free(d); return 0; }
END_TEST START_TEST (test_SBMLConvert_addModifiersToReaction) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(1, 2); Model_t *m = SBMLDocument_createModel(d); Reaction_t *r = Model_createReaction(m); KineticLaw_t *kl = Reaction_createKineticLaw(r); KineticLaw_setFormula(kl, "k1*S1*S2*S3*S4*S5"); SpeciesReference_t *ssr1; SpeciesReference_t *ssr2; Species_t *s1 = Model_createSpecies( m ); Species_setId( s1, "S1" ); Species_t *s2 = Model_createSpecies( m ); Species_setId( s2, "S2"); Species_t *s3 = Model_createSpecies( m ); Species_setId( s3, "S3"); Species_t *s4 = Model_createSpecies( m ); Species_setId( s4, "S4"); Species_t *s5 = Model_createSpecies( m ); Species_setId( s5, "S5"); SpeciesReference_t *sr1 = Reaction_createReactant( r ); SpeciesReference_t *sr2 = Reaction_createReactant( r ); SpeciesReference_t *sr3 = Reaction_createProduct ( r ); SpeciesReference_setSpecies(sr1, "S1"); SpeciesReference_setSpecies(sr2, "S2"); SpeciesReference_setSpecies(sr3, "S5"); fail_unless( Reaction_getNumModifiers(r) == 0, NULL ); fail_unless( SBMLDocument_setLevelAndVersionNonStrict(d, 2, 1) == 1, NULL ); fail_unless( SBMLDocument_getLevel (d) == 2, NULL ); fail_unless( SBMLDocument_getVersion(d) == 1, NULL ); fail_unless( Reaction_getNumModifiers(Model_getReaction(m, 0)) == 2, NULL ); ssr1 = (SpeciesReference_t *) Reaction_getModifier(Model_getReaction(m, 0), 0); ssr2 = (SpeciesReference_t *) Reaction_getModifier(Model_getReaction(m, 0), 1); fail_unless( !strcmp(SpeciesReference_getSpecies(ssr1), "S3"), NULL ); fail_unless( !strcmp(SpeciesReference_getSpecies(ssr2), "S4"), NULL ); SBMLDocument_free(d); }
END_TEST START_TEST (test_SBMLConvert_convertToL1_SBMLDocument) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(2, 1); fail_unless( SBMLDocument_setLevelAndVersionNonStrict(d, 1, 2) == 1, NULL); fail_unless( SBMLDocument_getLevel (d) == 1, NULL ); fail_unless( SBMLDocument_getVersion(d) == 2, NULL ); SBMLDocument_free(d); }
BEGIN_C_DECLS START_TEST (test_SBMLConvert_convertToL2_SBMLDocument) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(1, 2); fail_unless( SBMLDocument_setLevelAndVersionNonStrict(d, 2, 1) == 1, NULL ); fail_unless( SBMLDocument_getLevel (d) == 2, NULL ); fail_unless( SBMLDocument_getVersion(d) == 1, NULL ); fail_unless( SBMLDocument_setLevelAndVersionNonStrict(d, 2, 2) == 1, NULL ); fail_unless( SBMLDocument_getLevel (d) == 2, NULL ); fail_unless( SBMLDocument_getVersion(d) == 2, NULL ); fail_unless( SBMLDocument_setLevelAndVersionNonStrict(d, 2, 3) == 1, NULL ); fail_unless( SBMLDocument_getLevel (d) == 2, NULL ); fail_unless( SBMLDocument_getVersion(d) == 3, NULL ); SBMLDocument_free(d); }
END_TEST START_TEST (test_SBMLDocument_createWith) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(1, 2); fail_unless( SBase_getTypeCode ((SBase_t *) d) == SBML_DOCUMENT ); fail_unless( SBase_getNotes ((SBase_t *) d) == NULL ); fail_unless( SBase_getAnnotation((SBase_t *) d) == NULL ); fail_unless( SBMLDocument_getLevel (d) == 1); fail_unless( SBMLDocument_getVersion(d) == 2); fail_unless( SBMLDocument_getNumErrors (d) == 0 ); SBMLDocument_free(d); }
LIBSBML_CPP_NAMESPACE_USE BEGIN_C_DECLS START_TEST (test_SBMLDocument_create) { SBMLDocument_t *d = SBMLDocument_create(); fail_unless( SBase_getTypeCode ((SBase_t *) d) == SBML_DOCUMENT ); fail_unless( SBase_getNotes ((SBase_t *) d) == NULL ); fail_unless( SBase_getAnnotation((SBase_t *) d) == NULL ); fail_unless( SBMLDocument_getLevel (d) == 3); fail_unless( SBMLDocument_getVersion(d) == 1); fail_unless( SBMLDocument_getNumErrors (d) == 0 ); SBMLDocument_free(d); }
END_TEST START_TEST (test_SBMLConvertStrict_convertToL1) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(2, 4); /* create model with metaid */ Model_t * m = SBMLDocument_createModel(d); SBase_setMetaId((SBase_t *) (m), "_m"); /* create a compartment with sbo*/ Compartment_t * c = Model_createCompartment(m); Compartment_setId(c, "c"); SBase_setSBOTerm((SBase_t *) (c), 240); /* create a species with hasOnlySubstanceUnits = true*/ Species_t *s = Model_createSpecies(m); Species_setId(s, "s"); Species_setCompartment(s, "c"); Species_setHasOnlySubstanceUnits(s, 1); fail_unless( SBMLDocument_setLevelAndVersionStrict(d, 1, 2) == 1 ); fail_unless( SBMLDocument_getLevel (d) == 1, NULL ); fail_unless( SBMLDocument_getVersion(d) == 2, NULL ); ///* check that attributes that are no longer valid have been removed */ Model_t * m1 = SBMLDocument_getModel(d); fail_unless (SBase_getMetaId((SBase_t *) (m1)) == NULL); Compartment_t *c1 = Model_getCompartment(m1, 0); fail_unless (SBase_getSBOTerm((SBase_t *) (c1)) == -1, NULL ); Species_t *s1 = Model_getSpecies(m1, 0); fail_unless (Species_getHasOnlySubstanceUnits(s1) == 0); SBMLDocument_free(d); }
END_TEST START_TEST (test_SBMLConvertStrict_convertL1ParamRule) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(1, 2); Model_t * m = SBMLDocument_createModel(d); /* create a compartment */ Compartment_t * c = Model_createCompartment(m); Compartment_setId(c, "c"); /* create a parameter */ Parameter_t * p = Model_createParameter(m); Parameter_setId(p, "p"); Parameter_t * p1 = Model_createParameter(m); Parameter_setId(p1, "p1"); /* create a math element */ ASTNode_t *math = SBML_parseFormula("p"); /* create an assignment rule */ Rule_t *ar = Model_createAssignmentRule(m); Rule_setVariable(ar, "p1"); Rule_setMath(ar, math); Rule_setUnits(ar, "mole"); fail_unless( SBMLDocument_setLevelAndVersionStrict(d, 2, 1) == 1 ); fail_unless( SBMLDocument_getLevel (d) == 2, NULL ); fail_unless( SBMLDocument_getVersion(d) == 1, NULL ); Rule_t * r1 = Model_getRule(SBMLDocument_getModel(d), 0); fail_unless (Rule_getUnits(r1) == NULL ); SBMLDocument_free(d); }
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; }