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

house_numbers_matcher_test.cpp « search_tests « search - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 02efe6eda1014bd5536908d38b40138f77c0a89f (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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
#include "testing/testing.hpp"

#include "search/house_numbers_matcher.hpp"

#include "std/vector.hpp"

#include "base/string_utils.hpp"

using namespace search::house_numbers;
using namespace search;
using namespace strings;

namespace
{
bool HouseNumbersMatch(string const & houseNumber, string const & query, bool queryIsPrefix = false)
{
  return search::house_numbers::HouseNumbersMatch(MakeUniString(houseNumber), MakeUniString(query),
                                                  queryIsPrefix);
}

bool CheckTokenizer(string const & utf8s, vector<string> const & expected)
{
  UniString utf32s = MakeUniString(utf8s);
  vector<Token> tokens;
  Tokenize(utf32s, false /* isPrefix */, tokens);

  vector<string> actual;
  for (auto const & token : tokens)
    actual.push_back(ToUtf8(token.m_value));
  if (actual != expected)
  {
    LOG(LINFO, ("actual:", actual, "expected:", expected));
    return false;
  }
  return true;
}

bool CheckParser(string const & utf8s, string const & expected)
{
  vector<vector<Token>> parses;
  ParseHouseNumber(MakeUniString(utf8s), parses);

  if (parses.size() != 1)
  {
    LOG(LINFO, ("Actual:", parses, "expected:", expected));
    return false;
  }

  auto const & parse = parses[0];
  string actual;
  for (size_t i = 0; i < parse.size(); ++i)
  {
    actual.append(ToUtf8(parse[i].m_value));
    if (i + 1 != parse.size())
      actual.push_back(' ');
  }

  if (actual != expected)
  {
    LOG(LINFO, ("Actual:", parses, "expected:", expected));
    return false;
  }

  return true;
}

bool LooksLikeHouseNumber(string const & s, bool isPrefix)
{
  return house_numbers::LooksLikeHouseNumber(MakeUniString(s), isPrefix);
}
}  // namespace

UNIT_TEST(HouseNumberTokenizer_Smoke)
{
  TEST(CheckTokenizer("123Б", {"123", "б"}), ());
  TEST(CheckTokenizer("123/Б", {"123", "/", "б"}), ());
  TEST(CheckTokenizer("123/34 корп. 4 стр1", {"123", "/", "34", "корп", "4", "стр", "1"}), ());
  TEST(CheckTokenizer("1-100", {"1", "-", "100"}), ());
  TEST(CheckTokenizer("19/1А литБ", {"19", "/", "1", "а", "лит", "б"}), ());
  TEST(CheckTokenizer("9 литер аб1", {"9", "литер", "аб", "1"}), ());
}

UNIT_TEST(HouseNumberParser_Smoke)
{
  TEST(CheckParser("123Б", "123 б"), ());
  TEST(CheckParser("123/4 Литер А", "123 4 а"), ());
  TEST(CheckParser("123а корп. 2б", "123 2 а б"), ());
  TEST(CheckParser("123к4", "123 4"), ());
  TEST(CheckParser("123к Корпус 2", "123 2 к"), ());
  TEST(CheckParser("9 литер А корпус 2", "9 2 а"), ());
  TEST(CheckParser("39с79", "39 79"), ());
  TEST(CheckParser("9 литер аб1", "9 1"), ());
}

UNIT_TEST(HouseNumbersMatcher_Smoke)
{
  TEST(HouseNumbersMatch("39с79", "39"), ());
  TEST(HouseNumbersMatch("39с79", "39 Строение 79"), ());
  TEST(HouseNumbersMatch("39с79", "39 к. 79"), ());
  TEST(HouseNumbersMatch("39 - 79", "39 строение 79"), ());
  TEST(HouseNumbersMatch("39/79", "39 строение 79"), ());
  TEST(HouseNumbersMatch("127а корпус 2", "127а"), ());
  TEST(HouseNumbersMatch("127а корпус 2", "127а кор. 2"), ());
  TEST(HouseNumbersMatch("1234abcdef", "1234  abcdef"), ());
  TEST(HouseNumbersMatch("10/42 корпус 2", "10"), ());
  TEST(HouseNumbersMatch("10 к2 с2", "10 корпус 2"), ());
  TEST(HouseNumbersMatch("10 к2 с2", "10 корпус 2 с 2"), ());
  TEST(HouseNumbersMatch("10 корпус 2 строение 2", "10 к2 с2"), ());
  TEST(HouseNumbersMatch("10 корпус 2 строение 2", "10к2с2"), ());
  TEST(HouseNumbersMatch("10к2а", "10 2а"), ());
  TEST(HouseNumbersMatch("10 к2с", "10 2с"), ());
  TEST(HouseNumbersMatch("22к", "22 к"), ());
  TEST(HouseNumbersMatch("22к корпус 2а строение 7", "22к к 2а стр 7"), ());
  TEST(HouseNumbersMatch("22к к 2а с 7", "22к корпус 2а"), ());
  TEST(HouseNumbersMatch("124к корпус к", "124к к"), ());
  TEST(HouseNumbersMatch("127а корпус 2", "127"), ());
  TEST(HouseNumbersMatch("22к", "22 корпус"), ());

  TEST(HouseNumbersMatch("39 корпус 79", "39", true /* queryIsPrefix */), ());
  TEST(HouseNumbersMatch("39 корпус 79", "39 кор", true /* queryIsPrefix */), ());
  TEST(HouseNumbersMatch("39", "39 корп", true /* queryIsPrefix */), ());
  TEST(HouseNumbersMatch("39 корпус 7", "39", true /* queryIsPrefix */), ());
  TEST(HouseNumbersMatch("39К корпус 7", "39 к", true /* queryIsPrefix */), ());
  TEST(HouseNumbersMatch("39К корпус 7", "39к", true /* queryIsPrefix */), ());
  TEST(HouseNumbersMatch("39 К корпус 7", "39 к", false /* queryIsPrefix */), ());
  TEST(HouseNumbersMatch("39 К корпус 7", "39", false /* queryIsPrefix */), ());

  TEST(HouseNumbersMatch("3/7 с1Б", "3/7 строение 1 Б", true /* queryIsPrefix */), ());
  TEST(HouseNumbersMatch("3/7 с1Б", "3/7 строение 1 Б", false /* queryIsPrefix */), ());
  TEST(!HouseNumbersMatch("3/7 с1Б", "3/7 с 1Д", false /* queryIsPrefix */), ());

  TEST(!HouseNumbersMatch("39", "39 с 79"), ());
  TEST(!HouseNumbersMatch("6 корпус 2", "7"), ());
  TEST(!HouseNumbersMatch("10/42 корпус 2", "42"), ());
  TEST(!HouseNumbersMatch("22к", "22я"), ());
  TEST(!HouseNumbersMatch("22к", "22л"), ());

  TEST(HouseNumbersMatch("16 к1", "д 16 к 1"), ());
  TEST(HouseNumbersMatch("16 к1", "д 16 к1"), ());
  TEST(HouseNumbersMatch("16 к1", "16 к1"), ());
  TEST(HouseNumbersMatch("16 к1", "дом 16 к1"), ());
  TEST(HouseNumbersMatch("14 д 1", "дом 14 д1"), ());
}

UNIT_TEST(LooksLikeHouseNumber_Smoke)
{
  TEST(LooksLikeHouseNumber("1", false /* isPrefix */), ());
  TEST(LooksLikeHouseNumber("ev 10", false /* isPrefix */), ());

  TEST(LooksLikeHouseNumber("14 к", true /* isPrefix */), ());
  TEST(LooksLikeHouseNumber("14 кор", true /* isPrefix */), ());
  TEST(LooksLikeHouseNumber("14 корпус", true /*isPrefix */), ());
  TEST(LooksLikeHouseNumber("14 корпус 1", true /* isPrefix */), ());
  TEST(LooksLikeHouseNumber("14 корпус 1", false /* isPrefix */), ());

  TEST(LooksLikeHouseNumber("39 c 79", false /* isPrefix */), ());
  TEST(LooksLikeHouseNumber("владение 14", false /* isPrefix */), ());

  TEST(LooksLikeHouseNumber("4", false /* isPrefix */), ());
  TEST(LooksLikeHouseNumber("4 2", false /* isPrefix */), ());
  TEST(!LooksLikeHouseNumber("4 2 останкинская", false /* isPrefix */), ());

  TEST(!LooksLikeHouseNumber("39 c 79 ленинградский", false /* isPrefix */), ());
  TEST(!LooksLikeHouseNumber("каптерка 1", false /* isPrefix */), ());
  TEST(!LooksLikeHouseNumber("1 канал", false /* isPrefix */), ());
  TEST(!LooksLikeHouseNumber("2 останкинская", false /* isPrefix */), ());

  TEST(LooksLikeHouseNumber("39 строе", true /* isPrefix */), ());
  TEST(!LooksLikeHouseNumber("39 строе", false /* isPrefix */), ());
  TEST(LooksLikeHouseNumber("39", true /* isPrefix */), ());
  TEST(LooksLikeHouseNumber("39", false /* isPrefix */), ());
  TEST(LooksLikeHouseNumber("строе", true /* isPrefix */), ());
  TEST(!LooksLikeHouseNumber("строе", false /* isPrefix */), ());

  TEST(LooksLikeHouseNumber("дом ", true /* isPrefix */), ());
  TEST(LooksLikeHouseNumber("дом ", false /* isPrefix */), ());

  TEST(LooksLikeHouseNumber("дом 39 строение 79", false /* isPrefix */), ());

  TEST(LooksLikeHouseNumber("3/7 с1Б", false /* isPrefix */), ());
  TEST(LooksLikeHouseNumber("3/7 с1Б", true /* isPrefix */), ());

  TEST(LooksLikeHouseNumber("16 к 1", false /* isPrefix */), ());
  TEST(LooksLikeHouseNumber("д 16 к 1", false /* isPrefix */), ());
  TEST(LooksLikeHouseNumber("дом 16 к 1", false /* isPrefix */), ());
  TEST(LooksLikeHouseNumber("д 16", false /* isPrefix */), ());
  TEST(LooksLikeHouseNumber("дом 16", false /* isPrefix */), ());
  TEST(LooksLikeHouseNumber("дом 14 д 1", false /* isPrefix */), ());
}