From 2c46103340df9ec148a56ad441f5388969d03e7b Mon Sep 17 00:00:00 2001 From: Glatzemann Date: Fri, 4 Nov 2011 13:07:50 +0000 Subject: [PATCH] TestCenter: Color has now 100% unit test code coverage and all tests are green Color: fixed some minor issues. Color is completly finished including unit tests now. --- .../Strukturen/ColorTest.cs | 318 ++++++++++++++++++ ANX.Framework/Color.cs | 43 +-- 2 files changed, 333 insertions(+), 28 deletions(-) diff --git a/ANX.Framework.TestCenter/Strukturen/ColorTest.cs b/ANX.Framework.TestCenter/Strukturen/ColorTest.cs index be447fea..86920726 100644 --- a/ANX.Framework.TestCenter/Strukturen/ColorTest.cs +++ b/ANX.Framework.TestCenter/Strukturen/ColorTest.cs @@ -93,6 +93,151 @@ namespace ANX.Framework.TestCenter.Strukturen new object[] { DataFactory.RandomFloat, DataFactory.RandomFloat, DataFactory.RandomFloat, DataFactory.RandomFloat, DataFactory.RandomFloat, DataFactory.RandomFloat, DataFactory.RandomFloat, DataFactory.RandomFloat, DataFactory.RandomFloat } }; + static object[] colors = + { + new Object[] { XNAColor.AliceBlue, ANXColor.AliceBlue, "Color.AliceBlue" }, + new Object[] { XNAColor.AntiqueWhite, ANXColor.AntiqueWhite, "Color.AntiqueWhite" }, + new Object[] { XNAColor.Aqua, ANXColor.Aqua, "Color.Aqua" }, + new Object[] { XNAColor.Aquamarine, ANXColor.Aquamarine, "Color.Aquamarine" }, + new Object[] { XNAColor.Azure, ANXColor.Azure, "Color.Azure" }, + new Object[] { XNAColor.Beige, ANXColor.Beige, "Color.Beige" }, + new Object[] { XNAColor.Bisque, ANXColor.Bisque, "Color.Bisque" }, + new Object[] { XNAColor.Black, ANXColor.Black, "Color.Black" }, + new Object[] { XNAColor.BlanchedAlmond, ANXColor.BlanchedAlmond, "Color.BlanchedAlmond" }, + new Object[] { XNAColor.Blue, ANXColor.Blue, "Color.Blue" }, + new Object[] { XNAColor.BlueViolet, ANXColor.BlueViolet, "Color.BlueViolet" }, + new Object[] { XNAColor.Brown, ANXColor.Brown, "Color.Brown" }, + new Object[] { XNAColor.BurlyWood, ANXColor.BurlyWood, "Color.BurlyWood" }, + new Object[] { XNAColor.CadetBlue, ANXColor.CadetBlue, "Color.CadetBlue" }, + new Object[] { XNAColor.Chartreuse, ANXColor.Chartreuse, "Color.Chartreuse" }, + new Object[] { XNAColor.Chocolate, ANXColor.Chocolate, "Color.Choclate" }, + new Object[] { XNAColor.Coral, ANXColor.Coral, "Color.Coral" }, + new Object[] { XNAColor.CornflowerBlue, ANXColor.CornflowerBlue, "Color.CornflowerBlue" }, + new Object[] { XNAColor.Cornsilk, ANXColor.Cornsilk, "Color.Cornsilk" }, + new Object[] { XNAColor.Crimson, ANXColor.Crimson, "Color.Crimson" }, + new Object[] { XNAColor.Cyan, ANXColor.Cyan, "Color.Cyan" }, + new Object[] { XNAColor.DarkBlue, ANXColor.DarkBlue, "Color.DarkBlue" }, + new Object[] { XNAColor.DarkCyan, ANXColor.DarkCyan, "Color.DarkCyan" }, + new Object[] { XNAColor.DarkGoldenrod, ANXColor.DarkGoldenrod, "Color.DarkGoldenrod" }, + new Object[] { XNAColor.DarkGray, ANXColor.DarkGray, "Color.DarkGray" }, + new Object[] { XNAColor.DarkGreen, ANXColor.DarkGreen, "Color.DarkGreen" }, + new Object[] { XNAColor.DarkKhaki, ANXColor.DarkKhaki, "Color.DarkKhaki" }, + new Object[] { XNAColor.DarkMagenta, ANXColor.DarkMagenta, "Color.DarkMagenta" }, + new Object[] { XNAColor.DarkOliveGreen, ANXColor.DarkOliveGreen, "Color.DarkOliveGreen" }, + new Object[] { XNAColor.DarkOrange, ANXColor.DarkOrange, "Color.DarkOrange" }, + new Object[] { XNAColor.DarkOrchid, ANXColor.DarkOrchid, "Color.DarkOrchid" }, + new Object[] { XNAColor.DarkRed, ANXColor.DarkRed, "Color.DarkRed" }, + new Object[] { XNAColor.DarkSalmon, ANXColor.DarkSalmon, "Color.DarkSalmon" }, + new Object[] { XNAColor.DarkSeaGreen, ANXColor.DarkSeaGreen, "Color.DarkSeaGreen" }, + new Object[] { XNAColor.DarkSlateBlue, ANXColor.DarkSlateBlue, "Color.DarkSlateBlue" }, + new Object[] { XNAColor.DarkSlateGray, ANXColor.DarkSlateGray, "Color.DarkSlateGray" }, + new Object[] { XNAColor.DarkTurquoise, ANXColor.DarkTurquoise, "Color.DarkTurquoise" }, + new Object[] { XNAColor.DarkViolet, ANXColor.DarkViolet, "Color.DarkViolet" }, + new Object[] { XNAColor.DeepPink, ANXColor.DeepPink, "Color.DeepPink" }, + new Object[] { XNAColor.DeepSkyBlue, ANXColor.DeepSkyBlue, "Color.DeepSkyBlue" }, + new Object[] { XNAColor.DimGray, ANXColor.DimGray, "Color.DimGray" }, + new Object[] { XNAColor.DodgerBlue, ANXColor.DodgerBlue, "Color.DodgerBlue" }, + new Object[] { XNAColor.Firebrick, ANXColor.Firebrick, "Color.Firebrick" }, + new Object[] { XNAColor.FloralWhite, ANXColor.FloralWhite, "Color.FloralWhite" }, + new Object[] { XNAColor.ForestGreen, ANXColor.ForestGreen, "Color.ForestGreen" }, + new Object[] { XNAColor.Fuchsia, ANXColor.Fuchsia, "Color.Fuchsia" }, + new Object[] { XNAColor.Gainsboro, ANXColor.Gainsboro, "Color.Gainsboro" }, + new Object[] { XNAColor.GhostWhite, ANXColor.GhostWhite, "Color.GhostWhite" }, + new Object[] { XNAColor.Gold, ANXColor.Gold, "Color.Gold" }, + new Object[] { XNAColor.Goldenrod, ANXColor.Goldenrod, "Color.Goldenrod" }, + new Object[] { XNAColor.Gray, ANXColor.Gray, "Color.Gray" }, + new Object[] { XNAColor.Green, ANXColor.Green, "Color.Green" }, + new Object[] { XNAColor.GreenYellow, ANXColor.GreenYellow, "Color.GreenYellow" }, + new Object[] { XNAColor.Honeydew, ANXColor.Honeydew, "Color.Honeydew" }, + new Object[] { XNAColor.HotPink, ANXColor.HotPink, "Color.HotPink" }, + new Object[] { XNAColor.IndianRed, ANXColor.IndianRed, "Color.IndianRed" }, + new Object[] { XNAColor.Indigo, ANXColor.Indigo, "Color.Indigo" }, + new Object[] { XNAColor.Ivory, ANXColor.Ivory, "Color.Ivory" }, + new Object[] { XNAColor.Khaki, ANXColor.Khaki, "Color.Khaki" }, + new Object[] { XNAColor.Lavender, ANXColor.Lavender, "Color.Lavender" }, + new Object[] { XNAColor.LavenderBlush, ANXColor.LavenderBlush, "Color.LavenderBlush" }, + new Object[] { XNAColor.LawnGreen, ANXColor.LawnGreen, "Color.LawnGreen" }, + new Object[] { XNAColor.LemonChiffon, ANXColor.LemonChiffon, "Color.LemonChiffon" }, + new Object[] { XNAColor.LightBlue, ANXColor.LightBlue, "Color.LightBlue" }, + new Object[] { XNAColor.LightCoral, ANXColor.LightCoral, "Color.LightCoral" }, + new Object[] { XNAColor.LightCyan, ANXColor.LightCyan, "Color.LightCyan" }, + new Object[] { XNAColor.LightGoldenrodYellow, ANXColor.LightGoldenrodYellow, "Color.LightGoldenrodYellow" }, + new Object[] { XNAColor.LightGray, ANXColor.LightGray, "Color.LightGray" }, + new Object[] { XNAColor.LightGreen, ANXColor.LightGreen, "Color.LightGreen" }, + new Object[] { XNAColor.LightPink, ANXColor.LightPink, "Color.LightPink" }, + new Object[] { XNAColor.LightSalmon, ANXColor.LightSalmon, "Color.LightSalmon" }, + new Object[] { XNAColor.LightSeaGreen, ANXColor.LightSeaGreen, "Color.LightSeaGreen" }, + new Object[] { XNAColor.LightSkyBlue, ANXColor.LightSkyBlue, "Color.LightSkyBlue" }, + new Object[] { XNAColor.LightSlateGray, ANXColor.LightSlateGray, "Color.LightSlateGray" }, + new Object[] { XNAColor.LightSteelBlue, ANXColor.LightSteelBlue, "Color.LightSteelBlue" }, + new Object[] { XNAColor.LightYellow, ANXColor.LightYellow, "Color.LightYellow" }, + new Object[] { XNAColor.Lime, ANXColor.Lime, "Color.Lime" }, + new Object[] { XNAColor.LimeGreen, ANXColor.LimeGreen, "" }, + new Object[] { XNAColor.Linen, ANXColor.Linen, "" }, + new Object[] { XNAColor.Magenta, ANXColor.Magenta, "" }, + new Object[] { XNAColor.Maroon, ANXColor.Maroon, "" }, + new Object[] { XNAColor.MediumAquamarine, ANXColor.MediumAquamarine, "" }, + new Object[] { XNAColor.MediumBlue, ANXColor.MediumBlue, "" }, + new Object[] { XNAColor.MediumOrchid, ANXColor.MediumOrchid, "" }, + new Object[] { XNAColor.MediumPurple, ANXColor.MediumPurple, "" }, + new Object[] { XNAColor.MediumSeaGreen, ANXColor.MediumSeaGreen, "" }, + new Object[] { XNAColor.MediumSlateBlue, ANXColor.MediumSlateBlue, "" }, + new Object[] { XNAColor.MediumSpringGreen, ANXColor.MediumSpringGreen, "" }, + new Object[] { XNAColor.MediumTurquoise, ANXColor.MediumTurquoise, "" }, + new Object[] { XNAColor.MediumVioletRed, ANXColor.MediumVioletRed, "" }, + new Object[] { XNAColor.MidnightBlue, ANXColor.MidnightBlue, "" }, + new Object[] { XNAColor.MintCream, ANXColor.MintCream, "" }, + new Object[] { XNAColor.MistyRose, ANXColor.MistyRose, "" }, + new Object[] { XNAColor.Moccasin, ANXColor.Moccasin, "" }, + new Object[] { XNAColor.NavajoWhite, ANXColor.NavajoWhite, "" }, + new Object[] { XNAColor.Navy, ANXColor.Navy, "" }, + new Object[] { XNAColor.OldLace, ANXColor.OldLace, "" }, + new Object[] { XNAColor.Olive, ANXColor.Olive, "" }, + new Object[] { XNAColor.OliveDrab, ANXColor.OliveDrab, "" }, + new Object[] { XNAColor.Orange, ANXColor.Orange, "" }, + new Object[] { XNAColor.OrangeRed, ANXColor.OrangeRed, "" }, + new Object[] { XNAColor.Orchid, ANXColor.Orchid, "" }, + new Object[] { XNAColor.PaleGoldenrod, ANXColor.PaleGoldenrod, "" }, + new Object[] { XNAColor.PaleGreen, ANXColor.PaleGreen, "" }, + new Object[] { XNAColor.PaleTurquoise, ANXColor.PaleTurquoise, "" }, + new Object[] { XNAColor.PaleVioletRed, ANXColor.PaleVioletRed, "" }, + new Object[] { XNAColor.PapayaWhip, ANXColor.PapayaWhip, "" }, + new Object[] { XNAColor.PeachPuff, ANXColor.PeachPuff, "" }, + new Object[] { XNAColor.Peru, ANXColor.Peru, "" }, + new Object[] { XNAColor.Pink, ANXColor.Pink, "" }, + new Object[] { XNAColor.Plum, ANXColor.Plum, "" }, + new Object[] { XNAColor.PowderBlue, ANXColor.PowderBlue, "" }, + new Object[] { XNAColor.Purple, ANXColor.Purple, "" }, + new Object[] { XNAColor.Red, ANXColor.Red, "" }, + new Object[] { XNAColor.RosyBrown, ANXColor.RosyBrown, "" }, + new Object[] { XNAColor.RoyalBlue, ANXColor.RoyalBlue, "" }, + new Object[] { XNAColor.SaddleBrown, ANXColor.SaddleBrown, "" }, + new Object[] { XNAColor.Salmon, ANXColor.Salmon, "" }, + new Object[] { XNAColor.SandyBrown, ANXColor.SandyBrown, "" }, + new Object[] { XNAColor.SeaGreen, ANXColor.SeaGreen, "" }, + new Object[] { XNAColor.SeaShell, ANXColor.SeaShell, "" }, + new Object[] { XNAColor.Sienna, ANXColor.Sienna, "" }, + new Object[] { XNAColor.Silver, ANXColor.Silver, "" }, + new Object[] { XNAColor.SkyBlue, ANXColor.SkyBlue, "" }, + new Object[] { XNAColor.SlateBlue, ANXColor.SlateBlue, "" }, + new Object[] { XNAColor.SlateGray, ANXColor.SlateGray, "" }, + new Object[] { XNAColor.Snow, ANXColor.Snow, "" }, + new Object[] { XNAColor.SpringGreen, ANXColor.SpringGreen, "" }, + new Object[] { XNAColor.SteelBlue, ANXColor.SteelBlue, "" }, + new Object[] { XNAColor.Tan, ANXColor.Tan, "" }, + new Object[] { XNAColor.Teal, ANXColor.Teal, "" }, + new Object[] { XNAColor.Thistle, ANXColor.Thistle, "" }, + new Object[] { XNAColor.Tomato, ANXColor.Tomato, "" }, + new Object[] { XNAColor.Transparent, ANXColor.Transparent, "" }, + new Object[] { XNAColor.Turquoise, ANXColor.Turquoise, "" }, + new Object[] { XNAColor.Violet, ANXColor.Violet, "" }, + new Object[] { XNAColor.Wheat, ANXColor.Wheat, "" }, + new Object[] { XNAColor.White, ANXColor.White, "" }, + new Object[] { XNAColor.WhiteSmoke, ANXColor.WhiteSmoke, "" }, + new Object[] { XNAColor.Yellow, ANXColor.Yellow, "" }, + new Object[] { XNAColor.YellowGreen, ANXColor.YellowGreen, "" }, + }; + #region Constructors [Test] public void constructor0() @@ -156,6 +301,34 @@ namespace ANX.Framework.TestCenter.Strukturen AssertHelper.ConvertEquals(xna, anx, "constructor6"); } + + [Test] + public void constructor7() + { + XNAColor xna = new XNAColor(512, 512, 512); + ANXColor anx = new ANXColor(512, 512, 512); + + AssertHelper.ConvertEquals(xna, anx, "constructor7"); + } + + [Test, TestCaseSource("fourfloats")] + public void constructor8(float r, float g, float b, float a) + { + XNAColor xna = new XNAColor(r, g, b, a); + ANXColor anx = new ANXColor(r, g, b, a); + + AssertHelper.ConvertEquals(xna, anx, "constructor8"); + } + + [Test] + public void constructor9() + { + XNAColor xna = new XNAColor(512, 512, 512, 512); + ANXColor anx = new ANXColor(512, 512, 512, 512); + + AssertHelper.ConvertEquals(xna, anx, "constructor9"); + } + #endregion #region Methods @@ -183,6 +356,54 @@ namespace ANX.Framework.TestCenter.Strukturen } } + [Test, TestCaseSource("eightfloats")] + public void EqualOperator2( + float r1, float g1, float b1, float a1, + float r2, float g2, float b2, float a2) + { + Object xna1 = new XNAColor(r1, g1, b1) * a1; + Object xna2 = new XNAColor(r2, g2, b2) * a2; + + Object anx1 = new ANXColor(r1, g1, b1) * a1; + Object anx2 = new ANXColor(r2, g2, b2) * a2; + + bool xna = xna1.Equals(xna2); + bool anx = anx1.Equals(anx2); + + if (xna == anx) + { + Assert.Pass("EqualsOperator2 passed"); + } + else + { + Assert.Fail(String.Format("EqualsOperator2 failed: xna({0}) anx({1})", xna.ToString(), anx.ToString())); + } + } + + [Test, TestCaseSource("eightfloats")] + public void EqualOperator3( + float r1, float g1, float b1, float a1, + float r2, float g2, float b2, float a2) + { + Object xna1 = new XNAColor(r1, g1, b1) * a1; + Object xna2 = new XNAColor(r2, g2, b2) * a2; + + Object anx1 = new ANXColor(r1, g1, b1) * a1; + Object anx2 = new ANXColor(r2, g2, b2) * a2; + + bool xna = xna1.Equals(anx2); // this is itentional!!! + bool anx = anx1.Equals(xna2); // this is itentional!!! + + if (xna == anx) + { + Assert.Pass("EqualsOperator3 passed"); + } + else + { + Assert.Fail(String.Format("EqualsOperator3 failed: xna({0}) anx({1})", xna.ToString(), anx.ToString())); + } + } + [Test, TestCaseSource("eightfloats")] public void UnequalOperator( float r1, float g1, float b1, float a1, @@ -217,6 +438,15 @@ namespace ANX.Framework.TestCenter.Strukturen AssertHelper.ConvertEquals(xna, anx, "FromNonPremultipliedIntStatic"); } + [Test] + public void FromNonPremultipliedIntStatic2(float r, float g, float b, float a) + { + XNAColor xna = XNAColor.FromNonPremultiplied(512, 512, 512, 512); + ANXColor anx = ANXColor.FromNonPremultiplied(512, 512, 512, 512); + + AssertHelper.ConvertEquals(xna, anx, "FromNonPremultipliedIntStatic2"); + } + [Test, TestCaseSource("fourfloats")] public void FromNonPremultipliedVector4Static(float r, float g, float b, float a) { @@ -246,6 +476,40 @@ namespace ANX.Framework.TestCenter.Strukturen AssertHelper.ConvertEquals(xna, anx, "LerpStatic"); } + [Test, TestCaseSource("ninefloats")] + public void LerpStaticNaN(float r1, float g1, float b1, float a1,float r2, float g2, float b2, float a2, float nop) + { + float amount = float.NaN; + + XNAColor xna1 = new XNAColor(r1, g1, b1) * a1; + XNAColor xna2 = new XNAColor(r2, g2, b2) * a2; + + ANXColor anx1 = new ANXColor(r1, g1, b1) * a1; + ANXColor anx2 = new ANXColor(r2, g2, b2) * a2; + + XNAColor xna = XNAColor.Lerp(xna1, xna2, amount); + ANXColor anx = ANXColor.Lerp(anx1, anx2, amount); + + AssertHelper.ConvertEquals(xna, anx, "LerpStaticNan"); + } + + [Test, TestCaseSource("ninefloats")] + public void LerpStaticNegative(float r1, float g1, float b1, float a1, float r2, float g2, float b2, float a2, float nop) + { + float amount = float.MinValue / 65536f; + + XNAColor xna1 = new XNAColor(r1, g1, b1) * a1; + XNAColor xna2 = new XNAColor(r2, g2, b2) * a2; + + ANXColor anx1 = new ANXColor(r1, g1, b1) * a1; + ANXColor anx2 = new ANXColor(r2, g2, b2) * a2; + + XNAColor xna = XNAColor.Lerp(xna1, xna2, amount); + ANXColor anx = ANXColor.Lerp(anx1, anx2, amount); + + AssertHelper.ConvertEquals(xna, anx, "LerpStaticNegative"); + } + [Test, TestCaseSource("eightfloats")] public void MultiplyStatic(float r, float g, float b, float a, float scale, float x, float y, float z) { @@ -362,6 +626,60 @@ namespace ANX.Framework.TestCenter.Strukturen AssertHelper.ConvertEquals(xnaColor.A, anxColor.A, "A"); } + [Test, TestCaseSource("colors")] + public void NamedColorProperties(XNAColor xnaColor, ANXColor anxColor, string name) + { + AssertHelper.ConvertEquals(xnaColor, anxColor, name); + } + + [Test, TestCaseSource("fourfloats")] + public void RSet(float r, float g, float b, float a) + { + XNAColor xnaColor = new XNAColor(); + ANXColor anxColor = new ANXColor(); + + xnaColor.R = (byte)(r * 255); + anxColor.R = (byte)(r * 255); + + AssertHelper.ConvertEquals(xnaColor.R, anxColor.R, "RSet"); + } + + [Test, TestCaseSource("fourfloats")] + public void GSet(float r, float g, float b, float a) + { + XNAColor xnaColor = new XNAColor(); + ANXColor anxColor = new ANXColor(); + + xnaColor.G = (byte)(r * 255); + anxColor.G = (byte)(r * 255); + + AssertHelper.ConvertEquals(xnaColor.G, anxColor.G, "GSet"); + } + + [Test, TestCaseSource("fourfloats")] + public void BSet(float r, float g, float b, float a) + { + XNAColor xnaColor = new XNAColor(); + ANXColor anxColor = new ANXColor(); + + xnaColor.B = (byte)(r * 255); + anxColor.B = (byte)(r * 255); + + AssertHelper.ConvertEquals(xnaColor.B, anxColor.B, "BSet"); + } + + [Test, TestCaseSource("fourfloats")] + public void ASet(float r, float g, float b, float a) + { + XNAColor xnaColor = new XNAColor(); + ANXColor anxColor = new ANXColor(); + + xnaColor.A = (byte)(r * 255); + anxColor.A = (byte)(r * 255); + + AssertHelper.ConvertEquals(xnaColor.A, anxColor.A, "ASet"); + } + #endregion } } diff --git a/ANX.Framework/Color.cs b/ANX.Framework/Color.cs index 377a4f03..5b9a187d 100644 --- a/ANX.Framework/Color.cs +++ b/ANX.Framework/Color.cs @@ -107,8 +107,9 @@ namespace ANX.Framework } public Color(Vector4 vector) - : this(vector.X, vector.Y, vector.Z, vector.W) { + this.packedValue = 0; + ((IPackedVector)this).PackFromVector4(vector); } private Color(uint packedValue) @@ -785,20 +786,10 @@ namespace ANX.Framework get { return new Color(255, 99, 71, 255); } } - public static Color TransparentBlack - { - get { return new Color(0, 0, 0, 0); } - } - - public static Color TransparentWhite - { - get { return new Color(255, 255, 255, 0); } - } - - public static Color Transparent - { - get { return new Color(0, 0, 0, 0); } - } + public static Color Transparent + { + get { return new Color(0, 0, 0, 0); } + } public static Color Turquoise { @@ -867,10 +858,6 @@ namespace ANX.Framework { Color color; - r = r * a; - g = g * a; - b = b * a; - if (((((r | g) | b) | a) & -256) != 0) { r = r < 0 ? 0 : (r > 255 ? 255 : r); @@ -879,6 +866,10 @@ namespace ANX.Framework a = a < 0 ? 0 : (a > 255 ? 255 : a); } + r = r * a; + g = g * a; + b = b * a; + color.packedValue = (uint)(((r | g << 8) | b << 16) | a << 24); return color; @@ -987,11 +978,6 @@ namespace ANX.Framework return result; } - public void PackFromVector4(Vector4 vector) - { - throw new NotImplementedException(); - } - #endregion // Methods #region Properties @@ -1085,14 +1071,15 @@ namespace ANX.Framework { return 0; } - if (value > bitmask) - { - return (uint)bitmask; - } return (uint)value; } + void IPackedVector.PackFromVector4(Vector4 vector) + { + this.packedValue = ColorPack(vector.X, vector.Y, vector.Z, vector.W); + } + #endregion // Helper } }