33 std::size_t callback_counts = 0;
37 combiner.connect_to_sources(src1, src2);
38 combiner.connect_to_sink(snk);
39 snk.set_processing_function(
40 [&](
const IntegerStamped& m1,
const IntegerStamped& m2) ->
bool 43 if (m1.header.stamp != m2.header.stamp)
throw std::domain_error(
"timestamps do not match");
48 src1(IntegerStamped(0,
"",
ros::Time(11, 0)));
49 src1(IntegerStamped(0,
"",
ros::Time(15, 0)));
50 src1(IntegerStamped(0,
"",
ros::Time(19, 0)));
51 src1(IntegerStamped(0,
"",
ros::Time(22, 0)));
52 ASSERT_EQ(0u, callback_counts);
53 src2(IntegerStamped(0,
"",
ros::Time(11, 0)));
54 ASSERT_EQ(0u, callback_counts);
55 src2(IntegerStamped(0,
"",
ros::Time(15, 0)));
56 ASSERT_EQ(1u, callback_counts);
57 src2(IntegerStamped(0,
"",
ros::Time(18, 0)));
58 ASSERT_EQ(1u, callback_counts);
59 src2(IntegerStamped(0,
"",
ros::Time(19, 0)));
60 ASSERT_EQ(2u, callback_counts);
61 src2(IntegerStamped(0,
"",
ros::Time(23, 0)));
62 ASSERT_EQ(2u, callback_counts);
63 src1(IntegerStamped(0,
"",
ros::Time(23, 0)));
64 ASSERT_EQ(3u, callback_counts);
66 src1(IntegerStamped(0,
"",
ros::Time(30, 0)));
67 src1(IntegerStamped(0,
"",
ros::Time(50, 0)));
68 src2(IntegerStamped(0,
"",
ros::Time(30, 0)));
69 ASSERT_EQ(3u, callback_counts);
71 src1(IntegerStamped(0,
"",
ros::Time(60, 0)));
72 src1(IntegerStamped(0,
"",
ros::Time(61, 0)));
73 src2(IntegerStamped(0,
"",
ros::Time(61, 0)));
74 src2(IntegerStamped(0,
"",
ros::Time(60, 0)));
75 ASSERT_EQ(4u, callback_counts);
TEST(fkie_message_filters, ExactTimeCombiner)
Combine multiple sources into a single one.
Manually operated data source.
Simplified filter with user-defined callback function.
PolicyTmpl< IOs... > Policy
Class type of the policy that applies to the combiner.