| 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;
- }
- }
- }
|