public void VerifyMurmurHash() { var hFunc = new MurmurHash3_x86_32(); var x = VerificationTest(hFunc, 32, 0xB0F57EE3, true); // For MurmurHash3_x86_32 Assert.IsTrue(x); var hFunc128 = new MurmurHash3_x64_128(); var y = VerificationTest(hFunc128, 128, 0x6384BA69, true); // For MurmurHash3_x64_128 Assert.IsTrue(y); }
public static ICollection<IHashFunc> DefaultHashFuncs(int num = 5) { var hList = new List<IHashFunc>(); for (var i = 0; i < num; ++i) { var mmh = new MurmurHash3_x86_32(); mmh.Seed = (uint)i; hList.Add(mmh); } return hList; }
static double StressTestBFEstimator(int size, int changedPer) { var clientDic = DataGen.Gen(size, 0).ToDictionary(currItem => currItem.Key, currItem => currItem.Value); var serverDic = DataGen.Gen(size, changedPer).ToDictionary(currItem => currItem.Key, currItem => currItem.Value); var _bffile = new MemoryStream(); KeyValSync.ClientGenBfFile(clientDic, clientDic.Count, _bffile); _bffile.Position = 0; var bf = Serializer.Deserialize<BloomFilter>(_bffile); bf.SetHashFunctions(BloomFilter.DefaultHashFuncs()); var hitNum = 0; var hFunc = new MurmurHash3_x86_32(); foreach (var item in serverDic) { var block = item.Key + "-" + item.Value; var bBlock = Helper.GetBytes(block); var hv = hFunc.ComputeHash(bBlock); if (!bf.Contains(hv)) { } else { hitNum++; } } var estimatedD0 = Helper.EstimateD0(bf.Count, serverDic.Count, hitNum, bf) + 20; var realD0 = changedPer * size / 100 * 1.5; var diff = (double)estimatedD0 / realD0; return diff; }