#include "Sensor.h" #include namespace test { static uint32_t ID_COUNT = 0u; Sensor::Sensor() : Sensor(++ID_COUNT) {} Sensor::Sensor(const uint32_t id) : _name(std::string("Sensor") + std::to_string(id)), _definition({id, 0u, _name.c_str()}), _data({id, nullptr, 0u, nullptr, 0u}) {} carla_sensor_data Sensor::MakeRandomData() { std::lock_guard lock(_mutex); const struct { uint64_t FrameNumber; uint32_t Width; uint32_t Height; uint32_t Type; float FOV; } ImageHeader = {++_frame_number, 300u, 200u, 1u, 90.0f}; _data.header_size = sizeof(ImageHeader); auto header = std::make_unique(_data.header_size); std::memcpy( reinterpret_cast(header.get()), reinterpret_cast(&ImageHeader), _data.header_size); _header = std::move(header); _data.data_size = 300u * 200u; _buffer = std::make_unique(_data.data_size); _data.header = _header.get(); _data.data = _buffer.get(); return _data; } void Sensor::CheckData(boost::asio::const_buffer buffer) const { std::lock_guard lock(_mutex); const auto size = boost::asio::buffer_size(buffer); const auto begin = boost::asio::buffer_cast(buffer); const auto header_begin = begin + 2u * sizeof(uint32_t); const auto data_begin = header_begin + _data.header_size; const auto expected_size = 2u * sizeof(uint32_t) + _data.header_size + _data.data_size; ASSERT_EQ(size, expected_size); ASSERT_EQ(0, std::memcmp(header_begin, _header.get(), _data.header_size)); ASSERT_EQ(0, std::memcmp(data_begin, _buffer.get(), _data.data_size)); } } // test