public override int GetHashCode() { var hash = new XXHash32(); hash.Update(ToBytes(RequestUri.ToString())); hash.Update(ToBytes(Method.Method)); foreach (var kv in Headers) { // Case-insensitive keys hash.Update(ToBytes(kv.Key.ToLowerInvariant())); foreach (var headerValue in kv.Value) { // Case-sensitive values? hash.Update(ToBytes(headerValue)); } } return((int)hash.Result); }
public void EveryCallToDigestReturnsSameHash(int seed, int length) { var random = new Random(seed); var bytes = new byte[length]; random.NextBytes(bytes); var expected = XXHash32.DigestOf(bytes, 0, bytes.Length); var transform = new XXHash32(); transform.Update(bytes, 0, length); for (var i = 0; i < 100; i++) { Assert.Equal(expected, transform.Digest()); } }
public void RestartableHashReturnsSameResultsAsSingleBlock(int seed, int length, int chunk) { var random = new Random(seed); var bytes = new byte[length]; random.NextBytes(bytes); var expected = XXHash32.DigestOf(bytes, 0, bytes.Length); var transform = new XXHash32(); var index = 0; while (index < length) { var l = Math.Min(chunk, length - index); transform.Update(bytes, index, l); index += l; } var actual = transform.Digest(); Assert.Equal(expected, actual); }