public void TopRankings()
        {
            string queryWordId  = "testId";
            string queryWordId2 = "testId2";

            string queryWord  = "testValue";
            string queryWord2 = "testValue2";

            RedisWordSearchConfiguration config = RedisWordSearchConfiguration.defaultConfig;

            config.RankingProvider = new CurrentlyPopularRanking(AppSettings.RANKING_EPOCH, 1);

            RedisWordSearch wordSearch = new RedisWordSearch(Database, config);

            wordSearch.Add(queryWordId, queryWord);
            wordSearch.BoostInRanking(queryWordId);

            wordSearch.Add(queryWordId2, queryWord2);
            wordSearch.BoostInRanking(queryWordId2);

            wordSearch.BoostInRanking(queryWordId);

            var words = wordSearch.TopRankedSearches().AsStringList();

            Assert.AreEqual(queryWord, words[0]);
            Assert.AreEqual(queryWord2, words[1]);
        }
        public void IncrementRanking_TestHalfLife()
        {
            string queryWordId  = "testId";
            string queryWordId2 = "testId2";

            string queryWord     = "testValue";
            double secondsToWait = 1;

            RedisWordSearchConfiguration config = RedisWordSearchConfiguration.defaultConfig;
            long minAgo = DateTimeOffset.UtcNow.AddSeconds(-10).ToUnixTimeSeconds();

            double halfLife = secondsToWait / 3600;

            config.RankingProvider = new CurrentlyPopularRanking(minAgo, halfLife);

            RedisWordSearch wordSearch = new RedisWordSearch(Database, config);

            wordSearch.Add(queryWordId, queryWord);
            wordSearch.Add(queryWordId2, queryWord);

            wordSearch.BoostInRanking(queryWordId);
            wordSearch.BoostInRanking(queryWordId);

            Thread.Sleep((int)secondsToWait * 1000);

            wordSearch.BoostInRanking(queryWordId2);

            double?score1 = wordSearch.CurrentScore(queryWordId);
            double?score2 = wordSearch.CurrentScore(queryWordId2);

            Assert.IsTrue((score2 == score1) || (score2 == score1 * 2));
        }
        public void IncrementRanking()
        {
            string queryWordId     = "testId";
            string queryWord       = "testValue";
            int    halfLife        = 6;
            int    halfLifeSeconds = halfLife * 60 * 60;

            RedisWordSearchConfiguration config = RedisWordSearchConfiguration.defaultConfig;
            long epoch = DateTimeOffset.UtcNow.ToUnixTimeSeconds() + (1074 * halfLifeSeconds);

            config.RankingProvider = new CurrentlyPopularRanking(epoch, halfLife);

            RedisWordSearch wordSearch = new RedisWordSearch(Database, config);

            wordSearch.Add(queryWordId, queryWord);

            wordSearch.BoostInRanking(queryWordId);
            Assert.AreNotEqual(0, wordSearch.CurrentScore(queryWordId));
        }