DysectAPI::DysectErrorCode Backend::bindStream(int tag, Stream* stream) { int index = Domain::tagToId(tag); map<tag_t, Domain*> domainMap = Domain::getDomainMap(); map<tag_t, Domain*>::iterator domainIter = domainMap.find(index); if(domainIter == domainMap.end()) { return Err::warn(StreamError, "tag unknown"); } Domain* dom = domainIter->second; if(!dom) { return Err::warn(Error, "NULL domain"); } dom->setStream(stream); missingBindings.erase(index); Err::verbose(true, "Domain %x bound to stream %lx", dom->getId(), (long)stream); if(missingBindings.size() == 0) { if(controlStream != 0) { // XXX: Will always tell that everything went well (val = 0) Err::verbose("All domains bound to streams - send ack"); ackBindings(); } else { streamBindAckSent = false; } state = ready; } return OK; }
DysectAPI::DysectErrorCode Backend::handleTimerActions() { pthread_mutex_lock(&probesPendingActionMutex); if (probesPendingAction.size() > 0) { DYSECTVERBOSE(true, "Handle timer actions"); vector<Probe*>::iterator probeIter = probesPendingAction.begin(); for(;probeIter != probesPendingAction.end(); probeIter++) { Probe* probe = *probeIter; Domain* dom = probe->getDomain(); DYSECTVERBOSE(true, "Sending enqueued actions for timed probe: %x", dom->getId()); probe->sendEnqueuedActions(); if(probe->numWaitingProcs() > 0) { ProcessSet::ptr lprocset = probe->getWaitingProcs(); probe->enableChildren(lprocset); if(probe->getLifeSpan() == fireOnce) probe->disable(lprocset); lprocset->continueProcs(); probe->releaseWaitingProcs(); } } probesPendingAction.clear(); } pthread_mutex_unlock(&probesPendingActionMutex); return OK; }
DysectAPI::DysectErrorCode Backend::handleTimerEvents() { if(SafeTimer::anySyncReady()) { Err::verbose(true, "Handle timer events"); vector<Probe*> readyProbes = SafeTimer::getAndClearSyncReady(); vector<Probe*>::iterator probeIter = readyProbes.begin(); for(;probeIter != readyProbes.end(); probeIter++) { Probe* probe = *probeIter; Domain* dom = probe->getDomain(); Err::verbose(true, "Sending enqueued notifications for timed probe: %x", dom->getId()); probe->sendEnqueuedNotifications(); probe->sendEnqueuedActions(); } } return OK; }
DysectAPI::DysectErrorCode Backend::handleTimerEvents() { if(SafeTimer::anySyncReady()) { DYSECTVERBOSE(true, "Handle timer notifications"); vector<Probe*> readyProbes = SafeTimer::getAndClearSyncReady(); vector<Probe*>::iterator probeIter = readyProbes.begin(); for(;probeIter != readyProbes.end(); probeIter++) { Probe* probe = *probeIter; Domain* dom = probe->getDomain(); DYSECTVERBOSE(true, "Sending enqueued notifications for timed probe: %x", dom->getId()); probe->sendEnqueuedNotifications(); pthread_mutex_lock(&probesPendingActionMutex); probesPendingAction.push_back(probe); pthread_mutex_unlock(&probesPendingActionMutex); } } return OK; }
DysectAPI::DysectErrorCode Frontend::listen() { int ret; int idle = 0; // Install handler for (ctrl-c) abort // signal(SIGINT, Frontend::interrupt); // printf("Waiting for events (! denotes captured event)\n"); printf("Hit <enter> to stop session\n"); fflush(stdout); { do { // select() overwrites fd_set with ready fd's // Copy fd_set structure fd_set fdRead = Domain::getFdSet(); if(breakOnEnter) FD_SET(0, &fdRead); //STDIN struct timeval timeout; timeout.tv_sec = Frontend::selectTimeout; timeout.tv_usec = 0; ret = select(Domain::getMaxFd() + 1, &fdRead, NULL, NULL, &timeout); if(ret < 0) { //return Err::warn(DysectAPI::Error, "select() failed to listen on file descriptor set."); return DysectAPI::OK; } if(FD_ISSET(0, &fdRead) && breakOnEnter) { Err::info(true, "Stopping session - enter key was hit"); break; } // Look for owners vector<Domain*> doms = Domain::getFdsFromSet(fdRead); if(doms.size() == 0) { if(Frontend::breakOnTimeout && (--Frontend::numEvents < 0)) { Err::info(true, "Stopping session - increase numEvents for longer sessions"); break; } } else { printf("\n"); fflush(stdout); } for(int i = 0; i < doms.size(); i++) { Domain* dom = doms[i]; PacketPtr packet; int tag; if(!dom->getStream()) { return Err::warn(Error, "Stream not available for domain %x", dom->getId()); } do { ret = dom->getStream()->recv(&tag, packet, false); if(ret == -1) { return Err::warn(Error, "Receive error"); } else if(ret == 0) { break; } int count; char *payload; int len; if(packet->unpack("%d %auc", &count, &payload, &len) == -1) { return Err::warn(Error, "Unpack error"); } if(Domain::isProbeEnabledTag(tag)) { Domain* dom = 0; if(!Domain::getDomainFromTag(dom, tag)) { Err::warn(false, "Could not get domain from tag %x", tag); } else { //Err::info(true, "[%d] Probe %x enabled (payload size %d)", count, dom->getId(), len); //Err::info(true, "[%d] Probe %x enabled", count, dom->getId()); } Probe* probe = dom->owner; if(!probe) { Err::warn(false, "Probe object not found for %x", dom->getId()); } else { probe->handleActions(count, payload, len); } // Empty bodied probe // Check wether backends are waiting for releasing processes if(dom->isBlocking()) { dom->sendContinue(); } } } while(1); dom->getStream()->clear_DataNotificationFd(); } } while(running); } }
Process::cb_ret_t Backend::handleEvent(Dyninst::ProcControlAPI::Process::const_ptr curProcess, Dyninst::ProcControlAPI::Thread::const_ptr curThread, DysectAPI::Event* dysectEvent) { Process::cb_ret_t retState = Process::cbDefault; // Let event know that it was triggered. // Used for event composition Walker* proc = (Walker*)curProcess->getData(); if(!proc) { Err::warn(true, "Missing payload in process object: could not get walker"); } else { dysectEvent->triggered(curProcess, curThread); // Find owning probe Probe* probe = dysectEvent->getOwner(); if(!probe) { Err::warn(true, "Probe could not be found for event object"); } else { // If enqueued disabled - stop and await //if(probe->isDisabled(curProcess)) { // probe->addWaitingProc(curProcess); // return Process::cbProcStop; // //return Process::cbDefault; //} // Composed events might require several events being triggered if(probe->wasTriggered(curProcess, curThread)) { // Required events indeed triggered // Evaluate conditions ConditionResult result; Err::verbose(true, "Evaluate condition!"); if(probe->evaluateConditions(result, curProcess, curThread) == DysectAPI::OK) { if(result == ResolvedTrue) { Err::verbose(true, "Condition satisfied"); Domain* dom = probe->getDomain(); assert(dom != 0); if(dom->getWaitTime() == Wait::inf) { // Block strictly, until all processes have shown up Err::verbose(true, "Enqueuing notification for static domain"); probe->enqueueNotifyPacket(); probe->enqueueAction(curProcess, curThread); } else if(dom->getWaitTime() != Wait::NoWait) { if(!DysectAPI::SafeTimer::syncTimerRunning(probe)) { Err::verbose(true, "Start timer and enqueue: %x", dom->getId()); DysectAPI::SafeTimer::startSyncTimer(probe); } else { Err::verbose(true, "Timer already running - just enqueue"); } if(probe->doNotify()) { probe->enqueueNotifyPacket(); } probe->enqueueAction(curProcess, curThread); } else { // No-wait probe if(probe->doNotify()) { probe->notifyTriggered(); } probe->triggerAction(curProcess, curThread); } if(probe->waitForOthers()) { Err::verbose(true, "Wait for group members"); probe->addWaitingProc(curProcess); if((dom->getWaitTime() == Wait::inf) && (probe->staticGroupWaiting())) { Err::verbose(true, "Sending enqueued notifications"); if(probe->doNotify()) { probe->sendEnqueuedNotifications(); } probe->sendEnqueuedActions(); } retState = Process::cbThreadStop; } else { Err::verbose(true, "Enable children for probe %x", dom->getId()); probe->enqueueEnable(curProcess); //Err::verbose(true, "Stopping thread in process %d", curProcess->getPid()); probe->addWaitingProc(curProcess); //retState = Process::cbThreadStop; retState = Process::cbProcStop; } if(probe->getLifeSpan() == fireOnce) { Err::verbose(true, "Requesting disablement of probe"); probe->enqueueDisable(curProcess); //Err::verbose(true, "Stopping thread in process %d", curProcess->getPid()); probe->addWaitingProc(curProcess); //retState = Process::cbThreadStop; retState = Process::cbProcStop; } #if 0 } else if(result == CollectiveResolvable) { // Block process and await resolution of collective operations //probe->addWaitingCond(curProcess, curThread); Err::warn(false, "Condition stalls not yet supported"); Err::verbose(true, "Stopping thread in process %d", curProcess->getPid()); retState = Process::cbProcStop; //retState = Process::cbThreadStop; #endif } else if(result == ResolvedFalse) { if(probe->getLifeSpan() == fireOnce) { Err::verbose(true, "Requesting disablement of probe"); // Get out of the way probe->enqueueDisable(curProcess); retState = Process::cbProcStop; } else { retState = Process::cbProcContinue; //probe->addWaitingProc(curProcess); } // probe->addWaitingProc(curProcess); } } else { Err::warn(false, "Could not evaluate conditions for probe"); } } } } return retState; }
void readSpatialSBML() { SBMLDocument *document2 = readSBML("spatial_example2.xml"); Model *model2 = document2->getModel(); Compartment *comp; SpatialCompartmentPlugin* cplugin; for (unsigned int i = 0; i < model2->getNumCompartments(); i++) { comp = model2->getCompartment(i); cout << "Compartment" << i << ": " << comp->getId() << endl; cplugin = static_cast<SpatialCompartmentPlugin*>(comp->getPlugin("spatial")); if (cplugin->getCompartmentMapping()->isSetId()) { cout << "Comp" << i << " CMSpId: " << cplugin->getCompartmentMapping()->getId() << endl; cout << "Comp" << i << " CM_DType: " << cplugin->getCompartmentMapping()->getDomainType() << endl; cout << "Comp" << i << " CM_UnitSz: " << cplugin->getCompartmentMapping()->getUnitSize() << endl; } } Species *sp; SpatialSpeciesPlugin* srplugin; for (unsigned int i = 0; i < model2->getNumSpecies(); i++) { sp = model2->getSpecies(i); cout << "Species" << i << ": " << sp->getId() << endl; srplugin = static_cast<SpatialSpeciesPlugin*>(sp->getPlugin("spatial")); if (srplugin->getIsSpatial()) { cout << "species" << i << " isSpatial: " << srplugin->getIsSpatial() << endl; } } Parameter *param; SpatialParameterPlugin* pplugin; for (unsigned int i = 0; i < model2->getNumParameters(); i++) { param = model2->getParameter(i); cout << "Parameter" << i << ": " << param->getId() << endl; pplugin = static_cast<SpatialParameterPlugin*>(param->getPlugin("spatial")); if (pplugin->isSetSpatialSymbolReference()) { cout << "Parameter" << i << " SpRefId: " << pplugin->getSpatialSymbolReference()->getSpatialRef() << endl; } if (pplugin->isSetDiffusionCoefficient()) { cout << "Diff_" << i << " SpeciesVarId: " << pplugin->getDiffusionCoefficient()->getVariable() << endl; cout << "Diff_" << i << " Type: " << DiffusionKind_toString(pplugin->getDiffusionCoefficient()->getType()) << endl; for (unsigned int j = 0; j < pplugin->getDiffusionCoefficient()->getNumCoordinateReferences(); ++j) cout << "Diff_" << i << " SpCoordIndex " << j << " : " << CoordinateKind_toString(pplugin->getDiffusionCoefficient()->getCoordinateReference(j) ->getCoordinate()) << endl; } if (pplugin->isSetAdvectionCoefficient()) { cout << "Adv_" << i << " SpeciesVarId: " << pplugin->getAdvectionCoefficient()->getVariable() << endl; cout << "Adv_" << i << " SpCoordIndex: " << CoordinateKind_toString(pplugin->getAdvectionCoefficient()->getCoordinate()) << endl; } if (pplugin->isSetBoundaryCondition()) { cout << "BC_" << i << " SpeciesVarId: " << pplugin->getBoundaryCondition()->getVariable() << endl; cout << "BC_" << i << " SpCoordBoundary: " << pplugin->getBoundaryCondition()->getCoordinateBoundary() << endl; cout << "BC_" << i << " SpBoundaryType: " << pplugin->getBoundaryCondition()->getType() << endl; } } Reaction *rxn; SpatialReactionPlugin* rplugin; for (unsigned int i = 0; i < model2->getNumReactions(); i++) { rxn = model2->getReaction(i); cout << "Reaction" << i << ": " << rxn->getId() << endl; rplugin = static_cast<SpatialReactionPlugin*>(rxn->getPlugin("spatial")); if (rplugin->getIsLocal()) { cout << "rxn" << i << " isLocal: " << rplugin->getIsLocal() << endl; } } Rule *rule; for (unsigned int i = 0; i < model2->getNumRules(); i++) { rule = model2->getRule(i); cout << "Rule" << i << ": " << rule->getVariable() << endl; } // // Get a SpatialModelPlugin object plugged in the model object. // // The type of the returned value of SBase::getPlugin() function is // SBasePlugin*, and thus the value needs to be cast for the // corresponding derived class. // SpatialModelPlugin* mplugin2; mplugin2 = static_cast<SpatialModelPlugin*>(model2->getPlugin("spatial")); cout << "URI: " << mplugin2->getURI() << endl; cout << "prefix: " << mplugin2->getPrefix() << endl; // get a Geometry object via SpatialModelPlugin object. Geometry* geometry2 = mplugin2->getGeometry(); cout << "Geometry coordSystem: " << geometry2->getCoordinateSystem() << endl; // get a CoordComponent object via the Geometry object. CoordinateComponent* coordComp = geometry2->getCoordinateComponent(0); std::cout << "CoordComponent Id: " << coordComp->getId() << std::endl; std::cout << "CoordComponent type: " << CoordinateKind_toString( coordComp->getType()) << std::endl; std::cout << "CoordComponent sbmlUnit: " << coordComp->getUnit() << std::endl; if (coordComp->isSetBoundaryMin()) { Boundary* minX = coordComp->getBoundaryMin(); std::cout << "minX name: " << minX->getId() << std::endl; std::cout << "minX value: " << minX->getValue() << std::endl; } if (coordComp->isSetBoundaryMax()) { Boundary* maxX = coordComp->getBoundaryMax(); std::cout << "maxX name: " << maxX->getId() << std::endl; std::cout << "maxX value: " << maxX->getValue() << std::endl; } // get a DomainType object via the Geometry object. DomainType* domainType2 = geometry2->getDomainType(0); std::cout << "DomainType Id: " << domainType2->getId() << std::endl; std::cout << "DomainType spatialDim: " << domainType2->getSpatialDimension() << std::endl; // get a Domain object via the Geometry object. Domain* domain = geometry2->getDomain(0); std::cout << "Domain1 Id: " << domain->getId() << std::endl; std::cout << "Domain1 domainType: " << domain->getDomainType() << std::endl; // get an internal point via the domain object InteriorPoint* internalPt = domain->getInteriorPoint(0); std::cout << "InternalPt_1 coord1: " << internalPt->getCoord1() << std::endl; // get a Domain object via the Geometry object. domain = geometry2->getDomain(1); std::cout << "Domain2 Id: " << domain->getId() << std::endl; std::cout << "Domain2 domainType: " << domain->getDomainType() << std::endl; // get an internal point via the domain object internalPt = domain->getInteriorPoint(0); std::cout << "InternalPt_2 coord1: " << internalPt->getCoord1() << std::endl; // get an AdjacentDomains object via the Geometry object. AdjacentDomains* adjDomain = geometry2->getAdjacentDomains(0); std::cout << "AdjDomain Id: " << adjDomain->getId() << std::endl; std::cout << "AdjDomain domain1: " << adjDomain->getDomain1() << std::endl; std::cout << "AdjDomain domain2: " << adjDomain->getDomain2() << std::endl; // get an AnalyticGeometry object via the Geometry object. GeometryDefinition* gd; for (unsigned int i = 0; i < geometry2->getNumGeometryDefinitions(); i++) { gd = geometry2->getGeometryDefinition(i); if (gd->isAnalyticGeometry()) { AnalyticGeometry* analyticalGeom = static_cast<AnalyticGeometry*>(gd); std::cout << "AnalGeom Id: " << analyticalGeom->getId() << std::endl; // analVol from analGeom. AnalyticVolume* av = analyticalGeom->getAnalyticVolume(0); std::cout << "AnalVol Id: " << av->getId() << std::endl; std::cout << "AnalVol domainType: " << av->getDomainType() << std::endl; std::cout << "AnalVol funcType: " << av->getFunctionType() << std::endl; std::cout << "AnalVol ordinal: " << av->getOrdinal() << std::endl; const ASTNode* mathNode = av->getMath(); char* mathStr = writeMathMLToString(mathNode); std::cout << "AnalVol math: " << mathStr << std::endl; } if (gd->isSampledFieldGeometry()) { SampledFieldGeometry* sfGeom = static_cast<SampledFieldGeometry*>(gd); std::cout << "SampledFieldGeom Id: " << sfGeom->getId() << std::endl; // sampledField from sfGeom SampledField* sf = sfGeom->getSampledField(); std::cout << "SampledField Id: " << sf->getId() << std::endl; std::cout << "SampledField dataType: " << sf->getDataType() << std::endl; std::cout << "SampledField interpolation: " << sf->getInterpolationType() << std::endl; std::cout << "SampledField encoding: " << sf->getEncoding() << std::endl; std::cout << "SampledField numSamples1: " << sf->getNumSamples1() << std::endl; std::cout << "SampledField numSamples2: " << sf->getNumSamples2() << std::endl; std::cout << "SampledField numSamples3: " << sf->getNumSamples3() << std::endl; const ImageData* id = sf->getImageData(); int* samples = new int[id->getSamplesLength()]; id->getSamples(samples); std::cout << "ImageData samples[0]: " << samples[0] << std::endl; std::cout << "ImageData dtype: " << id->getDataType() << std::endl; std::cout << "ImageData samplesLen: " << id->getSamplesLength() << std::endl; // sampledVolVol from sfGeom. SampledVolume* sv = sfGeom->getSampledVolume(0); std::cout << "SampledVol Id: " << sv->getId() << std::endl; std::cout << "SampledVol domainType: " << sv->getDomainType() << std::endl; std::cout << "SampledVol sampledVal: " << sv->getSampledValue() << std::endl; std::cout << "SampledVol min: " << sv->getMinValue() << std::endl; std::cout << "SampledVol max: " << sv->getMaxValue() << std::endl; } } delete document2; }
END_TEST START_TEST (test_SpatialExtension_read_L3V1V1_defaultNS) { string file = TestDataDirectory; file += "/read_L3V1V1_defaultNS.xml"; SBMLDocument *document = readSBMLFromFile(file.c_str()); string sbmlDoc = writeSBMLToStdString(document); Model *model = document->getModel(); //document->printErrors(); fail_unless(model != NULL); //fail_unless(document->getNumErrors() == 0); // model : compartment fail_unless(model->getNumCompartments() == 1); Compartment *comp = model->getCompartment(0); // compartment : compartmentMapping SpatialCompartmentPlugin* cplugin = static_cast<SpatialCompartmentPlugin*>(comp->getPlugin("spatial")); fail_unless(cplugin != NULL); CompartmentMapping *cMapping = cplugin->getCompartmentMapping(); if (cMapping->isSetId()) { fail_unless(cMapping->getId() == "compMap1"); fail_unless(cMapping->getDomainType() == "dtype1"); fail_unless(cMapping->getUnitSize() == 1); } // model : species 1 fail_unless(model->getNumSpecies() == 2); Species *sp = model->getSpecies(0); SpatialSpeciesPlugin* srplugin = static_cast<SpatialSpeciesPlugin*>(sp->getPlugin("spatial")); fail_unless(srplugin != NULL); fail_unless(srplugin->getIsSpatial() == true); // model : species 2 sp = model->getSpecies(1); srplugin = static_cast<SpatialSpeciesPlugin*>(sp->getPlugin("spatial")); fail_unless(srplugin != NULL); fail_unless(srplugin->getIsSpatial() == true); // model : parameters (species diffusion, advection coeffs, species boundary conditions, coordinate components from Geometry fail_unless(model->getNumParameters() == 5); // parameter 0 : diffusionCoefficient Parameter *param = model->getParameter(0); SpatialParameterPlugin* pplugin = static_cast<SpatialParameterPlugin*>(param->getPlugin("spatial")); fail_unless(pplugin != NULL); fail_unless(pplugin->isSpatialParameter() == true); fail_unless(pplugin->getType() == SBML_SPATIAL_DIFFUSIONCOEFFICIENT); DiffusionCoefficient *diffCoeff = pplugin->getDiffusionCoefficient(); fail_unless(diffCoeff->getVariable() == "ATPc"); fail_unless(diffCoeff->isSetCoordinateReference1()); fail_unless(diffCoeff->getCoordinateReference1() == SPATIAL_COORDINATEKIND_CARTESIAN_X); // parameter 1 : advectionCoefficient param = model->getParameter(1); pplugin = static_cast<SpatialParameterPlugin*>(param->getPlugin("spatial")); fail_unless(pplugin != NULL); fail_unless(pplugin->isSpatialParameter() == true); fail_unless(pplugin->getType() == SBML_SPATIAL_ADVECTIONCOEFFICIENT); AdvectionCoefficient *advCoeff = pplugin->getAdvectionCoefficient(); fail_unless(advCoeff->getVariable() == "ATPc"); fail_unless(advCoeff->getCoordinate() == SPATIAL_COORDINATEKIND_CARTESIAN_X); // parameter 2 : boundaryCondition X param = model->getParameter(2); pplugin = static_cast<SpatialParameterPlugin*>(param->getPlugin("spatial")); fail_unless(pplugin != NULL); fail_unless(pplugin->isSpatialParameter() == true); fail_unless(pplugin->getType() == SBML_SPATIAL_BOUNDARYCONDITION); BoundaryCondition *bc = pplugin->getBoundaryCondition(); fail_unless(bc->getVariable() == "ATPc"); fail_unless(bc->getCoordinateBoundary() == "Xmin"); fail_unless(bc->getType() == SPATIAL_BOUNDARYKIND_DIRICHLET); // parameter 3 : SpatialSymbolReference (coordinateComponent from geometry) param = model->getParameter(3); pplugin = static_cast<SpatialParameterPlugin*>(param->getPlugin("spatial")); fail_unless(pplugin != NULL); SpatialSymbolReference *spSymRef = pplugin->getSpatialSymbolReference(); fail_unless(spSymRef->getSpatialRef() == "coordComp1"); // model : reaction fail_unless(model->getNumReactions() == 1); Reaction *rxn = model->getReaction(0); SpatialReactionPlugin* rplugin = static_cast<SpatialReactionPlugin*>(rxn->getPlugin("spatial")); fail_unless(rplugin != NULL); fail_unless(rplugin->getIsLocal() == true); // get the Geometry SpatialModelPlugin* mplugin = static_cast<SpatialModelPlugin*>(model->getPlugin("spatial")); fail_unless(mplugin != NULL); Geometry *geometry = mplugin->getGeometry(); fail_unless(geometry != NULL); fail_unless(geometry->getPackageName() == "spatial"); fail_unless(geometry->getCoordinateSystem() == SPATIAL_GEOMETRYKIND_CARTESIAN); // geometry coordinateComponent fail_unless(geometry->getNumCoordinateComponents() == 1); fail_unless(geometry->getListOfCoordinateComponents()->getPackageName() == "spatial"); CoordinateComponent* coordComp = geometry->getCoordinateComponent(0); fail_unless(coordComp->getId() == "coordComp1"); fail_unless(coordComp->getType() == SPATIAL_COORDINATEKIND_CARTESIAN_X); fail_unless(coordComp->getUnit() == "umeter"); fail_unless(coordComp->getPackageName() == "spatial"); // boundaryMin and boundayMax within coordinateComponent Boundary *minX = coordComp->getBoundaryMin(); fail_unless(minX->getId() == "Xmin"); fail_unless(minX->getValue() == 0); fail_unless(minX->getPackageName() == "spatial"); Boundary *maxX = coordComp->getBoundaryMax(); fail_unless(maxX->getId() == "Xmax"); fail_unless(maxX->getValue() == 10); fail_unless(maxX->getPackageName() == "spatial"); // geometry domainType fail_unless(geometry->getNumDomainTypes() == 1); fail_unless(geometry->getListOfDomainTypes()->getPackageName() == "spatial"); DomainType *domainType = geometry->getDomainType(0); fail_unless(domainType->getId() == "dtype1"); fail_unless(domainType->getSpatialDimensions() == 3); fail_unless(domainType->getPackageName() == "spatial"); // geometry domains fail_unless(geometry->getNumDomains() == 2); fail_unless(geometry->getListOfDomains()->getPackageName() == "spatial"); Domain* domain = geometry->getDomain(0); fail_unless(domain->getId() == "domain1"); fail_unless(domain->getDomainType() == "dtype1"); //fail_unless(domain->getImplicit() == false); //fail_unless(domain->getShapeId() == "circle"); fail_unless(domain->getPackageName() == "spatial"); // interiorPoints in Domain fail_unless(domain->getNumInteriorPoints() == 1); fail_unless(domain->getListOfInteriorPoints()->getPackageName() == "spatial"); InteriorPoint* interiorPt = domain->getInteriorPoint(0); fail_unless(interiorPt->getCoord1() == 1); fail_unless(interiorPt->getPackageName() == "spatial"); // second domain in geometry domain = geometry->getDomain(1); fail_unless(domain->getId() == "domain2"); fail_unless(domain->getDomainType() == "dtype1"); //fail_unless(domain->getImplicit() == false); //fail_unless(domain->getShapeId() == "square"); fail_unless(domain->getPackageName() == "spatial"); // Domain : interiorPoints fail_unless(domain->getNumInteriorPoints() == 1); fail_unless(domain->getListOfInteriorPoints()->getPackageName() == "spatial"); interiorPt = domain->getInteriorPoint(0); fail_unless(interiorPt->getCoord1() == 5); fail_unless(interiorPt->getPackageName() == "spatial"); // geometry adjacentDomains fail_unless(geometry->getNumAdjacentDomains() == 1); fail_unless(geometry->getListOfAdjacentDomains()->getPackageName() == "spatial"); AdjacentDomains* adjDomain = geometry->getAdjacentDomains(0); fail_unless(adjDomain->getId() == "adjDomain1"); fail_unless(adjDomain->getDomain1() == "domain1"); fail_unless(adjDomain->getDomain2() == "domain2"); fail_unless(adjDomain->getPackageName() == "spatial"); // geometry : geometryDefinitions fail_unless(geometry->getNumGeometryDefinitions() == 2); fail_unless(geometry->getListOfGeometryDefinitions()->getPackageName() == "spatial"); GeometryDefinition *gd = geometry->getGeometryDefinition(0); AnalyticGeometry *analyticGeom = static_cast<AnalyticGeometry*>(gd); fail_unless(analyticGeom->getId() == "analyticGeom1"); fail_unless(analyticGeom->getPackageName() == "spatial"); // AnalyticGeometry : analyticVolumes fail_unless(analyticGeom->getNumAnalyticVolumes() == 1); fail_unless(analyticGeom->getListOfAnalyticVolumes()->getPackageName() == "spatial"); AnalyticVolume* av = analyticGeom->getAnalyticVolume(0); fail_unless(av->getId() == "analyticVol1"); fail_unless(av->getDomainType() == "dtype1"); fail_unless(av->getFunctionType() == SPATIAL_FUNCTIONKIND_LAYERED); fail_unless(av->getOrdinal() == 1); fail_unless(av->getPackageName() == "spatial"); // ??????Math???? // geometry : sampledFieldGeometry gd = geometry->getGeometryDefinition(1); SampledFieldGeometry* sfGeom = static_cast<SampledFieldGeometry*>(gd); fail_unless(sfGeom->getId() == "sampledFieldGeom1"); fail_unless(sfGeom->getPackageName() == "spatial"); // sampledFieldGeometry : SampledVolumes fail_unless(sfGeom->getNumSampledVolumes() == 1); fail_unless(sfGeom->getListOfSampledVolumes()->getPackageName() == "spatial"); SampledVolume* sv = sfGeom->getSampledVolume(0); fail_unless(sv->getId() == "sv_1"); fail_unless(sv->getDomainType() == "dtype1"); fail_unless(sv->getSampledValue() == 128); fail_unless(sv->getMinValue() == 0); fail_unless(sv->getMaxValue() == 255); fail_unless(sv->getPackageName() == "spatial"); // sampledFieldGeometry : SampledField SampledField* sf = geometry->getSampledField( sfGeom->getSampledField() ); fail_unless(sf->getId() == "sampledField1"); fail_unless(sf->getDataType() == SPATIAL_DATAKIND_UINT8); fail_unless(sf->getInterpolationType() == SPATIAL_INTERPOLATIONKIND_LINEAR); fail_unless(sf->getCompression() == SPATIAL_COMPRESSIONKIND_UNCOMPRESSED); fail_unless(sf->getNumSamples1() == 4); fail_unless(sf->getNumSamples2() == 4); fail_unless(sf->getNumSamples3() == 2); fail_unless(sf->getPackageName() == "spatial"); // sampledField : ImageData fail_unless(sf->getSamplesLength() == 32); int* samples = new int[sf->getSamplesLength()]; sf->getSamples(samples); fail_unless(samples[0] == 0); string s2 = writeSBMLToStdString(document); fail_unless(sbmlDoc==s2); delete document; delete[] samples; }