24TEST(DvsEventEncoding, buffer_length_is_height_times_width_times_three) {
25 const std::array<carla::ros2::DvsEvent, 0> events = {};
27 8u, 5u, events.data(), events.size());
28 EXPECT_EQ(buffer.size(), 8u * 5u * 3u);
31TEST(DvsEventEncoding, positive_polarity_lights_red_channel) {
34 const std::array<carla::ros2::DvsEvent, 1> events = {
38 2u, 4u, events.data(), events.size());
39 EXPECT_EQ(buffer[5], 255u);
40 EXPECT_EQ(buffer[3], 0u);
41 EXPECT_EQ(buffer[4], 0u);
44TEST(DvsEventEncoding, negative_polarity_lights_blue_channel) {
47 const std::array<carla::ros2::DvsEvent, 1> events = {
51 2u, 4u, events.data(), events.size());
52 EXPECT_EQ(buffer[18], 255u);
53 EXPECT_EQ(buffer[19], 0u);
54 EXPECT_EQ(buffer[20], 0u);
57TEST(DvsEventEncoding, mixed_polarities_at_distinct_pixels_dont_collide) {
58 const std::array<carla::ros2::DvsEvent, 2> events = {
63 1u, 2u, events.data(), events.size());
65 EXPECT_EQ(buffer[2], 255u);
67 EXPECT_EQ(buffer[3], 255u);
70TEST(DvsEventEncoding, out_of_bounds_events_are_dropped) {
74 const std::array<carla::ros2::DvsEvent, 3> events = {
80 4u, 4u, events.data(), events.size());
81 ASSERT_EQ(buffer.size(), 4u * 4u * 3u);
83 std::uint32_t sum = 0u;
84 for (
auto byte : buffer) {
90TEST(DvsEventEncoding, raw_byte_overload_matches_struct_overload) {
107 } __attribute__((packed));
110 PackedEvent raw_events[2] = {
112 {0u, 0u, 200,
false},
116 {0u, 0u, 200,
false},
121 reinterpret_cast<const std::uint8_t *
>(raw_events),
123 sizeof(PackedEvent));
125 4u, 4u, typed_events, 2u);
126 EXPECT_EQ(from_raw, from_typed);
158TEST(DvsEventEncoding, point_cloud_timestamp_is_a_real_double_not_reinterpreted_bytes) {
162 const std::array<carla::ros2::DvsEvent, 1> events = {
166 events.data(), events.size());
167 const double t = ReadDvsPointCloudField<double>(bytes, 0u, 4u);
168 EXPECT_DOUBLE_EQ(t, 1234567.0);
171TEST(DvsEventEncoding, point_cloud_packs_x_y_pol_at_declared_offsets) {
173 const std::array<carla::ros2::DvsEvent, 2> events = {
178 events.data(), events.size());
180 EXPECT_EQ(ReadDvsPointCloudField<std::uint16_t>(bytes, 0u, 0u), 11u);
181 EXPECT_EQ(ReadDvsPointCloudField<std::uint16_t>(bytes, 0u, 2u), 22u);
182 EXPECT_DOUBLE_EQ(ReadDvsPointCloudField<double>(bytes, 0u, 4u), 100.0);
183 EXPECT_EQ(ReadDvsPointCloudField<std::int8_t>(bytes, 0u, 12u), 1);
185 EXPECT_EQ(ReadDvsPointCloudField<std::uint16_t>(bytes, 1u, 0u), 33u);
186 EXPECT_EQ(ReadDvsPointCloudField<std::uint16_t>(bytes, 1u, 2u), 44u);
187 EXPECT_DOUBLE_EQ(ReadDvsPointCloudField<double>(bytes, 1u, 4u), 200.0);
188 EXPECT_EQ(ReadDvsPointCloudField<std::int8_t>(bytes, 1u, 12u), 0);