@@ -95,3 +95,106 @@ TEST(TestHandle, interface_description_command_interface_name_getters_work)
95
95
EXPECT_EQ (handle.get_interface_name (), POSITION_INTERFACE);
96
96
EXPECT_EQ (handle.get_prefix_name (), JOINT_NAME_1);
97
97
}
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