| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 | using System;using System.Diagnostics;using System.Diagnostics.CodeAnalysis;using System.Linq;using Microsoft.VisualStudio.TestTools.UnitTesting;using Renci.SshNet.Common;namespace Renci.SshNet.Tests.Classes.Common{    [TestClass]    [SuppressMessage("ReSharper", "InvokeAsExtensionMethod")]    public class ExtensionsTest_IsEqualTo_ByteArray    {        private Random _random;        [TestInitialize]        public void Init()        {            _random = new Random();        }        [TestMethod]        public void ShouldThrowArgumentNullExceptionWhenLeftIsNull()        {            const byte[] left = null;            var right = CreateBuffer(1);            try            {                Extensions.IsEqualTo(left, right);                Assert.Fail();            }            catch (ArgumentNullException ex)            {                Assert.IsNull(ex.InnerException);                Assert.AreEqual("left", ex.ParamName);            }        }        [TestMethod]        public void ShouldThrowArgumentNullExceptionWhenRightIsNull()        {            var left = CreateBuffer(1);            const byte[] right = null;            try            {                Extensions.IsEqualTo(left, right);                Assert.Fail();            }            catch (ArgumentNullException ex)            {                Assert.IsNull(ex.InnerException);                Assert.AreEqual("right", ex.ParamName);            }        }        [TestMethod]        public void ShouldThrowArgumentNullExceptionWhenLeftAndRightAreNull()        {            const byte[] left = null;            const byte[] right = null;            try            {                Extensions.IsEqualTo(left, right);                Assert.Fail();            }            catch (ArgumentNullException ex)            {                Assert.IsNull(ex.InnerException);                Assert.AreEqual("left", ex.ParamName);            }        }        [TestMethod]        public void ShouldReturnFalseWhenLeftIsNotEqualToRight()        {            Assert.IsFalse(Extensions.IsEqualTo(new byte[] {0x0a}, new byte[] {0x0a, 0x0d}));            Assert.IsFalse(Extensions.IsEqualTo(new byte[] { 0x0a, 0x0d }, new byte[] { 0x0a }));            Assert.IsFalse(Extensions.IsEqualTo(new byte[0], new byte[] { 0x0a }));            Assert.IsFalse(Extensions.IsEqualTo(new byte[] { 0x0a, 0x0d }, new byte[0]));        }        [TestMethod]        public void ShouldReturnTrueWhenLeftIsEqualToRight()        {            Assert.IsTrue(Extensions.IsEqualTo(new byte[] { 0x0a, 0x0d }, new byte[] { 0x0a, 0x0d }));            Assert.IsTrue(Extensions.IsEqualTo(new byte[0], new byte[0]));        }        [TestMethod]        public void ShouldReturnTrueWhenLeftIsSameAsRight()        {            var left = new byte[] { 0x0d, 0x0d };            Assert.IsTrue(Extensions.IsEqualTo(left, left));        }        [TestMethod]        public void Performance_LargeArray_Equal()        {            var buffer = CreateBuffer(50000);            var left = buffer.Concat(new byte[] {0x0a});            var right = buffer.Concat(new byte[] { 0x0a });            const int runs = 10000;            Performance(left, right, runs);        }        [TestMethod]        public void Performance_LargeArray_NotEqual_DifferentLength()        {            var left = CreateBuffer(50000);            var right = left.Concat(new byte[] {0x0a});            const int runs = 10000;            Performance(left, right, runs);        }        [TestMethod]        public void Performance_LargeArray_NotEqual_SameLength()        {            var buffer = CreateBuffer(50000);            var left = buffer.Concat(new byte[] { 0x0a });            var right = buffer.Concat(new byte[] { 0x0b });            const int runs = 10000;            Performance(left, right, runs);        }        [TestMethod]        public void Performance_LargeArray_Same()        {            var left = CreateBuffer(50000);            var right = left.Concat(new byte[] { 0x0a });            const int runs = 10000;            Performance(left, right, runs);        }        private void Performance(byte[] left, byte[] right, int runs)        {            var stopWatch = new Stopwatch();            GC.Collect();            GC.WaitForPendingFinalizers();            GC.Collect();            stopWatch.Start();            for (var i = 0; i < runs; i++)            {                Extensions.IsEqualTo(left, right);            }            GC.Collect();            GC.WaitForPendingFinalizers();            GC.Collect();            stopWatch.Stop();            Console.WriteLine(stopWatch.ElapsedMilliseconds);            stopWatch.Restart();            for (var i = 0; i < runs; i++)            {                var result = Enumerable.SequenceEqual(left, right);            }            GC.Collect();            GC.WaitForPendingFinalizers();            GC.Collect();            stopWatch.Stop();            Console.WriteLine(stopWatch.ElapsedMilliseconds);        }        private byte[] CreateBuffer(int length)        {            var buffer = new byte[length];            _random.NextBytes(buffer);            return buffer;        }    }}
 |