ExtensionsTest_IsEqualTo_ByteArray.cs 5.5 KB

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