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 =
168 std::dynamic_pointer_cast < ROSEE::ActionTrig > (mapEl.second);
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();