Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: chrome/browser/autocomplete/scored_history_match_unittest.cc

Issue 976423002: Remove ScoreHistoryMatch::Builder (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cpplint
Patch Set: Rebase Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/autocomplete/scored_history_match.h"
6
5 #include <algorithm> 7 #include <algorithm>
6 8
7 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
8 #include "base/bind.h" 10 #include "base/bind.h"
9 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
10 #include "base/strings/string16.h" 12 #include "base/strings/string16.h"
11 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
12 #include "chrome/browser/autocomplete/scored_history_match_builder_impl.h"
13 #include "testing/gmock/include/gmock/gmock.h" 14 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
15 16
16 using base::ASCIIToUTF16; 17 using base::ASCIIToUTF16;
17 using testing::ElementsAre; 18 using testing::ElementsAre;
18 using testing::Pair; 19 using testing::Pair;
19 20
20 namespace { 21 namespace {
21 22
22 // Returns a VisitInfoVector that includes |num_visits| spread over the 23 // Returns a VisitInfoVector that includes |num_visits| spread over the
23 // last |frequency|*|num_visits| days (relative to |now|). A frequency of 24 // last |frequency|*|num_visits| days (relative to |now|). A frequency of
24 // one means one visit each day, two means every other day, etc. 25 // one means one visit each day, two means every other day, etc.
25 VisitInfoVector CreateVisitInfoVector(int num_visits, 26 VisitInfoVector CreateVisitInfoVector(int num_visits,
26 int frequency, 27 int frequency,
27 base::Time now) { 28 base::Time now) {
28 VisitInfoVector visits; 29 VisitInfoVector visits;
29 for (int i = 0; i < num_visits; ++i) { 30 for (int i = 0; i < num_visits; ++i) {
30 visits.push_back( 31 visits.push_back(
31 std::make_pair(now - base::TimeDelta::FromDays(i * frequency), 32 std::make_pair(now - base::TimeDelta::FromDays(i * frequency),
32 ui::PAGE_TRANSITION_LINK)); 33 ui::PAGE_TRANSITION_LINK));
33 } 34 }
34 return visits; 35 return visits;
35 } 36 }
36 37
37 } // namespace 38 } // namespace
38 39
39 class ScoredHistoryMatchBuilderImplTest : public testing::Test { 40 class ScoredHistoryMatchTest : public testing::Test {
40 protected: 41 protected:
41 // Convenience function to create a history::URLRow with basic data for |url|, 42 // Convenience function to create a history::URLRow with basic data for |url|,
42 // |title|, |visit_count|, and |typed_count|. |days_since_last_visit| gives 43 // |title|, |visit_count|, and |typed_count|. |days_since_last_visit| gives
43 // the number of days ago to which to set the URL's last_visit. 44 // the number of days ago to which to set the URL's last_visit.
44 history::URLRow MakeURLRow(const char* url, 45 history::URLRow MakeURLRow(const char* url,
45 const char* title, 46 const char* title,
46 int visit_count, 47 int visit_count,
47 int days_since_last_visit, 48 int days_since_last_visit,
48 int typed_count); 49 int typed_count);
49 50
50 // Convenience function to set the word starts information from a 51 // Convenience function to set the word starts information from a
51 // history::URLRow's URL and title. 52 // history::URLRow's URL and title.
52 void PopulateWordStarts(const history::URLRow& url_row, 53 void PopulateWordStarts(const history::URLRow& url_row,
53 RowWordStarts* word_starts); 54 RowWordStarts* word_starts);
54 55
55 // Convenience functions for easily creating vectors of search terms. 56 // Convenience functions for easily creating vectors of search terms.
56 String16Vector Make1Term(const char* term) const; 57 String16Vector Make1Term(const char* term) const;
57 String16Vector Make2Terms(const char* term_1, const char* term_2) const; 58 String16Vector Make2Terms(const char* term_1, const char* term_2) const;
58 59
59 // Convenience function for GetTopicalityScore() that builds the term match 60 // Convenience function for GetTopicalityScore() that builds the term match
60 // and word break information automatically that are needed to call 61 // and word break information automatically that are needed to call
61 // GetTopicalityScore(). It only works for scoring a single term, not 62 // GetTopicalityScore(). It only works for scoring a single term, not
62 // multiple terms. 63 // multiple terms.
63 float GetTopicalityScoreOfTermAgainstURLAndTitle(const base::string16& term, 64 float GetTopicalityScoreOfTermAgainstURLAndTitle(const base::string16& term,
64 const base::string16& url, 65 const base::string16& url,
65 const base::string16& title); 66 const base::string16& title);
66
67 // Registers an URL as bookmarked.
68 void AddBookmark(const GURL& url);
69
70 // Returns the ScoredHistoryMatch::Builder to use.
71 ScoredHistoryMatch::Builder* builder() { return builder_.get(); }
72
73 private:
74 // Returns whether an URL is bookmarked, used by
75 // ScoredHistoryMatchBuilderImpl.
76 bool IsBookmarked(const GURL& url);
77
78 // testing::Test implementation.
79 void SetUp() override;
80 void TearDown() override;
81
82 std::set<GURL> bookmarked_urls_;
83 scoped_ptr<ScoredHistoryMatch::Builder> builder_;
84 }; 67 };
85 68
86 history::URLRow ScoredHistoryMatchBuilderImplTest::MakeURLRow( 69 history::URLRow ScoredHistoryMatchTest::MakeURLRow(const char* url,
87 const char* url, 70 const char* title,
88 const char* title, 71 int visit_count,
89 int visit_count, 72 int days_since_last_visit,
90 int days_since_last_visit, 73 int typed_count) {
91 int typed_count) {
92 history::URLRow row(GURL(url), 0); 74 history::URLRow row(GURL(url), 0);
93 row.set_title(ASCIIToUTF16(title)); 75 row.set_title(ASCIIToUTF16(title));
94 row.set_visit_count(visit_count); 76 row.set_visit_count(visit_count);
95 row.set_typed_count(typed_count); 77 row.set_typed_count(typed_count);
96 row.set_last_visit(base::Time::NowFromSystemTime() - 78 row.set_last_visit(base::Time::NowFromSystemTime() -
97 base::TimeDelta::FromDays(days_since_last_visit)); 79 base::TimeDelta::FromDays(days_since_last_visit));
98 return row; 80 return row;
99 } 81 }
100 82
101 void ScoredHistoryMatchBuilderImplTest::PopulateWordStarts( 83 void ScoredHistoryMatchTest::PopulateWordStarts(const history::URLRow& url_row,
102 const history::URLRow& url_row, 84 RowWordStarts* word_starts) {
103 RowWordStarts* word_starts) {
104 String16SetFromString16(ASCIIToUTF16(url_row.url().spec()), 85 String16SetFromString16(ASCIIToUTF16(url_row.url().spec()),
105 &word_starts->url_word_starts_); 86 &word_starts->url_word_starts_);
106 String16SetFromString16(url_row.title(), &word_starts->title_word_starts_); 87 String16SetFromString16(url_row.title(), &word_starts->title_word_starts_);
107 } 88 }
108 89
109 String16Vector ScoredHistoryMatchBuilderImplTest::Make1Term( 90 String16Vector ScoredHistoryMatchTest::Make1Term(const char* term) const {
110 const char* term) const {
111 String16Vector original_terms; 91 String16Vector original_terms;
112 original_terms.push_back(ASCIIToUTF16(term)); 92 original_terms.push_back(ASCIIToUTF16(term));
113 return original_terms; 93 return original_terms;
114 } 94 }
115 95
116 String16Vector ScoredHistoryMatchBuilderImplTest::Make2Terms( 96 String16Vector ScoredHistoryMatchTest::Make2Terms(const char* term_1,
117 const char* term_1, 97 const char* term_2) const {
118 const char* term_2) const {
119 String16Vector original_terms; 98 String16Vector original_terms;
120 original_terms.push_back(ASCIIToUTF16(term_1)); 99 original_terms.push_back(ASCIIToUTF16(term_1));
121 original_terms.push_back(ASCIIToUTF16(term_2)); 100 original_terms.push_back(ASCIIToUTF16(term_2));
122 return original_terms; 101 return original_terms;
123 } 102 }
124 103
125 float ScoredHistoryMatchBuilderImplTest:: 104 float ScoredHistoryMatchTest::GetTopicalityScoreOfTermAgainstURLAndTitle(
126 GetTopicalityScoreOfTermAgainstURLAndTitle(const base::string16& term, 105 const base::string16& term,
127 const base::string16& url, 106 const base::string16& url,
128 const base::string16& title) { 107 const base::string16& title) {
129 // Make an empty match and simply populate the fields we need in order 108 // Make an empty match and simply populate the fields we need in order
130 // to call GetTopicalityScore(). 109 // to call GetTopicalityScore().
131 ScoredHistoryMatch scored_match; 110 ScoredHistoryMatch scored_match;
132 scored_match.url_matches = MatchTermInString(term, url, 0); 111 scored_match.url_matches = MatchTermInString(term, url, 0);
133 scored_match.title_matches = MatchTermInString(term, title, 0); 112 scored_match.title_matches = MatchTermInString(term, title, 0);
134 RowWordStarts word_starts; 113 RowWordStarts word_starts;
135 String16SetFromString16(url, &word_starts.url_word_starts_); 114 String16SetFromString16(url, &word_starts.url_word_starts_);
136 String16SetFromString16(title, &word_starts.title_word_starts_); 115 String16SetFromString16(title, &word_starts.title_word_starts_);
137 WordStarts one_word_no_offset(1, 0u); 116 WordStarts one_word_no_offset(1, 0u);
138 return ScoredHistoryMatchBuilderImpl::GetTopicalityScore( 117 return scored_match.GetTopicalityScore(1, url, one_word_no_offset,
139 1, url, one_word_no_offset, word_starts, &scored_match); 118 word_starts);
140 } 119 }
141 120
142 void ScoredHistoryMatchBuilderImplTest::AddBookmark(const GURL& url) { 121 TEST_F(ScoredHistoryMatchTest, Scoring) {
143 bookmarked_urls_.insert(url);
144 }
145
146 bool ScoredHistoryMatchBuilderImplTest::IsBookmarked(const GURL& url) {
147 return bookmarked_urls_.find(url) != bookmarked_urls_.end();
148 }
149
150 void ScoredHistoryMatchBuilderImplTest::SetUp() {
151 builder_.reset(new ScoredHistoryMatchBuilderImpl(
152 base::Bind(&ScoredHistoryMatchBuilderImplTest::IsBookmarked,
153 base::Unretained(this))));
154 }
155
156 void ScoredHistoryMatchBuilderImplTest::TearDown() {
157 bookmarked_urls_.clear();
158 builder_.reset();
159 }
160
161 TEST_F(ScoredHistoryMatchBuilderImplTest, Scoring) {
162 // We use NowFromSystemTime() because MakeURLRow uses the same function 122 // We use NowFromSystemTime() because MakeURLRow uses the same function
163 // to calculate last visit time when building a row. 123 // to calculate last visit time when building a row.
164 base::Time now = base::Time::NowFromSystemTime(); 124 base::Time now = base::Time::NowFromSystemTime();
165 125
166 history::URLRow row_a(MakeURLRow("http://fedcba", "abcd bcd", 3, 30, 1)); 126 history::URLRow row_a(MakeURLRow("http://fedcba", "abcd bcd", 3, 30, 1));
167 RowWordStarts word_starts_a; 127 RowWordStarts word_starts_a;
168 PopulateWordStarts(row_a, &word_starts_a); 128 PopulateWordStarts(row_a, &word_starts_a);
169 WordStarts one_word_no_offset(1, 0u); 129 WordStarts one_word_no_offset(1, 0u);
170 VisitInfoVector visits_a = CreateVisitInfoVector(3, 30, now); 130 VisitInfoVector visits_a = CreateVisitInfoVector(3, 30, now);
171 // Mark one visit as typed. 131 // Mark one visit as typed.
172 visits_a[0].second = ui::PAGE_TRANSITION_TYPED; 132 visits_a[0].second = ui::PAGE_TRANSITION_TYPED;
173 ScoredHistoryMatch scored_a = builder()->Build( 133 ScoredHistoryMatch scored_a(row_a, visits_a, std::string(),
174 row_a, visits_a, std::string(), ASCIIToUTF16("abc"), Make1Term("abc"), 134 ASCIIToUTF16("abc"), Make1Term("abc"),
175 one_word_no_offset, word_starts_a, now); 135 one_word_no_offset, word_starts_a, false, now);
176 136
177 // Test scores based on visit_count. 137 // Test scores based on visit_count.
178 history::URLRow row_b(MakeURLRow("http://abcdef", "abcd bcd", 10, 30, 1)); 138 history::URLRow row_b(MakeURLRow("http://abcdef", "abcd bcd", 10, 30, 1));
179 RowWordStarts word_starts_b; 139 RowWordStarts word_starts_b;
180 PopulateWordStarts(row_b, &word_starts_b); 140 PopulateWordStarts(row_b, &word_starts_b);
181 VisitInfoVector visits_b = CreateVisitInfoVector(10, 30, now); 141 VisitInfoVector visits_b = CreateVisitInfoVector(10, 30, now);
182 visits_b[0].second = ui::PAGE_TRANSITION_TYPED; 142 visits_b[0].second = ui::PAGE_TRANSITION_TYPED;
183 ScoredHistoryMatch scored_b = builder()->Build( 143 ScoredHistoryMatch scored_b(row_b, visits_b, std::string(),
184 row_b, visits_b, std::string(), ASCIIToUTF16("abc"), Make1Term("abc"), 144 ASCIIToUTF16("abc"), Make1Term("abc"),
185 one_word_no_offset, word_starts_b, now); 145 one_word_no_offset, word_starts_b, false, now);
186 EXPECT_GT(scored_b.raw_score, scored_a.raw_score); 146 EXPECT_GT(scored_b.raw_score, scored_a.raw_score);
187 147
188 // Test scores based on last_visit. 148 // Test scores based on last_visit.
189 history::URLRow row_c(MakeURLRow("http://abcdef", "abcd bcd", 3, 10, 1)); 149 history::URLRow row_c(MakeURLRow("http://abcdef", "abcd bcd", 3, 10, 1));
190 RowWordStarts word_starts_c; 150 RowWordStarts word_starts_c;
191 PopulateWordStarts(row_c, &word_starts_c); 151 PopulateWordStarts(row_c, &word_starts_c);
192 VisitInfoVector visits_c = CreateVisitInfoVector(3, 10, now); 152 VisitInfoVector visits_c = CreateVisitInfoVector(3, 10, now);
193 visits_c[0].second = ui::PAGE_TRANSITION_TYPED; 153 visits_c[0].second = ui::PAGE_TRANSITION_TYPED;
194 ScoredHistoryMatch scored_c = builder()->Build( 154 ScoredHistoryMatch scored_c(row_c, visits_c, std::string(),
195 row_c, visits_c, std::string(), ASCIIToUTF16("abc"), Make1Term("abc"), 155 ASCIIToUTF16("abc"), Make1Term("abc"),
196 one_word_no_offset, word_starts_c, now); 156 one_word_no_offset, word_starts_c, false, now);
197 EXPECT_GT(scored_c.raw_score, scored_a.raw_score); 157 EXPECT_GT(scored_c.raw_score, scored_a.raw_score);
198 158
199 // Test scores based on typed_count. 159 // Test scores based on typed_count.
200 history::URLRow row_d(MakeURLRow("http://abcdef", "abcd bcd", 3, 30, 3)); 160 history::URLRow row_d(MakeURLRow("http://abcdef", "abcd bcd", 3, 30, 3));
201 RowWordStarts word_starts_d; 161 RowWordStarts word_starts_d;
202 PopulateWordStarts(row_d, &word_starts_d); 162 PopulateWordStarts(row_d, &word_starts_d);
203 VisitInfoVector visits_d = CreateVisitInfoVector(3, 30, now); 163 VisitInfoVector visits_d = CreateVisitInfoVector(3, 30, now);
204 visits_d[0].second = ui::PAGE_TRANSITION_TYPED; 164 visits_d[0].second = ui::PAGE_TRANSITION_TYPED;
205 visits_d[1].second = ui::PAGE_TRANSITION_TYPED; 165 visits_d[1].second = ui::PAGE_TRANSITION_TYPED;
206 visits_d[2].second = ui::PAGE_TRANSITION_TYPED; 166 visits_d[2].second = ui::PAGE_TRANSITION_TYPED;
207 ScoredHistoryMatch scored_d = builder()->Build( 167 ScoredHistoryMatch scored_d(row_d, visits_d, std::string(),
208 row_d, visits_d, std::string(), ASCIIToUTF16("abc"), Make1Term("abc"), 168 ASCIIToUTF16("abc"), Make1Term("abc"),
209 one_word_no_offset, word_starts_d, now); 169 one_word_no_offset, word_starts_d, false, now);
210 EXPECT_GT(scored_d.raw_score, scored_a.raw_score); 170 EXPECT_GT(scored_d.raw_score, scored_a.raw_score);
211 171
212 // Test scores based on a terms appearing multiple times. 172 // Test scores based on a terms appearing multiple times.
213 history::URLRow row_e(MakeURLRow( 173 history::URLRow row_e(MakeURLRow(
214 "http://csi.csi.csi/csi_csi", 174 "http://csi.csi.csi/csi_csi",
215 "CSI Guide to CSI Las Vegas, CSI New York, CSI Provo", 3, 30, 3)); 175 "CSI Guide to CSI Las Vegas, CSI New York, CSI Provo", 3, 30, 3));
216 RowWordStarts word_starts_e; 176 RowWordStarts word_starts_e;
217 PopulateWordStarts(row_e, &word_starts_e); 177 PopulateWordStarts(row_e, &word_starts_e);
218 const VisitInfoVector visits_e = visits_d; 178 const VisitInfoVector visits_e = visits_d;
219 ScoredHistoryMatch scored_e = builder()->Build( 179 ScoredHistoryMatch scored_e(row_e, visits_e, std::string(),
220 row_e, visits_e, std::string(), ASCIIToUTF16("csi"), Make1Term("csi"), 180 ASCIIToUTF16("csi"), Make1Term("csi"),
221 one_word_no_offset, word_starts_e, now); 181 one_word_no_offset, word_starts_e, false, now);
222 EXPECT_LT(scored_e.raw_score, 1400); 182 EXPECT_LT(scored_e.raw_score, 1400);
223 183
224 // Test that a result with only a mid-term match (i.e., not at a word 184 // Test that a result with only a mid-term match (i.e., not at a word
225 // boundary) scores 0. 185 // boundary) scores 0.
226 ScoredHistoryMatch scored_f = 186 ScoredHistoryMatch scored_f(row_a, visits_a, std::string(),
227 builder()->Build(row_a, visits_a, std::string(), ASCIIToUTF16("cd"), 187 ASCIIToUTF16("cd"), Make1Term("cd"),
228 Make1Term("cd"), one_word_no_offset, word_starts_a, now); 188 one_word_no_offset, word_starts_a, false, now);
229 EXPECT_EQ(scored_f.raw_score, 0); 189 EXPECT_EQ(scored_f.raw_score, 0);
230 } 190 }
231 191
232 TEST_F(ScoredHistoryMatchBuilderImplTest, ScoringBookmarks) { 192 TEST_F(ScoredHistoryMatchTest, ScoringBookmarks) {
233 // We use NowFromSystemTime() because MakeURLRow uses the same function 193 // We use NowFromSystemTime() because MakeURLRow uses the same function
234 // to calculate last visit time when building a row. 194 // to calculate last visit time when building a row.
235 base::Time now = base::Time::NowFromSystemTime(); 195 base::Time now = base::Time::NowFromSystemTime();
236 196
237 std::string url_string("http://fedcba"); 197 std::string url_string("http://fedcba");
238 const GURL url(url_string); 198 const GURL url(url_string);
239 history::URLRow row(MakeURLRow(url_string.c_str(), "abcd bcd", 8, 3, 1)); 199 history::URLRow row(MakeURLRow(url_string.c_str(), "abcd bcd", 8, 3, 1));
240 RowWordStarts word_starts; 200 RowWordStarts word_starts;
241 PopulateWordStarts(row, &word_starts); 201 PopulateWordStarts(row, &word_starts);
242 WordStarts one_word_no_offset(1, 0u); 202 WordStarts one_word_no_offset(1, 0u);
243 VisitInfoVector visits = CreateVisitInfoVector(8, 3, now); 203 VisitInfoVector visits = CreateVisitInfoVector(8, 3, now);
244 ScoredHistoryMatch scored = 204 ScoredHistoryMatch scored(row, visits, std::string(), ASCIIToUTF16("abc"),
245 builder()->Build(row, visits, std::string(), ASCIIToUTF16("abc"), 205 Make1Term("abc"), one_word_no_offset, word_starts,
246 Make1Term("abc"), one_word_no_offset, word_starts, now); 206 false, now);
247 // Now bookmark that URL and make sure its score increases. 207 // Now check that if URL is bookmarked then its score increases.
248 base::AutoReset<int> reset(&ScoredHistoryMatchBuilderImpl::bookmark_value_, 208 base::AutoReset<int> reset(&ScoredHistoryMatch::bookmark_value_, 5);
249 5); 209 ScoredHistoryMatch scored_with_bookmark(
250 AddBookmark(url); 210 row, visits, std::string(), ASCIIToUTF16("abc"), Make1Term("abc"),
251 ScoredHistoryMatch scored_with_bookmark = 211 one_word_no_offset, word_starts, true, now);
252 builder()->Build(row, visits, std::string(), ASCIIToUTF16("abc"),
253 Make1Term("abc"), one_word_no_offset, word_starts, now);
254 EXPECT_GT(scored_with_bookmark.raw_score, scored.raw_score); 212 EXPECT_GT(scored_with_bookmark.raw_score, scored.raw_score);
255 } 213 }
256 214
257 TEST_F(ScoredHistoryMatchBuilderImplTest, ScoringTLD) { 215 TEST_F(ScoredHistoryMatchTest, ScoringTLD) {
258 // We use NowFromSystemTime() because MakeURLRow uses the same function 216 // We use NowFromSystemTime() because MakeURLRow uses the same function
259 // to calculate last visit time when building a row. 217 // to calculate last visit time when building a row.
260 base::Time now = base::Time::NowFromSystemTime(); 218 base::Time now = base::Time::NowFromSystemTime();
261 219
262 // By default the URL should not be returned for a query that includes "com". 220 // By default the URL should not be returned for a query that includes "com".
263 std::string url_string("http://fedcba.com/"); 221 std::string url_string("http://fedcba.com/");
264 const GURL url(url_string); 222 const GURL url(url_string);
265 history::URLRow row(MakeURLRow(url_string.c_str(), "", 8, 3, 1)); 223 history::URLRow row(MakeURLRow(url_string.c_str(), "", 8, 3, 1));
266 RowWordStarts word_starts; 224 RowWordStarts word_starts;
267 PopulateWordStarts(row, &word_starts); 225 PopulateWordStarts(row, &word_starts);
268 WordStarts two_words_no_offsets(2, 0u); 226 WordStarts two_words_no_offsets(2, 0u);
269 VisitInfoVector visits = CreateVisitInfoVector(8, 3, now); 227 VisitInfoVector visits = CreateVisitInfoVector(8, 3, now);
270 ScoredHistoryMatch scored = builder()->Build( 228 ScoredHistoryMatch scored(row, visits, std::string(), ASCIIToUTF16("fed com"),
271 row, visits, std::string(), ASCIIToUTF16("fed com"), 229 Make2Terms("fed", "com"), two_words_no_offsets,
272 Make2Terms("fed", "com"), two_words_no_offsets, word_starts, now); 230 word_starts, false, now);
273 EXPECT_EQ(0, scored.raw_score); 231 EXPECT_EQ(0, scored.raw_score);
274 232
275 // Now allow credit for the match in the TLD. 233 // Now allow credit for the match in the TLD.
276 base::AutoReset<bool> reset( 234 base::AutoReset<bool> reset(&ScoredHistoryMatch::allow_tld_matches_, true);
277 &ScoredHistoryMatchBuilderImpl::allow_tld_matches_, true); 235 ScoredHistoryMatch scored_with_tld(
278 ScoredHistoryMatch scored_with_tld = builder()->Build(
279 row, visits, std::string(), ASCIIToUTF16("fed com"), 236 row, visits, std::string(), ASCIIToUTF16("fed com"),
280 Make2Terms("fed", "com"), two_words_no_offsets, word_starts, now); 237 Make2Terms("fed", "com"), two_words_no_offsets, word_starts, false, now);
281 EXPECT_GT(scored_with_tld.raw_score, 0); 238 EXPECT_GT(scored_with_tld.raw_score, 0);
282 } 239 }
283 240
284 TEST_F(ScoredHistoryMatchBuilderImplTest, ScoringScheme) { 241 TEST_F(ScoredHistoryMatchTest, ScoringScheme) {
285 // We use NowFromSystemTime() because MakeURLRow uses the same function 242 // We use NowFromSystemTime() because MakeURLRow uses the same function
286 // to calculate last visit time when building a row. 243 // to calculate last visit time when building a row.
287 base::Time now = base::Time::NowFromSystemTime(); 244 base::Time now = base::Time::NowFromSystemTime();
288 245
289 // By default the URL should not be returned for a query that includes "http". 246 // By default the URL should not be returned for a query that includes "http".
290 std::string url_string("http://fedcba/"); 247 std::string url_string("http://fedcba/");
291 const GURL url(url_string); 248 const GURL url(url_string);
292 history::URLRow row(MakeURLRow(url_string.c_str(), "", 8, 3, 1)); 249 history::URLRow row(MakeURLRow(url_string.c_str(), "", 8, 3, 1));
293 RowWordStarts word_starts; 250 RowWordStarts word_starts;
294 PopulateWordStarts(row, &word_starts); 251 PopulateWordStarts(row, &word_starts);
295 WordStarts two_words_no_offsets(2, 0u); 252 WordStarts two_words_no_offsets(2, 0u);
296 VisitInfoVector visits = CreateVisitInfoVector(8, 3, now); 253 VisitInfoVector visits = CreateVisitInfoVector(8, 3, now);
297 ScoredHistoryMatch scored = builder()->Build( 254 ScoredHistoryMatch scored(row, visits, std::string(),
298 row, visits, std::string(), ASCIIToUTF16("fed http"), 255 ASCIIToUTF16("fed http"), Make2Terms("fed", "http"),
299 Make2Terms("fed", "http"), two_words_no_offsets, word_starts, now); 256 two_words_no_offsets, word_starts, false, now);
300 EXPECT_EQ(0, scored.raw_score); 257 EXPECT_EQ(0, scored.raw_score);
301 258
302 // Now allow credit for the match in the scheme. 259 // Now allow credit for the match in the scheme.
303 base::AutoReset<bool> reset( 260 base::AutoReset<bool> reset(&ScoredHistoryMatch::allow_scheme_matches_, true);
304 &ScoredHistoryMatchBuilderImpl::allow_scheme_matches_, true); 261 ScoredHistoryMatch scored_with_scheme(
305 ScoredHistoryMatch scored_with_scheme = builder()->Build(
306 row, visits, std::string(), ASCIIToUTF16("fed http"), 262 row, visits, std::string(), ASCIIToUTF16("fed http"),
307 Make2Terms("fed", "http"), two_words_no_offsets, word_starts, now); 263 Make2Terms("fed", "http"), two_words_no_offsets, word_starts, false, now);
308 EXPECT_GT(scored_with_scheme.raw_score, 0); 264 EXPECT_GT(scored_with_scheme.raw_score, 0);
309 } 265 }
310 266
311 TEST_F(ScoredHistoryMatchBuilderImplTest, Inlining) { 267 TEST_F(ScoredHistoryMatchTest, Inlining) {
312 // We use NowFromSystemTime() because MakeURLRow uses the same function 268 // We use NowFromSystemTime() because MakeURLRow uses the same function
313 // to calculate last visit time when building a row. 269 // to calculate last visit time when building a row.
314 base::Time now = base::Time::NowFromSystemTime(); 270 base::Time now = base::Time::NowFromSystemTime();
315 RowWordStarts word_starts; 271 RowWordStarts word_starts;
316 WordStarts one_word_no_offset(1, 0u); 272 WordStarts one_word_no_offset(1, 0u);
317 VisitInfoVector visits; 273 VisitInfoVector visits;
318 274
319 { 275 {
320 history::URLRow row( 276 history::URLRow row(
321 MakeURLRow("http://www.google.com", "abcdef", 3, 30, 1)); 277 MakeURLRow("http://www.google.com", "abcdef", 3, 30, 1));
322 PopulateWordStarts(row, &word_starts); 278 PopulateWordStarts(row, &word_starts);
323 ScoredHistoryMatch scored_a = 279 ScoredHistoryMatch scored_a(row, visits, std::string(), ASCIIToUTF16("g"),
324 builder()->Build(row, visits, std::string(), ASCIIToUTF16("g"), 280 Make1Term("g"), one_word_no_offset, word_starts,
325 Make1Term("g"), one_word_no_offset, word_starts, now); 281 false, now);
326 EXPECT_TRUE(scored_a.can_inline); 282 EXPECT_TRUE(scored_a.can_inline);
327 EXPECT_FALSE(scored_a.match_in_scheme); 283 EXPECT_FALSE(scored_a.match_in_scheme);
328 ScoredHistoryMatch scored_b = 284 ScoredHistoryMatch scored_b(row, visits, std::string(), ASCIIToUTF16("w"),
329 builder()->Build(row, visits, std::string(), ASCIIToUTF16("w"), 285 Make1Term("w"), one_word_no_offset, word_starts,
330 Make1Term("w"), one_word_no_offset, word_starts, now); 286 false, now);
331 EXPECT_TRUE(scored_b.can_inline); 287 EXPECT_TRUE(scored_b.can_inline);
332 EXPECT_FALSE(scored_b.match_in_scheme); 288 EXPECT_FALSE(scored_b.match_in_scheme);
333 ScoredHistoryMatch scored_c = 289 ScoredHistoryMatch scored_c(row, visits, std::string(), ASCIIToUTF16("h"),
334 builder()->Build(row, visits, std::string(), ASCIIToUTF16("h"), 290 Make1Term("h"), one_word_no_offset, word_starts,
335 Make1Term("h"), one_word_no_offset, word_starts, now); 291 false, now);
336 EXPECT_TRUE(scored_c.can_inline); 292 EXPECT_TRUE(scored_c.can_inline);
337 EXPECT_TRUE(scored_c.match_in_scheme); 293 EXPECT_TRUE(scored_c.match_in_scheme);
338 ScoredHistoryMatch scored_d = 294 ScoredHistoryMatch scored_d(row, visits, std::string(), ASCIIToUTF16("o"),
339 builder()->Build(row, visits, std::string(), ASCIIToUTF16("o"), 295 Make1Term("o"), one_word_no_offset, word_starts,
340 Make1Term("o"), one_word_no_offset, word_starts, now); 296 false, now);
341 EXPECT_FALSE(scored_d.can_inline); 297 EXPECT_FALSE(scored_d.can_inline);
342 EXPECT_FALSE(scored_d.match_in_scheme); 298 EXPECT_FALSE(scored_d.match_in_scheme);
343 } 299 }
344 300
345 { 301 {
346 history::URLRow row(MakeURLRow("http://teams.foo.com", "abcdef", 3, 30, 1)); 302 history::URLRow row(MakeURLRow("http://teams.foo.com", "abcdef", 3, 30, 1));
347 PopulateWordStarts(row, &word_starts); 303 PopulateWordStarts(row, &word_starts);
348 ScoredHistoryMatch scored_a = 304 ScoredHistoryMatch scored_a(row, visits, std::string(), ASCIIToUTF16("t"),
349 builder()->Build(row, visits, std::string(), ASCIIToUTF16("t"), 305 Make1Term("t"), one_word_no_offset, word_starts,
350 Make1Term("t"), one_word_no_offset, word_starts, now); 306 false, now);
351 EXPECT_TRUE(scored_a.can_inline); 307 EXPECT_TRUE(scored_a.can_inline);
352 EXPECT_FALSE(scored_a.match_in_scheme); 308 EXPECT_FALSE(scored_a.match_in_scheme);
353 ScoredHistoryMatch scored_b = 309 ScoredHistoryMatch scored_b(row, visits, std::string(), ASCIIToUTF16("f"),
354 builder()->Build(row, visits, std::string(), ASCIIToUTF16("f"), 310 Make1Term("f"), one_word_no_offset, word_starts,
355 Make1Term("f"), one_word_no_offset, word_starts, now); 311 false, now);
356 EXPECT_FALSE(scored_b.can_inline); 312 EXPECT_FALSE(scored_b.can_inline);
357 EXPECT_FALSE(scored_b.match_in_scheme); 313 EXPECT_FALSE(scored_b.match_in_scheme);
358 ScoredHistoryMatch scored_c = 314 ScoredHistoryMatch scored_c(row, visits, std::string(), ASCIIToUTF16("o"),
359 builder()->Build(row, visits, std::string(), ASCIIToUTF16("o"), 315 Make1Term("o"), one_word_no_offset, word_starts,
360 Make1Term("o"), one_word_no_offset, word_starts, now); 316 false, now);
361 EXPECT_FALSE(scored_c.can_inline); 317 EXPECT_FALSE(scored_c.can_inline);
362 EXPECT_FALSE(scored_c.match_in_scheme); 318 EXPECT_FALSE(scored_c.match_in_scheme);
363 } 319 }
364 320
365 { 321 {
366 history::URLRow row( 322 history::URLRow row(
367 MakeURLRow("https://www.testing.com", "abcdef", 3, 30, 1)); 323 MakeURLRow("https://www.testing.com", "abcdef", 3, 30, 1));
368 PopulateWordStarts(row, &word_starts); 324 PopulateWordStarts(row, &word_starts);
369 ScoredHistoryMatch scored_a = 325 ScoredHistoryMatch scored_a(row, visits, std::string(), ASCIIToUTF16("t"),
370 builder()->Build(row, visits, std::string(), ASCIIToUTF16("t"), 326 Make1Term("t"), one_word_no_offset, word_starts,
371 Make1Term("t"), one_word_no_offset, word_starts, now); 327 false, now);
372 EXPECT_TRUE(scored_a.can_inline); 328 EXPECT_TRUE(scored_a.can_inline);
373 EXPECT_FALSE(scored_a.match_in_scheme); 329 EXPECT_FALSE(scored_a.match_in_scheme);
374 ScoredHistoryMatch scored_b = 330 ScoredHistoryMatch scored_b(row, visits, std::string(), ASCIIToUTF16("h"),
375 builder()->Build(row, visits, std::string(), ASCIIToUTF16("h"), 331 Make1Term("h"), one_word_no_offset, word_starts,
376 Make1Term("h"), one_word_no_offset, word_starts, now); 332 false, now);
377 EXPECT_TRUE(scored_b.can_inline); 333 EXPECT_TRUE(scored_b.can_inline);
378 EXPECT_TRUE(scored_b.match_in_scheme); 334 EXPECT_TRUE(scored_b.match_in_scheme);
379 ScoredHistoryMatch scored_c = 335 ScoredHistoryMatch scored_c(row, visits, std::string(), ASCIIToUTF16("w"),
380 builder()->Build(row, visits, std::string(), ASCIIToUTF16("w"), 336 Make1Term("w"), one_word_no_offset, word_starts,
381 Make1Term("w"), one_word_no_offset, word_starts, now); 337 false, now);
382 EXPECT_TRUE(scored_c.can_inline); 338 EXPECT_TRUE(scored_c.can_inline);
383 EXPECT_FALSE(scored_c.match_in_scheme); 339 EXPECT_FALSE(scored_c.match_in_scheme);
384 } 340 }
385 } 341 }
386 342
387 TEST_F(ScoredHistoryMatchBuilderImplTest, GetTopicalityScoreTrailingSlash) { 343 TEST_F(ScoredHistoryMatchTest, GetTopicalityScoreTrailingSlash) {
388 const float hostname = GetTopicalityScoreOfTermAgainstURLAndTitle( 344 const float hostname = GetTopicalityScoreOfTermAgainstURLAndTitle(
389 ASCIIToUTF16("def"), ASCIIToUTF16("http://abc.def.com/"), 345 ASCIIToUTF16("def"), ASCIIToUTF16("http://abc.def.com/"),
390 ASCIIToUTF16("Non-Matching Title")); 346 ASCIIToUTF16("Non-Matching Title"));
391 const float hostname_no_slash = GetTopicalityScoreOfTermAgainstURLAndTitle( 347 const float hostname_no_slash = GetTopicalityScoreOfTermAgainstURLAndTitle(
392 ASCIIToUTF16("def"), ASCIIToUTF16("http://abc.def.com"), 348 ASCIIToUTF16("def"), ASCIIToUTF16("http://abc.def.com"),
393 ASCIIToUTF16("Non-Matching Title")); 349 ASCIIToUTF16("Non-Matching Title"));
394 EXPECT_EQ(hostname_no_slash, hostname); 350 EXPECT_EQ(hostname_no_slash, hostname);
395 } 351 }
396 352
397 // This function only tests scoring of single terms that match exactly 353 // This function only tests scoring of single terms that match exactly
398 // once somewhere in the URL or title. 354 // once somewhere in the URL or title.
399 TEST_F(ScoredHistoryMatchBuilderImplTest, GetTopicalityScore) { 355 TEST_F(ScoredHistoryMatchTest, GetTopicalityScore) {
400 base::string16 url = ASCIIToUTF16( 356 base::string16 url = ASCIIToUTF16(
401 "http://abc.def.com/path1/path2?" 357 "http://abc.def.com/path1/path2?"
402 "arg1=val1&arg2=val2#hash_component"); 358 "arg1=val1&arg2=val2#hash_component");
403 base::string16 title = ASCIIToUTF16("here is a title"); 359 base::string16 title = ASCIIToUTF16("here is a title");
404 const float hostname_score = 360 const float hostname_score = GetTopicalityScoreOfTermAgainstURLAndTitle(
405 GetTopicalityScoreOfTermAgainstURLAndTitle( 361 ASCIIToUTF16("abc"), url, title);
406 ASCIIToUTF16("abc"), url, title);
407 const float hostname_mid_word_score = 362 const float hostname_mid_word_score =
408 GetTopicalityScoreOfTermAgainstURLAndTitle( 363 GetTopicalityScoreOfTermAgainstURLAndTitle(ASCIIToUTF16("bc"), url,
409 ASCIIToUTF16("bc"), url, title); 364 title);
410 const float domain_name_score = 365 const float domain_name_score = GetTopicalityScoreOfTermAgainstURLAndTitle(
411 GetTopicalityScoreOfTermAgainstURLAndTitle( 366 ASCIIToUTF16("def"), url, title);
412 ASCIIToUTF16("def"), url, title);
413 const float domain_name_mid_word_score = 367 const float domain_name_mid_word_score =
414 GetTopicalityScoreOfTermAgainstURLAndTitle( 368 GetTopicalityScoreOfTermAgainstURLAndTitle(ASCIIToUTF16("ef"), url,
415 ASCIIToUTF16("ef"), url, title); 369 title);
416 const float tld_score = 370 const float tld_score = GetTopicalityScoreOfTermAgainstURLAndTitle(
417 GetTopicalityScoreOfTermAgainstURLAndTitle( 371 ASCIIToUTF16("com"), url, title);
418 ASCIIToUTF16("com"), url, title); 372 const float tld_mid_word_score = GetTopicalityScoreOfTermAgainstURLAndTitle(
419 const float tld_mid_word_score = 373 ASCIIToUTF16("om"), url, title);
420 GetTopicalityScoreOfTermAgainstURLAndTitle( 374 const float path_score = GetTopicalityScoreOfTermAgainstURLAndTitle(
421 ASCIIToUTF16("om"), url, title); 375 ASCIIToUTF16("path1"), url, title);
422 const float path_score = 376 const float path_mid_word_score = GetTopicalityScoreOfTermAgainstURLAndTitle(
423 GetTopicalityScoreOfTermAgainstURLAndTitle( 377 ASCIIToUTF16("ath1"), url, title);
424 ASCIIToUTF16("path1"), url, title); 378 const float arg_score = GetTopicalityScoreOfTermAgainstURLAndTitle(
425 const float path_mid_word_score = 379 ASCIIToUTF16("arg2"), url, title);
426 GetTopicalityScoreOfTermAgainstURLAndTitle( 380 const float arg_mid_word_score = GetTopicalityScoreOfTermAgainstURLAndTitle(
427 ASCIIToUTF16("ath1"), url, title); 381 ASCIIToUTF16("rg2"), url, title);
428 const float arg_score = 382 const float protocol_score = GetTopicalityScoreOfTermAgainstURLAndTitle(
429 GetTopicalityScoreOfTermAgainstURLAndTitle( 383 ASCIIToUTF16("htt"), url, title);
430 ASCIIToUTF16("arg2"), url, title);
431 const float arg_mid_word_score =
432 GetTopicalityScoreOfTermAgainstURLAndTitle(
433 ASCIIToUTF16("rg2"), url, title);
434 const float protocol_score =
435 GetTopicalityScoreOfTermAgainstURLAndTitle(
436 ASCIIToUTF16("htt"), url, title);
437 const float protocol_mid_word_score = 384 const float protocol_mid_word_score =
438 GetTopicalityScoreOfTermAgainstURLAndTitle( 385 GetTopicalityScoreOfTermAgainstURLAndTitle(ASCIIToUTF16("tt"), url,
439 ASCIIToUTF16("tt"), url, title); 386 title);
440 const float title_score = 387 const float title_score = GetTopicalityScoreOfTermAgainstURLAndTitle(
441 GetTopicalityScoreOfTermAgainstURLAndTitle( 388 ASCIIToUTF16("her"), url, title);
442 ASCIIToUTF16("her"), url, title); 389 const float title_mid_word_score = GetTopicalityScoreOfTermAgainstURLAndTitle(
443 const float title_mid_word_score = 390 ASCIIToUTF16("er"), url, title);
444 GetTopicalityScoreOfTermAgainstURLAndTitle(
445 ASCIIToUTF16("er"), url, title);
446 // Verify hostname and domain name > path > arg. 391 // Verify hostname and domain name > path > arg.
447 EXPECT_GT(hostname_score, path_score); 392 EXPECT_GT(hostname_score, path_score);
448 EXPECT_GT(domain_name_score, path_score); 393 EXPECT_GT(domain_name_score, path_score);
449 EXPECT_GT(path_score, arg_score); 394 EXPECT_GT(path_score, arg_score);
450 // Verify that domain name > path and domain name > arg for non-word 395 // Verify that domain name > path and domain name > arg for non-word
451 // boundaries. 396 // boundaries.
452 EXPECT_GT(hostname_mid_word_score, path_mid_word_score); 397 EXPECT_GT(hostname_mid_word_score, path_mid_word_score);
453 EXPECT_GT(domain_name_mid_word_score, path_mid_word_score); 398 EXPECT_GT(domain_name_mid_word_score, path_mid_word_score);
454 EXPECT_GT(domain_name_mid_word_score, arg_mid_word_score); 399 EXPECT_GT(domain_name_mid_word_score, arg_mid_word_score);
455 EXPECT_GT(hostname_mid_word_score, arg_mid_word_score); 400 EXPECT_GT(hostname_mid_word_score, arg_mid_word_score);
456 // Also verify that the matches at non-word-boundaries all score 401 // Also verify that the matches at non-word-boundaries all score
457 // worse than the matches at word boundaries. These three sets suffice. 402 // worse than the matches at word boundaries. These three sets suffice.
458 EXPECT_GT(arg_score, hostname_mid_word_score); 403 EXPECT_GT(arg_score, hostname_mid_word_score);
459 EXPECT_GT(arg_score, domain_name_mid_word_score); 404 EXPECT_GT(arg_score, domain_name_mid_word_score);
460 EXPECT_GT(title_score, title_mid_word_score); 405 EXPECT_GT(title_score, title_mid_word_score);
461 // Check that title matches fit somewhere reasonable compared to the 406 // Check that title matches fit somewhere reasonable compared to the
462 // various types of URL matches. 407 // various types of URL matches.
463 EXPECT_GT(title_score, arg_score); 408 EXPECT_GT(title_score, arg_score);
464 EXPECT_GT(arg_score, title_mid_word_score); 409 EXPECT_GT(arg_score, title_mid_word_score);
465 // Finally, verify that protocol matches and top level domain name 410 // Finally, verify that protocol matches and top level domain name
466 // matches (.com, .net, etc.) score worse than some of the mid-word 411 // matches (.com, .net, etc.) score worse than some of the mid-word
467 // matches that actually count. 412 // matches that actually count.
468 EXPECT_GT(hostname_mid_word_score, protocol_score); 413 EXPECT_GT(hostname_mid_word_score, protocol_score);
469 EXPECT_GT(hostname_mid_word_score, protocol_mid_word_score); 414 EXPECT_GT(hostname_mid_word_score, protocol_mid_word_score);
470 EXPECT_GT(hostname_mid_word_score, tld_score); 415 EXPECT_GT(hostname_mid_word_score, tld_score);
471 EXPECT_GT(hostname_mid_word_score, tld_mid_word_score); 416 EXPECT_GT(hostname_mid_word_score, tld_mid_word_score);
472 } 417 }
473 418
474 // Test the function GetFinalRelevancyScore(). 419 // Test the function GetFinalRelevancyScore().
475 TEST_F(ScoredHistoryMatchBuilderImplTest, GetFinalRelevancyScore) { 420 TEST_F(ScoredHistoryMatchTest, GetFinalRelevancyScore) {
476 // hqp_relevance_buckets = "0.0:100,1.0:200,4.0:500,8.0:900,10.0:1000"; 421 // hqp_relevance_buckets = "0.0:100,1.0:200,4.0:500,8.0:900,10.0:1000";
477 std::vector<ScoredHistoryMatchBuilderImpl::ScoreMaxRelevance> hqp_buckets; 422 std::vector<ScoredHistoryMatch::ScoreMaxRelevance> hqp_buckets;
478 hqp_buckets.push_back(std::make_pair(0.0, 100)); 423 hqp_buckets.push_back(std::make_pair(0.0, 100));
479 hqp_buckets.push_back(std::make_pair(1.0, 200)); 424 hqp_buckets.push_back(std::make_pair(1.0, 200));
480 hqp_buckets.push_back(std::make_pair(4.0, 500)); 425 hqp_buckets.push_back(std::make_pair(4.0, 500));
481 hqp_buckets.push_back(std::make_pair(8.0, 900)); 426 hqp_buckets.push_back(std::make_pair(8.0, 900));
482 hqp_buckets.push_back(std::make_pair(10.0, 1000)); 427 hqp_buckets.push_back(std::make_pair(10.0, 1000));
483 // Check when topicality score is zero. 428 // Check when topicality score is zero.
484 float topicality_score = 0.0; 429 float topicality_score = 0.0;
485 float frequency_score = 10.0; 430 float frequency_score = 10.0;
486 // intermediate_score = 0.0 * 10.0 = 0.0. 431 // intermediate_score = 0.0 * 10.0 = 0.0.
487 EXPECT_EQ(0, 432 EXPECT_EQ(0, ScoredHistoryMatch::GetFinalRelevancyScore(
488 ScoredHistoryMatchBuilderImpl::GetFinalRelevancyScore( 433 topicality_score, frequency_score, hqp_buckets));
489 topicality_score, frequency_score, hqp_buckets));
490 434
491 // Check when intermediate score falls at the border range. 435 // Check when intermediate score falls at the border range.
492 topicality_score = 0.4f; 436 topicality_score = 0.4f;
493 frequency_score = 10.0f; 437 frequency_score = 10.0f;
494 // intermediate_score = 0.5 * 10.0 = 4.0. 438 // intermediate_score = 0.5 * 10.0 = 4.0.
495 EXPECT_EQ(500, 439 EXPECT_EQ(500, ScoredHistoryMatch::GetFinalRelevancyScore(
496 ScoredHistoryMatchBuilderImpl::GetFinalRelevancyScore( 440 topicality_score, frequency_score, hqp_buckets));
497 topicality_score, frequency_score, hqp_buckets));
498 441
499 // Checking the score that falls into one of the buckets. 442 // Checking the score that falls into one of the buckets.
500 topicality_score = 0.5f; 443 topicality_score = 0.5f;
501 frequency_score = 10.0f; 444 frequency_score = 10.0f;
502 // intermediate_score = 0.5 * 10.0 = 5.0. 445 // intermediate_score = 0.5 * 10.0 = 5.0.
503 EXPECT_EQ(600, // 500 + (((900 - 500)/(8 -4)) * 1) = 600. 446 EXPECT_EQ(600, // 500 + (((900 - 500)/(8 -4)) * 1) = 600.
504 ScoredHistoryMatchBuilderImpl::GetFinalRelevancyScore( 447 ScoredHistoryMatch::GetFinalRelevancyScore(
505 topicality_score, frequency_score, hqp_buckets)); 448 topicality_score, frequency_score, hqp_buckets));
506 449
507 // Never give the score greater than maximum specified. 450 // Never give the score greater than maximum specified.
508 topicality_score = 0.5f; 451 topicality_score = 0.5f;
509 frequency_score = 22.0f; 452 frequency_score = 22.0f;
510 // intermediate_score = 0.5 * 22.0 = 11.0 453 // intermediate_score = 0.5 * 22.0 = 11.0
511 EXPECT_EQ(1000, 454 EXPECT_EQ(1000, ScoredHistoryMatch::GetFinalRelevancyScore(
512 ScoredHistoryMatchBuilderImpl::GetFinalRelevancyScore( 455 topicality_score, frequency_score, hqp_buckets));
513 topicality_score, frequency_score, hqp_buckets));
514 } 456 }
515 457
516 // Test the function GetHQPBucketsFromString(). 458 // Test the function GetHQPBucketsFromString().
517 TEST_F(ScoredHistoryMatchBuilderImplTest, GetHQPBucketsFromString) { 459 TEST_F(ScoredHistoryMatchTest, GetHQPBucketsFromString) {
518 std::string buckets_str = "0.0:400,1.5:600,12.0:1300,20.0:1399"; 460 std::string buckets_str = "0.0:400,1.5:600,12.0:1300,20.0:1399";
519 std::vector<ScoredHistoryMatchBuilderImpl::ScoreMaxRelevance> hqp_buckets; 461 std::vector<ScoredHistoryMatch::ScoreMaxRelevance> hqp_buckets;
520 462
521 EXPECT_TRUE(ScoredHistoryMatchBuilderImpl::GetHQPBucketsFromString( 463 EXPECT_TRUE(
522 buckets_str, &hqp_buckets)); 464 ScoredHistoryMatch::GetHQPBucketsFromString(buckets_str, &hqp_buckets));
523 EXPECT_THAT(hqp_buckets, ElementsAre(Pair(0.0, 400), 465 EXPECT_THAT(hqp_buckets, ElementsAre(Pair(0.0, 400), Pair(1.5, 600),
524 Pair(1.5, 600), 466 Pair(12.0, 1300), Pair(20.0, 1399)));
525 Pair(12.0, 1300),
526 Pair(20.0, 1399)));
527 // invalid string. 467 // invalid string.
528 buckets_str = "0.0,400,1.5,600"; 468 buckets_str = "0.0,400,1.5,600";
529 EXPECT_FALSE(ScoredHistoryMatchBuilderImpl::GetHQPBucketsFromString( 469 EXPECT_FALSE(
530 buckets_str, &hqp_buckets)); 470 ScoredHistoryMatch::GetHQPBucketsFromString(buckets_str, &hqp_buckets));
531 } 471 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698