| 23 | using namespace std; |
| 24 | |
| 25 | void TestMaxspeedsSerialization(vector<FeatureMaxspeed> const & speeds) |
| 26 | { |
| 27 | vector<char> buffer; |
| 28 | MemWriter<vector<char>> w(buffer); |
| 29 | |
| 30 | std::vector<MaxspeedsSerializer::FeatureSpeedMacro> inputSpeeds; |
| 31 | inputSpeeds.reserve(speeds.size()); |
| 32 | MaxspeedConverter const & converter = GetMaxspeedConverter(); |
| 33 | for (auto const & s : speeds) |
| 34 | { |
| 35 | inputSpeeds.push_back({s.GetFeatureId(), converter.SpeedToMacro(s.GetForwardSpeedInUnits()), |
| 36 | converter.SpeedToMacro(s.GetBackwardSpeedInUnits())}); |
| 37 | } |
| 38 | |
| 39 | int constexpr SPEEDS_COUNT = MaxspeedsSerializer::DEFAULT_SPEEDS_COUNT; |
| 40 | SpeedInUnits defSpeeds[SPEEDS_COUNT]; |
| 41 | MaxspeedsSerializer::HW2SpeedMap defaultMap[SPEEDS_COUNT]; |
| 42 | |
| 43 | if (!speeds.empty()) |
| 44 | { |
| 45 | defSpeeds[0] = speeds.front().GetForwardSpeedInUnits(); |
| 46 | defSpeeds[1] = speeds.back().GetForwardSpeedInUnits(); |
| 47 | defaultMap[0][HighwayType::HighwayPrimary] = converter.SpeedToMacro(defSpeeds[0]); |
| 48 | defaultMap[1][HighwayType::HighwaySecondary] = converter.SpeedToMacro(defSpeeds[1]); |
| 49 | } |
| 50 | |
| 51 | MaxspeedsSerializer::Serialize(inputSpeeds, defaultMap, w); |
| 52 | |
| 53 | size_t const sz = buffer.size(); |
| 54 | |
| 55 | MemReader r(buffer.data(), sz); |
| 56 | ReaderSource<MemReader> src(r); |
| 57 | Maxspeeds maxspeeds; |
| 58 | MaxspeedsSerializer::Deserialize(src, maxspeeds); |
| 59 | |
| 60 | for (auto const & s : speeds) |
| 61 | TEST_EQUAL(maxspeeds.GetMaxspeed(s.GetFeatureId()), s.GetMaxspeed(), (s)); |
| 62 | |
| 63 | TEST_EQUAL(maxspeeds.GetDefaultSpeed(false, HighwayType::HighwayPrimary), defSpeeds[0].GetSpeed(), ()); |
| 64 | TEST_EQUAL(maxspeeds.GetDefaultSpeed(true, HighwayType::HighwaySecondary), defSpeeds[1].GetSpeed(), ()); |
| 65 | } |
| 66 | |
| 67 | UNIT_TEST(MaxspeedConverter_Smoke) |
| 68 | { |
no test coverage detected