Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dijkstra_router_test.cpp « routing_tests « routing - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 329f642ebcd59a3eb98a29fd878574f5c109115b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include "../../testing/testing.hpp"

#include "road_graph_builder.hpp"
#include "features_road_graph_test.hpp"

#include "../dijkstra_router.hpp"
#include "../features_road_graph.hpp"
#include "../route.hpp"

#include "../../base/logging.hpp"
#include "../../base/macros.hpp"


using namespace routing;
using namespace routing_test;


// Use mock graph source.
template <size_t finalPosSize, size_t startPosSize, size_t expectedSize>
void TestDijkstraRouterMock(RoadPos (&finalPos)[finalPosSize],
                            RoadPos (&startPos)[startPosSize],
                            RoadPos (&expected)[expectedSize])
{
  RoadGraphMockSource * graph = new RoadGraphMockSource();
  InitRoadGraphMockSourceWithTest2(*graph);

  DijkstraRouter router;
  router.SetRoadGraph(graph);
  router.SetFinalRoadPos(vector<RoadPos>(&finalPos[0], &finalPos[0] + ARRAY_SIZE(finalPos)));
  vector<RoadPos> result;
  router.CalculateRoute(vector<RoadPos>(&startPos[0], &startPos[0] + ARRAY_SIZE(startPos)), result);
  TEST_EQUAL(vector<RoadPos>(&expected[0], &expected[0] + ARRAY_SIZE(expected)), result, ());
}

// Use mwm features graph source.
template <size_t finalPosSize, size_t startPosSize, size_t expectedSize>
void TestDijkstraRouterMWM(RoadPos (&finalPos)[finalPosSize],
                           RoadPos (&startPos)[startPosSize],
                           RoadPos (&expected)[expectedSize],
                           size_t pointsCount)
{
  FeatureRoadGraphTester tester("route_test2.mwm");

  DijkstraRouter router;
  router.SetRoadGraph(tester.GetGraph());

  vector<RoadPos> finalV(&finalPos[0], &finalPos[0] + ARRAY_SIZE(finalPos));
  tester.Name2FeatureID(finalV);
  router.SetFinalRoadPos(finalV);

  vector<RoadPos> startV(&startPos[0], &startPos[0] + ARRAY_SIZE(startPos));
  tester.Name2FeatureID(startV);

  vector<RoadPos> result;
  router.CalculateRoute(startV, result);
  LOG(LDEBUG, (result));

  Route route(router.GetName());
  tester.GetGraph()->ReconstructPath(result, route);
  LOG(LDEBUG, (route));
  TEST_EQUAL(route.GetPoly().GetSize(), pointsCount, ());

  tester.FeatureID2Name(result);
  TEST_EQUAL(vector<RoadPos>(&expected[0], &expected[0] + ARRAY_SIZE(expected)), result, ());
}


UNIT_TEST(Dijkstra_Router_City_Simple)
{
  // Uncomment to see debug log.
  //my::g_LogLevel = LDEBUG;

  RoadPos finalPos[] = { RoadPos(7, true, 0) };
  RoadPos startPos[] = { RoadPos(1, true, 0) };

  RoadPos expected1[] = { RoadPos(1, true, 0),
                          RoadPos(1, true, 1),
                          RoadPos(8, true, 0),
                          RoadPos(8, true, 1),
                          RoadPos(7, true, 0) };
  TestDijkstraRouterMock(finalPos, startPos, expected1);

  RoadPos expected2[] = { RoadPos(1, true, 0),
                          RoadPos(1, true, 1),
                          RoadPos(8, true, 1),
                          RoadPos(7, true, 0) };
  TestDijkstraRouterMWM(finalPos, startPos, expected2, 4);
}

UNIT_TEST(Dijkstra_Router_City_ReallyFunnyLoop)
{
  // Uncomment to see debug log.
  //my::g_LogLevel = LDEBUG;

  RoadPos finalPos[] = { RoadPos(1, true, 0) };
  RoadPos startPos[] = { RoadPos(1, true, 1) };
  RoadPos expected1[] = { RoadPos(1, true, 1),
                          RoadPos(8, true, 1),
                          RoadPos(8, true, 2),
                          RoadPos(5, false, 0),
                          RoadPos(0, false, 1),
                          RoadPos(0, false, 0),
                          RoadPos(1, true, 0) };
  TestDijkstraRouterMock(finalPos, startPos, expected1);

  RoadPos expected2[] = { RoadPos(1, true, 1),
                          RoadPos(8, true, 1),
                          RoadPos(8, true, 2),
                          RoadPos(8, true, 3),
                          RoadPos(8, true, 4),
                          RoadPos(2, true, 0),
                          RoadPos(2, true, 1),
                          RoadPos(0, false, 0),
                          RoadPos(1, true, 0) };
  TestDijkstraRouterMWM(finalPos, startPos, expected2, 9);
}