2
0

ColorTests.Operators.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  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. [Trait ("Category", "Operators")]
  54. [MemberData (
  55. nameof (ColorTestsTheoryDataGenerators.ExplicitOperator_FromColorName_RoundTripsCorrectly),
  56. MemberType = typeof (ColorTestsTheoryDataGenerators)
  57. )]
  58. public void ImplicitOperator_FromColorName_ReturnsCorrectColorValue (ColorName cname, Color expectedColor)
  59. {
  60. Color color = cname;
  61. Assert.Equal (expectedColor, color);
  62. }
  63. [Theory]
  64. [CombinatorialData]
  65. [Trait ("Category", "Operators")]
  66. public void ImplicitOperator_FromInt32_ReturnsCorrectColorValue (
  67. [CombinatorialRandomData (Count = 16)] int expectedValue
  68. )
  69. {
  70. Color color = expectedValue;
  71. Assert.Equal (expectedValue, color.Rgba);
  72. }
  73. [Theory]
  74. [CombinatorialData]
  75. [Trait ("Category", "Operators")]
  76. public void ImplicitOperator_FromUInt32_ReturnsCorrectColorValue (
  77. [CombinatorialRandomData (Count = 16)] uint expectedValue
  78. )
  79. {
  80. Color color = expectedValue;
  81. Assert.Equal (expectedValue, color.Argb);
  82. }
  83. [Theory]
  84. [CombinatorialData]
  85. [Trait ("Category", "Operators")]
  86. public void ImplicitOperator_FromVector3_ReturnsCorrectColorValue (
  87. [CombinatorialRange (0, 255, 51)] byte r,
  88. [CombinatorialRange (0, 255, 51)] byte g,
  89. [CombinatorialRange (0, 255, 51)] byte b
  90. )
  91. {
  92. Vector3 vector = new (r, g, b);
  93. Color color = vector;
  94. Assert.Equal (r, color.R);
  95. Assert.Equal (g, color.G);
  96. Assert.Equal (b, color.B);
  97. Assert.Equal (byte.MaxValue, color.A);
  98. }
  99. [Theory]
  100. [CombinatorialData]
  101. [Trait ("Category", "Operators")]
  102. public void ImplicitOperator_FromVector4_ReturnsCorrectColorValue (
  103. [CombinatorialRange (0, 255, 51)] byte r,
  104. [CombinatorialRange (0, 255, 51)] byte g,
  105. [CombinatorialRange (0, 255, 51)] byte b,
  106. [CombinatorialValues (0, 255)] byte a
  107. )
  108. {
  109. Vector4 vector = new (r, g, b, a);
  110. Color color = vector;
  111. Assert.Equal (r, color.R);
  112. Assert.Equal (g, color.G);
  113. Assert.Equal (b, color.B);
  114. Assert.Equal (a, color.A);
  115. }
  116. [Theory]
  117. [CombinatorialData]
  118. [Trait ("Category", "Operators")]
  119. public void ImplicitOperator_ToInt32_ReturnsCorrectInt32Value (
  120. [CombinatorialRandomData (Count = 16)] int expectedValue
  121. )
  122. {
  123. Color color = new (expectedValue);
  124. int colorAsInt32 = color;
  125. Assert.Equal (expectedValue, colorAsInt32);
  126. }
  127. [Theory]
  128. [CombinatorialData]
  129. [Trait ("Category", "Operators")]
  130. public void ImplicitOperator_ToUInt32_ReturnsCorrectUInt32Value (
  131. [CombinatorialRandomData (Count = 16)] uint expectedValue
  132. )
  133. {
  134. Color color = new (expectedValue);
  135. uint colorAsInt32 = color;
  136. Assert.Equal (expectedValue, colorAsInt32);
  137. }
  138. [Theory]
  139. [CombinatorialData]
  140. [Trait ("Category", "Operators")]
  141. public void ImplicitOperator_ToVector4_ReturnsCorrectVector4Value (
  142. [CombinatorialRange (0, 255, 51)] byte r,
  143. [CombinatorialRange (0, 255, 51)] byte g,
  144. [CombinatorialRange (0, 255, 51)] byte b,
  145. [CombinatorialValues (0, 255)] byte a
  146. )
  147. {
  148. Color color = new (r, g, b, a);
  149. Vector4 vector = color;
  150. Assert.Equal (r, vector.X);
  151. Assert.Equal (g, vector.Y);
  152. Assert.Equal (b, vector.Z);
  153. Assert.Equal (a, vector.W);
  154. }
  155. }
  156. public static partial class ColorTestsTheoryDataGenerators
  157. {
  158. public static TheoryData<ColorName, Color> ExplicitOperator_FromColorName_RoundTripsCorrectly ()
  159. {
  160. TheoryData<ColorName, Color> data = []
  161. ;
  162. data.Add (ColorName.Black, new Color (12, 12, 12));
  163. data.Add (ColorName.Blue, new Color (0, 55, 218));
  164. data.Add (ColorName.Green, new Color (19, 161, 14));
  165. data.Add (ColorName.Cyan, new Color (58, 150, 221));
  166. data.Add (ColorName.Red, new Color (197, 15, 31));
  167. data.Add (ColorName.Magenta, new Color (136, 23, 152));
  168. data.Add (ColorName.Yellow, new Color (128, 64, 32));
  169. data.Add (ColorName.Gray, new Color (204, 204, 204));
  170. data.Add (ColorName.DarkGray, new Color (118, 118, 118));
  171. data.Add (ColorName.BrightBlue, new Color (59, 120, 255));
  172. data.Add (ColorName.BrightGreen, new Color (22, 198, 12));
  173. data.Add (ColorName.BrightCyan, new Color (97, 214, 214));
  174. data.Add (ColorName.BrightRed, new Color (231, 72, 86));
  175. data.Add (ColorName.BrightMagenta, new Color (180, 0, 158));
  176. data.Add (ColorName.BrightYellow, new Color (249, 241, 165));
  177. data.Add (ColorName.White, new Color (242, 242, 242));
  178. return data;
  179. }
  180. public static TheoryData<FieldInfo, int> Fields_At_Expected_Offsets ()
  181. {
  182. TheoryData<FieldInfo, int> data = []
  183. ;
  184. data.Add (
  185. typeof (Color).GetField (
  186. "Argb",
  187. BindingFlags.Instance | BindingFlags.Public | BindingFlags.ExactBinding
  188. ),
  189. 0
  190. );
  191. data.Add (
  192. typeof (Color).GetField (
  193. "Rgba",
  194. BindingFlags.Instance | BindingFlags.Public | BindingFlags.ExactBinding
  195. ),
  196. 0
  197. );
  198. data.Add (
  199. typeof (Color).GetField (
  200. "B",
  201. BindingFlags.Instance | BindingFlags.Public | BindingFlags.ExactBinding
  202. ),
  203. 0
  204. );
  205. data.Add (
  206. typeof (Color).GetField (
  207. "G",
  208. BindingFlags.Instance | BindingFlags.Public | BindingFlags.ExactBinding
  209. ),
  210. 1
  211. );
  212. data.Add (
  213. typeof (Color).GetField (
  214. "R",
  215. BindingFlags.Instance | BindingFlags.Public | BindingFlags.ExactBinding
  216. ),
  217. 2
  218. );
  219. data.Add (
  220. typeof (Color).GetField (
  221. "A",
  222. BindingFlags.Instance | BindingFlags.Public | BindingFlags.ExactBinding
  223. ),
  224. 3
  225. );
  226. return data;
  227. }
  228. }