public void Search_FilteringBySiteRankingSearchTopDomainByComOrgNet_ShouldBeEquivalentToLinq() { var topLevelDomains = new[] { "com", "net", "org " }; const int topLevelDomainRank = 1000; var expected = _rows.Where(x => topLevelDomains.Contains(x.TopLevelDomain) && x.TopLevelDomainRank <= topLevelDomainRank).ToList(); var search = new SiteRankingSearch { TopLevelDomain = topLevelDomains, TopLevelDomainRank = SearchCriteria.ByRange(1, topLevelDomainRank) }; var actual = _table.Search(search); var indexScores = _table.EvaluateIndexes(search); CollectionAssert.AreEquivalent(expected, actual); var searchWithPredicate = new SiteRankingSearch { TopLevelDomain = topLevelDomains, TopLevelDomainRank = SearchCriteria.ByPredicate((int x) => x <= topLevelDomainRank) }; var actualWithPredicate = _table.Search(searchWithPredicate); var indexScoreWithPredicate = _table.EvaluateIndexes(searchWithPredicate); CollectionAssert.AreEquivalent(expected, actualWithPredicate); Assert.IsTrue(indexScores[0].Score < indexScoreWithPredicate[0].Score, "Search without predicate should have a better score"); }
public void GetScore_CriteriaEmpty_ShouldReturnScoreOf_1() { var rows = SiteRankingCollections.FirstTenRows; var search = new SiteRankingSearch(); var expectedScore = new TableCriteriaScore(1, false); TestGetScores(rows, search, expectedScore); }
public void GetScore_CriteriaByRange_ShouldReturnScoreOf_Ratio() { var rows = SiteRankingCollections.FirstTenRows; var search = new SiteRankingSearch { TopLevelDomain = SearchCriteria.ByRange("ca", "com") }; var expectedScore = new TableCriteriaScore(0.5f, true); TestGetScores(rows, search, expectedScore); }
public void GetScore_CriteriaByPredicate_ShouldReturnScoreOf_1() { var rows = SiteRankingCollections.First10000Rows; var search = new SiteRankingSearch { TopLevelDomain = SearchCriteria.ByPredicate((string x) => x.StartsWith("c")) }; var expectedScore = new TableCriteriaScore(1, false); TestGetScores(rows, search, expectedScore); }
public void Reduce_CriteriaByPredicate_ShouldReturnNull() { var rows = SiteRankingCollections.First10000Rows; var search = new SiteRankingSearch { TopLevelDomain = SearchCriteria.ByPredicate((string x) => x == "ca") }; var criteria = BuildCriteria(rows, search); var actual = criteria.Reduce(new BinarySearchTable <SiteRanking>(rows)); Assert.IsNull(actual); }
public void Reduce_CriteriaByValues_ShouldReturnSubset() { var rows = SiteRankingCollections.First10000Rows.OrderBy(x => x.TopLevelDomain).ToArray(); var search = new SiteRankingSearch { TopLevelDomain = SearchCriteria.ByValues("ca", "com") }; var criteria = BuildCriteria(rows, search); var expected = rows.Where(x => x.TopLevelDomain == "ca" || x.TopLevelDomain == "com"); var actual = criteria.Reduce(new BinarySearchTable <SiteRanking>(rows)); CollectionAssert.AreEquivalent(expected.ToList(), actual.Materialize()); }
public void Reduce_CriteriaByRange_ShouldReturnSubset() { var rows = SiteRankingCollections.First10000Rows.OrderBy(x => x.TopLevelDomain).ToArray(); var search = new SiteRankingSearch { TopLevelDomain = SearchCriteria.ByRange("com", "net") }; var criteria = BuildCriteria(rows, search); var expected = rows.Where(x => StringComparer.OrdinalIgnoreCase.Compare(x.TopLevelDomain, "com") >= 0 && StringComparer.OrdinalIgnoreCase.Compare(x.TopLevelDomain, "net") <= 0); var actual = criteria.Reduce(new BinarySearchTable <SiteRanking>(rows)); CollectionAssert.AreEquivalent(expected.ToList(), actual.Materialize()); }
public void Search_FilteringByCanadianSitesInTop1000_ShouldBeEquivalentToLinqs() { const string topLevelDomain = "ca"; const int globalRank = 1000; var expected = _rows.Where(x => x.TopLevelDomain == topLevelDomain && x.GlobalRank <= globalRank).ToList(); var search = new SiteRankingSearch { TopLevelDomain = topLevelDomain, GlobalRank = SearchCriteria.ByRange(1, globalRank) }; var actual = _table.Search(search); CollectionAssert.AreEquivalent(expected, actual); var actualWithGlobalIndex = _table.Search(search, _table.IndexGlobalRank); CollectionAssert.AreEquivalent(expected, actualWithGlobalIndex); }
private static void TestGetScores(SiteRanking[] rows, SiteRankingSearch search, TableCriteriaScore expectedScore) { var actualScore = BuildCriteria(rows, search)?.Score ?? TableCriteriaScore.NotOptimizable; Assert.AreEqual(expectedScore, actualScore); }
private static ITableCriteriaForMapping <SiteRanking, SiteRankingSearch> BuildCriteria(SiteRanking[] rows, SiteRankingSearch search) { TableMappingByValue <SiteRanking, SiteRankingSearch, string, SearchCriteria <string> > mapping = new TableMappingByValue <SiteRanking, SiteRankingSearch, string, SearchCriteria <string> >(rows, x => x.TopLevelDomain, x => x.TopLevelDomain, StringComparer.OrdinalIgnoreCase, StringComparer.OrdinalIgnoreCase); return(mapping.ExtractCriteria(search)); }