| 160 | |
| 161 | template <typename CrossMwmId> |
| 162 | void TestSerialization(CrossMwmConnectorBuilderEx<CrossMwmId> & builder) |
| 163 | { |
| 164 | double constexpr kEdgesWeight = 4444.0; |
| 165 | |
| 166 | vector<uint8_t> buffer; |
| 167 | builder.PrepareConnector(VehicleType::Car); |
| 168 | builder.FillWeights([&](Segment const &, Segment const &) { return kEdgesWeight; }); |
| 169 | |
| 170 | MemWriter<vector<uint8_t>> writer(buffer); |
| 171 | builder.Serialize(writer); |
| 172 | |
| 173 | MemReader reader(buffer.data(), buffer.size()); |
| 174 | |
| 175 | CrossMwmBuilderTestFixture<CrossMwmId> test; |
| 176 | |
| 177 | test.builder.DeserializeTransitions(VehicleType::Car, reader); |
| 178 | |
| 179 | TestConnectorConsistency(test.connector); |
| 180 | |
| 181 | TEST_EQUAL(test.connector.GetNumEnters(), 2, ()); |
| 182 | TEST_EQUAL(test.connector.GetNumExits(), 1, ()); |
| 183 | |
| 184 | TEST(!test.connector.IsTransition(Segment(kTestMwmId, 0, 0, true), true /* isOutgoing */), ()); |
| 185 | |
| 186 | TEST(!test.connector.IsTransition(Segment(kTestMwmId, 10, 1, true /* forward */), true /* isOutgoing */), ()); |
| 187 | TEST(test.connector.IsTransition(Segment(kTestMwmId, 10, 1, true /* forward */), false /* isOutgoing */), ()); |
| 188 | TEST(!test.connector.IsTransition(Segment(kTestMwmId, 10, 1, false /* forward */), true /* isOutgoing */), ()); |
| 189 | TEST(!test.connector.IsTransition(Segment(kTestMwmId, 10, 1, false /* forward */), false /* isOutgoing */), ()); |
| 190 | |
| 191 | TEST(!test.connector.IsTransition(Segment(kTestMwmId, 20, 2, true /* forward */), true /* isOutgoing */), ()); |
| 192 | TEST(test.connector.IsTransition(Segment(kTestMwmId, 20, 2, true /* forward */), false /* isOutgoing */), ()); |
| 193 | TEST(test.connector.IsTransition(Segment(kTestMwmId, 20, 2, false /* forward */), true /* isOutgoing */), ()); |
| 194 | TEST(!test.connector.IsTransition(Segment(kTestMwmId, 20, 2, false /* forward */), false /* isOutgoing */), ()); |
| 195 | |
| 196 | TEST(!test.connector.IsTransition(Segment(kTestMwmId, 30, 3, true /* forward */), true /* isOutgoing */), ()); |
| 197 | |
| 198 | TEST(!test.connector.WeightsWereLoaded(), ()); |
| 199 | TEST(!test.connector.HasWeights(), ()); |
| 200 | |
| 201 | test.builder.DeserializeWeights(reader); |
| 202 | |
| 203 | TEST(test.connector.WeightsWereLoaded(), ()); |
| 204 | TEST(test.connector.HasWeights(), ()); |
| 205 | |
| 206 | TestOutgoingEdges(test.connector, Segment(kTestMwmId, 10, 1, true /* forward */), |
| 207 | {{Segment(kTestMwmId, 20, 2, false /* forward */), RouteWeight::FromCrossMwmWeight(kEdgesWeight)}}); |
| 208 | |
| 209 | TestOutgoingEdges(test.connector, Segment(kTestMwmId, 20, 2, true /* forward */), |
| 210 | {{Segment(kTestMwmId, 20, 2, false /* forward */), RouteWeight::FromCrossMwmWeight(kEdgesWeight)}}); |
| 211 | } |
| 212 | |
| 213 | void GetCrossMwmId(uint32_t i, base::GeoObjectId & id) |
| 214 | { |
no test coverage detected