1# @file TestWriteL3SBML.rb 2# @brief Write SBML unit tests 3# 4# @author Akiya Jouraku (Ruby conversion) 5# @author Sarah Keating 6# 7# 8# ====== WARNING ===== WARNING ===== WARNING ===== WARNING ===== WARNING ====== 9# 10# DO NOT EDIT THIS FILE. 11# 12# This file was generated automatically by converting the file located at 13# src/sbml/test/TestWriteL3SBML.cpp 14# using the conversion program dev/utilities/translateTests/translateTests.pl. 15# Any changes made here will be lost the next time the file is regenerated. 16# 17# ----------------------------------------------------------------------------- 18# This file is part of libSBML. Please visit http://sbml.org for more 19# information about SBML, and the latest version of libSBML. 20# 21# Copyright 2005-2010 California Institute of Technology. 22# Copyright 2002-2005 California Institute of Technology and 23# Japan Science and Technology Corporation. 24# 25# This library is free software; you can redistribute it and/or modify it 26# under the terms of the GNU Lesser General Public License as published by 27# the Free Software Foundation. A copy of the license agreement is provided 28# in the file named "LICENSE.txt" included with this software distribution 29# and also available online as http://sbml.org/software/libsbml/license.html 30# ----------------------------------------------------------------------------- 31require 'test/unit' 32require 'libSBML' 33 34class TestWriteL3SBML < Test::Unit::TestCase 35 36 def LV_L3v1 37 return "level=\"3\" version=\"1\">\n" 38 end 39 40 def NS_L3v1 41 return "xmlns=\"http://www.sbml.org/sbml/level3/version1/core\" " 42 end 43 44 def SBML_END 45 return "</sbml>\n" 46 end 47 48 def SBML_START 49 return "<sbml " 50 end 51 52 def XML_START 53 return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" 54 end 55 56 def wrapSBML_L3v1(s) 57 r = XML_START() 58 r += SBML_START() 59 r += NS_L3v1() 60 r += LV_L3v1() 61 r += s 62 r += SBML_END() 63 return r 64 end 65 66 def wrapXML(s) 67 r = XML_START() 68 r += s 69 return r 70 end 71 72 def util_NaN 73 z = 0.0 74 return 0.0/z 75 end 76 77 def util_PosInf 78 z = 0.0 79 return 1.0/z 80 end 81 82 def util_NegInf 83 z = 0.0 84 return -1.0/z 85 end 86 87 def equals(*x) 88 case x.size 89 when 2 90 e, s = x 91 return e == s 92 when 1 93 e, = x 94 return e == @@oss.str() 95 end 96 end 97 98 def setup 99 @@d = LibSBML::SBMLDocument.new() 100 @@d.setLevelAndVersion(3,1,false) 101 @@s = nil 102 end 103 104 def teardown 105 @@d = nil 106 @@s = nil 107 end 108 109 def test_SBMLWriter_L3_create 110 w = LibSBML::SBMLWriter.new() 111 assert( w != nil ) 112 w = nil 113 end 114 115 def test_SBMLWriter_L3_setProgramName 116 w = LibSBML::SBMLWriter.new() 117 assert( w != nil ) 118 i = w.setProgramName( "sss") 119 assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS ) 120 i = w.setProgramName("") 121 assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS ) 122 w = nil 123 end 124 125 def test_SBMLWriter_L3_setProgramVersion 126 w = LibSBML::SBMLWriter.new() 127 assert( w != nil ) 128 i = w.setProgramVersion( "sss") 129 assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS ) 130 i = w.setProgramVersion("") 131 assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS ) 132 w = nil 133 end 134 135 def test_WriteL3SBML_Compartment 136 expected = "<compartment id=\"A\" constant=\"true\"/>"; 137 c = @@d.createModel().createCompartment() 138 c.setId("A") 139 c.setConstant(true) 140 assert_equal true, equals(expected,c.toSBML()) 141 end 142 143 def test_WriteL3SBML_Compartment_spatialDimensions 144 expected = "<compartment id=\"A\" spatialDimensions=\"2.1\" " + "constant=\"false\"/>"; 145 expected1 = "<compartment id=\"A\" constant=\"false\"/>"; 146 c = @@d.createModel().createCompartment() 147 c.setId("A") 148 c.setConstant(false) 149 c.setSpatialDimensions(2.1) 150 assert_equal true, equals(expected,c.toSBML()) 151 c.unsetSpatialDimensions() 152 assert_equal true, equals(expected1,c.toSBML()) 153 end 154 155 def test_WriteL3SBML_Event 156 expected = "<event id=\"e\" useValuesFromTriggerTime=\"true\"/>"; 157 e = @@d.createModel().createEvent() 158 e.setId("e") 159 e.setUseValuesFromTriggerTime(true) 160 assert_equal true, equals(expected,e.toSBML()) 161 end 162 163 def test_WriteL3SBML_Event_full 164 expected = "<event useValuesFromTriggerTime=\"true\">\n" + 165 " <trigger initialValue=\"true\" persistent=\"false\">\n" + 166 " <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n" + 167 " <true/>\n" + 168 " </math>\n" + 169 " </trigger>\n" + 170 " <priority>\n" + 171 " <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n" + 172 " <cn type=\"integer\"> 2 </cn>\n" + 173 " </math>\n" + 174 " </priority>\n" + 175 "</event>" 176 e = @@d.createModel().createEvent() 177 e.setUseValuesFromTriggerTime(true) 178 t = e.createTrigger() 179 t.setInitialValue(true) 180 t.setPersistent(false) 181 math1 = LibSBML::parseFormula("true") 182 t.setMath(math1) 183 p = e.createPriority() 184 math2 = LibSBML::parseFormula("2") 185 p.setMath(math2) 186 assert_equal true, equals(expected,e.toSBML()) 187 end 188 189 def test_WriteL3SBML_Event_useValues 190 expected = "<event id=\"e\" useValuesFromTriggerTime=\"false\">\n" + 191 " <delay/>\n" + 192 "</event>" 193 e = @@d.createModel().createEvent() 194 e.setId("e") 195 e.setUseValuesFromTriggerTime(false) 196 e.createDelay() 197 assert_equal true, equals(expected,e.toSBML()) 198 end 199 200 def test_WriteL3SBML_INF 201 expected = "<parameter id=\"p\" value=\"INF\"" + " constant=\"true\"/>"; 202 p = @@d.createModel().createParameter() 203 p.setId("p") 204 p.setValue(util_PosInf()) 205 p.setConstant(true) 206 assert_equal true, equals(expected,p.toSBML()) 207 end 208 209 def test_WriteL3SBML_KineticLaw_ListOfParameters 210 expected = "<kineticLaw>\n" + 211 " <listOfLocalParameters>\n" + 212 " <localParameter id=\"n\" value=\"1.2\"/>\n" + 213 " </listOfLocalParameters>\n" + 214 "</kineticLaw>" 215 kl = @@d.createModel().createReaction().createKineticLaw() 216 p = kl.createLocalParameter() 217 p.setId("n") 218 p.setValue(1.2) 219 assert_equal true, equals(expected,kl.toSBML()) 220 end 221 222 def test_WriteL3SBML_Model 223 expected = wrapSBML_L3v1(" <model/>\n" 224 ) 225 m = @@d.createModel("") 226 @@s = LibSBML::writeSBMLToString(@@d) 227 assert_equal true, equals(expected,@@s) 228 end 229 230 def test_WriteL3SBML_Model_conversionFactor 231 expected = wrapSBML_L3v1(" <model conversionFactor=\"p\"/>\n" 232 ) 233 m = @@d.createModel("") 234 m.setConversionFactor("p") 235 @@s = LibSBML::writeSBMLToString(@@d) 236 assert_equal true, equals(expected,@@s) 237 end 238 239 def test_WriteL3SBML_Model_otherUnits 240 expected = wrapSBML_L3v1(" <model volumeUnits=\"litre\" areaUnits=\"area\" lengthUnits=\"metre\"/>\n" 241 ) 242 m = @@d.createModel("") 243 m.setVolumeUnits("litre") 244 m.setAreaUnits("area") 245 m.setLengthUnits("metre") 246 @@s = LibSBML::writeSBMLToString(@@d) 247 assert_equal true, equals(expected,@@s) 248 end 249 250 def test_WriteL3SBML_Model_substanceUnits 251 expected = wrapSBML_L3v1(" <model substanceUnits=\"mole\"/>\n" 252 ) 253 m = @@d.createModel("") 254 m.setSubstanceUnits("mole") 255 @@s = LibSBML::writeSBMLToString(@@d) 256 assert_equal true, equals(expected,@@s) 257 end 258 259 def test_WriteL3SBML_Model_timeUnits 260 expected = wrapSBML_L3v1(" <model timeUnits=\"second\"/>\n" 261 ) 262 m = @@d.createModel("") 263 m.setTimeUnits("second") 264 @@s = LibSBML::writeSBMLToString(@@d) 265 assert_equal true, equals(expected,@@s) 266 end 267 268 def test_WriteL3SBML_NaN 269 expected = "<parameter id=\"p\" value=\"NaN\"" + " constant=\"true\"/>"; 270 p = @@d.createModel().createParameter() 271 p.setId("p") 272 p.setValue(util_NaN()) 273 p.setConstant(true) 274 assert_equal true, equals(expected,p.toSBML()) 275 end 276 277 def test_WriteL3SBML_NegINF 278 expected = "<parameter id=\"p\" value=\"-INF\"" + " constant=\"true\"/>"; 279 p = @@d.createModel().createParameter() 280 p.setId("p") 281 p.setValue(util_NegInf()) 282 p.setConstant(true) 283 assert_equal true, equals(expected,p.toSBML()) 284 end 285 286 def test_WriteL3SBML_Parameter 287 expected = "<parameter id=\"Km1\" value=\"2.3\"" + " units=\"second\" constant=\"true\"/>"; 288 p = @@d.createModel().createParameter() 289 p.setId("Km1") 290 p.setValue(2.3) 291 p.setUnits("second") 292 p.setConstant(true) 293 assert_equal true, equals(expected,p.toSBML()) 294 end 295 296 def test_WriteL3SBML_Priority 297 expected = "<priority/>"; 298 p = @@d.createModel().createEvent().createPriority() 299 assert_equal true, equals(expected,p.toSBML()) 300 end 301 302 def test_WriteL3SBML_Reaction 303 expected = "<reaction id=\"r\" reversible=\"false\"" + " fast=\"true\"/>"; 304 r = @@d.createModel().createReaction() 305 r.setId("r") 306 r.setReversible(false) 307 r.setFast(true) 308 assert_equal true, equals(expected,r.toSBML()) 309 end 310 311 def test_WriteL3SBML_Reaction_compartment 312 expected = "<reaction id=\"r\" reversible=\"false\"" + " fast=\"true\" compartment=\"c\"/>"; 313 expected1 = "<reaction id=\"r\" reversible=\"false\"" + " fast=\"true\"/>"; 314 r = @@d.createModel().createReaction() 315 r.setId("r") 316 r.setReversible(false) 317 r.setFast(true) 318 r.setCompartment("c") 319 assert_equal true, equals(expected,r.toSBML()) 320 r.unsetCompartment() 321 assert_equal true, equals(expected1,r.toSBML()) 322 end 323 324 def test_WriteL3SBML_Reaction_full 325 expected = "<reaction id=\"v1\" reversible=\"true\" fast=\"false\">\n" + 326 " <listOfReactants>\n" + 327 " <speciesReference species=\"x0\"/>\n" + 328 " </listOfReactants>\n" + 329 " <listOfProducts>\n" + 330 " <speciesReference species=\"s1\"/>\n" + 331 " </listOfProducts>\n" + 332 " <listOfModifiers>\n" + 333 " <modifierSpeciesReference species=\"m1\"/>\n" + 334 " </listOfModifiers>\n" + 335 " <kineticLaw>\n" + 336 " <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n" + 337 " <apply>\n" + 338 " <divide/>\n" + 339 " <apply>\n" + 340 " <times/>\n" + 341 " <ci> vm </ci>\n" + 342 " <ci> s1 </ci>\n" + 343 " </apply>\n" + 344 " <apply>\n" + 345 " <plus/>\n" + 346 " <ci> km </ci>\n" + 347 " <ci> s1 </ci>\n" + 348 " </apply>\n" + 349 " </apply>\n" + 350 " </math>\n" + 351 " </kineticLaw>\n" + 352 "</reaction>" 353 @@d.createModel() 354 r = @@d.getModel().createReaction() 355 r.setId("v1") 356 r.setReversible(true) 357 r.setFast(false) 358 r.createReactant().setSpecies("x0") 359 r.createProduct().setSpecies("s1") 360 r.createModifier().setSpecies("m1") 361 r.createKineticLaw().setFormula("(vm * s1)/(km + s1)") 362 assert_equal true, equals(expected,r.toSBML()) 363 end 364 365 def test_WriteL3SBML_SBMLDocument_L3v1 366 expected = wrapXML("<sbml xmlns=\"http://www.sbml.org/sbml/level3/version1/core\" " + "level=\"3\" version=\"1\"/>\n") 367 @@s = LibSBML::writeSBMLToString(@@d) 368 assert_equal true, equals(expected,@@s) 369 end 370 371 def test_WriteL3SBML_Species 372 expected = "<species id=\"Ca2\" compartment=\"cell\" initialAmount=\"0.7\"" + 373 " substanceUnits=\"mole\" hasOnlySubstanceUnits=\"false\"" + 374 " boundaryCondition=\"true\" constant=\"true\"/>" 375 s = @@d.createModel().createSpecies() 376 s.setId("Ca2") 377 s.setCompartment("cell") 378 s.setInitialAmount(0.7) 379 s.setUnits("mole") 380 s.setBoundaryCondition(true) 381 s.setHasOnlySubstanceUnits(false) 382 s.setConstant(true) 383 assert_equal true, equals(expected,s.toSBML()) 384 end 385 386 def test_WriteL3SBML_SpeciesReference 387 expected = "<speciesReference species=\"s\"" + " stoichiometry=\"3\" constant=\"true\"/>"; 388 sr = @@d.createModel().createReaction().createReactant() 389 sr.setSpecies("s") 390 sr.setStoichiometry(3) 391 sr.setConstant(true) 392 assert_equal true, equals(expected,sr.toSBML()) 393 end 394 395 def test_WriteL3SBML_Species_conversionFactor 396 expected = "<species id=\"Ca2\" compartment=\"cell\"" + 397 " hasOnlySubstanceUnits=\"false\"" + 398 " boundaryCondition=\"true\" constant=\"true\"" + 399 " conversionFactor=\"p\"/>" 400 expected1 = "<species id=\"Ca2\" compartment=\"cell\"" + 401 " hasOnlySubstanceUnits=\"false\"" + 402 " boundaryCondition=\"true\" constant=\"true\"/>" 403 s = @@d.createModel().createSpecies() 404 s.setId("Ca2") 405 s.setCompartment("cell") 406 s.setBoundaryCondition(true) 407 s.setHasOnlySubstanceUnits(false) 408 s.setConstant(true) 409 s.setConversionFactor("p") 410 assert_equal true, equals(expected,s.toSBML()) 411 s.unsetConversionFactor() 412 assert_equal true, equals(expected1,s.toSBML()) 413 end 414 415 def test_WriteL3SBML_Trigger 416 expected = "<trigger/>"; 417 t = @@d.createModel().createEvent().createTrigger() 418 assert_equal true, equals(expected,t.toSBML()) 419 end 420 421 def test_WriteL3SBML_Trigger_initialValue 422 expected = "<trigger initialValue=\"false\" persistent=\"true\"/>"; 423 t = @@d.createModel().createEvent().createTrigger() 424 t.setInitialValue(false) 425 t.setPersistent(true) 426 assert_equal true, equals(expected,t.toSBML()) 427 end 428 429 def test_WriteL3SBML_Trigger_persistent 430 expected = "<trigger initialValue=\"true\" persistent=\"false\"/>"; 431 t = @@d.createModel().createEvent().createTrigger() 432 t.setPersistent(false) 433 t.setInitialValue(true) 434 assert_equal true, equals(expected,t.toSBML()) 435 end 436 437 def test_WriteL3SBML_Unit 438 expected = "<unit kind=\"kilogram\" exponent=\"0.2\"" + " scale=\"-3\" multiplier=\"3.2\"/>"; 439 u = @@d.createModel().createUnitDefinition().createUnit() 440 u.setKind(LibSBML::UNIT_KIND_KILOGRAM) 441 exp = 0.2 442 u.setExponent(exp) 443 u.setScale(-3) 444 u.setMultiplier(3.2) 445 assert_equal true, equals(expected,u.toSBML()) 446 end 447 448 def test_WriteL3SBML_UnitDefinition 449 expected = "<unitDefinition id=\"myUnit\">\n" + 450 " <listOfUnits>\n" + 451 " <unit kind=\"mole\" exponent=\"1\" scale=\"0\" multiplier=\"1.8\"/>\n" + 452 " </listOfUnits>\n" + 453 "</unitDefinition>" 454 ud = @@d.createModel().createUnitDefinition() 455 ud.setId("myUnit") 456 u1 = ud.createUnit() 457 u1.setKind(LibSBML::UnitKind_forName("mole")) 458 u1.setMultiplier(1.8) 459 u1.setScale(0) 460 u1.setExponent(1) 461 assert_equal true, equals(expected,ud.toSBML()) 462 end 463 464 def test_WriteL3SBML_Unit_noValues 465 expected = "<unit/>"; 466 u = @@d.createModel().createUnitDefinition().createUnit() 467 assert_equal true, equals(expected,u.toSBML()) 468 end 469 470 def test_WriteL3SBML_elements 471 expected = wrapSBML_L3v1(" <model>\n" + 472 " <listOfFunctionDefinitions>\n" + 473 " <functionDefinition/>\n" + 474 " </listOfFunctionDefinitions>\n" + 475 " <listOfUnitDefinitions>\n" + 476 " <unitDefinition/>\n" + 477 " </listOfUnitDefinitions>\n" + 478 " <listOfCompartments>\n" + 479 " <compartment/>\n" + 480 " </listOfCompartments>\n" + 481 " <listOfSpecies>\n" + 482 " <species/>\n" + 483 " </listOfSpecies>\n" + 484 " <listOfParameters>\n" + 485 " <parameter/>\n" + 486 " </listOfParameters>\n" + 487 " <listOfInitialAssignments>\n" + 488 " <initialAssignment/>\n" + 489 " </listOfInitialAssignments>\n" + 490 " <listOfRules>\n" + 491 " <algebraicRule/>\n" + 492 " </listOfRules>\n" + 493 " <listOfConstraints>\n" + 494 " <constraint/>\n" + 495 " </listOfConstraints>\n" + 496 " <listOfReactions>\n" + 497 " <reaction/>\n" + 498 " </listOfReactions>\n" + 499 " <listOfEvents>\n" + 500 " <event/>\n" + 501 " </listOfEvents>\n" + 502 " </model>\n") 503 m = @@d.createModel() 504 m.createUnitDefinition() 505 m.createFunctionDefinition() 506 m.createCompartment() 507 m.createEvent() 508 m.createParameter() 509 m.createAlgebraicRule() 510 m.createInitialAssignment() 511 m.createConstraint() 512 m.createReaction() 513 m.createSpecies() 514 @@s = LibSBML::writeSBMLToString(@@d) 515 assert_equal true, equals(expected,@@s) 516 end 517 518 def test_WriteL3SBML_error 519 d = LibSBML::SBMLDocument.new() 520 w = LibSBML::SBMLWriter.new() 521 assert_equal false, w.writeSBML(d, "/tmp/impossible/path/should/fail") 522 assert( d.getNumErrors() == 1 ) 523 assert( d.getError(0).getErrorId() == LibSBML::XMLFileUnwritable ) 524 d = nil 525 w = nil 526 end 527 528 def test_WriteL3SBML_locale 529 expected = "<parameter id=\"p\" value=\"3.31\"" + " constant=\"true\"/>"; 530 p = @@d.createModel().createParameter() 531 p.setId("p") 532 p.setValue(3.31) 533 p.setConstant(true) 534 assert_equal true, equals(expected,p.toSBML()) 535 end 536 537end 538 539