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))); }
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); }
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); }
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); }
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); }