ColorTests.Operators.cs 7.8 KB

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