From 17ce7b412d316838942c6b0dde9ddd02c6a5190b Mon Sep 17 00:00:00 2001 From: Olivia Date: Tue, 20 Dec 2016 12:10:27 +0200 Subject: [PATCH 01/10] Adding color constructor tests. --- .../Colors/ColorConstructorTests.cs | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 tests/ImageSharp.Tests/Colors/ColorConstructorTests.cs diff --git a/tests/ImageSharp.Tests/Colors/ColorConstructorTests.cs b/tests/ImageSharp.Tests/Colors/ColorConstructorTests.cs new file mode 100644 index 0000000000..64529b5ccd --- /dev/null +++ b/tests/ImageSharp.Tests/Colors/ColorConstructorTests.cs @@ -0,0 +1,42 @@ +// +// Copyright (c) James Jackson-South and contributors. +// Licensed under the Apache License, Version 2.0. +// + +namespace ImageSharp.Tests.Colors +{ + using System.Numerics; + using Xunit; + + public class ColorConstructorTests + { + public static readonly TheoryData ColorData = + new TheoryData() + { + { new Alpha8(.5F), new Vector4(0, 0, 0, .5F) }, + { new Argb(Vector4.One), Vector4.One }, + { new Argb(Vector4.Zero), Vector4.Zero }, + { new Argb(Vector4.UnitX), Vector4.UnitX }, + { new Argb(Vector4.UnitY), Vector4.UnitY }, + { new Argb(Vector4.UnitZ), Vector4.UnitZ }, + { new Argb(Vector4.UnitW), Vector4.UnitW }, + }; + + [Theory] + [MemberData(nameof(ColorData))] + public void ConstructorToVector4(IPackedVector color, Vector4 expectedVector4) + { + // Arrange + var precision = 2; + + // Act + var vector4 = color.ToVector4(); + + // Assert + Assert.Equal(expectedVector4.X, vector4.X, precision); + Assert.Equal(expectedVector4.Y, vector4.Y, precision); + Assert.Equal(expectedVector4.Z, vector4.Z, precision); + Assert.Equal(expectedVector4.W, vector4.W, precision); + } + } +} From 7b97edd123eb338d485a588be3ba59495ab35d30 Mon Sep 17 00:00:00 2001 From: Olivia Date: Tue, 20 Dec 2016 12:56:25 +0200 Subject: [PATCH 02/10] Better way to test all colors with Vector4 and Vector3 constructors. --- .../Colors/ColorConstructorTests.cs | 65 +++++++++++++++---- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/tests/ImageSharp.Tests/Colors/ColorConstructorTests.cs b/tests/ImageSharp.Tests/Colors/ColorConstructorTests.cs index 64529b5ccd..502eadbe38 100644 --- a/tests/ImageSharp.Tests/Colors/ColorConstructorTests.cs +++ b/tests/ImageSharp.Tests/Colors/ColorConstructorTests.cs @@ -5,25 +5,68 @@ namespace ImageSharp.Tests.Colors { + using System.Collections.Generic; using System.Numerics; using Xunit; public class ColorConstructorTests { - public static readonly TheoryData ColorData = - new TheoryData() + public static IEnumerable Vector4Data + { + get { - { new Alpha8(.5F), new Vector4(0, 0, 0, .5F) }, - { new Argb(Vector4.One), Vector4.One }, - { new Argb(Vector4.Zero), Vector4.Zero }, - { new Argb(Vector4.UnitX), Vector4.UnitX }, - { new Argb(Vector4.UnitY), Vector4.UnitY }, - { new Argb(Vector4.UnitZ), Vector4.UnitZ }, - { new Argb(Vector4.UnitW), Vector4.UnitW }, - }; + var vector4Values = new Vector4[] + { + Vector4.Zero, + Vector4.One, + Vector4.UnitX, + Vector4.UnitY, + Vector4.UnitZ, + Vector4.UnitW, + }; + + foreach (var vector4 in vector4Values) + { + yield return new object[] { new Argb(vector4), vector4 }; + yield return new object[] { new Bgra4444(vector4), vector4 }; + yield return new object[] { new Bgra5551(vector4), vector4 }; + yield return new object[] { new Byte4(vector4), vector4 }; + yield return new object[] { new HalfVector4(vector4), vector4 }; + yield return new object[] { new NormalizedByte4(vector4), vector4 }; + yield return new object[] { new NormalizedShort4(vector4), vector4 }; + yield return new object[] { new Rgba1010102(vector4), vector4 }; + yield return new object[] { new Rgba64(vector4), vector4 }; + yield return new object[] { new Short4(vector4), vector4 }; + } + } + } + + public static IEnumerable Vector3Data + { + get + { + var vector3Values = new Dictionary() + { + { Vector3.One, Vector4.One }, + { Vector3.Zero, new Vector4(0, 0, 0, 1) }, + { Vector3.UnitX, new Vector4(1, 0, 0, 1) }, + { Vector3.UnitY, new Vector4(0, 1, 0, 1) }, + { Vector3.UnitZ, new Vector4(0, 0, 1, 1) }, + }; + + foreach (var vector3 in vector3Values.Keys) + { + var vector4 = vector3Values[vector3]; + + yield return new object[] { new Argb(vector3), vector4 }; + yield return new object[] { new Bgr565(vector3), vector4 }; + } + } + } [Theory] - [MemberData(nameof(ColorData))] + [MemberData(nameof(Vector4Data))] + [MemberData(nameof(Vector3Data))] public void ConstructorToVector4(IPackedVector color, Vector4 expectedVector4) { // Arrange From 242f550888dabf828198926a81f860f3930862d7 Mon Sep 17 00:00:00 2001 From: Olivia Date: Tue, 20 Dec 2016 13:00:52 +0200 Subject: [PATCH 03/10] Adding tests for colors with 4 floats constructors. --- .../Colors/ColorConstructorTests.cs | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/tests/ImageSharp.Tests/Colors/ColorConstructorTests.cs b/tests/ImageSharp.Tests/Colors/ColorConstructorTests.cs index 502eadbe38..e95c4f2b6d 100644 --- a/tests/ImageSharp.Tests/Colors/ColorConstructorTests.cs +++ b/tests/ImageSharp.Tests/Colors/ColorConstructorTests.cs @@ -64,16 +64,47 @@ namespace ImageSharp.Tests.Colors } } + public static IEnumerable Float4Data + { + get + { + var vector4Values = new Vector4[] + { + Vector4.Zero, + Vector4.One, + Vector4.UnitX, + Vector4.UnitY, + Vector4.UnitZ, + Vector4.UnitW, + }; + + foreach (var vector4 in vector4Values) + { + yield return new object[] { new Argb(vector4.X, vector4.Y, vector4.Z, vector4.W), vector4 }; + yield return new object[] { new Bgra4444(vector4.X, vector4.Y, vector4.Z, vector4.W), vector4 }; + yield return new object[] { new Bgra5551(vector4.X, vector4.Y, vector4.Z, vector4.W), vector4 }; + yield return new object[] { new Byte4(vector4.X, vector4.Y, vector4.Z, vector4.W), vector4 }; + yield return new object[] { new HalfVector4(vector4.X, vector4.Y, vector4.Z, vector4.W), vector4 }; + yield return new object[] { new NormalizedByte4(vector4.X, vector4.Y, vector4.Z, vector4.W), vector4 }; + yield return new object[] { new NormalizedShort4(vector4.X, vector4.Y, vector4.Z, vector4.W), vector4 }; + yield return new object[] { new Rgba1010102(vector4.X, vector4.Y, vector4.Z, vector4.W), vector4 }; + yield return new object[] { new Rgba64(vector4.X, vector4.Y, vector4.Z, vector4.W), vector4 }; + yield return new object[] { new Short4(vector4.X, vector4.Y, vector4.Z, vector4.W), vector4 }; + } + } + } + [Theory] [MemberData(nameof(Vector4Data))] [MemberData(nameof(Vector3Data))] - public void ConstructorToVector4(IPackedVector color, Vector4 expectedVector4) + [MemberData(nameof(Float4Data))] + public void ConstructorToVector4(IPackedVector packedVector, Vector4 expectedVector4) { // Arrange var precision = 2; // Act - var vector4 = color.ToVector4(); + var vector4 = packedVector.ToVector4(); // Assert Assert.Equal(expectedVector4.X, vector4.X, precision); From 7e09db435dfe6fdb256f05f53cab07ad2fdc13de Mon Sep 17 00:00:00 2001 From: Olivia Date: Tue, 20 Dec 2016 13:21:03 +0200 Subject: [PATCH 04/10] Adding tests for colors with 3 floats constructors. --- .../Colors/ColorConstructorTests.cs | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/ImageSharp.Tests/Colors/ColorConstructorTests.cs b/tests/ImageSharp.Tests/Colors/ColorConstructorTests.cs index e95c4f2b6d..a7ece164f2 100644 --- a/tests/ImageSharp.Tests/Colors/ColorConstructorTests.cs +++ b/tests/ImageSharp.Tests/Colors/ColorConstructorTests.cs @@ -94,10 +94,34 @@ namespace ImageSharp.Tests.Colors } } + public static IEnumerable Float3Data + { + get + { + var vector3Values = new Dictionary() + { + { Vector3.One, Vector4.One }, + { Vector3.Zero, new Vector4(0, 0, 0, 1) }, + { Vector3.UnitX, new Vector4(1, 0, 0, 1) }, + { Vector3.UnitY, new Vector4(0, 1, 0, 1) }, + { Vector3.UnitZ, new Vector4(0, 0, 1, 1) }, + }; + + foreach (var vector3 in vector3Values.Keys) + { + var vector4 = vector3Values[vector3]; + + yield return new object[] { new Argb(vector3.X, vector3.Y, vector3.Z), vector4 }; + yield return new object[] { new Bgr565(vector3.X, vector3.Y, vector3.Z), vector4 }; + } + } + } + [Theory] [MemberData(nameof(Vector4Data))] [MemberData(nameof(Vector3Data))] [MemberData(nameof(Float4Data))] + [MemberData(nameof(Float3Data))] public void ConstructorToVector4(IPackedVector packedVector, Vector4 expectedVector4) { // Arrange From 66f95c5f864404885c2f563ecbd06cc74d8780e7 Mon Sep 17 00:00:00 2001 From: Olivia Date: Tue, 20 Dec 2016 13:29:02 +0200 Subject: [PATCH 05/10] Adding remark on old tests --- tests/ImageSharp.Tests/Colors/PackedPixelTests.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/ImageSharp.Tests/Colors/PackedPixelTests.cs b/tests/ImageSharp.Tests/Colors/PackedPixelTests.cs index 820dc2bae3..77fee1e79a 100644 --- a/tests/ImageSharp.Tests/Colors/PackedPixelTests.cs +++ b/tests/ImageSharp.Tests/Colors/PackedPixelTests.cs @@ -13,6 +13,10 @@ namespace ImageSharp.Tests.Colors /// /// The packed pixel tests. /// + /// + /// The "ToVector4" tests should now be covered in + /// and at some point they can be safely removed from here. + /// public class PackedPixelTests { [Fact] From be91edde44d4c45a95a5ba5520003d4a0d99c1d5 Mon Sep 17 00:00:00 2001 From: Olivia Date: Tue, 20 Dec 2016 13:35:41 +0200 Subject: [PATCH 06/10] Adding type to equality test data. --- .../Colors/ColorEqualityTests.cs | 59 ++++++++++++------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs index b6b4712ac4..94268473b2 100644 --- a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs +++ b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs @@ -5,6 +5,7 @@ namespace ImageSharp.Tests.Colors { + using System; using System.Numerics; using Xunit; @@ -13,27 +14,27 @@ namespace ImageSharp.Tests.Colors /// public class ColorEqualityTests { - public static readonly TheoryData EqualityData = - new TheoryData() + public static readonly TheoryData EqualityData = + new TheoryData() { - { new Alpha8(.5F), new Alpha8(.5F) }, - { new Argb(Vector4.One), new Argb(Vector4.One) }, - { new Bgr565(Vector3.One), new Bgr565(Vector3.One) }, - { new Bgra4444(Vector4.One), new Bgra4444(Vector4.One) }, - { new Bgra5551(Vector4.One), new Bgra5551(Vector4.One) }, - { new Byte4(Vector4.One * 255), new Byte4(Vector4.One * 255) }, - { new HalfSingle(-1F), new HalfSingle(-1F) }, - { new HalfVector2(0.1f, -0.3f), new HalfVector2(0.1f, -0.3f) }, - { new HalfVector4(Vector4.One), new HalfVector4(Vector4.One) }, - { new NormalizedByte2(-Vector2.One), new NormalizedByte2(-Vector2.One) }, - { new NormalizedByte4(Vector4.One), new NormalizedByte4(Vector4.One) }, - { new NormalizedShort2(Vector2.One), new NormalizedShort2(Vector2.One) }, - { new NormalizedShort4(Vector4.One), new NormalizedShort4(Vector4.One) }, - { new Rg32(Vector2.One), new Rg32(Vector2.One) }, - { new Rgba1010102(Vector4.One), new Rgba1010102(Vector4.One) }, - { new Rgba64(Vector4.One), new Rgba64(Vector4.One) }, - { new Short2(Vector2.One * 0x7FFF), new Short2(Vector2.One * 0x7FFF) }, - { new Short4(Vector4.One * 0x7FFF), new Short4(Vector4.One * 0x7FFF) }, + { new Alpha8(.5F), new Alpha8(.5F), typeof(Alpha8) }, + { new Argb(Vector4.One), new Argb(Vector4.One), typeof(Argb) }, + { new Bgr565(Vector3.One), new Bgr565(Vector3.One), typeof(Bgr565) }, + { new Bgra4444(Vector4.One), new Bgra4444(Vector4.One), typeof(Bgra4444) }, + { new Bgra5551(Vector4.One), new Bgra5551(Vector4.One), typeof(Bgra5551) }, + { new Byte4(Vector4.One * 255), new Byte4(Vector4.One * 255), typeof(Byte4) }, + { new HalfSingle(-1F), new HalfSingle(-1F), typeof(HalfSingle) }, + { new HalfVector2(0.1f, -0.3f), new HalfVector2(0.1f, -0.3f), typeof(HalfVector2) }, + { new HalfVector4(Vector4.One), new HalfVector4(Vector4.One), typeof(HalfVector4) }, + { new NormalizedByte2(-Vector2.One), new NormalizedByte2(-Vector2.One), typeof(NormalizedByte2) }, + { new NormalizedByte4(Vector4.One), new NormalizedByte4(Vector4.One), typeof(NormalizedByte4) }, + { new NormalizedShort2(Vector2.One), new NormalizedShort2(Vector2.One), typeof(NormalizedShort2) }, + { new NormalizedShort4(Vector4.One), new NormalizedShort4(Vector4.One), typeof(NormalizedShort4) }, + { new Rg32(Vector2.One), new Rg32(Vector2.One), typeof(Rg32) }, + { new Rgba1010102(Vector4.One), new Rgba1010102(Vector4.One), typeof(Rgba1010102) }, + { new Rgba64(Vector4.One), new Rgba64(Vector4.One), typeof(Rgba64) }, + { new Short2(Vector2.One * 0x7FFF), new Short2(Vector2.One * 0x7FFF), typeof(Short2) }, + { new Short4(Vector4.One * 0x7FFF), new Short4(Vector4.One * 0x7FFF), typeof(Short4) }, }; public static readonly TheoryData NotEqualityDataNulls = @@ -95,7 +96,7 @@ namespace ImageSharp.Tests.Colors [Theory] [MemberData(nameof(EqualityData))] - public void Equality(object first, object second) + public void Equality(object first, object second, Type type) { // Act var equal = first.Equals(second); @@ -119,7 +120,7 @@ namespace ImageSharp.Tests.Colors [Theory] [MemberData(nameof(EqualityData))] - public void HashCodeEqual(object first, object second) + public void HashCodeEqual(object first, object second, Type type) { // Act var equal = first.GetHashCode() == second.GetHashCode(); @@ -138,5 +139,19 @@ namespace ImageSharp.Tests.Colors // Assert Assert.False(equal); } + + [Theory] + [MemberData(nameof(EqualityData))] + public void EqualityOperator(object first, object second, Type type) + { + // Arrange + // Cast to the known object types + + // Act + var equal = first.Equals(second); + + // Assert + Assert.True(equal); + } } } From c40ad7f8700cfb83bb4c23c8e4939895dd14e706 Mon Sep 17 00:00:00 2001 From: Olivia Date: Tue, 20 Dec 2016 13:40:28 +0200 Subject: [PATCH 07/10] Adding type to all constructor test data. --- .../Colors/ColorEqualityTests.cs | 94 +++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs index 94268473b2..fdf47015cd 100644 --- a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs +++ b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs @@ -37,61 +37,61 @@ namespace ImageSharp.Tests.Colors { new Short4(Vector4.One * 0x7FFF), new Short4(Vector4.One * 0x7FFF), typeof(Short4) }, }; - public static readonly TheoryData NotEqualityDataNulls = - new TheoryData() + public static readonly TheoryData NotEqualityDataNulls = + new TheoryData() { // Valid object against null - { new Alpha8(.5F), null }, - { new Argb(Vector4.One), null }, - { new Bgr565(Vector3.One), null }, - { new Bgra4444(Vector4.One), null }, - { new Bgra5551(Vector4.One), null }, - { new Byte4(Vector4.One * 255), null }, - { new HalfSingle(-1F), null }, - { new HalfVector2(0.1f, -0.3f), null }, - { new HalfVector4(Vector4.One), null }, - { new NormalizedByte2(-Vector2.One), null }, - { new NormalizedByte4(Vector4.One), null }, - { new NormalizedShort2(Vector2.One), null }, - { new NormalizedShort4(Vector4.One), null }, - { new Rg32(Vector2.One), null }, - { new Rgba1010102(Vector4.One), null }, - { new Rgba64(Vector4.One), null }, - { new Short2(Vector2.One * 0x7FFF), null }, - { new Short4(Vector4.One * 0x7FFF), null }, + { new Alpha8(.5F), null, typeof(Alpha8) }, + { new Argb(Vector4.One), null, typeof(Argb) }, + { new Bgr565(Vector3.One), null, typeof(Bgr565) }, + { new Bgra4444(Vector4.One), null, typeof(Bgra4444) }, + { new Bgra5551(Vector4.One), null, typeof(Bgra5551) }, + { new Byte4(Vector4.One * 255), null, typeof(Byte4) }, + { new HalfSingle(-1F), null, typeof(HalfSingle) }, + { new HalfVector2(0.1f, -0.3f), null, typeof(HalfVector2) }, + { new HalfVector4(Vector4.One), null, typeof(HalfVector4) }, + { new NormalizedByte2(-Vector2.One), null, typeof(NormalizedByte2) }, + { new NormalizedByte4(Vector4.One), null, typeof(NormalizedByte4) }, + { new NormalizedShort2(Vector2.One), null, typeof(NormalizedShort2) }, + { new NormalizedShort4(Vector4.One), null, typeof(NormalizedShort4) }, + { new Rg32(Vector2.One), null, typeof(Rg32) }, + { new Rgba1010102(Vector4.One), null, typeof(Rgba1010102) }, + { new Rgba64(Vector4.One), null, typeof(Rgba64) }, + { new Short2(Vector2.One * 0x7FFF), null, typeof(Short2) }, + { new Short4(Vector4.One * 0x7FFF), null, typeof(Short4) }, }; - public static readonly TheoryData NotEqualityDataDifferentObjects = - new TheoryData() + public static readonly TheoryData NotEqualityDataDifferentObjects = + new TheoryData() { // Valid objects of different types but not equal - { new Alpha8(.5F), new Argb(Vector4.Zero) }, - { new HalfSingle(-1F), new NormalizedShort2(Vector2.Zero) }, - { new Rgba1010102(Vector4.One), new Bgra5551(Vector4.Zero) }, + { new Alpha8(.5F), new Argb(Vector4.Zero), null }, + { new HalfSingle(-1F), new NormalizedShort2(Vector2.Zero), null }, + { new Rgba1010102(Vector4.One), new Bgra5551(Vector4.Zero), null }, }; - public static readonly TheoryData NotEqualityData = - new TheoryData() + public static readonly TheoryData NotEqualityData = + new TheoryData() { // Valid objects of the same type but not equal - { new Alpha8(.5F), new Alpha8(.8F) }, - { new Argb(Vector4.One), new Argb(Vector4.Zero) }, - { new Bgr565(Vector3.One), new Bgr565(Vector3.Zero) }, - { new Bgra4444(Vector4.One), new Bgra4444(Vector4.Zero) }, - { new Bgra5551(Vector4.One), new Bgra5551(Vector4.Zero) }, - { new Byte4(Vector4.One * 255), new Byte4(Vector4.Zero) }, - { new HalfSingle(-1F), new HalfSingle(1F) }, - { new HalfVector2(0.1f, -0.3f), new HalfVector2(0.1f, 0.3f) }, - { new HalfVector4(Vector4.One), new HalfVector4(Vector4.Zero) }, - { new NormalizedByte2(-Vector2.One), new NormalizedByte2(-Vector2.Zero) }, - { new NormalizedByte4(Vector4.One), new NormalizedByte4(Vector4.Zero) }, - { new NormalizedShort2(Vector2.One), new NormalizedShort2(Vector2.Zero) }, - { new NormalizedShort4(Vector4.One), new NormalizedShort4(Vector4.Zero) }, - { new Rg32(Vector2.One), new Rg32(Vector2.Zero) }, - { new Rgba1010102(Vector4.One), new Rgba1010102(Vector4.Zero) }, - { new Rgba64(Vector4.One), new Rgba64(Vector4.Zero) }, - { new Short2(Vector2.One * 0x7FFF), new Short2(Vector2.Zero) }, - { new Short4(Vector4.One * 0x7FFF), new Short4(Vector4.Zero) }, + { new Alpha8(.5F), new Alpha8(.8F), typeof(Alpha8) }, + { new Argb(Vector4.One), new Argb(Vector4.Zero), typeof(Argb) }, + { new Bgr565(Vector3.One), new Bgr565(Vector3.Zero), typeof(Bgr565) }, + { new Bgra4444(Vector4.One), new Bgra4444(Vector4.Zero), typeof(Bgra4444) }, + { new Bgra5551(Vector4.One), new Bgra5551(Vector4.Zero), typeof(Bgra5551) }, + { new Byte4(Vector4.One * 255), new Byte4(Vector4.Zero), typeof(Byte4) }, + { new HalfSingle(-1F), new HalfSingle(1F), typeof(HalfSingle) }, + { new HalfVector2(0.1f, -0.3f), new HalfVector2(0.1f, 0.3f), typeof(HalfVector2) }, + { new HalfVector4(Vector4.One), new HalfVector4(Vector4.Zero), typeof(HalfVector4) }, + { new NormalizedByte2(-Vector2.One), new NormalizedByte2(-Vector2.Zero), typeof(NormalizedByte2) }, + { new NormalizedByte4(Vector4.One), new NormalizedByte4(Vector4.Zero), typeof(NormalizedByte4) }, + { new NormalizedShort2(Vector2.One), new NormalizedShort2(Vector2.Zero), typeof(NormalizedShort2) }, + { new NormalizedShort4(Vector4.One), new NormalizedShort4(Vector4.Zero), typeof(NormalizedShort4) }, + { new Rg32(Vector2.One), new Rg32(Vector2.Zero), typeof(Rg32) }, + { new Rgba1010102(Vector4.One), new Rgba1010102(Vector4.Zero), typeof(Rgba1010102) }, + { new Rgba64(Vector4.One), new Rgba64(Vector4.Zero), typeof(Rgba64) }, + { new Short2(Vector2.One * 0x7FFF), new Short2(Vector2.Zero), typeof(Short2) }, + { new Short4(Vector4.One * 0x7FFF), new Short4(Vector4.Zero), typeof(Short4) }, }; [Theory] @@ -109,7 +109,7 @@ namespace ImageSharp.Tests.Colors [MemberData(nameof(NotEqualityDataNulls))] [MemberData(nameof(NotEqualityDataDifferentObjects))] [MemberData(nameof(NotEqualityData))] - public void NotEquality(object first, object second) + public void NotEquality(object first, object second, Type type) { // Act var equal = first.Equals(second); @@ -131,7 +131,7 @@ namespace ImageSharp.Tests.Colors [Theory] [MemberData(nameof(NotEqualityDataDifferentObjects))] - public void HashCodeNotEqual(object first, object second) + public void HashCodeNotEqual(object first, object second, Type type) { // Act var equal = first.GetHashCode() == second.GetHashCode(); From 67678d14a32237cf403d3a5ddf16ff56b67e8517 Mon Sep 17 00:00:00 2001 From: Olivia Date: Tue, 20 Dec 2016 13:52:27 +0200 Subject: [PATCH 08/10] Adding equality and not equality tests on concrete object type. --- .../Colors/ColorEqualityTests.cs | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs index fdf47015cd..c8a3cf38d0 100644 --- a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs +++ b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs @@ -142,16 +142,38 @@ namespace ImageSharp.Tests.Colors [Theory] [MemberData(nameof(EqualityData))] - public void EqualityOperator(object first, object second, Type type) + public void EqualityObject(object first, object second, Type type) { // Arrange - // Cast to the known object types + // Cast to the known object types, this is so that we can hit the + // equality operator on the concrete type, otherwise it goes to the + // default "object" one :) + var firstObject = Convert.ChangeType(first, type); + var secondObject = Convert.ChangeType(second, type); // Act - var equal = first.Equals(second); + var equal = firstObject.Equals(secondObject); // Assert Assert.True(equal); } + + [Theory] + [MemberData(nameof(NotEqualityData))] + public void NotEqualityObject(object first, object second, Type type) + { + // Arrange + // Cast to the known object types, this is so that we can hit the + // equality operator on the concrete type, otherwise it goes to the + // default "object" one :) + var firstObject = Convert.ChangeType(first, type); + var secondObject = Convert.ChangeType(second, type); + + // Act + var equal = firstObject.Equals(secondObject); + + // Assert + Assert.False(equal); + } } } From 8a3ef9385570257b53145b84d902d8c595678fa8 Mon Sep 17 00:00:00 2001 From: Olivia Date: Tue, 20 Dec 2016 14:00:09 +0200 Subject: [PATCH 09/10] Fixing object boxing by using dynamic. Adding tests for equality operator and not equality operator. --- .../Colors/ColorEqualityTests.cs | 44 +++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs index c8a3cf38d0..af948fa21a 100644 --- a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs +++ b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs @@ -148,8 +148,8 @@ namespace ImageSharp.Tests.Colors // Cast to the known object types, this is so that we can hit the // equality operator on the concrete type, otherwise it goes to the // default "object" one :) - var firstObject = Convert.ChangeType(first, type); - var secondObject = Convert.ChangeType(second, type); + dynamic firstObject = Convert.ChangeType(first, type); + dynamic secondObject = Convert.ChangeType(second, type); // Act var equal = firstObject.Equals(secondObject); @@ -166,8 +166,8 @@ namespace ImageSharp.Tests.Colors // Cast to the known object types, this is so that we can hit the // equality operator on the concrete type, otherwise it goes to the // default "object" one :) - var firstObject = Convert.ChangeType(first, type); - var secondObject = Convert.ChangeType(second, type); + dynamic firstObject = Convert.ChangeType(first, type); + dynamic secondObject = Convert.ChangeType(second, type); // Act var equal = firstObject.Equals(secondObject); @@ -175,5 +175,41 @@ namespace ImageSharp.Tests.Colors // Assert Assert.False(equal); } + + [Theory] + [MemberData(nameof(EqualityData))] + public void EqualityOperator(object first, object second, Type type) + { + // Arrange + // Cast to the known object types, this is so that we can hit the + // equality operator on the concrete type, otherwise it goes to the + // default "object" one :) + dynamic firstObject = Convert.ChangeType(first, type); + dynamic secondObject = Convert.ChangeType(second, type); + + // Act + var equal = firstObject == secondObject; + + // Assert + Assert.True(equal); + } + + [Theory] + [MemberData(nameof(NotEqualityData))] + public void NotEqualityOperator(object first, object second, Type type) + { + // Arrange + // Cast to the known object types, this is so that we can hit the + // equality operator on the concrete type, otherwise it goes to the + // default "object" one :) + dynamic firstObject = Convert.ChangeType(first, type); + dynamic secondObject = Convert.ChangeType(second, type); + + // Act + var notEqual = firstObject != secondObject; + + // Assert + Assert.True(notEqual); + } } } From 7f5139408cc384053b37ab0d1395e13865537736 Mon Sep 17 00:00:00 2001 From: Olivia Date: Tue, 20 Dec 2016 14:37:06 +0200 Subject: [PATCH 10/10] Adding color packing tests - FromVector4 ToVector4. --- .../Colors/ColorPackingTests.cs | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 tests/ImageSharp.Tests/Colors/ColorPackingTests.cs diff --git a/tests/ImageSharp.Tests/Colors/ColorPackingTests.cs b/tests/ImageSharp.Tests/Colors/ColorPackingTests.cs new file mode 100644 index 0000000000..d4fc337a65 --- /dev/null +++ b/tests/ImageSharp.Tests/Colors/ColorPackingTests.cs @@ -0,0 +1,84 @@ +// +// Copyright (c) James Jackson-South and contributors. +// Licensed under the Apache License, Version 2.0. +// + +namespace ImageSharp.Tests.Colors +{ + using System.Collections.Generic; + using System.Numerics; + using Xunit; + + public class ColorPackingTests + { + public static IEnumerable Vector4PackData + { + get + { + var vector4Values = new Vector4[] + { + Vector4.Zero, + Vector4.One, + Vector4.UnitX, + Vector4.UnitY, + Vector4.UnitZ, + Vector4.UnitW, + }; + + foreach (var vector4 in vector4Values) + { + yield return new object[] { new Argb(), vector4 }; + yield return new object[] { new Bgra4444(), vector4 }; + yield return new object[] { new Bgra5551(), vector4 }; + yield return new object[] { new Byte4(), vector4 }; + yield return new object[] { new HalfVector4(), vector4 }; + yield return new object[] { new NormalizedByte4(), vector4 }; + yield return new object[] { new NormalizedShort4(), vector4 }; + yield return new object[] { new Rgba1010102(), vector4 }; + yield return new object[] { new Rgba64(), vector4 }; + yield return new object[] { new Short4(), vector4 }; + } + } + } + + public static IEnumerable Vector3PackData + { + get + { + var vector4Values = new Vector4[] + { + Vector4.One, + new Vector4(0, 0, 0, 1), + new Vector4(1, 0, 0, 1), + new Vector4(0, 1, 0, 1), + new Vector4(0, 0, 1, 1), + }; + + foreach (var vector4 in vector4Values) + { + yield return new object[] { new Argb(), vector4 }; + yield return new object[] { new Bgr565(), vector4 }; + } + } + } + + [Theory] + [MemberData(nameof(Vector4PackData))] + [MemberData(nameof(Vector3PackData))] + public void FromVector4ToVector4(IPackedVector packedVector, Vector4 vector4ToPack) + { + // Arrange + var precision = 2; + packedVector.PackFromVector4(vector4ToPack); + + // Act + var vector4 = packedVector.ToVector4(); + + // Assert + Assert.Equal(vector4ToPack.X, vector4.X, precision); + Assert.Equal(vector4ToPack.Y, vector4.Y, precision); + Assert.Equal(vector4ToPack.Z, vector4.Z, precision); + Assert.Equal(vector4ToPack.W, vector4.W, precision); + } + } +}