int main() { SimTK::Array_<std::string> failures; // get all registered Components SimTK::Array_<Component*> availableComponents; // starting with type Frame ArrayPtrs<Frame> availableFrames; Object::getRegisteredObjectsOfGivenType(availableFrames); for (int i = 0; i < availableFrames.size(); ++i) { availableComponents.push_back(availableFrames[i]); } // then type Joint ArrayPtrs<Joint> availableJoints; Object::getRegisteredObjectsOfGivenType(availableJoints); for (int i = 0; i < availableJoints.size(); ++i) { availableComponents.push_back(availableJoints[i]); } // continue with Constraint, Actuator, Frame, ... //Example of an updated force that passes ArrayPtrs<PointToPointSpring> availablePointToPointSpring; Object::getRegisteredObjectsOfGivenType(availablePointToPointSpring); availableComponents.push_back(availablePointToPointSpring[0]); for (unsigned int i = 0; i < availableComponents.size(); i++) { try { testComponent(*availableComponents[i]); } catch (const std::exception& e) { cout << "*******************************************************\n"; cout<< "FAILURE: " << availableComponents[i]->getConcreteClassName() << endl; cout<< e.what() << endl; failures.push_back(availableComponents[i]->getConcreteClassName()); } } if (!failures.empty()) { cout << "*******************************************************\n"; cout << "Done, with failure(s): " << failures << endl; cout << failures.size() << "/" << availableComponents.size() << " components failed test." << endl; cout << 100 * (availableComponents.size() - failures.size()) / availableComponents.size() << "% components passed." << endl; cout << "*******************************************************\n" << endl; return 1; } cout << "\ntestComponents PASSED. " << availableComponents.size() << " components were tested." << endl; }
int main() { try { Model testModel; srand((unsigned)time(0)); // for Body, Joint, Constraint, Force, Marker, ContactGeometry, Controller and Probe ArrayPtrs<OpenSim::Body> availableBodyTypes; Object::getRegisteredObjectsOfGivenType<OpenSim::Body>(availableBodyTypes); for (int i=0; i< availableBodyTypes.getSize(); i++){ Object* clone = availableBodyTypes[i]->clone(); Object* randClone = randomize(clone); testModel.addBody(Body::safeDownCast(randClone)); const Body& inModel = testModel.getBodySet().get(randClone->getName()); ASSERT(inModel == *randClone); randClone->print("bodyTestPrint.xml"); } ArrayPtrs<OpenSim::Joint> availablJointTypes; Object::getRegisteredObjectsOfGivenType<OpenSim::Joint>(availablJointTypes); for (int i = 0; i< availablJointTypes.getSize(); i++){ Object* clone = availablJointTypes[i]->clone(); Object* randClone = randomize(clone); testModel.addJoint(Joint::safeDownCast(randClone)); } ArrayPtrs<OpenSim::Constraint> availableConstraintTypes; Object::getRegisteredObjectsOfGivenType<OpenSim::Constraint>(availableConstraintTypes); for (int i = 0; i< availableConstraintTypes.getSize(); i++){ Object* clone = availableConstraintTypes[i]->clone(); Object* randClone = randomize(clone); testModel.addConstraint(Constraint::safeDownCast(randClone)); } ArrayPtrs<OpenSim::Force> availableForceTypes; Object::getRegisteredObjectsOfGivenType<OpenSim::Force>(availableForceTypes); for (int i=0; i< availableForceTypes.getSize(); i++){ Object* clone = availableForceTypes[i]->clone(); Object* randClone = randomize(clone); testModel.addForce(Force::safeDownCast(randClone)); } ArrayPtrs<OpenSim::Controller> availableControllerTypes; Object::getRegisteredObjectsOfGivenType<OpenSim::Controller>(availableControllerTypes); for (int i=0; i< availableControllerTypes.getSize(); i++){ Object* clone = availableControllerTypes[i]->clone(); Object* randClone = randomize(clone); testModel.addController(Controller::safeDownCast(randClone)); } ArrayPtrs<OpenSim::Probe> availableProbeTypes; Object::getRegisteredObjectsOfGivenType<OpenSim::Probe>(availableProbeTypes); for (int i=0; i< availableProbeTypes.getSize(); i++){ Object* clone = availableProbeTypes[i]->clone(); Object* randClone = randomize(clone); testModel.addProbe(Probe::safeDownCast(randClone)); } testModel.print("allComponents.osim"); Model deserializedModel("allComponents.osim", false); ASSERT(testModel == deserializedModel, "deserializedModel FAILED to match original model."); } catch (const Exception& e) { e.print(cerr); return 1; } cout << "Done" << endl; return 0; }
int main() { // Need to force Windows to load Actuators library if there are no // explicit uses. LoadOpenSimLibrary("osimActuators"); try { Model testModel; srand((unsigned)time(0)); //Test serialization for all ModelComponents ArrayPtrs<OpenSim::ModelComponent> availableComponentTypes; Object::getRegisteredObjectsOfGivenType<OpenSim::ModelComponent>(availableComponentTypes); for (int i=0; i< availableComponentTypes.getSize(); i++){ Object* clone = availableComponentTypes[i]->clone(); Object* randClone = randomize(clone); try { testModel.addModelComponent(ModelComponent::safeDownCast(randClone)); } //Ignore the validity of the property values // TODO this should specifically handle "InvalidPropertyValue" exceptions // once we have that in place. catch (const std::exception&) { // const string& errMsg = err.getMessage(); //std::cout << errMsg << std::endl; } } int nc = testModel.getMiscModelComponentSet().getSize(); cout << nc << " model components were serialized in testModel." << endl; //Serialize all the components testModel.print("allComponents.osim"); // The finalize flag is for testing purposes ONLY. This way we // can ignore invalid properties and focus the test on serialization. Model deserializedModel("allComponents.osim", false); try { deserializedModel.finalizeFromProperties(); } //Ignore the validity of the property values // TODO this should specifically handle "InvalidPropertyValue" exceptions // once we have that in place. catch (const std::exception&) { // const string& errMsg = err.getMessage(); //std::cout << errMsg << std::endl; } nc = deserializedModel.getMiscModelComponentSet().getSize(); cout << nc << " model components were deserialized from file." << endl; ASSERT(testModel == deserializedModel, "deserializedModel FAILED to match original model."); //Might as well test cloning and assignment Model* cloneModel = testModel.clone(); ASSERT(testModel == *cloneModel, "cloneModel FAILED to match original model."); Model assignedModel = *cloneModel; delete cloneModel; ASSERT(testModel == assignedModel, "assignedModel FAILED to match original model."); } catch (const Exception& e) { e.print(cerr); return 1; } cout << "Done" << endl; return 0; }
int main() { SimTK::Array_<std::string> failures; // get all registered Components SimTK::Array_<Component*> availableComponents; // starting with type Frame ArrayPtrs<Frame> availableFrames; Object::getRegisteredObjectsOfGivenType(availableFrames); for (int i = 0; i < availableFrames.size(); ++i) { availableComponents.push_back(availableFrames[i]); } // next with type Point ArrayPtrs<Point> availablePoints; Object::getRegisteredObjectsOfGivenType(availablePoints); for (int i = 0; i < availablePoints.size(); ++i) { availableComponents.push_back(availablePoints[i]); } // then type Joint ArrayPtrs<Joint> availableJoints; Object::getRegisteredObjectsOfGivenType(availableJoints); for (int i = 0; i < availableJoints.size(); ++i) { availableComponents.push_back(availableJoints[i]); } // then type TwoFrameLinker<Constraint> ArrayPtrs<TwoFrameLinker<Constraint, PhysicalFrame> > availableLink2Constraints; Object::getRegisteredObjectsOfGivenType(availableLink2Constraints); for (int i = 0; i < availableLink2Constraints.size(); ++i) { availableComponents.push_back(availableLink2Constraints[i]); } // then type TwoFrameLinker<Force> which are all the BushingForces ArrayPtrs<TwoFrameLinker<Force, PhysicalFrame> > availableBushingForces; Object::getRegisteredObjectsOfGivenType(availableBushingForces); for (int i = 0; i < availableBushingForces.size(); ++i) { availableComponents.push_back(availableBushingForces[i]); } // Test PrescribedForce std::unique_ptr<PrescribedForce> f(new PrescribedForce()); availableComponents.push_back(f.get()); // continue with other Constraints, Forces, Actuators, ... //Examples of updated forces that pass ArrayPtrs<PointToPointSpring> availablePointToPointSpring; Object::getRegisteredObjectsOfGivenType(availablePointToPointSpring); availableComponents.push_back(availablePointToPointSpring[0]); /** //Uncomment when dependencies of CoordinateCouplerConstraints are // specified as Connectors ArrayPtrs<Constraint> availableConstraints; Object::getRegisteredObjectsOfGivenType(availableConstraints); for (int i = 0; i < availableConstraints.size(); ++i) { availableComponents.push_back(availableConstraints[i]); } */ for (unsigned int i = 0; i < availableComponents.size(); i++) { try { testComponent(*availableComponents[i]); } catch (const std::exception& e) { cout << "*******************************************************\n"; cout<< "FAILURE: " << availableComponents[i]->getConcreteClassName() << endl; cout<< e.what() << endl; failures.push_back(availableComponents[i]->getConcreteClassName()); } } if (!failures.empty()) { cout << "*******************************************************\n"; cout << "Done, with failure(s): " << failures << endl; cout << failures.size() << "/" << availableComponents.size() << " components failed test." << endl; cout << 100 * (availableComponents.size() - failures.size()) / availableComponents.size() << "% components passed." << endl; cout << "*******************************************************\n" << endl; return 1; } cout << "\ntestComponents PASSED. " << availableComponents.size() << " components were tested." << endl; }