ColorTests.Operators.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. using System.Numerics;
  2. using System.Reflection;
  3. namespace Terminal.Gui.DrawingTests;
  4. public partial class ColorTests {
  5. [Theory]
  6. [Trait ("Category", "Operators")]
  7. [CombinatorialData]
  8. public void ExplicitOperator_ToVector3_ReturnsCorrectValue ([CombinatorialRange (0, 255, 51)] byte r, [CombinatorialRange (0, 255, 51)] byte g, [CombinatorialRange (0, 255, 51)] byte b, [CombinatorialValues (0, 255)] byte a)
  9. {
  10. Color color = new (r, g, b, a);
  11. Vector3 vector = (Vector3)color;
  12. Assert.Equal (color.R, vector.X);
  13. Assert.Equal (color.G, vector.Y);
  14. Assert.Equal (color.B, vector.Z);
  15. }
  16. [Theory]
  17. [CombinatorialData]
  18. public void GeneratedEqualityOperators_BehaveAsExpected ([CombinatorialValues (0, short.MaxValue, int.MaxValue, uint.MaxValue)] uint u1, [CombinatorialValues (0, short.MaxValue, int.MaxValue, uint.MaxValue)] uint u2)
  19. {
  20. Color color1 = u1;
  21. Color color2 = u2;
  22. if ( u1 == u2 ) {
  23. Assert.True (color1 == color2);
  24. Assert.False (color1 != color2);
  25. }
  26. else {
  27. Assert.True (color1 != color2);
  28. Assert.False (color1 == color2);
  29. }
  30. }
  31. [Theory]
  32. [CombinatorialData]
  33. [Trait ("Category", "Operators")]
  34. public void GetHashCode_DelegatesTo_Rgba ([CombinatorialRandomData (Count = 16)] int rgba)
  35. {
  36. Color color = new (rgba);
  37. Assert.Equal (rgba.GetHashCode (), color.GetHashCode ());
  38. }
  39. [Theory]
  40. [Trait ("Category", "Operators")]
  41. [MemberData (nameof (ColorTestsTheoryDataGenerators.ExplicitOperator_FromColorName_RoundTripsCorrectly), MemberType = typeof (ColorTestsTheoryDataGenerators))]
  42. public void ImplicitOperator_FromColorName_ReturnsCorrectColorValue (ColorName cname, Color expectedColor)
  43. {
  44. Color color = cname;
  45. Assert.Equal (expectedColor, color);
  46. }
  47. [Theory]
  48. [CombinatorialData]
  49. [Trait ("Category", "Operators")]
  50. public void ImplicitOperator_FromInt32_ReturnsCorrectColorValue ([CombinatorialRandomData (Count = 16)] int expectedValue)
  51. {
  52. Color color = expectedValue;
  53. Assert.Equal (expectedValue, color.Rgba);
  54. }
  55. [Theory]
  56. [CombinatorialData]
  57. [Trait ("Category", "Operators")]
  58. public void ImplicitOperator_FromUInt32_ReturnsCorrectColorValue ([CombinatorialRandomData (Count = 16)] uint expectedValue)
  59. {
  60. Color color = expectedValue;
  61. Assert.Equal (expectedValue, color.Argb);
  62. }
  63. [Theory]
  64. [CombinatorialData]
  65. [Trait ("Category", "Operators")]
  66. public void ImplicitOperator_FromVector3_ReturnsCorrectColorValue ([CombinatorialRange (0, 255, 51)] byte r, [CombinatorialRange (0, 255, 51)] byte g, [CombinatorialRange (0, 255, 51)] byte b)
  67. {
  68. Vector3 vector = new (r, g, b);
  69. Color color = vector;
  70. Assert.Equal (r, color.R);
  71. Assert.Equal (g, color.G);
  72. Assert.Equal (b, color.B);
  73. Assert.Equal (byte.MaxValue, color.A);
  74. }
  75. [Theory]
  76. [CombinatorialData]
  77. [Trait ("Category", "Operators")]
  78. public void ImplicitOperator_FromVector4_ReturnsCorrectColorValue ([CombinatorialRange (0, 255, 51)] byte r, [CombinatorialRange (0, 255, 51)] byte g, [CombinatorialRange (0, 255, 51)] byte b, [CombinatorialValues (0, 255)] byte a)
  79. {
  80. Vector4 vector = new (r, g, b, a);
  81. Color color = vector;
  82. Assert.Equal (r, color.R);
  83. Assert.Equal (g, color.G);
  84. Assert.Equal (b, color.B);
  85. Assert.Equal (a, color.A);
  86. }
  87. [Theory]
  88. [CombinatorialData]
  89. [Trait ("Category", "Operators")]
  90. public void ImplicitOperator_ToInt32_ReturnsCorrectInt32Value ([CombinatorialRandomData (Count = 16)] int expectedValue)
  91. {
  92. Color color = new (expectedValue);
  93. int colorAsInt32 = color;
  94. Assert.Equal (expectedValue, colorAsInt32);
  95. }
  96. [Theory]
  97. [CombinatorialData]
  98. [Trait ("Category", "Operators")]
  99. public void ImplicitOperator_ToUInt32_ReturnsCorrectUInt32Value ([CombinatorialRandomData (Count = 16)] uint expectedValue)
  100. {
  101. Color color = new (expectedValue);
  102. uint colorAsInt32 = color;
  103. Assert.Equal (expectedValue, colorAsInt32);
  104. }
  105. [Theory]
  106. [CombinatorialData]
  107. [Trait ("Category", "Operators")]
  108. public void ImplicitOperator_ToVector4_ReturnsCorrectVector4Value ([CombinatorialRange (0, 255, 51)] byte r, [CombinatorialRange (0, 255, 51)] byte g, [CombinatorialRange (0, 255, 51)] byte b, [CombinatorialValues (0, 255)] byte a)
  109. {
  110. Color color = new (r, g, b, a);
  111. Vector4 vector = color;
  112. Assert.Equal (r, vector.X);
  113. Assert.Equal (g, vector.Y);
  114. Assert.Equal (b, vector.Z);
  115. Assert.Equal (a, vector.W);
  116. }
  117. }
  118. public static partial class ColorTestsTheoryDataGenerators {
  119. public static TheoryData<ColorName, Color> ExplicitOperator_FromColorName_RoundTripsCorrectly ()
  120. {
  121. TheoryData<ColorName, Color> data = [];
  122. data.Add (ColorName.Black, new Color (12, 12, 12));
  123. data.Add (ColorName.Blue, new Color (0, 55, 218));
  124. data.Add (ColorName.Green, new Color (19, 161, 14));
  125. data.Add (ColorName.Cyan, new Color (58, 150, 221));
  126. data.Add (ColorName.Red, new Color (197, 15, 31));
  127. data.Add (ColorName.Magenta, new Color (136, 23, 152));
  128. data.Add (ColorName.Yellow, new Color (128, 64, 32));
  129. data.Add (ColorName.Gray, new Color (204, 204, 204));
  130. data.Add (ColorName.DarkGray, new Color (118, 118, 118));
  131. data.Add (ColorName.BrightBlue, new Color (59, 120, 255));
  132. data.Add (ColorName.BrightGreen, new Color (22, 198, 12));
  133. data.Add (ColorName.BrightCyan, new Color (97, 214, 214));
  134. data.Add (ColorName.BrightRed, new Color (231, 72, 86));
  135. data.Add (ColorName.BrightMagenta, new Color (180, 0, 158));
  136. data.Add (ColorName.BrightYellow, new Color (249, 241, 165));
  137. data.Add (ColorName.White, new Color (242, 242, 242));
  138. return data;
  139. }
  140. public static TheoryData<FieldInfo, int> Fields_At_Expected_Offsets ()
  141. {
  142. TheoryData<FieldInfo, int> data = [];
  143. data.Add (typeof (Color).GetField ("Argb", BindingFlags.Instance | BindingFlags.Public | BindingFlags.ExactBinding), 0);
  144. data.Add (typeof (Color).GetField ("Rgba", BindingFlags.Instance | BindingFlags.Public | BindingFlags.ExactBinding), 0);
  145. data.Add (typeof (Color).GetField ("B", BindingFlags.Instance | BindingFlags.Public | BindingFlags.ExactBinding), 0);
  146. data.Add (typeof (Color).GetField ("G", BindingFlags.Instance | BindingFlags.Public | BindingFlags.ExactBinding), 1);
  147. data.Add (typeof (Color).GetField ("R", BindingFlags.Instance | BindingFlags.Public | BindingFlags.ExactBinding), 2);
  148. data.Add (typeof (Color).GetField ("A", BindingFlags.Instance | BindingFlags.Public | BindingFlags.ExactBinding), 3);
  149. return data;
  150. }
  151. }