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() { 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; }