| 37 | } |
| 38 | |
| 39 | void TestPolylineEncode(string testName, vector<m2::PointU> const & points, m2::PointU const & maxPoint, |
| 40 | void (*fnEncode)(InPointsT const & points, m2::PointU const & basePoint, |
| 41 | m2::PointU const & maxPoint, OutDeltasT & deltas), |
| 42 | void (*fnDecode)(InDeltasT const & deltas, m2::PointU const & basePoint, |
| 43 | m2::PointU const & maxPoint, OutPointsT & points)) |
| 44 | { |
| 45 | size_t const count = points.size(); |
| 46 | if (count == 0) |
| 47 | return; |
| 48 | |
| 49 | m2::PointU const basePoint = m2::PointU::Zero(); |
| 50 | |
| 51 | vector<uint64_t> deltas; |
| 52 | deltas.resize(count); |
| 53 | |
| 54 | OutDeltasT deltasA(deltas); |
| 55 | fnEncode(make_read_adapter(points), basePoint, maxPoint, deltasA); |
| 56 | |
| 57 | vector<m2::PointU> decodedPoints; |
| 58 | decodedPoints.resize(count); |
| 59 | |
| 60 | OutPointsT decodedPointsA(decodedPoints); |
| 61 | fnDecode(make_read_adapter(deltas), basePoint, maxPoint, decodedPointsA); |
| 62 | |
| 63 | TEST_EQUAL(points, decodedPoints, ()); |
| 64 | |
| 65 | if (points.size() > 10) |
| 66 | { |
| 67 | vector<char> data; |
| 68 | MemWriter<vector<char>> writer(data); |
| 69 | |
| 70 | for (size_t i = 0; i != deltas.size(); ++i) |
| 71 | WriteVarUint(writer, deltas[i]); |
| 72 | |
| 73 | LOG(LINFO, (testName, points.size(), data.size())); |
| 74 | } |
| 75 | } |
| 76 | |
| 77 | vector<m2::PointU> SimplifyPoints(vector<m2::PointU> const & points, double eps) |
| 78 | { |
no test coverage detected