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
|
#include "testing/testing.hpp"
#include "routing/base/astar_progress.hpp"
namespace routing_test
{
using namespace routing;
UNIT_TEST(DirectedAStarProgressCheck)
{
m2::PointD start = m2::PointD(0, 1);
m2::PointD finish = m2::PointD(0, 3);
m2::PointD middle = m2::PointD(0, 2);
AStarProgress progress;
progress.AppendSubProgress({start, finish, 1.0 /* contributionCoef */});
TEST_LESS(progress.UpdateProgress(start, finish), 0.1, ());
TEST_LESS(progress.UpdateProgress(middle, finish), 51.0, ());
TEST_GREATER(progress.UpdateProgress(middle, finish), 49.0, ());
static auto constexpr kEps = 0.001;
TEST_GREATER(progress.UpdateProgress(finish, finish),
AStarProgress::kMaxPercent - kEps,
());
progress.PushAndDropLastSubProgress();
}
UNIT_TEST(DirectedAStarDegradationCheck)
{
m2::PointD start = m2::PointD(0, 1);
m2::PointD finish = m2::PointD(0, 3);
m2::PointD middle = m2::PointD(0, 2);
AStarProgress progressFirst;
progressFirst.AppendSubProgress({start, finish, 1.0 /* contributionCoef */});
auto value1 = progressFirst.UpdateProgress(middle, finish);
auto value2 = progressFirst.UpdateProgress(start, finish);
TEST_LESS_OR_EQUAL(value1, value2, ());
AStarProgress progressSecond;
progressSecond.AppendSubProgress({start, finish, 1.0 /* contributionCoef */});
auto value3 = progressSecond.UpdateProgress(start, finish);
TEST_GREATER_OR_EQUAL(value1, value3, ());
progressFirst.PushAndDropLastSubProgress();
progressSecond.PushAndDropLastSubProgress();
}
UNIT_TEST(RangeCheckTest)
{
m2::PointD start = m2::PointD(0, 1);
m2::PointD finish = m2::PointD(0, 3);
m2::PointD preStart = m2::PointD(0, 0);
m2::PointD postFinish = m2::PointD(0, 6);
AStarProgress progress;
progress.AppendSubProgress({start, finish, 1.0 /* contributionCoef */});
TEST_EQUAL(progress.UpdateProgress(preStart, finish), 0.0, ());
TEST_EQUAL(progress.UpdateProgress(postFinish, finish), 0.0, ());
TEST_EQUAL(progress.UpdateProgress(finish, finish), AStarProgress::kMaxPercent, ());
progress.PushAndDropLastSubProgress();
}
UNIT_TEST(BidirectedAStarProgressCheck)
{
m2::PointD start = m2::PointD(0, 0);
m2::PointD finish = m2::PointD(0, 4);
m2::PointD fWave = m2::PointD(0, 1);
m2::PointD bWave = m2::PointD(0, 3);
AStarProgress progress;
progress.AppendSubProgress({start, finish, 1.0 /* contributionCoef */});
progress.UpdateProgress(fWave, finish);
float result = progress.UpdateProgress(bWave, start);
TEST_GREATER(result, 49.0, ());
TEST_LESS(result, 51.0, ());
progress.PushAndDropLastSubProgress();
}
} // namespace routing_test
|