Example #1
0
        public void TestHyperLogLogMerge()
        {
            var           hll1      = new HyperLogLog <int>();
            var           hll2      = new HyperLogLog <int>();
            var           rand      = new Random();
            var           tolerance = .05;
            HashSet <int> actual    = new ();

            for (var i = 0; i < 5000; i++)
            {
                var k = rand.Next(20000);
                hll1.Add(k);
                actual.Add(k);
            }

            for (var i = 0; i < 5000; i++)
            {
                var k = rand.Next(20000);
                hll2.Add(k);
                actual.Add(k);
            }

            var hll = HyperLogLog <int> .Merge(hll1, hll2);

            hll.Cardinality().Should()
            .BeGreaterOrEqualTo((int)(actual.Count * (1 - tolerance)))
            .And
            .BeLessOrEqualTo((int)(actual.Count * (1 + tolerance)));
        }
Example #2
0
        public void Merge_NullSet_ThrowsExeption()
        {
            // Arrange
            var hyperLogLog = new HyperLogLog(4);

            // Act
            TestDelegate action = () => hyperLogLog.Merge(null);

            // Assert
            ArgumentNullException exception = Assert.Throws <ArgumentNullException>(action);

            Assert.AreEqual("other", exception.ParamName);
        }
Example #3
0
        public void Merge_SameSet_ThrowsExeption()
        {
            // Arrange
            var hyperLogLog = new HyperLogLog(4);

            // Act
            TestDelegate action = () => hyperLogLog.Merge(hyperLogLog);

            // Assert
            ArgumentException exception = Assert.Throws <ArgumentException>(action);

            Assert.AreEqual("other", exception.ParamName);
            StringAssert.StartsWith("Cannot merge instance of HyperLogLog to itself", exception.Message);
        }
Example #4
0
        public void Merge_DifferentB_ThrowsExeption()
        {
            // Arrange
            var hyperLogLog = new HyperLogLog(4);
            var other       = new HyperLogLog(5);

            // Act
            TestDelegate action = () => hyperLogLog.Merge(other);

            // Assert
            ArgumentException exception = Assert.Throws <ArgumentException>(action);

            Assert.AreEqual("other", exception.ParamName);
            StringAssert.StartsWith("Cannot merge instance of HyperLogLog with b = 5 to instance with b = 4", exception.Message);
        }
Example #5
0
        public void HyperLogLog_Normal()
        {
            var key  = "hyper_key";
            var key2 = "hyper_key2";

            // 删除已有
            _redis.Remove(key);
            var hyper = new HyperLogLog(_redis, key);

            _redis.SetExpire(key, TimeSpan.FromSeconds(60));

            // 取出个数
            var count = hyper.Count;

            Assert.Equal(0, count);

            // 添加
            var vs = new[] { "1234", "abcd", "新生命团队", "ABEF" };

            hyper.Add(vs);

            // 对比个数
            var count2 = hyper.Count;

            Assert.Equal(count + vs.Length, count2);


            var hyper2 = new HyperLogLog(_redis, key2);

            hyper2.Add("567", "789");

            var rs = hyper.Merge(key2);

            Assert.True(rs);

            Assert.Equal(vs.Length + hyper2.Count, hyper.Count);
        }