33#include < transmission_interface/simple_transmission.h>
44#include < transmission_interface/transmission_interface.h>
55#include < vector>
6+ #include < sstream>
67
7- using std::vector;
88using namespace testing ;
99
1010namespace transmission_interface
1111{
12- // Floating-point value comparison threshold
13- const double EPS = 1e-6 ;
12+ template <typename T>
13+ std::vector<T> operator +(const std::vector<T>& v1, const std::vector<T>& v2)
14+ {
15+ std::vector<T> result;
16+ result.insert (result.end (), v1.begin (), v1.end ());
17+ result.insert (result.end (), v2.begin (), v2.end ());
18+ return result;
19+ }
1420
1521class PositionOnlyActuatorData : public ActuatorDataContainer <PositionActuatorData>
1622{
@@ -29,6 +35,11 @@ class PositionOnlyActuatorData : public ActuatorDataContainer<PositionActuatorDa
2935 {
3036 return hasValidPointers (position);
3137 }
38+
39+ size_t size () const
40+ {
41+ return position.size ();
42+ }
3243};
3344
3445class DummyHandle : public TransmissionHandle <PositionOnlyActuatorData>
@@ -41,56 +52,95 @@ class DummyHandle : public TransmissionHandle<PositionOnlyActuatorData>
4152 }
4253};
4354
44- TEST (HandlePreconditionsTest, ValidHandle)
55+ struct TransmissionTestParams
56+ {
57+ PositionOnlyActuatorData actuator_data;
58+ JointData joint_data;
59+ bool should_throw;
60+ };
61+
62+ std::string PrintToString (const TransmissionTestParams& param)
63+ {
64+ std::stringstream ss;
65+ ss << " ActuatorDataSize: " << param.actuator_data .size ()
66+ << " JointDataPositionSize: " << param.joint_data .position .size ()
67+ << " VelocitySize: " << param.joint_data .velocity .size () << " EffortSize: " << param.joint_data .effort .size ()
68+ << " ShouldThrow: " << (param.should_throw ? " Yes" : " No" );
69+ return ss.str ();
70+ }
71+
72+ class VariableTransmissionInterfaceTest : public TestWithParam <TransmissionTestParams>
73+ {
74+ public:
75+ VariableTransmissionInterfaceTest () : trans(1.0 )
76+ {
77+ }
78+
79+ SimpleTransmission trans;
80+ };
81+
82+ TEST_P (VariableTransmissionInterfaceTest, transmissionHandleInitialization)
83+ {
84+ if (GetParam ().should_throw )
85+ {
86+ EXPECT_THROW (DummyHandle (" trans" , &trans, GetParam ().actuator_data , GetParam ().joint_data ),
87+ TransmissionInterfaceException);
88+ }
89+ else
90+ {
91+ EXPECT_NO_THROW (DummyHandle (" trans" , &trans, GetParam ().actuator_data , GetParam ().joint_data ));
92+ }
93+ }
94+
95+ std::vector<TransmissionTestParams> makeTransmissionHandleTestParams (const int num_dof)
4596{
97+ std::vector<TransmissionTestParams> result;
98+ constexpr bool SHOULD_THROW = true ;
99+ constexpr bool SHOULD_NOT_THROW = false ;
100+
46101 double val = 0.0 ;
47- vector<double *> good_vec (1 , &val);
48- SimpleTransmission trans (1.0 );
102+ std::vector<double *> good_vec (num_dof, &val);
49103
50104 {
51105 PositionOnlyActuatorData a_data;
52- JointData j_data;
53106 a_data.position = good_vec;
54- EXPECT_NO_THROW ( DummyHandle ( " trans " , &trans, a_data, j_data) );
107+ result. push_back ({ a_data, JointData (), SHOULD_NOT_THROW } );
55108 }
56109 {
57110 PositionOnlyActuatorData a_data;
58111 a_data.position = good_vec;
59112 JointData j_data;
60113 j_data.position = good_vec;
61- EXPECT_NO_THROW ( DummyHandle ( " trans " , &trans, a_data, j_data) );
114+ result. push_back ({ a_data, j_data, SHOULD_NOT_THROW } );
62115 }
63116 {
64117 PositionOnlyActuatorData a_data;
65118 a_data.position = good_vec;
66119 JointData j_data;
67120 j_data.velocity = good_vec;
68- EXPECT_NO_THROW ( DummyHandle ( " trans " , &trans, a_data, j_data) );
121+ result. push_back ({ a_data, j_data, SHOULD_NOT_THROW } );
69122 }
70123 {
71124 PositionOnlyActuatorData a_data;
72125 a_data.position = good_vec;
73126 JointData j_data;
74127 j_data.effort = good_vec;
75- EXPECT_NO_THROW ( DummyHandle ( " trans " , &trans, a_data, j_data) );
128+ result. push_back ({ a_data, j_data, SHOULD_NOT_THROW } );
76129 }
77130 {
78- PositionOnlyActuatorData a_data;
79131 JointData j_data;
80132 j_data.position = good_vec;
81- EXPECT_THROW ( DummyHandle ( " trans " , &trans, a_data, j_data), TransmissionInterfaceException );
133+ result. push_back ({ PositionOnlyActuatorData (), j_data, SHOULD_THROW } );
82134 }
83135 {
84- PositionOnlyActuatorData a_data;
85136 JointData j_data;
86137 j_data.velocity = good_vec;
87- EXPECT_THROW ( DummyHandle ( " trans " , &trans, a_data, j_data), TransmissionInterfaceException );
138+ result. push_back ({ PositionOnlyActuatorData (), j_data, SHOULD_THROW } );
88139 }
89140 {
90- PositionOnlyActuatorData a_data;
91141 JointData j_data;
92142 j_data.effort = good_vec;
93- EXPECT_THROW ( DummyHandle ( " trans " , &trans, a_data, j_data), TransmissionInterfaceException );
143+ result. push_back ({ PositionOnlyActuatorData (), j_data, SHOULD_THROW } );
94144 }
95145 {
96146 PositionOnlyActuatorData a_data;
@@ -99,10 +149,16 @@ TEST(HandlePreconditionsTest, ValidHandle)
99149 j_data.position = good_vec;
100150 j_data.velocity = good_vec;
101151 j_data.effort = good_vec;
102- EXPECT_NO_THROW ( DummyHandle ( " trans " , &trans, a_data, j_data) );
152+ result. push_back ({ a_data, j_data, SHOULD_NOT_THROW } );
103153 }
154+
155+ return result;
104156}
105157
158+ // SimpleTransmission only handles one joint
159+ INSTANTIATE_TEST_CASE_P (TransmissionHandleInitialization, VariableTransmissionInterfaceTest,
160+ ValuesIn (makeTransmissionHandleTestParams(1 )));
161+
106162} // namespace transmission_interface
107163
108164int main (int argc, char ** argv)
0 commit comments