33 std::size_t callback_counts = 0;
34 Source src1, src2, src3;
37 combiner.connect_to_sources(src1, src2, src3);
38 combiner.connect_to_sink(snk);
39 snk.set_processing_function(
40 [&](
const IntegerStamped& m1,
const IntegerStamped& m2,
const IntegerStamped& m3) ->
bool 43 if (m1 != m2)
throw std::domain_error(
"messages do not match");
44 if (m1 != m3)
throw std::domain_error(
"messages do not match");
48 src1(IntegerStamped(0,
"",
ros::Time(99, 2)));
49 src2(IntegerStamped(1,
"",
ros::Time(100, 1)));
51 src2(IntegerStamped(1,
"",
ros::Time(100, 20)));
52 src3(IntegerStamped(1,
"",
ros::Time(100, 2)));
53 src1(IntegerStamped(1,
"",
ros::Time(100, 0)));
54 src1(IntegerStamped(2,
"",
ros::Time(101, 0)));
55 src2(IntegerStamped(2,
"",
ros::Time(101, 2)));
56 src3(IntegerStamped(2,
"",
ros::Time(101, 1)));
57 ASSERT_EQ(1u, callback_counts);
58 src1(IntegerStamped(3,
"",
ros::Time(102, 0)));
59 src2(IntegerStamped(3,
"",
ros::Time(102, 0)));
60 src3(IntegerStamped(3,
"",
ros::Time(102, 0)));
61 ASSERT_EQ(3u, callback_counts);
62 src1(IntegerStamped(4,
"",
ros::Time(103, 1)));
63 src2(IntegerStamped(4,
"",
ros::Time(103, 0)));
65 ASSERT_EQ(3u, callback_counts);
66 src1(IntegerStamped(5,
"",
ros::Time(104, 2)));
67 src2(IntegerStamped(5,
"",
ros::Time(104, 1)));
68 src3(IntegerStamped(5,
"",
ros::Time(104, 0)));
69 ASSERT_EQ(4u, callback_counts);
71 src1(IntegerStamped(0,
"",
ros::Time(105, 0)));
72 src2(IntegerStamped(6,
"",
ros::Time(116, 0)));
73 src3(IntegerStamped(6,
"",
ros::Time(116, 0)));
74 src1(IntegerStamped(7,
"",
ros::Time(130, 0)));
75 src2(IntegerStamped(7,
"",
ros::Time(130, 0)));
76 src3(IntegerStamped(7,
"",
ros::Time(130, 0)));
77 ASSERT_EQ(5u, callback_counts);
TEST(fkie_message_filters, ApproximateTimeCombiner)
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.