1 #include <gtest/gtest.h> 14 class testFindTrigs:
public ::testing::Test {
22 virtual ~testFindTrigs() {
25 virtual void SetUp()
override {
28 std::shared_ptr <ROSEE::ParserMoveIt> parserMoveIt = std::make_shared <ROSEE::ParserMoveIt> ();
30 ASSERT_TRUE(parserMoveIt->init (
"robot_description",
false)) ;
33 std::string folderForActions =
"ROSEE/actions/" + parserMoveIt->getHandName();
37 auto trig = actionsFinder.findTrig(ROSEE::ActionPrimitive::Type::Trig, folderForActions +
"/primitives/");
38 if (trig.size() > 0) {
40 trigMap.push_back( trig );
41 trigParsedMap.push_back( yamlWorker.
parseYamlPrimitive ( folderForActions +
"/primitives/" +
"trig.yaml" ) );
44 auto tipFlex = actionsFinder.findTrig(ROSEE::ActionPrimitive::Type::TipFlex, folderForActions +
"/primitives/");
45 if (tipFlex.size() > 0) {
47 trigMap.push_back( tipFlex );
48 trigParsedMap.push_back( yamlWorker.
parseYamlPrimitive ( folderForActions +
"/primitives/" +
"tipFlex.yaml" ) );
51 auto fingFlex = actionsFinder.findTrig(ROSEE::ActionPrimitive::Type::FingFlex, folderForActions +
"/primitives/");
52 if (fingFlex.size() > 0) {
54 trigMap.push_back( fingFlex );
55 trigParsedMap.push_back( yamlWorker.
parseYamlPrimitive ( folderForActions +
"/primitives/" +
"fingFlex.yaml" ) );
60 virtual void TearDown()
override {
63 std::vector < std::map < std::string , ROSEE::ActionTrig > > trigMap;
64 std::vector < std::map < std::set < std::string >, std::shared_ptr<ROSEE::ActionPrimitive> > > trigParsedMap;
68 TEST_F ( testFindTrigs, checkNumberLinks ) {
70 for (
int k = 0; k< trigMap.size(); ++k) {
71 for (
auto &mapEl: trigMap.at(k) ) {
74 EXPECT_EQ (1, mapEl.second.getFingersInvolved().size() );
75 EXPECT_EQ (1, mapEl.second.getnFingersInvolved() );
78 for (
auto &mapEl: trigParsedMap.at(k) ) {
81 EXPECT_EQ (1, mapEl.second->getFingersInvolved().size());
82 EXPECT_EQ (1, mapEl.second->getnFingersInvolved());
87 TEST_F ( testFindTrigs, checkSizeStatesInfoSet ) {
89 for (
int k = 0; k< trigMap.size(); ++k) {
91 for (
auto &mapEl: trigMap.at(k) ) {
94 unsigned int size = mapEl.second.getMaxStoredActionStates();
97 EXPECT_EQ ( size, mapEl.second.getAllJointPos().size() );
100 for (
auto &mapEl: trigParsedMap.at(k) ) {
103 unsigned int size = mapEl.second->getMaxStoredActionStates();
106 EXPECT_EQ (size, mapEl.second->getAllJointPos().size());
111 TEST_F ( testFindTrigs, checkNameTypeConsistency ) {
113 for (
int k = 0; k < trigMap.size(); ++k) {
117 for (
auto &mapEl: trigMap.at(k) ) {
119 EXPECT_EQ (actionType, mapEl.second.getPrimitiveType() );
121 switch (mapEl.second.getPrimitiveType()) {
122 case ROSEE::ActionPrimitive::Type::Trig :
123 EXPECT_EQ (mapEl.second.getName(),
"trig");
125 case ROSEE::ActionPrimitive::Type::TipFlex :
126 EXPECT_EQ (mapEl.second.getName(),
"tipFlex");
128 case ROSEE::ActionPrimitive::Type::FingFlex :
129 EXPECT_EQ (mapEl.second.getName(),
"fingFlex");
132 FAIL() << mapEl.second.getPrimitiveType() <<
" not a know type" << std::endl ;
136 actionType = trigParsedMap.at(k).begin()->second->getPrimitiveType();
137 for (
auto &mapEl: trigParsedMap.at(k) ) {
139 EXPECT_EQ (actionType, mapEl.second->getPrimitiveType() );
141 switch (mapEl.second->getPrimitiveType()) {
142 case ROSEE::ActionPrimitive::Type::Trig :
143 EXPECT_EQ (mapEl.second->getName(),
"trig");
145 case ROSEE::ActionPrimitive::Type::TipFlex :
146 EXPECT_EQ (mapEl.second->getName(),
"tipFlex");
148 case ROSEE::ActionPrimitive::Type::FingFlex :
149 EXPECT_EQ (mapEl.second->getName(),
"fingFlex");
152 FAIL() << mapEl.second->getPrimitiveType() <<
" not a know type" << std::endl ;
159 TEST_F ( testFindTrigs, checkEmitParse ) {
161 for (
int k = 0; k< trigMap.size(); ++k) {
163 ASSERT_EQ (trigMap.at(k).size(), trigParsedMap.at(k).size() );
165 for (
auto &mapEl: trigParsedMap.at(k) ) {
167 std::shared_ptr <ROSEE::ActionTrig> trigCasted =
170 ASSERT_FALSE (trigCasted ==
nullptr);
171 ASSERT_EQ (1, mapEl.first.size() );
173 std::set<std::string>::iterator it = mapEl.first.begin();
177 EXPECT_EQ (trigCasted->getName(), trigMap.at(k).at(key).getName() );
178 EXPECT_EQ (trigCasted->getType(), trigMap.at(k).at(key).getType() );
179 EXPECT_EQ (trigCasted->getnFingersInvolved(), trigMap.at(k).at(key).getnFingersInvolved() );
180 EXPECT_EQ (trigCasted->getMaxStoredActionStates(), trigMap.at(k).at(key).getMaxStoredActionStates());
181 EXPECT_EQ (trigCasted->getPrimitiveType(), trigMap.at(k).at(key).getPrimitiveType() );
182 EXPECT_EQ (trigCasted->getFingersInvolved(), trigMap.at(k).at(key).getFingersInvolved());
183 EXPECT_EQ (trigCasted->getJointsInvolvedCount(), trigMap.at(k).at(key).getJointsInvolvedCount());
185 for (
auto jointStates: trigCasted->getAllJointPos() ) {
188 for (
auto joint : jointStates) {
189 ASSERT_EQ ( joint.second.size(), trigMap.at(k).at(key).getJointPos().at(joint.first).size() );
191 for (
int j=0; j<joint.second.size(); ++j){
192 EXPECT_DOUBLE_EQ ( joint.second.at(j),
193 trigMap.at(k).at(key).getJointPos().at(joint.first).at(j) );
208 TEST_F ( testFindTrigs, checkJointPosTipAndFing ) {
210 if (trigMap.size() != 0 &&
211 trigMap.at(0).size() != 0 &&
212 trigMap.at(1).size() != 0 &&
213 trigMap.at(2).size() != 0 )
217 ASSERT_EQ ( trigMap.at(0).begin()->second.getPrimitiveType(), ROSEE::ActionPrimitive::Type::Trig);
218 ASSERT_EQ ( trigMap.at(1).begin()->second.getPrimitiveType(), ROSEE::ActionPrimitive::Type::TipFlex);
219 ASSERT_EQ ( trigMap.at(2).begin()->second.getPrimitiveType(), ROSEE::ActionPrimitive::Type::FingFlex);
222 for (
auto &mapTipEl: trigMap.at(1) ) {
226 for (
auto &mapFingEl : trigMap.at(2) ) {
229 ASSERT_EQ ( tipJs.size(), fingJs.size() );
231 for (
auto tipJoint: tipJs) {
234 if (tipJoint.second.at(0) != 0.0) {
236 EXPECT_EQ ( fingJs.at(tipJoint.first).at(0), 0.0);
258 TEST_F ( testFindTrigs, checkJointPosFlexsAndTrig ) {
261 if (trigMap.size() != 0 &&
262 trigMap.at(0).size() != 0 &&
263 trigMap.at(1).size() != 0 &&
264 trigMap.at(2).size() != 0 )
268 ASSERT_EQ ( trigMap.at(0).begin()->second.getPrimitiveType(), ROSEE::ActionPrimitive::Type::Trig);
269 ASSERT_EQ ( trigMap.at(1).begin()->second.getPrimitiveType(), ROSEE::ActionPrimitive::Type::TipFlex);
270 ASSERT_EQ ( trigMap.at(2).begin()->second.getPrimitiveType(), ROSEE::ActionPrimitive::Type::FingFlex);
274 for (
auto &mapTipEl: trigMap.at(1) ) {
275 for (
auto &tipJs : mapTipEl.second.getJointPos() ) {
276 if (tipJs.second.at(0) != 0 ) {
278 EXPECT_TRUE (trigMap.at(0).find ( mapTipEl.first ) != trigMap.at(0).end());
279 EXPECT_DOUBLE_EQ ( tipJs.second.at(0),
280 trigMap.at(0).at(mapTipEl.first).getJointPos().at(tipJs.first).at(0) );
287 for (
auto &mapFingEl: trigMap.at(2) ) {
288 for (
auto &fingJs : mapFingEl.second.getJointPos() ) {
289 if (fingJs.second.at(0) != 0 ) {
291 EXPECT_TRUE ( trigMap.at(0).find ( mapFingEl.first ) != trigMap.at(0).end() );
292 EXPECT_DOUBLE_EQ ( fingJs.second.at(0),
293 trigMap.at(0).at(mapFingEl.first).getJointPos().at(fingJs.first).at(0) );
300 for (
auto &mapTrigEl: trigMap.at(0) ) {
301 for (
auto &trigJs : mapTrigEl.second.getJointPos() ) {
302 if (trigJs.second.at(0) == 0.0 ) {
305 if (trigMap.at(1).find ( mapTrigEl.first ) != trigMap.at(1).end()) {
307 trigMap.at(1).at(mapTrigEl.first).getJointPos().at(trigJs.first).at(0) );
311 if (trigMap.at(2).find ( mapTrigEl.first ) != trigMap.at(2).end()) {
313 trigMap.at(2).at(mapTrigEl.first).getJointPos().at(trigJs.first).at(0) );
324 TEST_F ( testFindTrigs, checkFlexsSingleJoint ) {
326 for (
int k = 0; k< trigMap.size(); ++k) {
328 if ( trigMap.at(k).begin()->second.getPrimitiveType() == ROSEE::ActionPrimitive::Type::Trig ) {
332 for (
auto &mapFlexEl: trigMap.at(k) ) {
334 unsigned int nJSet = 0;
336 for (
auto &flexJs : mapFlexEl.second.getJointPos() ) {
338 if ( flexJs.second.at(0) != 0.0 ) {
345 unsigned int jointsInvolvedSum = 0;
346 for (
auto flexJs : mapFlexEl.second.getJointsInvolvedCount() ) {
348 jointsInvolvedSum += flexJs.second;
359 int main (
int argc,
char **argv ) {
363 std::cout <<
"[TEST ERROR] Insert hand name as argument" << std::endl;
368 if(setenv(
"ROS_MASTER_URI",
"http://localhost:11322", 1) == -1)
375 std::unique_ptr<ROSEE::TestUtils::Process> roscore;
380 std::cout <<
"[TEST ERROR] Prepare Funcion failed" << std::endl;
385 ::testing::InitGoogleTest ( &argc, argv );
386 return RUN_ALL_TESTS();
std::map< std::set< std::string >, ROSEE::ActionPrimitive::Ptr > parseYamlPrimitive(std::string fileWithPath)
Parse a yaml file and return the map with all the actions present in the file. For the moment...
std::map< std::string, std::vector< double > > JointPos
The map to describe the position of all actuated joints. The key is the name of the string...
std::size_t size(custom_string const &s)
Type
Enum useful to discriminate each primitive action when, for example, we want to parse a file if you ...
int main(int argc, char **argv)
The action of moving some joints (see later) of a single finger in a full clousure position towards t...
int prepareROSForTests(int argc, char **argv, std::string testName)
Function to be called in the main of each test, it runs roscore and fill parameter server with robot ...
Class to check which fingertips collide (for the pinch action at the moment)
#define EXPECT_TRUE(args)
TEST_F(TestRunner, threaded_test)