Esempio n. 1
0
        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");
        }
Esempio n. 2
0
        public void GetScore_CriteriaEmpty_ShouldReturnScoreOf_1()
        {
            var rows          = SiteRankingCollections.FirstTenRows;
            var search        = new SiteRankingSearch();
            var expectedScore = new TableCriteriaScore(1, false);

            TestGetScores(rows, search, expectedScore);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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());
        }
Esempio n. 7
0
        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());
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        private static void TestGetScores(SiteRanking[] rows, SiteRankingSearch search, TableCriteriaScore expectedScore)
        {
            var actualScore = BuildCriteria(rows, search)?.Score ?? TableCriteriaScore.NotOptimizable;

            Assert.AreEqual(expectedScore, actualScore);
        }
Esempio n. 10
0
        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));
        }