Index: chrome/browser/history/visit_filter_unittest.cc |
diff --git a/chrome/browser/history/visit_filter_unittest.cc b/chrome/browser/history/visit_filter_unittest.cc |
index 03f8ac77605adaf9f87df31cbe27d258be52c80b..190525b7be7f671ce6d2c8b66e7cb5bf7adee64f 100644 |
--- a/chrome/browser/history/visit_filter_unittest.cc |
+++ b/chrome/browser/history/visit_filter_unittest.cc |
@@ -4,8 +4,11 @@ |
#include "chrome/browser/history/visit_filter.h" |
+#include <math.h> |
+ |
#include "base/logging.h" |
#include "base/time.h" |
+#include "chrome/browser/history/history_types.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace { |
@@ -43,7 +46,8 @@ TEST_F(VisitFilterTest, CheckFilters) { |
base::TimeDelta two_hours(base::TimeDelta::FromHours(2)); |
VisitFilter f; |
f.set_max_results(21U); |
- f.SetTimeInRangeFilter(t - two_hours, t + two_hours); |
+ f.SetFilterTime(t); |
+ f.SetFilterWidth(two_hours); |
EXPECT_EQ(21U, f.times().size()); |
for (size_t i = 0; i < f.times().size(); ++i) { |
base::Time t_interval(t); |
@@ -55,7 +59,7 @@ TEST_F(VisitFilterTest, CheckFilters) { |
} |
base::Time::Exploded et; |
t.LocalExplode(&et); |
- f.SetDayOfTheWeekFilter(et.day_of_week, t); |
+ f.SetDayOfTheWeekFilter(et.day_of_week); |
// 3 weeks in 21 days. |
ASSERT_EQ(3U, f.times().size()); |
for (size_t i = 1; i < f.times().size(); ++i) { |
@@ -235,4 +239,74 @@ TEST_F(VisitFilterTest, IntersectTimeVectors) { |
EXPECT_TRUE(result.empty()); |
} |
+TEST_F(VisitFilterTest, GetVisitScore) { |
+ base::Time filter_time = GetClosestMidday(); |
+ VisitFilter filter; |
+ VisitRow visit; |
+ |
+ filter.set_sorting_order(VisitFilter::ORDER_BY_RECENCY); |
+ filter.SetFilterTime(filter_time); |
+ filter.SetFilterWidth(base::TimeDelta::FromHours(1)); |
+ |
+ double one_week_one_hour_staleness = pow(2, -(24.0 * 7.0 + 1.0) / |
+ (24.0 * 7.0)); |
+ |
+ // No decay on current visit. |
+ visit.visit_time = filter_time; |
+ EXPECT_DOUBLE_EQ(1.0, filter.GetVisitScore(visit)); |
+ // Half score after a week. |
+ visit.visit_time = filter_time - base::TimeDelta::FromDays(7); |
+ EXPECT_DOUBLE_EQ(0.5, filter.GetVisitScore(visit)); |
+ // Future visits should be treated as current. |
+ visit.visit_time = filter_time + base::TimeDelta::FromDays(1); |
+ EXPECT_DOUBLE_EQ(1.0, filter.GetVisitScore(visit)); |
+ |
+ filter.set_sorting_order(VisitFilter::ORDER_BY_VISIT_COUNT); |
+ // Every visit should score 1 with this filter. |
+ visit.visit_time = filter_time; |
+ EXPECT_DOUBLE_EQ(1.0, filter.GetVisitScore(visit)); |
+ visit.visit_time = filter_time - base::TimeDelta::FromDays(7); |
+ EXPECT_DOUBLE_EQ(1.0, filter.GetVisitScore(visit)); |
+ visit.visit_time = filter_time + base::TimeDelta::FromDays(7); |
+ EXPECT_DOUBLE_EQ(1.0, filter.GetVisitScore(visit)); |
+ |
+ filter.set_sorting_order(VisitFilter::ORDER_BY_TIME_LINEAR); |
+ visit.visit_time = filter_time; |
+ EXPECT_DOUBLE_EQ(1.0, filter.GetVisitScore(visit)); |
+ // Half the filter width forward in time should get half the score for the |
+ // time difference, but no staleness decay. |
+ visit.visit_time = filter_time + base::TimeDelta::FromMinutes(30); |
+ EXPECT_DOUBLE_EQ(0.5, filter.GetVisitScore(visit)); |
+ // One week back in time gets full time difference score, but a staleness |
+ // factor of 0.5 |
+ visit.visit_time = filter_time - base::TimeDelta::FromDays(7); |
+ EXPECT_DOUBLE_EQ(0.5, filter.GetVisitScore(visit)); |
+ // One week plus half a filter width should have it's score halved before |
+ // the staleness factor. |
+ filter.SetFilterWidth(base::TimeDelta::FromHours(2)); |
+ visit.visit_time = filter_time - base::TimeDelta::FromDays(7) - |
+ base::TimeDelta::FromHours(1); |
+ EXPECT_DOUBLE_EQ(0.5 * one_week_one_hour_staleness, |
+ filter.GetVisitScore(visit)); |
+ filter.SetFilterWidth(base::TimeDelta::FromHours(1)); |
+ |
+ filter.set_sorting_order(VisitFilter::ORDER_BY_TIME_GAUSSIAN); |
+ visit.visit_time = filter_time; |
+ EXPECT_DOUBLE_EQ(1.0, filter.GetVisitScore(visit)); |
+ // Going forward in time to test the normal distribution function. |
+ visit.visit_time = filter_time + base::TimeDelta::FromHours(1); |
+ EXPECT_DOUBLE_EQ(exp(-0.5), filter.GetVisitScore(visit)); |
+ visit.visit_time = filter_time + base::TimeDelta::FromMinutes(30); |
+ EXPECT_DOUBLE_EQ(exp(-0.125), filter.GetVisitScore(visit)); |
+ // One week back in time gets full time difference score, but a staleness |
+ // factor of 0.5 |
+ visit.visit_time = filter_time - base::TimeDelta::FromDays(7); |
+ EXPECT_DOUBLE_EQ(0.5, filter.GetVisitScore(visit)); |
+ // One standard deviation of decay, plus the staleness factor. |
+ visit.visit_time = filter_time - base::TimeDelta::FromDays(7) - |
+ base::TimeDelta::FromHours(1); |
+ EXPECT_DOUBLE_EQ(exp(-0.5) * one_week_one_hour_staleness, |
+ filter.GetVisitScore(visit)); |
+} |
+ |
} // namespace history |