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

astar_progress_test.cpp « routing_tests « routing - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 5d02332b90903092951c7e8eb5df1fe7b3b1a1f9 (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
#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