1 #include <gtest/gtest.h>
15 class testFindPinches:
public ::testing::Test {
23 virtual ~testFindPinches() {
26 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();
35 auto theTwoMaps = actionsFinder.findPinch(folderForActions +
"/primitives/");
37 pinchMap = theTwoMaps.first;
38 pinchLooseMap = theTwoMaps.second;
42 if (pinchMap.size() > 0 ) {
43 pinchParsedMap = yamlWorker.
parseYamlPrimitive(folderForActions +
"/primitives/" +
"pinchTight.yaml" );
46 if (pinchLooseMap.size() > 0 ) {
47 pinchLooseParsedMap = yamlWorker.
parseYamlPrimitive(folderForActions +
"/primitives/" +
"pinchLoose.yaml");
52 virtual void TearDown() {
56 std::map < std::set < std::string >, std::shared_ptr<ROSEE::ActionPrimitive> > pinchParsedMap;
59 std::map < std::set < std::string >, std::shared_ptr<ROSEE::ActionPrimitive> > pinchLooseParsedMap;
63 TEST_F ( testFindPinches, checkNumberLinks ) {
65 for (
auto &mapEl: pinchMap ) {
68 EXPECT_EQ (2, mapEl.second.getFingersInvolved().size() );
69 EXPECT_EQ (2, mapEl.second.getnFingersInvolved() );
72 for (
auto &mapEl: pinchParsedMap ) {
75 EXPECT_EQ (2, mapEl.second->getFingersInvolved().size());
76 EXPECT_EQ (2, mapEl.second->getnFingersInvolved());
80 TEST_F ( testFindPinches, checkSizeStatesInfoSet ) {
82 for (
auto &mapEl: pinchMap ) {
85 unsigned int size = mapEl.second.getMaxStoredActionStates();
88 EXPECT_EQ ( size, mapEl.second.getActionStates().size() );
89 EXPECT_EQ ( size, mapEl.second.getAllJointPos().size() );
92 for (
auto &mapEl: pinchParsedMap ) {
95 unsigned int size = mapEl.second->getMaxStoredActionStates();
97 EXPECT_EQ (size, mapEl.second->getAllJointPos().size());
101 TEST_F ( testFindPinches, checkName ) {
103 for (
auto &mapEl: pinchMap ) {
105 EXPECT_TRUE (mapEl.second.getName().compare(
"pinchTight") == 0);
106 EXPECT_EQ (ROSEE::ActionPrimitive::Type::PinchTight, mapEl.second.getPrimitiveType() );
109 for (
auto &mapEl: pinchParsedMap ) {
111 EXPECT_TRUE (mapEl.second->getName().compare(
"pinchTight") == 0);
112 EXPECT_EQ (ROSEE::ActionPrimitive::Type::PinchTight, mapEl.second->getPrimitiveType() );
117 TEST_F ( testFindPinches, checkOrderStatesInfoSet ) {
119 for (
auto &mapEl: pinchMap ) {
121 std::vector < ROSEE::ActionPinchTight::StateWithContact> statesInfo =
122 mapEl.second.getActionStates();
124 double oldDepth = std::numeric_limits<double>::infinity();
126 for (
auto &setEl : statesInfo) {
127 EXPECT_LE (std::abs(setEl.second.depth), std::abs(oldDepth) );
128 oldDepth = setEl.second.depth;
133 for (
auto &mapEl: pinchParsedMap ) {
135 std::shared_ptr <ROSEE::ActionPinchTight> pinchCasted =
136 std::dynamic_pointer_cast < ROSEE::ActionPinchTight > (mapEl.second);
138 ASSERT_FALSE (pinchCasted ==
nullptr);
139 std::vector < ROSEE::ActionPinchTight::StateWithContact> statesInfo =
140 pinchCasted->getActionStates();
142 double oldDepth = std::numeric_limits<double>::infinity();
144 for (
auto &setEl : statesInfo) {
145 EXPECT_LE (std::abs(setEl.second.depth), std::abs(oldDepth) );
146 oldDepth = setEl.second.depth;
152 TEST_F ( testFindPinches, checkEmitParse ) {
154 ASSERT_EQ (pinchMap.size(), pinchParsedMap.size() );
156 for (
auto &mapEl: pinchParsedMap ) {
158 std::shared_ptr <ROSEE::ActionPinchTight> pinchCasted =
159 std::dynamic_pointer_cast < ROSEE::ActionPinchTight > (mapEl.second);
161 ASSERT_FALSE (pinchCasted ==
nullptr);
162 ASSERT_EQ (2, mapEl.first.size() );
163 std::pair <std::string, std::string> keyPair;
164 std::set<std::string>::iterator it = mapEl.first.begin();
166 std::advance ( it, 1 );
167 keyPair.second = *it;
170 EXPECT_EQ (pinchCasted->getName(), pinchMap.at(keyPair).getName() );
171 EXPECT_EQ (pinchCasted->getType(), pinchMap.at(keyPair).getType() );
172 EXPECT_EQ (pinchCasted->getnFingersInvolved(), pinchMap.at(keyPair).getnFingersInvolved() );
173 EXPECT_EQ (pinchCasted->getMaxStoredActionStates(), pinchMap.at(keyPair).getMaxStoredActionStates());
174 EXPECT_EQ (pinchCasted->getPrimitiveType(), pinchMap.at(keyPair).getPrimitiveType() );
175 EXPECT_EQ (pinchCasted->getFingersInvolved(), pinchMap.at(keyPair).getFingersInvolved());
178 for (
auto as: pinchCasted->getActionStates() ) {
181 for (
auto joint : as.first) {
182 ASSERT_EQ ( joint.second.size(),
183 pinchMap.at(keyPair).getAllJointPos().at(i).at(joint.first).size() );
185 for (
int j=0; j<joint.second.size(); ++j){
186 EXPECT_DOUBLE_EQ ( joint.second.at(j),
187 pinchMap.at(keyPair).getAllJointPos().at(i).at(joint.first).at(j) );
194 pinchMap.at(keyPair).getActionStates().at(i).second;
220 if ( (std::abs(thisCont.
depth - otherCont.
depth)) > 0.00001) {
221 std::cout <<
"EXPECT equal depths fails: error is on the actionState_" << i << std::endl;
222 pinchCasted->print();
223 pinchMap.at(keyPair).print();
224 std::cout << std::endl;
234 TEST_F ( testFindPinches, checkNumberLinksLoose ) {
236 for (
auto &mapEl: pinchLooseMap ) {
239 EXPECT_EQ (2, mapEl.second.getFingersInvolved().size() );
240 EXPECT_EQ (2, mapEl.second.getnFingersInvolved() );
243 for (
auto &mapEl: pinchLooseParsedMap ) {
246 EXPECT_EQ (2, mapEl.second->getFingersInvolved().size());
247 EXPECT_EQ (2, mapEl.second->getnFingersInvolved());
251 TEST_F ( testFindPinches, checkSizeStatesInfoSetLoose ) {
253 for (
auto &mapEl: pinchLooseMap ) {
256 unsigned int size = mapEl.second.getMaxStoredActionStates();
259 EXPECT_EQ ( size, mapEl.second.getActionStates().size() );
260 EXPECT_EQ ( size, mapEl.second.getAllJointPos().size() );
263 for (
auto &mapEl: pinchLooseParsedMap ) {
266 unsigned int size = mapEl.second->getMaxStoredActionStates();
268 EXPECT_EQ (size, mapEl.second->getAllJointPos().size());
272 TEST_F ( testFindPinches, checkNameLoose ) {
274 for (
auto &mapEl: pinchLooseMap ) {
276 EXPECT_TRUE (mapEl.second.getName().compare(
"pinchLoose") == 0);
277 EXPECT_EQ (ROSEE::ActionPrimitive::Type::PinchLoose, mapEl.second.getPrimitiveType() );
280 for (
auto &mapEl: pinchLooseParsedMap ) {
282 EXPECT_TRUE (mapEl.second->getName().compare(
"pinchLoose") == 0);
283 EXPECT_EQ (ROSEE::ActionPrimitive::Type::PinchLoose, mapEl.second->getPrimitiveType() );
288 TEST_F ( testFindPinches, checkOrderStatesInfoSetLoose ) {
290 for (
auto &mapEl: pinchLooseMap ) {
292 std::vector < ROSEE::ActionPinchLoose::StateWithDistance> statesInfo =
293 mapEl.second.getActionStates();
296 for (
auto &setEl : statesInfo) {
297 EXPECT_GE ( setEl.second, oldDist );
298 oldDist = setEl.second;
303 for (
auto &mapEl: pinchLooseParsedMap ) {
305 std::shared_ptr <ROSEE::ActionPinchLoose> pinchLooseCasted =
306 std::dynamic_pointer_cast < ROSEE::ActionPinchLoose > (mapEl.second);
308 ASSERT_FALSE (pinchLooseCasted ==
nullptr);
309 std::vector < ROSEE::ActionPinchLoose::StateWithDistance> statesInfo =
310 pinchLooseCasted->getActionStates();
313 for (
auto &setEl : statesInfo) {
314 EXPECT_GE ( setEl.second, oldDist );
315 oldDist = setEl.second;
321 TEST_F ( testFindPinches, checkEmitParseLoose ) {
323 ASSERT_EQ (pinchLooseMap.size(), pinchLooseParsedMap.size() );
325 for (
auto &mapEl: pinchLooseParsedMap ) {
327 std::shared_ptr <ROSEE::ActionPinchLoose> pinchCasted =
328 std::dynamic_pointer_cast < ROSEE::ActionPinchLoose > (mapEl.second);
330 ASSERT_FALSE (pinchCasted ==
nullptr);
331 ASSERT_EQ (2, mapEl.first.size() );
332 std::pair <std::string, std::string> keyPair;
333 std::set<std::string>::iterator it = mapEl.first.begin();
335 std::advance ( it, 1 );
336 keyPair.second = *it;
339 EXPECT_EQ (pinchCasted->getName(), pinchLooseMap.at(keyPair).getName() );
340 EXPECT_EQ (pinchCasted->getnFingersInvolved(), pinchLooseMap.at(keyPair).getnFingersInvolved() );
341 EXPECT_EQ (pinchCasted->getMaxStoredActionStates(), pinchLooseMap.at(keyPair).getMaxStoredActionStates());
342 EXPECT_EQ (pinchCasted->getPrimitiveType(), pinchLooseMap.at(keyPair).getPrimitiveType() );
343 EXPECT_EQ (pinchCasted->getFingersInvolved(), pinchLooseMap.at(keyPair).getFingersInvolved());
346 for (
auto as: pinchCasted->getActionStates() ) {
349 for (
auto joint : as.first) {
350 ASSERT_EQ ( joint.second.size(),
351 pinchLooseMap.at(keyPair).getAllJointPos().at(i).at(joint.first).size() );
353 for (
int j=0; j<joint.second.size(); ++j){
354 EXPECT_DOUBLE_EQ ( joint.second.at(j),
355 pinchLooseMap.at(keyPair).getAllJointPos().at(i).at(joint.first).at(j) );
360 EXPECT_DOUBLE_EQ (as.second, pinchLooseMap.at(keyPair).getActionStates().at(i).second);
371 TEST_F ( testFindPinches, checkTightLooseExclusion ) {
373 for (
auto mapEl : pinchMap ) {
374 EXPECT_EQ (0, pinchLooseMap.count(mapEl.first)) << mapEl.first.first <<
", " << mapEl.first.second
375 <<
" " <<
" is also present in Loose Pinches" << std::endl;
378 for (
auto mapEl : pinchLooseMap ) {
379 EXPECT_EQ (0, pinchMap.count(mapEl.first)) << mapEl.first.first <<
", " << mapEl.first.second
380 <<
" " <<
" is also present in Tight Pinches" << std::endl;
389 int main (
int argc,
char **argv ) {
393 std::cout <<
"[TEST ERROR] Insert hand name as argument" << std::endl;
398 if(setenv(
"ROS_MASTER_URI",
"http://localhost:11322", 1) == -1)
405 std::unique_ptr<ROSEE::TestUtils::Process> roscore;
410 std::cout <<
"[TEST ERROR] Prepare Funcion failed" << std::endl;
415 ::testing::InitGoogleTest ( &argc, argv );
416 return RUN_ALL_TESTS();