示例#1
0
        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);
        }
示例#2
0
        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());
            }
        }
示例#3
0
        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);
        }