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 =
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 =
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;
198 if (thisCont.body_name_1 > thisCont.body_name_2) {
199 std::swap(thisCont.body_name_1, thisCont.body_name_2);
200 std::swap(thisCont.body_type_1, thisCont.body_type_2);
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 =
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 =
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();
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...
int main(int argc, char **argv)
std::size_t size(custom_string const &s)
The action of pinch with two tips. The two tips must not collide ever (otherwise we have a TightPinch...
#define EXPECT_NEAR(a, b, prec)
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)
The action of pinch with two tips. The two tips must collide for some hand configuration to mark this...
#define EXPECT_TRUE(args)
TEST_F(TestRunner, threaded_test)