ExtensionsTest_IsEqualTo_ByteArray.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. using System;
  2. using System.Diagnostics;
  3. using System.Diagnostics.CodeAnalysis;
  4. using System.Linq;
  5. using Microsoft.VisualStudio.TestTools.UnitTesting;
  6. using Renci.SshNet.Common;
  7. namespace Renci.SshNet.Tests.Classes.Common
  8. {
  9. [TestClass]
  10. [SuppressMessage("ReSharper", "InvokeAsExtensionMethod")]
  11. public class ExtensionsTest_IsEqualTo_ByteArray
  12. {
  13. private Random _random;
  14. [TestInitialize]
  15. public void Init()
  16. {
  17. _random = new Random();
  18. }
  19. [TestMethod]
  20. public void ShouldThrowArgumentNullExceptionWhenLeftIsNull()
  21. {
  22. const byte[] left = null;
  23. var right = CreateBuffer(1);
  24. try
  25. {
  26. Extensions.IsEqualTo(left, right);
  27. Assert.Fail();
  28. }
  29. catch (ArgumentNullException ex)
  30. {
  31. Assert.IsNull(ex.InnerException);
  32. Assert.AreEqual("left", ex.ParamName);
  33. }
  34. }
  35. [TestMethod]
  36. public void ShouldThrowArgumentNullExceptionWhenRightIsNull()
  37. {
  38. var left = CreateBuffer(1);
  39. const byte[] right = null;
  40. try
  41. {
  42. Extensions.IsEqualTo(left, right);
  43. Assert.Fail();
  44. }
  45. catch (ArgumentNullException ex)
  46. {
  47. Assert.IsNull(ex.InnerException);
  48. Assert.AreEqual("right", ex.ParamName);
  49. }
  50. }
  51. [TestMethod]
  52. public void ShouldThrowArgumentNullExceptionWhenLeftAndRightAreNull()
  53. {
  54. const byte[] left = null;
  55. const byte[] right = null;
  56. try
  57. {
  58. Extensions.IsEqualTo(left, right);
  59. Assert.Fail();
  60. }
  61. catch (ArgumentNullException ex)
  62. {
  63. Assert.IsNull(ex.InnerException);
  64. Assert.AreEqual("left", ex.ParamName);
  65. }
  66. }
  67. [TestMethod]
  68. public void ShouldReturnFalseWhenLeftIsNotEqualToRight()
  69. {
  70. Assert.IsFalse(Extensions.IsEqualTo(new byte[] {0x0a}, new byte[] {0x0a, 0x0d}));
  71. Assert.IsFalse(Extensions.IsEqualTo(new byte[] { 0x0a, 0x0d }, new byte[] { 0x0a }));
  72. Assert.IsFalse(Extensions.IsEqualTo(new byte[0], new byte[] { 0x0a }));
  73. Assert.IsFalse(Extensions.IsEqualTo(new byte[] { 0x0a, 0x0d }, new byte[0]));
  74. }
  75. [TestMethod]
  76. public void ShouldReturnTrueWhenLeftIsEqualToRight()
  77. {
  78. Assert.IsTrue(Extensions.IsEqualTo(new byte[] { 0x0a, 0x0d }, new byte[] { 0x0a, 0x0d }));
  79. Assert.IsTrue(Extensions.IsEqualTo(new byte[0], new byte[0]));
  80. }
  81. [TestMethod]
  82. public void ShouldReturnTrueWhenLeftIsSameAsRight()
  83. {
  84. var left = new byte[] { 0x0d, 0x0d };
  85. Assert.IsTrue(Extensions.IsEqualTo(left, left));
  86. }
  87. [TestMethod]
  88. public void Performance_LargeArray_Equal()
  89. {
  90. var buffer = CreateBuffer(50000);
  91. var left = buffer.Concat(new byte[] {0x0a});
  92. var right = buffer.Concat(new byte[] { 0x0a });
  93. const int runs = 10000;
  94. Performance(left, right, runs);
  95. }
  96. [TestMethod]
  97. public void Performance_LargeArray_NotEqual_DifferentLength()
  98. {
  99. var left = CreateBuffer(50000);
  100. var right = left.Concat(new byte[] {0x0a});
  101. const int runs = 10000;
  102. Performance(left, right, runs);
  103. }
  104. [TestMethod]
  105. public void Performance_LargeArray_NotEqual_SameLength()
  106. {
  107. var buffer = CreateBuffer(50000);
  108. var left = buffer.Concat(new byte[] { 0x0a });
  109. var right = buffer.Concat(new byte[] { 0x0b });
  110. const int runs = 10000;
  111. Performance(left, right, runs);
  112. }
  113. [TestMethod]
  114. public void Performance_LargeArray_Same()
  115. {
  116. var left = CreateBuffer(50000);
  117. var right = left.Concat(new byte[] { 0x0a });
  118. const int runs = 10000;
  119. Performance(left, right, runs);
  120. }
  121. private void Performance(byte[] left, byte[] right, int runs)
  122. {
  123. var stopWatch = new Stopwatch();
  124. GC.Collect();
  125. GC.WaitForPendingFinalizers();
  126. GC.Collect();
  127. stopWatch.Start();
  128. for (var i = 0; i < runs; i++)
  129. {
  130. Extensions.IsEqualTo(left, right);
  131. }
  132. GC.Collect();
  133. GC.WaitForPendingFinalizers();
  134. GC.Collect();
  135. stopWatch.Stop();
  136. Console.WriteLine(stopWatch.ElapsedMilliseconds);
  137. stopWatch.Restart();
  138. for (var i = 0; i < runs; i++)
  139. {
  140. var result = Enumerable.SequenceEqual(left, right);
  141. }
  142. GC.Collect();
  143. GC.WaitForPendingFinalizers();
  144. GC.Collect();
  145. stopWatch.Stop();
  146. Console.WriteLine(stopWatch.ElapsedMilliseconds);
  147. }
  148. private byte[] CreateBuffer(int length)
  149. {
  150. var buffer = new byte[length];
  151. _random.NextBytes(buffer);
  152. return buffer;
  153. }
  154. }
  155. }