public static async Task TestPerformance(int length)
        {
            var messageBytes = new byte[length];

            for (var i = 0; i < length; i++)
            {
                messageBytes[i] = (byte)((int)(Math.E * i * i + Math.PI * i) % 256);
            }

            var expectedTimeLow  = length / (MegabytesPerSecondHighSpeed * 1000);
            var expectedTimeHigh = 1 + length / (MegabytesPerSecondLowSpeed * 1000);

            var hasher = new Sha256ContentHasher();

            using (var stream = new MemoryStream(messageBytes))
            {
                await hasher.ComputeHash(stream);

                stream.Seek(0, SeekOrigin.Begin);
                var stopwatch = new Stopwatch();
                stopwatch.Start();
                await hasher.ComputeHash(stream);

                stopwatch.Stop();
                Assert.InRange(stopwatch.ElapsedMilliseconds, expectedTimeLow, expectedTimeHigh);
            }
        }
        public static async Task TestHashes(string expectedHash, string inputMessage)
        {
            var expectedHashFormatted = expectedHash.Replace(" ", string.Empty).ToLowerInvariant();
            var hasher       = new Sha256ContentHasher();
            var messageBytes = Encoding.ASCII.GetBytes(inputMessage);

            using (var stream = new MemoryStream(messageBytes))
            {
                var actualHash = await hasher.ComputeHash(stream);

                Assert.Equal(expectedHashFormatted, actualHash);
            }
        }