@@ -95,3 +95,106 @@ TEST(TestHandle, interface_description_command_interface_name_getters_work)
9595 EXPECT_EQ (handle.get_interface_name (), POSITION_INTERFACE);
9696 EXPECT_EQ (handle.get_prefix_name (), JOINT_NAME_1);
9797}
98+
99+ TEST (TestHandle, copy_constructor)
100+ {
101+ {
102+ double value = 1.337 ;
103+ hardware_interface::Handle handle{JOINT_NAME, FOO_INTERFACE, &value};
104+ hardware_interface::Handle copy (handle);
105+ EXPECT_DOUBLE_EQ (copy.get_value (), value);
106+ EXPECT_DOUBLE_EQ (handle.get_value (), value);
107+ EXPECT_NO_THROW (copy.set_value (0.0 ));
108+ EXPECT_DOUBLE_EQ (copy.get_value (), 0.0 );
109+ EXPECT_DOUBLE_EQ (handle.get_value (), 0.0 );
110+ }
111+ {
112+ double value = 1.337 ;
113+ InterfaceInfo info;
114+ info.name = FOO_INTERFACE;
115+ info.data_type = " double" ;
116+ InterfaceDescription itf_descr{JOINT_NAME, info};
117+ hardware_interface::Handle handle{itf_descr};
118+ EXPECT_TRUE (std::isnan (handle.get_value ()));
119+ handle.set_value (value);
120+ hardware_interface::Handle copy (handle);
121+ EXPECT_EQ (copy.get_name (), handle.get_name ());
122+ EXPECT_EQ (copy.get_interface_name (), handle.get_interface_name ());
123+ EXPECT_EQ (copy.get_prefix_name (), handle.get_prefix_name ());
124+ EXPECT_DOUBLE_EQ (copy.get_value (), value);
125+ EXPECT_DOUBLE_EQ (handle.get_value (), value);
126+ EXPECT_NO_THROW (copy.set_value (0.0 ));
127+ EXPECT_DOUBLE_EQ (copy.get_value (), 0.0 );
128+ EXPECT_DOUBLE_EQ (handle.get_value (), value);
129+ EXPECT_NO_THROW (copy.set_value (0.52 ));
130+ EXPECT_DOUBLE_EQ (copy.get_value (), 0.52 );
131+ EXPECT_DOUBLE_EQ (handle.get_value (), value);
132+ }
133+ }
134+
135+ TEST (TesHandle, move_constructor)
136+ {
137+ double value = 1.337 ;
138+ hardware_interface::Handle handle{JOINT_NAME, FOO_INTERFACE, &value};
139+ hardware_interface::Handle moved{std::move (handle)};
140+ EXPECT_DOUBLE_EQ (moved.get_value (), value);
141+ EXPECT_NO_THROW (moved.set_value (0.0 ));
142+ EXPECT_DOUBLE_EQ (moved.get_value (), 0.0 );
143+ }
144+
145+ TEST (TestHandle, copy_assignment)
146+ {
147+ {
148+ double value_1 = 1.337 ;
149+ double value_2 = 2.337 ;
150+ hardware_interface::Handle handle{JOINT_NAME, FOO_INTERFACE, &value_1};
151+ hardware_interface::Handle copy{JOINT_NAME, " random" , &value_2};
152+ EXPECT_DOUBLE_EQ (copy.get_value (), value_2);
153+ EXPECT_DOUBLE_EQ (handle.get_value (), value_1);
154+ copy = handle;
155+ EXPECT_DOUBLE_EQ (copy.get_value (), value_1);
156+ EXPECT_DOUBLE_EQ (handle.get_value (), value_1);
157+ EXPECT_NO_THROW (copy.set_value (0.0 ));
158+ EXPECT_DOUBLE_EQ (copy.get_value (), 0.0 );
159+ EXPECT_DOUBLE_EQ (handle.get_value (), 0.0 );
160+ EXPECT_DOUBLE_EQ (value_1, 0.0 );
161+ EXPECT_DOUBLE_EQ (value_2, 2.337 );
162+ }
163+
164+ {
165+ double value = 1.337 ;
166+ InterfaceInfo info;
167+ info.name = FOO_INTERFACE;
168+ info.data_type = " double" ;
169+ InterfaceDescription itf_descr{JOINT_NAME, info};
170+ hardware_interface::Handle handle{itf_descr};
171+ EXPECT_TRUE (std::isnan (handle.get_value ()));
172+ handle.set_value (value);
173+ hardware_interface::Handle copy = handle;
174+ EXPECT_EQ (copy.get_name (), handle.get_name ());
175+ EXPECT_EQ (copy.get_interface_name (), handle.get_interface_name ());
176+ EXPECT_EQ (copy.get_prefix_name (), handle.get_prefix_name ());
177+ EXPECT_DOUBLE_EQ (copy.get_value (), value);
178+ EXPECT_DOUBLE_EQ (handle.get_value (), value);
179+ EXPECT_NO_THROW (copy.set_value (0.0 ));
180+ EXPECT_DOUBLE_EQ (copy.get_value (), 0.0 );
181+ EXPECT_DOUBLE_EQ (handle.get_value (), value);
182+ EXPECT_NO_THROW (copy.set_value (0.52 ));
183+ EXPECT_DOUBLE_EQ (copy.get_value (), 0.52 );
184+ EXPECT_DOUBLE_EQ (handle.get_value (), value);
185+ }
186+ }
187+
188+ TEST (TestHandle, move_assignment)
189+ {
190+ double value = 1.337 ;
191+ double value_2 = 2.337 ;
192+ hardware_interface::Handle handle{JOINT_NAME, FOO_INTERFACE, &value};
193+ hardware_interface::Handle moved{JOINT_NAME, " random" , &value_2};
194+ EXPECT_DOUBLE_EQ (moved.get_value (), value_2);
195+ EXPECT_DOUBLE_EQ (handle.get_value (), value);
196+ moved = std::move (handle);
197+ EXPECT_DOUBLE_EQ (moved.get_value (), value);
198+ EXPECT_NO_THROW (moved.set_value (0.0 ));
199+ EXPECT_DOUBLE_EQ (moved.get_value (), 0.0 );
200+ }
0 commit comments