1use Test; 2BEGIN { plan tests => 294 }; 3 4use LibSBML; 5use strict; 6use vars qw/$formula $f $tu $su $math $m/; 7 8######################### 9 10my $level = LibSBML::SBMLDocument::getDefaultLevel(); 11my $version = 1; 12 13my $id = 'Branch'; 14my $Rk = 0; # counter for Reactions 15my $Rl = 0; # counter for Rules 16 17# create w/ Id 18my $m = new LibSBML::Model($level,$version); 19$m->setId('repressilator'); 20ok($m->getTypeCode() == $LibSBML::SBML_MODEL); 21ok($m->getMetaId(), ''); 22ok($m->getNotes(), undef); 23ok($m->getAnnotation(), undef); 24ok($m->isSetId(), 1); 25ok($m->getId(), 'repressilator'); 26ok($m->isSetName(), 0); 27ok($m->getName(), ''); 28ok($m->getNumUnitDefinitions(), 0); 29ok($m->getNumCompartments(), 0); 30ok($m->getNumSpecies(), 0); 31ok($m->getNumParameters(), 0); 32ok($m->getNumReactions(), 0); 33 34# create w/ Name 35$m = new LibSBML::Model($level,$version); 36$m->setName('The Repressilator Model'); 37ok($m->getTypeCode() == $LibSBML::SBML_MODEL); 38ok($m->getMetaId(), ''); 39ok($m->getNotes(), undef); 40ok($m->getAnnotation(), undef); 41ok($m->isSetId(), 0); 42ok($m->getId(), ''); 43ok($m->isSetName(), 1); 44ok($m->getName(), 'The Repressilator Model'); 45ok($m->getNumUnitDefinitions(), 0); 46ok($m->getNumCompartments(), 0); 47ok($m->getNumSpecies(), 0); 48ok($m->getNumParameters(), 0); 49ok($m->getNumReactions(), 0); 50 51# create w/o arguments 52$m = new LibSBML::Model($level,$version); 53ok($m->getTypeCode() == $LibSBML::SBML_MODEL); 54ok($m->getMetaId(), ''); 55ok($m->getNotes(), undef); 56ok($m->getAnnotation(), undef); 57ok($m->isSetId(), 0); 58ok($m->getId(), ''); 59ok($m->isSetName(), 0); 60ok($m->getName(), ''); 61ok($m->getNumUnitDefinitions(), 0); 62ok($m->getNumCompartments(), 0); 63ok($m->getNumSpecies(), 0); 64ok($m->getNumParameters(), 0); 65ok($m->getNumReactions(), 0); 66 67# set/get Id 68ok($m->isSetId(), 0); 69$m->setId($id); 70ok($m->isSetId(), 1); 71ok($m->getId(), $id); 72# reflexive case 73$m->setId($m->getId()); 74ok($m->isSetId(), 1); 75ok($m->getId(), $id); 76$m->setId(''); 77ok($m->isSetId(), 0); 78ok($m->getId(), ''); 79 80# set/get Name 81ok($m->isSetName(), 0); 82$m->setName($id); 83ok($m->isSetName(), 1); 84ok($m->getName(), $id); 85# reflexive case 86$m->setName($m->getName()); 87ok($m->isSetName(), 1); 88ok($m->getName(), $id); 89$m->setName(''); 90ok($m->isSetName(), 0); 91ok($m->getName(), ''); 92 93 94# set/get TimeUnits 95ok($m->isSetTimeUnits(), 0); 96$m->setTimeUnits($id); 97ok($m->isSetTimeUnits(), 1); 98ok($m->getTimeUnits(), $id); 99# reflexive case 100$m->setTimeUnits($m->getTimeUnits()); 101ok($m->isSetTimeUnits(), 1); 102ok($m->getTimeUnits(), $id); 103$m->setTimeUnits(''); 104ok($m->isSetTimeUnits(), 0); 105ok($m->getTimeUnits(), ''); 106 107# set/get VolumeUnits 108ok($m->isSetVolumeUnits(), 0); 109$m->setVolumeUnits($id); 110ok($m->isSetVolumeUnits(), 1); 111ok($m->getVolumeUnits(), $id); 112# reflexive case 113$m->setVolumeUnits($m->getVolumeUnits()); 114ok($m->isSetVolumeUnits(), 1); 115ok($m->getVolumeUnits(), $id); 116$m->setVolumeUnits(''); 117ok($m->isSetVolumeUnits(), 0); 118ok($m->getVolumeUnits(), ''); 119 120# set/get AreaUnits 121ok($m->isSetAreaUnits(), 0); 122$m->setAreaUnits($id); 123ok($m->isSetAreaUnits(), 1); 124ok($m->getAreaUnits(), $id); 125# reflexive case 126$m->setAreaUnits($m->getAreaUnits()); 127ok($m->isSetAreaUnits(), 1); 128ok($m->getAreaUnits(), $id); 129$m->setAreaUnits(''); 130ok($m->isSetAreaUnits(), 0); 131ok($m->getAreaUnits(), ''); 132 133# set/get LengthUnits 134ok($m->isSetLengthUnits(), 0); 135$m->setLengthUnits($id); 136ok($m->isSetLengthUnits(), 1); 137ok($m->getLengthUnits(), $id); 138# reflexive case 139$m->setLengthUnits($m->getLengthUnits()); 140ok($m->isSetLengthUnits(), 1); 141ok($m->getLengthUnits(), $id); 142$m->setLengthUnits(''); 143ok($m->isSetLengthUnits(), 0); 144ok($m->getLengthUnits(), ''); 145 146# set/get SubstanceUnits 147ok($m->isSetSubstanceUnits(), 0); 148$m->setSubstanceUnits($id); 149ok($m->isSetSubstanceUnits(), 1); 150ok($m->getSubstanceUnits(), $id); 151# reflexive case 152$m->setSubstanceUnits($m->getSubstanceUnits()); 153ok($m->isSetSubstanceUnits(), 1); 154ok($m->getSubstanceUnits(), $id); 155$m->setSubstanceUnits(''); 156ok($m->isSetSubstanceUnits(), 0); 157ok($m->getSubstanceUnits(), ''); 158 159# set/get ExtentUnits 160ok($m->isSetExtentUnits(), 0); 161$m->setExtentUnits($id); 162ok($m->isSetExtentUnits(), 1); 163ok($m->getExtentUnits(), $id); 164# reflexive case 165$m->setExtentUnits($m->getExtentUnits()); 166ok($m->isSetExtentUnits(), 1); 167ok($m->getExtentUnits(), $id); 168$m->setExtentUnits(''); 169ok($m->isSetExtentUnits(), 0); 170ok($m->getExtentUnits(), ''); 171 172# set/get ConversionFactor 173ok($m->isSetConversionFactor(), 0); 174$m->setConversionFactor($id); 175ok($m->isSetConversionFactor(), 1); 176ok($m->getConversionFactor(), $id); 177# reflexive case 178$m->setConversionFactor($m->getConversionFactor()); 179ok($m->isSetConversionFactor(), 1); 180ok($m->getConversionFactor(), $id); 181$m->setConversionFactor(''); 182ok($m->isSetConversionFactor(), 0); 183ok($m->getConversionFactor(), ''); 184 185 186# create FunctionDefinition 187my $fd = $m->createFunctionDefinition(); 188ok($fd->getTypeCode() == $LibSBML::SBML_FUNCTION_DEFINITION); 189ok($m->getNumFunctionDefinitions(), 1); 190 191# add/get FunctionDefinition 192$fd = new LibSBML::FunctionDefinition($level,$version); 193ok($m->addFunctionDefinition($fd),$LibSBML::LIBSBML_INVALID_OBJECT); 194$fd->setId('fd'); 195$fd->setMath(LibSBML::parseFormula('1+1')); 196ok($m->addFunctionDefinition($fd),0); 197ok($m->getNumFunctionDefinitions(), 2); 198ok($m->getFunctionDefinition(0)->getTypeCode() 199 == $LibSBML::SBML_FUNCTION_DEFINITION); 200ok($m->getFunctionDefinition(1)->getTypeCode() 201 == $LibSBML::SBML_FUNCTION_DEFINITION); 202ok($m->getFunctionDefinition(2), undef); 203 204# add/get FunctionDefinitionById 205$fd = new LibSBML::FunctionDefinition($level,$version); 206$fd->setId('sin'); 207$fd->setMath(LibSBML::parseFormula('sin(x)')); 208$m->addFunctionDefinition($fd); 209$fd = new LibSBML::FunctionDefinition($level,$version); 210$fd->setId('cos'); 211$fd->setMath(LibSBML::parseFormula('cos(x)')); 212$m->addFunctionDefinition($fd); 213 214ok($m->getNumFunctionDefinitions(), 4); 215ok($m->getFunctionDefinition('sin')->getId(), 216 $m->getFunctionDefinition(2)->getId()); 217ok($m->getFunctionDefinition('cos')->getId(), 218 $m->getFunctionDefinition(3)->getId()); 219ok($m->getFunctionDefinition('tan'), undef); 220 221# create UnitDefinition 222my $ud = $m->createUnitDefinition(); 223ok($ud->getTypeCode() == $LibSBML::SBML_UNIT_DEFINITION); 224ok($m->getNumUnitDefinitions(), 1); 225 226# add/get UnitDefinition Id Name 227$ud = new LibSBML::UnitDefinition($level,$version); 228$ud->setId('volume'); 229$ud->setName('mmls'); 230my $u = new LibSBML::Unit($level,$version); 231$u->setKind($LibSBML::UNIT_KIND_LITRE); 232$u->setExponent(1.0); 233$u->setMultiplier(1.0); 234$u->setScale(0); 235$ud->addUnit($u); 236$m->addUnitDefinition($ud); 237$ud = new LibSBML::UnitDefinition($level,$version); 238$ud->setId('mmls'); 239$ud->setName('volume'); 240$ud->addUnit($u); 241$m->addUnitDefinition($ud); 242ok($m->getNumUnitDefinitions(), 3); 243ok($m->getUnitDefinition(0)->getTypeCode() == $LibSBML::SBML_UNIT_DEFINITION); 244ok($m->getUnitDefinition(0)->getName(), ''); 245ok($m->getUnitDefinition(1)->getTypeCode() == $LibSBML::SBML_UNIT_DEFINITION); 246ok($m->getUnitDefinition(1)->getName(), 'mmls'); 247ok($m->getUnitDefinition(2)->getTypeCode() == $LibSBML::SBML_UNIT_DEFINITION); 248ok($m->getUnitDefinition(2)->getName(), 'volume'); 249ok($m->getUnitDefinition(3), undef); 250 251# get UnitDefinitionById 252ok($m->getUnitDefinition('volume')->getName(), 253 $m->getUnitDefinition(2)->getId()); 254ok($m->getUnitDefinition('mmls')->getName(), 255 $m->getUnitDefinition(1)->getId()); 256ok($m->getUnitDefinition('liter'), undef); 257 258# create Unit 259$ud = $m->createUnitDefinition(); 260$ud = $m->createUnitDefinition(); 261ok($m->getNumUnitDefinitions(), 5); 262$u = $m->createUnit(); 263ok($u->getTypeCode() == $LibSBML::SBML_UNIT); 264$ud = $m->getUnitDefinition(4); 265ok($ud->getTypeCode() == $LibSBML::SBML_UNIT_DEFINITION); 266ok($ud->getNumUnits(), 1); 267 268# create Unit noUnitDefinition 269my $mNO = new LibSBML::Model($level,$version); 270ok($mNO->getTypeCode() == $LibSBML::SBML_MODEL); 271ok($mNO->getNumUnitDefinitions(), 0); 272ok($mNO->createUnit(), undef); 273 274# create Compartment 275my $c = $m->createCompartment(); 276$c->setId('a'); 277ok($c->getTypeCode() == $LibSBML::SBML_COMPARTMENT); 278ok($m->getNumCompartments(), 1); 279 280# add/get Compartment 281$c = new LibSBML::Compartment($level,$version); 282$c->setId('A'); 283$c->setConstant(1); 284$m->addCompartment($c); 285$m->getCompartment(1)->setId('A'); 286$m->getCompartment(1)->setName('B'); 287$c->setId('B'); 288$m->addCompartment($c); 289$m->getCompartment(2)->setId('B'); 290$m->getCompartment(2)->setName('A'); 291ok($m->getNumCompartments(), 3); 292ok($m->getCompartment(0)->getTypeCode() == $LibSBML::SBML_COMPARTMENT); 293ok($m->getName(), ''); 294ok($m->getId(), ''); 295ok($m->getCompartment(1)->getTypeCode() == $LibSBML::SBML_COMPARTMENT); 296ok($m->getCompartment(1)->getId(), 'A'); 297ok($m->getCompartment(1)->getName(), 'B'); 298ok($m->getCompartment(2)->getTypeCode() == $LibSBML::SBML_COMPARTMENT); 299ok($m->getCompartment(2)->getId(), 'B'); 300ok($m->getCompartment(2)->getName(), 'A'); 301ok($m->getCompartment(3), undef); 302 303# get CompartmentById 304ok($m->getCompartment('A')->getName(), $m->getCompartment(2)->getId()); 305ok($m->getCompartment('B')->getName(), $m->getCompartment(1)->getId()); 306ok($m->getCompartment('C'), undef); 307 308# create Species 309my $s = $m->createSpecies(); 310$s->setId('S1'); 311$s->setCompartment('A'); 312ok($s->getTypeCode() == $LibSBML::SBML_SPECIES); 313ok($m->getNumSpecies(), 1); 314 315# add/get Species 316$s = new LibSBML::Species($level,$version); 317$s->setId('Glucose'); 318$s->setCompartment('A'); 319$s->setConstant(0); 320$s->setHasOnlySubstanceUnits(0); 321$s->setBoundaryCondition(0); 322$m->addSpecies($s); 323$m->getSpecies(1)->setId('Glucose'); 324$m->getSpecies(1)->setName('Glucose_6_P'); 325$s->setId('Glucose_6_P'); 326$m->addSpecies($s); 327$m->getSpecies(2)->setId('Glucose_6_P'); 328$m->getSpecies(2)->setName('Glucose'); 329ok($m->getNumSpecies(), 3); 330ok($m->getSpecies(0)->getTypeCode() == $LibSBML::SBML_SPECIES); 331ok($m->getSpecies(0)->getId(), 'S1'); 332ok($m->getSpecies(0)->getName(), ''); 333ok($m->getSpecies(1)->getTypeCode() == $LibSBML::SBML_SPECIES); 334ok($m->getSpecies(1)->getId(), 'Glucose'); 335ok($m->getSpecies(1)->getName(), 'Glucose_6_P'); 336ok($m->getSpecies(2)->getTypeCode() == $LibSBML::SBML_SPECIES); 337ok($m->getSpecies(2)->getId(), 'Glucose_6_P'); 338ok($m->getSpecies(2)->getName(), 'Glucose'); 339ok($m->getSpecies(3), undef); 340 341# get SpeciesById 342ok($m->getSpecies('Glucose')->getName(), $m->getSpecies(2)->getId()); 343ok($m->getSpecies('Glucose_6_P')->getName(), $m->getSpecies(1)->getId()); 344ok($m->getSpecies('Glucose_5_P'), undef); 345 346# create Parameter 347my $p = $m->createParameter(); 348$p->setId('P1'); 349ok($p->getTypeCode() == $LibSBML::SBML_PARAMETER); 350ok($m->getNumParameters(), 1); 351 352# add/get Parameter 353$p = new LibSBML::Parameter($level,$version); 354$p->setId('Km1'); 355$p->setConstant(1); 356$m->addParameter($p); 357$m->getParameter(1)->setId('Km1'); 358$m->getParameter(1)->setName('Km2'); 359$p->setId('Km2'); 360$m->addParameter($p); 361$m->getParameter(2)->setId('Km2'); 362$m->getParameter(2)->setName('Km1'); 363ok($m->getNumParameters(), 3); 364ok($m->getParameter(0)->getTypeCode() == $LibSBML::SBML_PARAMETER); 365ok($m->getParameter(0)->getId(), 'P1'); 366ok($m->getParameter(0)->getName(), ''); 367ok($m->getParameter(1)->getTypeCode() == $LibSBML::SBML_PARAMETER); 368ok($m->getParameter(1)->getId(), 'Km1'); 369ok($m->getParameter(1)->getName(), 'Km2'); 370ok($m->getParameter(2)->getTypeCode() == $LibSBML::SBML_PARAMETER); 371ok($m->getParameter(2)->getId(), 'Km2'); 372ok($m->getParameter(2)->getName(), 'Km1'); 373ok($m->getParameter(3), undef); 374 375# get ParameterById 376ok($m->getParameter('Km1')->getName(), $m->getParameter(2)->getId()); 377ok($m->getParameter('Km2')->getName(), $m->getParameter(1)->getId()); 378ok($m->getParameter('Km3'), undef); 379 380# create AssignmentRule 381my $ar = $m->createAssignmentRule(); $Rl++; 382$ar->setVariable('a1'); 383$ar->setFormula('x + 1'); 384ok($ar->getTypeCode() == $LibSBML::SBML_ASSIGNMENT_RULE); 385ok($m->getNumRules(), $Rl); 386ok($m->getRule($Rl-1)->getTypeCode() == $LibSBML::SBML_ASSIGNMENT_RULE); 387ok($m->getRule($Rl-1)->getFormula(), 'x + 1'); 388 389# add/get AssignmentRule 390$ar = new LibSBML::AssignmentRule($level,$version); 391$ar->setVariable('a2'); 392$ar->setFormula('y + 1'); 393ok($m->addRule($ar), $LibSBML::LIBSBML_OPERATION_SUCCESS); 394$Rl++; 395ok($m->getNumRules(), $Rl); 396ok($m->getRule($Rl-1)->getTypeCode() 397 == $LibSBML::SBML_ASSIGNMENT_RULE); 398ok($m->getRule($Rl-2)->getTypeCode() 399 == $LibSBML::SBML_ASSIGNMENT_RULE); 400ok($m->getRule($Rl), undef); 401 402# create RateRule 403my $rr = $m->createRateRule(); $Rl++; 404$rr->setVariable('r1'); 405ok($rr->getTypeCode() == $LibSBML::SBML_RATE_RULE); 406ok($m->getNumRules(), $Rl); 407ok($m->getRule($Rl-1)->getTypeCode() == $LibSBML::SBML_RATE_RULE); 408 409# add/get RateRule 410$rr = new LibSBML::RateRule($level,$version); 411$rr->setVariable('r2'); 412$rr->setFormula('w + 1'); 413ok($m->addRule($rr), $LibSBML::LIBSBML_OPERATION_SUCCESS); $Rl++; 414ok($m->getNumRules(), $Rl); 415ok($m->getRule($Rl-1)->getTypeCode() 416 == $LibSBML::SBML_RATE_RULE); 417ok($m->getRule($Rl-2)->getTypeCode() 418 == $LibSBML::SBML_RATE_RULE); 419ok($m->getRule($Rl), undef); 420 421# create AlgebraicRule 422#$ar = new LibSBML::AlgebraicRule($level,$version); 423#$ar->setFormula('x + 1'); 424#$ar = $m->createAlgebraicRule(); $Rl++; 425#ok($ar->getTypeCode() == $LibSBML::SBML_ALGEBRAIC_RULE); 426#ok($m->getNumRules(), $Rl); 427#ok($m->getRule($Rl-1)->getTypeCode() == $LibSBML::SBML_ALGEBRAIC_RULE); 428 429# add/get AlgebraicRule 430#$ar = new LibSBML::AlgebraicRule($level,$version); 431#$ar->setFormula('y + 1'); 432#ok($m->addRule($ar),$LibSBML::LIBSBML_OPERATION_SUCCESS); $Rl++; 433#ok($m->getNumRules(), $Rl); 434#ok($m->getRule($Rl-1)->getTypeCode() 435# == $LibSBML::SBML_ALGEBRAIC_RULE); 436#ok($m->getRule($Rl-2)->getTypeCode() 437# == $LibSBML::SBML_ALGEBRAIC_RULE); 438#ok($m->getRule($Rl), undef); 439 440# create Reaction 441my $r = $m->createReaction(); $Rk++; 442$r->setId("reaction_0"); 443ok($r->getTypeCode() == $LibSBML::SBML_REACTION); 444ok($m->getNumReactions(),$Rk); 445ok($m->getReaction(0)->getTypeCode() == $LibSBML::SBML_REACTION); 446 447# add/get Reaction 448$r = new LibSBML::Reaction($level,$version); 449$r->setId("reaction_1"); 450$r->setReversible(1); 451$r->setFast(0); 452$m->addReaction($r); $Rk++; 453$m->getReaction($Rk-1)->setId('reaction_1'); 454$m->getReaction($Rk-1)->setName('reaction_2'); 455$r->setId("reaction_2"); 456$m->addReaction($r); $Rk++; 457$m->getReaction($Rk-1)->setId('reaction_2'); 458$m->getReaction($Rk-1)->setName('reaction_1'); 459ok($m->getNumReactions(), $Rk); 460ok($m->getReaction($Rk-1)->getTypeCode() 461 == $LibSBML::SBML_REACTION); 462ok($m->getReaction($Rk-1)->getId(), 'reaction_2'); 463ok($m->getReaction($Rk-1)->getName(), 'reaction_1'); 464ok($m->getReaction($Rk-2)->getTypeCode() 465 == $LibSBML::SBML_REACTION); 466ok($m->getReaction($Rk-2)->getId(), 'reaction_1'); 467ok($m->getReaction($Rk-2)->getName(), 'reaction_2'); 468ok($m->getReaction($Rk), undef); 469 470# get ReactionById 471ok($m->getReaction('reaction_1')->getName(), $m->getReaction(2)->getId()); 472ok($m->getReaction('reaction_2')->getName(), $m->getReaction(1)->getId()); 473ok($m->getReaction('reaction_3'), undef); 474 475 476# create Reactant 477$r = $m->createReaction(); 478$r = $m->createReaction(); $Rk += 2; 479my $sr = $m->createReactant(); 480ok(defined $sr); # note Reactant has no SBMLTypeCode 481ok($r->getReactant(0)->getTypeCode() 482 == $LibSBML::SBML_SPECIES_REFERENCE); 483ok($m->getNumReactions(), $Rk); 484$r = $m->getReaction($Rk-1); 485ok($r->getTypeCode() == $LibSBML::SBML_REACTION); 486ok($r->getNumReactants(), 1); 487ok(defined $r->getReactant(0)); # note Reactant has no SBMLTypeCode 488 489# create Reactant noReaction 490$mNO = new LibSBML::Model($level,$version); 491ok($mNO->getTypeCode() == $LibSBML::SBML_MODEL); 492ok($mNO->getNumReactions(), 0); 493ok($mNO->createReactant(), undef); 494 495# add/get Reactant 496$sr = new LibSBML::SpeciesReference($level,$version); 497$sr->setId("reaction_1"); 498$sr->setSpecies("ggh"); 499$sr->setConstant(0); 500$r->addReactant($sr); 501ok($r->getNumReactants(), 2); 502$sr = $r->getReactant(1); 503ok($sr->getSpecies(), "ggh"); 504 505# create Product 506$r = $m->createReaction(); 507$r = $m->createReaction(); $Rk += 2; 508$sr = $m->createProduct(); 509ok($r->getProduct(0)->getTypeCode() 510 == $LibSBML::SBML_SPECIES_REFERENCE); 511ok(defined $sr); # note Product has no SBMLTypeCode 512ok($m->getNumReactions(), $Rk); 513$r = $m->getReaction($Rk-1); 514ok($r->getNumProducts(), 1); 515ok(defined $r->getProduct(0)); # note Product has no SBMLTypeCode 516 517# create Product noReaction 518$mNO = new LibSBML::Model($level,$version); 519ok($mNO->getTypeCode() == $LibSBML::SBML_MODEL); 520ok($mNO->getNumReactions(), 0); 521ok($mNO->createProduct(), undef); 522 523# add/get Reactant 524$sr = new LibSBML::SpeciesReference($level,$version); 525$sr->setId("reaction_1"); 526$sr->setSpecies("ggh"); 527$sr->setConstant(0); 528$r->addProduct($sr); 529ok($r->getNumProducts(), 2); 530$sr = $r->getProduct(1); 531ok($sr->getSpecies(), "ggh"); 532 533# create Modifier 534$r = $m->createReaction(); 535$r = $m->createReaction(); $Rk += 2; 536my $msr = $m->createModifier(); 537ok(defined $msr); # note Modifier has no SBMLTypeCode 538ok($r->getModifier(0)->getTypeCode() 539 == $LibSBML::SBML_MODIFIER_SPECIES_REFERENCE); 540ok($m->getNumReactions(), $Rk); 541$r = $m->getReaction($Rk-1); 542ok($r->getNumModifiers(), 1); 543ok(defined $r->getModifier(0)); # note Modifier has no SBMLTypeCode 544 545# create Modifier noReaction 546$mNO = new LibSBML::Model($level,$version); 547ok($mNO->getTypeCode() == $LibSBML::SBML_MODEL); 548ok($mNO->getNumReactions(), 0); 549ok($mNO->createModifier(), undef); 550 551# add/get Reactant 552$sr = new LibSBML::ModifierSpeciesReference($level,$version); 553$sr->setSpecies("ggh"); 554$r->addModifier($sr); 555ok($r->getNumModifiers(), 2); 556$sr = $r->getModifier(1); 557ok($sr->getSpecies(), "ggh"); 558 559# create KineticLaw 560$r = $m->createReaction(); 561$r = $m->createReaction(); $Rk += 2; 562my $kl = $m->createKineticLaw(); 563ok($kl->getTypeCode() == $LibSBML::SBML_KINETIC_LAW); 564ok($m->getNumReactions(), $Rk); 565$r = $m->getReaction($Rk-2); 566ok($r->getKineticLaw(), undef); 567$r = $m->getReaction($Rk-1); 568ok($r->getKineticLaw()->getTypeCode() == $LibSBML::SBML_KINETIC_LAW); 569 570# create KineticLaw noReaction 571$mNO = new LibSBML::Model($level,$version); 572ok($mNO->getTypeCode() == $LibSBML::SBML_MODEL); 573ok($mNO->getNumReactions(), 0); 574ok($mNO->createKineticLaw(), undef); 575 576# create KineticLawParameter 577$r = $m->createReaction(); 578$r = $m->createReaction(); $Rk += 2; 579$kl = $m->createKineticLaw(); 580$p = $m->createKineticLawLocalParameter(); 581ok($m->getNumReactions(), $Rk); 582ok($m->getReaction($Rk-2)->getKineticLaw(), undef); 583ok($m->getReaction($Rk-1)->getKineticLaw()->getTypeCode() 584 == $LibSBML::SBML_KINETIC_LAW); 585ok($m->getReaction($Rk-1)->getKineticLaw()->getNumParameters(), 1); 586ok($m->getReaction($Rk-1)->getKineticLaw()->getNumLocalParameters(), 1); 587ok($m->getReaction($Rk-1)->getKineticLaw() 588 ->getParameter(0)->getTypeCode() == $LibSBML::SBML_LOCAL_PARAMETER); 589 590# create KineticLawParameter noReaction 591$mNO = new LibSBML::Model($level,$version); 592ok($mNO->getTypeCode() == $LibSBML::SBML_MODEL); 593ok($mNO->getNumReactions(), 0); 594ok($mNO->createKineticLawParameter(), undef); 595ok($mNO->createKineticLawLocalParameter(), undef); 596 597# create KineticLawParameter noKineticLaw 598ok($m->createReaction()->getKineticLaw(), undef); $Rk++; 599ok($m->createKineticLawParameter(), undef); 600ok($m->createKineticLawLocalParameter(), undef); 601 602# create Event 603my $e = $m->createEvent(); 604$e->setId('event_0'); 605my $t = new LibSBML::Trigger($level,$version); 606$t->setMath(LibSBML::parseFormula("lambda(x,x^3)")); 607$t->setInitialValue(0); 608$t->setPersistent(0); 609$e->setTrigger($t); 610$e->createEventAssignment(); 611ok($e->getTypeCode() == $LibSBML::SBML_EVENT); 612ok($m->getNumEvents(), 1); 613ok($m->getEvent(0)->getTypeCode() == $LibSBML::SBML_EVENT); 614 615# add/get Event 616$e = new LibSBML::Event($level,$version); 617$e->setId('event_1'); 618$e->setTrigger($t); 619$e->createEventAssignment(); 620$e->setUseValuesFromTriggerTime(1); 621ok($e->hasRequiredElements()); 622ok($e->hasRequiredAttributes()); 623ok($m->addEvent($e), $LibSBML::LIBSBML_OPERATION_SUCCESS); 624 625$m->getEvent(1)->setId('event_1'); 626$m->getEvent(1)->setName('event_2'); 627$e = new LibSBML::Event($level,$version); 628$e->setId('event_2'); 629$e->setTrigger($t); 630$e->setUseValuesFromTriggerTime(1); 631$e->createEventAssignment(); 632$m->addEvent($e); 633$m->getEvent(2)->setId('event_2'); 634$m->getEvent(2)->setName('event_1'); 635ok($m->getNumEvents(), 3); 636ok($m->getEvent(0)->getTypeCode() == $LibSBML::SBML_EVENT); 637ok($m->getEvent(0)->getId(), 'event_0'); 638ok($m->getEvent(0)->getName(), ''); 639ok($m->getEvent(1)->getTypeCode() == $LibSBML::SBML_EVENT); 640ok($m->getEvent(1)->getId(), 'event_1'); 641ok($m->getEvent(1)->getName(), 'event_2'); 642ok($m->getEvent(2)->getTypeCode() == $LibSBML::SBML_EVENT); 643ok($m->getEvent(2)->getId(), 'event_2'); 644ok($m->getEvent(2)->getName(), 'event_1'); 645ok($m->getEvent(3), undef); 646 647# add/get Event with delay 648$e = new LibSBML::Event($level,$version); 649$e->setId('event_new'); 650$e->setTrigger($t); 651my $del = new LibSBML::Delay($level,$version); 652$del->setMath(LibSBML::parseFormula("1")); 653$e->setDelay($del); 654$e->setUseValuesFromTriggerTime(1); 655$m->addEvent($e); 656$m->getEvent(3)->setId('event_1'); 657ok($m->getNumEvents(), 4); 658ok($m->getEvent(3)->getTypeCode() == $LibSBML::SBML_EVENT); 659ok($m->getEvent(3)->getId(), 'event_1'); 660 661# get EventById 662ok($m->getEvent('event_1')->getName(), $m->getEvent(2)->getId()); 663ok($m->getEvent('event_2')->getName(), $m->getEvent(1)->getId()); 664ok($m->getEvent('event_3'), undef); 665 666# create EventAssignment 667$m->createEvent(); 668$m->getEvent(3)->setId('event_3'); 669$m->getEvent(3)->setTrigger($t); 670my $ea = $m->createEventAssignment(); 671ok($ea->getTypeCode() == $LibSBML::SBML_EVENT_ASSIGNMENT); 672ok($m->getNumEvents(), 5); 673ok($m->getEvent(4)->getNumEventAssignments(), 1); 674ok($m->getEvent(4)->getEventAssignment(0)->getTypeCode() 675 == $LibSBML::SBML_EVENT_ASSIGNMENT); 676 677# create EventAssignment noEvent 678$mNO = new LibSBML::Model($level,$version); 679ok($mNO->getTypeCode() == $LibSBML::SBML_MODEL); 680ok($mNO->getNumEvents(), 0); 681ok($mNO->createEventAssignment(), undef); 682__END__ 683