From b87c8a202a9fcb9e91096d51bbc253b521c5d23a Mon Sep 17 00:00:00 2001 From: Olivia Date: Wed, 28 Dec 2016 19:06:50 +0200 Subject: [PATCH 1/7] Making equality for spaces work on backingVector. --- src/ImageSharp/Colors/Spaces/CieLab.cs | 2 +- src/ImageSharp/Colors/Spaces/CieXyz.cs | 2 +- src/ImageSharp/Colors/Spaces/Cmyk.cs | 2 +- src/ImageSharp/Colors/Spaces/Hsl.cs | 2 +- src/ImageSharp/Colors/Spaces/Hsv.cs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ImageSharp/Colors/Spaces/CieLab.cs b/src/ImageSharp/Colors/Spaces/CieLab.cs index f4f349b52..a97b09a14 100644 --- a/src/ImageSharp/Colors/Spaces/CieLab.cs +++ b/src/ImageSharp/Colors/Spaces/CieLab.cs @@ -161,7 +161,7 @@ namespace ImageSharp.Colors.Spaces /// public bool Equals(CieLab other) { - return this.AlmostEquals(other, Constants.Epsilon); + return this.backingVector.Equals(other.backingVector); } /// diff --git a/src/ImageSharp/Colors/Spaces/CieXyz.cs b/src/ImageSharp/Colors/Spaces/CieXyz.cs index 49396d3f6..0d90ddd7d 100644 --- a/src/ImageSharp/Colors/Spaces/CieXyz.cs +++ b/src/ImageSharp/Colors/Spaces/CieXyz.cs @@ -152,7 +152,7 @@ namespace ImageSharp.Colors.Spaces /// public bool Equals(CieXyz other) { - return this.AlmostEquals(other, Constants.Epsilon); + return this.backingVector.Equals(other.backingVector); } /// diff --git a/src/ImageSharp/Colors/Spaces/Cmyk.cs b/src/ImageSharp/Colors/Spaces/Cmyk.cs index 190d73598..9322e4f90 100644 --- a/src/ImageSharp/Colors/Spaces/Cmyk.cs +++ b/src/ImageSharp/Colors/Spaces/Cmyk.cs @@ -162,7 +162,7 @@ namespace ImageSharp.Colors.Spaces /// public bool Equals(Cmyk other) { - return this.AlmostEquals(other, Constants.Epsilon); + return this.backingVector.Equals(other.backingVector); } /// diff --git a/src/ImageSharp/Colors/Spaces/Hsl.cs b/src/ImageSharp/Colors/Spaces/Hsl.cs index 2cb02107b..7847aafe5 100644 --- a/src/ImageSharp/Colors/Spaces/Hsl.cs +++ b/src/ImageSharp/Colors/Spaces/Hsl.cs @@ -181,7 +181,7 @@ namespace ImageSharp.Colors.Spaces /// public bool Equals(Hsl other) { - return this.AlmostEquals(other, Constants.Epsilon); + return this.backingVector.Equals(other.backingVector); } /// diff --git a/src/ImageSharp/Colors/Spaces/Hsv.cs b/src/ImageSharp/Colors/Spaces/Hsv.cs index 8f7ebbdc7..69984d6f9 100644 --- a/src/ImageSharp/Colors/Spaces/Hsv.cs +++ b/src/ImageSharp/Colors/Spaces/Hsv.cs @@ -174,7 +174,7 @@ namespace ImageSharp.Colors.Spaces /// public bool Equals(Hsv other) { - return this.AlmostEquals(other, Constants.Epsilon); + return this.backingVector.Equals(other.backingVector); } /// From 4dd8096c536940d5cf8c0284f7cd5aac3a7a00ec Mon Sep 17 00:00:00 2001 From: Olivia Date: Wed, 28 Dec 2016 20:09:00 +0200 Subject: [PATCH 2/7] Adding equality tests for color space. --- .../Colors/ColorEqualityTests.cs | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs index af948fa21..f1b6b275b 100644 --- a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs +++ b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs @@ -7,6 +7,7 @@ namespace ImageSharp.Tests.Colors { using System; using System.Numerics; + using ImageSharp.Colors.Spaces; using Xunit; /// @@ -37,6 +38,25 @@ namespace ImageSharp.Tests.Colors { new Short4(Vector4.One * 0x7FFF), new Short4(Vector4.One * 0x7FFF), typeof(Short4) }, }; + public static readonly TheoryData EqualityDataColorSpaces = + new TheoryData() + { + { new Bgra32(0, 0, 0), new Bgra32(0, 0, 0), typeof(Bgra32) }, + { new Bgra32(0, 0, 0, 0), new Bgra32(0, 0, 0, 0), typeof(Bgra32) }, + { new Bgra32(100, 100, 0, 0), new Bgra32(100, 100, 0, 0), typeof(Bgra32) }, + { new Bgra32(255, 255, 255), new Bgra32(255, 255, 255), typeof(Bgra32) }, + { new CieLab(0f, 0f, 0f), new CieLab(0f, 0f, 0f), typeof(CieLab) }, + { new CieLab(1f, 1f, 1f), new CieLab(1f, 1f, 1f), typeof(CieLab) }, + { new CieLab(0f, -100f, -100f), new CieLab(0f, -100f, -100f), typeof(CieLab) }, + { new CieLab(0f, 100f, -100f), new CieLab(0f, 100f, -100f), typeof(CieLab) }, + { new CieLab(0f, -100f, 100f), new CieLab(0f, -100f, 100f), typeof(CieLab) }, + { new CieLab(0f, -100f, 50f), new CieLab(0f, -100f, 50f), typeof(CieLab) }, + { new CieXyz(380f, 380f, 380f), new CieXyz(380f, 380f, 380f), typeof(CieLab) }, + { new CieXyz(780f, 780f, 780f), new CieXyz(780f, 780f, 780f), typeof(CieLab) }, + { new CieXyz(380f, 780f, 780f), new CieXyz(380f, 780f, 780f), typeof(CieLab) }, + { new CieXyz(50f, 20f, 60f), new CieXyz(50f, 20f, 60f), typeof(CieLab) }, + }; + public static readonly TheoryData NotEqualityDataNulls = new TheoryData() { @@ -96,6 +116,7 @@ namespace ImageSharp.Tests.Colors [Theory] [MemberData(nameof(EqualityData))] + [MemberData(nameof(EqualityDataColorSpaces))] public void Equality(object first, object second, Type type) { // Act From 75a69fd659c890c140e0e8e779a2b1db9bdd7c5a Mon Sep 17 00:00:00 2001 From: Olivia Date: Wed, 28 Dec 2016 20:25:53 +0200 Subject: [PATCH 3/7] Adding test data for all color spaces. Adding null test data. --- .../Colors/ColorEqualityTests.cs | 37 +++++++++++++++++-- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs index f1b6b275b..b7a832561 100644 --- a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs +++ b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs @@ -51,10 +51,23 @@ namespace ImageSharp.Tests.Colors { new CieLab(0f, 100f, -100f), new CieLab(0f, 100f, -100f), typeof(CieLab) }, { new CieLab(0f, -100f, 100f), new CieLab(0f, -100f, 100f), typeof(CieLab) }, { new CieLab(0f, -100f, 50f), new CieLab(0f, -100f, 50f), typeof(CieLab) }, - { new CieXyz(380f, 380f, 380f), new CieXyz(380f, 380f, 380f), typeof(CieLab) }, - { new CieXyz(780f, 780f, 780f), new CieXyz(780f, 780f, 780f), typeof(CieLab) }, - { new CieXyz(380f, 780f, 780f), new CieXyz(380f, 780f, 780f), typeof(CieLab) }, - { new CieXyz(50f, 20f, 60f), new CieXyz(50f, 20f, 60f), typeof(CieLab) }, + { new CieXyz(380f, 380f, 380f), new CieXyz(380f, 380f, 380f), typeof(CieXyz) }, + { new CieXyz(780f, 780f, 780f), new CieXyz(780f, 780f, 780f), typeof(CieXyz) }, + { new CieXyz(380f, 780f, 780f), new CieXyz(380f, 780f, 780f), typeof(CieXyz) }, + { new CieXyz(50f, 20f, 60f), new CieXyz(50f, 20f, 60f), typeof(CieXyz) }, + { new Cmyk(0f, 0f, 0f, 0f), new Cmyk(0f, 0f, 0f, 0f), typeof(Cmyk) }, + { new Cmyk(1f, 1f, 1f, 1f), new Cmyk(1f, 1f, 1f, 1f), typeof(Cmyk) }, + { new Cmyk(10f, 10f, 10f, 10f), new Cmyk(10f, 10f, 10f, 10f), typeof(Cmyk) }, + { new Cmyk(.4f, .5f, .1f, .2f), new Cmyk(.4f, .5f, .1f, .2f), typeof(Cmyk) }, + { new Hsl(0f, 0f, 0f), new Hsl(0f, 0f, 0f), typeof(Hsl) }, + { new Hsl(360f, 1f, 1f), new Hsl(360f, 1f, 1f), typeof(Hsl) }, + { new Hsl(100f, .5f, .1f), new Hsl(100f, .5f, .1f), typeof(Hsl) }, + { new Hsv(0f, 0f, 0f), new Hsv(0f, 0f, 0f), typeof(Hsv) }, + { new Hsv(360f, 1f, 1f), new Hsv(360f, 1f, 1f), typeof(Hsv) }, + { new Hsv(100f, .5f, .1f), new Hsv(100f, .5f, .1f), typeof(Hsv) }, + { new YCbCr(0, 0, 0), new YCbCr(0, 0, 0), typeof(YCbCr) }, + { new YCbCr(255, 255, 255), new YCbCr(255, 255, 255), typeof(YCbCr) }, + { new YCbCr(100, 100, 0), new YCbCr(100, 100, 0), typeof(YCbCr) }, }; public static readonly TheoryData NotEqualityDataNulls = @@ -81,6 +94,18 @@ namespace ImageSharp.Tests.Colors { new Short4(Vector4.One * 0x7FFF), null, typeof(Short4) }, }; + public static readonly TheoryData NotEqualityDataNullsColorSpaces = + new TheoryData() + { + { new Bgra32(0, 0, 0), null, typeof(Bgra32) }, + { new CieLab(0f, 0f, 0f), null, typeof(CieLab) }, + { new CieXyz(380f, 380f, 380f), null, typeof(CieXyz) }, + { new Cmyk(0f, 0f, 0f, 0f), null, typeof(Cmyk) }, + { new Hsl(0f, 0f, 0f), null, typeof(Hsl) }, + { new Hsv(360f, 1f, 1f), null, typeof(Hsv) }, + { new YCbCr(0, 0, 0), null, typeof(YCbCr) }, + }; + public static readonly TheoryData NotEqualityDataDifferentObjects = new TheoryData() { @@ -128,6 +153,7 @@ namespace ImageSharp.Tests.Colors [Theory] [MemberData(nameof(NotEqualityDataNulls))] + [MemberData(nameof(NotEqualityDataNullsColorSpaces))] [MemberData(nameof(NotEqualityDataDifferentObjects))] [MemberData(nameof(NotEqualityData))] public void NotEquality(object first, object second, Type type) @@ -141,6 +167,7 @@ namespace ImageSharp.Tests.Colors [Theory] [MemberData(nameof(EqualityData))] + [MemberData(nameof(EqualityDataColorSpaces))] public void HashCodeEqual(object first, object second, Type type) { // Act @@ -163,6 +190,7 @@ namespace ImageSharp.Tests.Colors [Theory] [MemberData(nameof(EqualityData))] + [MemberData(nameof(EqualityDataColorSpaces))] public void EqualityObject(object first, object second, Type type) { // Arrange @@ -199,6 +227,7 @@ namespace ImageSharp.Tests.Colors [Theory] [MemberData(nameof(EqualityData))] + [MemberData(nameof(EqualityDataColorSpaces))] public void EqualityOperator(object first, object second, Type type) { // Arrange From 9b5f418aada229ecc0d62718ff52c1680e28c078 Mon Sep 17 00:00:00 2001 From: Olivia Date: Wed, 28 Dec 2016 20:35:46 +0200 Subject: [PATCH 4/7] Adding not equality tests for color spaces. --- .../Colors/ColorEqualityTests.cs | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs index b7a832561..bf3c8d49f 100644 --- a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs +++ b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs @@ -115,6 +115,16 @@ namespace ImageSharp.Tests.Colors { new Rgba1010102(Vector4.One), new Bgra5551(Vector4.Zero), null }, }; + public static readonly TheoryData NotEqualityDataDifferentObjectsColorSpaces = + new TheoryData() + { + // Valid objects of different types but not equal + { new Bgra32(0, 0, 0), new CieLab(0f, 0f, 0f), null }, + { new CieXyz(380f, 380f, 380f), new Cmyk(0f, 0f, 0f, 0f), null }, + { new Hsl(0f, 0f, 0f), new Hsv(360f, 1f, 1f), null }, + { new YCbCr(0, 0, 0), new Hsv(360f, 1f, 1f), null }, + }; + public static readonly TheoryData NotEqualityData = new TheoryData() { @@ -139,6 +149,38 @@ namespace ImageSharp.Tests.Colors { new Short4(Vector4.One * 0x7FFF), new Short4(Vector4.Zero), typeof(Short4) }, }; + public static readonly TheoryData NotEqualityDataColorSpaces = + new TheoryData() + { + { new Bgra32(0, 0, 0), new Bgra32(0, 1, 0), typeof(Bgra32) }, + { new Bgra32(0, 0, 0, 0), new Bgra32(0, 1, 0, 0), typeof(Bgra32) }, + { new Bgra32(100, 100, 0, 0), new Bgra32(100, 0, 0, 0), typeof(Bgra32) }, + { new Bgra32(255, 255, 255), new Bgra32(255, 0, 255), typeof(Bgra32) }, + { new CieLab(0f, 0f, 0f), new CieLab(0f, 1f, 0f), typeof(CieLab) }, + { new CieLab(1f, 1f, 1f), new CieLab(1f, 0f, 1f), typeof(CieLab) }, + { new CieLab(0f, -100f, -100f), new CieLab(0f, 100f, -100f), typeof(CieLab) }, + { new CieLab(0f, 100f, -100f), new CieLab(0f, -100f, -100f), typeof(CieLab) }, + { new CieLab(0f, -100f, 100f), new CieLab(0f, 100f, 100f), typeof(CieLab) }, + { new CieLab(0f, -100f, 50f), new CieLab(0f, 100f, 20f), typeof(CieLab) }, + { new CieXyz(380f, 380f, 380f), new CieXyz(380f, 0f, 380f), typeof(CieXyz) }, + { new CieXyz(780f, 780f, 780f), new CieXyz(780f, 0f, 780f), typeof(CieXyz) }, + { new CieXyz(380f, 780f, 780f), new CieXyz(380f, 0f, 780f), typeof(CieXyz) }, + { new CieXyz(50f, 20f, 60f), new CieXyz(50f, 0f, 60f), typeof(CieXyz) }, + { new Cmyk(0f, 0f, 0f, 0f), new Cmyk(0f, 1f, 0f, 0f), typeof(Cmyk) }, + { new Cmyk(1f, 1f, 1f, 1f), new Cmyk(1f, 1f, 0f, 1f), typeof(Cmyk) }, + { new Cmyk(10f, 10f, 10f, 10f), new Cmyk(10f, 10f, 0f, 10f), typeof(Cmyk) }, + { new Cmyk(.4f, .5f, .1f, .2f), new Cmyk(.4f, .5f, 5f, .2f), typeof(Cmyk) }, + { new Hsl(0f, 0f, 0f), new Hsl(0f, 5f, 0f), typeof(Hsl) }, + { new Hsl(360f, 1f, 1f), new Hsl(360f, .5f, 1f), typeof(Hsl) }, + { new Hsl(100f, .5f, .1f), new Hsl(100f, 9f, .1f), typeof(Hsl) }, + { new Hsv(0f, 0f, 0f), new Hsv(0f, 1f, 0f), typeof(Hsv) }, + { new Hsv(360f, 1f, 1f), new Hsv(0f, 1f, 1f), typeof(Hsv) }, + { new Hsv(100f, .5f, .1f), new Hsv(2f, .5f, .1f), typeof(Hsv) }, + { new YCbCr(0, 0, 0), new YCbCr(0, 1, 0), typeof(YCbCr) }, + { new YCbCr(255, 255, 255), new YCbCr(255, 0, 255), typeof(YCbCr) }, + { new YCbCr(100, 100, 0), new YCbCr(100, 20, 0), typeof(YCbCr) }, + }; + [Theory] [MemberData(nameof(EqualityData))] [MemberData(nameof(EqualityDataColorSpaces))] @@ -155,7 +197,9 @@ namespace ImageSharp.Tests.Colors [MemberData(nameof(NotEqualityDataNulls))] [MemberData(nameof(NotEqualityDataNullsColorSpaces))] [MemberData(nameof(NotEqualityDataDifferentObjects))] + [MemberData(nameof(NotEqualityDataDifferentObjectsColorSpaces))] [MemberData(nameof(NotEqualityData))] + [MemberData(nameof(NotEqualityDataColorSpaces))] public void NotEquality(object first, object second, Type type) { // Act @@ -179,6 +223,7 @@ namespace ImageSharp.Tests.Colors [Theory] [MemberData(nameof(NotEqualityDataDifferentObjects))] + [MemberData(nameof(NotEqualityDataDifferentObjectsColorSpaces))] public void HashCodeNotEqual(object first, object second, Type type) { // Act @@ -209,6 +254,7 @@ namespace ImageSharp.Tests.Colors [Theory] [MemberData(nameof(NotEqualityData))] + [MemberData(nameof(NotEqualityDataColorSpaces))] public void NotEqualityObject(object first, object second, Type type) { // Arrange @@ -246,6 +292,7 @@ namespace ImageSharp.Tests.Colors [Theory] [MemberData(nameof(NotEqualityData))] + [MemberData(nameof(NotEqualityDataColorSpaces))] public void NotEqualityOperator(object first, object second, Type type) { // Arrange From 9208de1659b1dedafb8c9b364354225aa4b7c1df Mon Sep 17 00:00:00 2001 From: Olivia Date: Wed, 28 Dec 2016 21:09:58 +0200 Subject: [PATCH 5/7] Fixing bug with non-inclusive AlmostEquals. --- src/ImageSharp/Colors/Spaces/CieLab.cs | 6 ++-- src/ImageSharp/Colors/Spaces/CieXyz.cs | 6 ++-- src/ImageSharp/Colors/Spaces/Cmyk.cs | 8 ++--- src/ImageSharp/Colors/Spaces/Hsl.cs | 6 ++-- src/ImageSharp/Colors/Spaces/Hsv.cs | 6 ++-- .../Colors/ColorEqualityTests.cs | 35 +++++++++++++++++++ 6 files changed, 51 insertions(+), 16 deletions(-) diff --git a/src/ImageSharp/Colors/Spaces/CieLab.cs b/src/ImageSharp/Colors/Spaces/CieLab.cs index a97b09a14..a4b9cb5f4 100644 --- a/src/ImageSharp/Colors/Spaces/CieLab.cs +++ b/src/ImageSharp/Colors/Spaces/CieLab.cs @@ -169,9 +169,9 @@ namespace ImageSharp.Colors.Spaces { Vector3 result = Vector3.Abs(this.backingVector - other.backingVector); - return result.X < precision - && result.Y < precision - && result.Z < precision; + return result.X <= precision + && result.Y <= precision + && result.Z <= precision; } } } diff --git a/src/ImageSharp/Colors/Spaces/CieXyz.cs b/src/ImageSharp/Colors/Spaces/CieXyz.cs index 0d90ddd7d..5bd1eac63 100644 --- a/src/ImageSharp/Colors/Spaces/CieXyz.cs +++ b/src/ImageSharp/Colors/Spaces/CieXyz.cs @@ -160,9 +160,9 @@ namespace ImageSharp.Colors.Spaces { Vector3 result = Vector3.Abs(this.backingVector - other.backingVector); - return result.X < precision - && result.Y < precision - && result.Z < precision; + return result.X <= precision + && result.Y <= precision + && result.Z <= precision; } } } diff --git a/src/ImageSharp/Colors/Spaces/Cmyk.cs b/src/ImageSharp/Colors/Spaces/Cmyk.cs index 9322e4f90..82e749f39 100644 --- a/src/ImageSharp/Colors/Spaces/Cmyk.cs +++ b/src/ImageSharp/Colors/Spaces/Cmyk.cs @@ -170,10 +170,10 @@ namespace ImageSharp.Colors.Spaces { Vector4 result = Vector4.Abs(this.backingVector - other.backingVector); - return result.X < precision - && result.Y < precision - && result.Z < precision - && result.W < precision; + return result.X <= precision + && result.Y <= precision + && result.Z <= precision + && result.W <= precision; } } } diff --git a/src/ImageSharp/Colors/Spaces/Hsl.cs b/src/ImageSharp/Colors/Spaces/Hsl.cs index 7847aafe5..13973349c 100644 --- a/src/ImageSharp/Colors/Spaces/Hsl.cs +++ b/src/ImageSharp/Colors/Spaces/Hsl.cs @@ -189,9 +189,9 @@ namespace ImageSharp.Colors.Spaces { Vector3 result = Vector3.Abs(this.backingVector - other.backingVector); - return result.X < precision - && result.Y < precision - && result.Z < precision; + return result.X <= precision + && result.Y <= precision + && result.Z <= precision; } } } diff --git a/src/ImageSharp/Colors/Spaces/Hsv.cs b/src/ImageSharp/Colors/Spaces/Hsv.cs index 69984d6f9..f7ed05b86 100644 --- a/src/ImageSharp/Colors/Spaces/Hsv.cs +++ b/src/ImageSharp/Colors/Spaces/Hsv.cs @@ -182,9 +182,9 @@ namespace ImageSharp.Colors.Spaces { Vector3 result = Vector3.Abs(this.backingVector - other.backingVector); - return result.X < precision - && result.Y < precision - && result.Z < precision; + return result.X <= precision + && result.Y <= precision + && result.Z <= precision; } } } diff --git a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs index bf3c8d49f..3209912ba 100644 --- a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs +++ b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs @@ -181,6 +181,23 @@ namespace ImageSharp.Tests.Colors { new YCbCr(100, 100, 0), new YCbCr(100, 20, 0), typeof(YCbCr) }, }; + public static readonly TheoryData AlmostEqualsData = + new TheoryData() + { + { new CieLab(0f, 0f, 0f), new CieLab(0f, 0f, 0f), typeof(CieLab), 0f }, + { new CieLab(0f, 0f, 0f), new CieLab(0f, 0f, 0f), typeof(CieLab), .001f }, + { new CieLab(0f, 0f, 0f), new CieLab(0f, 0f, 0f), typeof(CieLab), .0001f }, + { new CieLab(0f, 0f, 0f), new CieLab(0f, 0f, 0f), typeof(CieLab), .0005f }, + { new CieLab(0f, 0f, 0f), new CieLab(0f, .001f, 0f), typeof(CieLab), .001f }, + { new CieLab(0f, 0f, 0f), new CieLab(0f, 0f, .0001f), typeof(CieLab), .0001f }, + { new CieLab(0f, 0f, 0f), new CieLab(.0005f, 0f, 0f), typeof(CieLab), .0005f }, + //{ new CieXyz(380f, 380f, 380f), null, typeof(CieXyz) }, + //{ new Cmyk(0f, 0f, 0f, 0f), null, typeof(Cmyk) }, + //{ new Hsl(0f, 0f, 0f), null, typeof(Hsl) }, + //{ new Hsv(360f, 1f, 1f), null, typeof(Hsv) }, + //{ new YCbCr(0, 0, 0), null, typeof(YCbCr) }, + }; + [Theory] [MemberData(nameof(EqualityData))] [MemberData(nameof(EqualityDataColorSpaces))] @@ -308,5 +325,23 @@ namespace ImageSharp.Tests.Colors // Assert Assert.True(notEqual); } + + [Theory] + [MemberData(nameof(AlmostEqualsData))] + public void AlmostEquals(object first, object second, Type type, float precision) + { + // 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 almostEqual = firstObject.AlmostEquals(secondObject, precision); + + // Assert + Assert.True(almostEqual); + } } } From 0eab59955cf08b848a4c8dac843792b3a33ec3d6 Mon Sep 17 00:00:00 2001 From: Olivia Date: Wed, 28 Dec 2016 21:17:09 +0200 Subject: [PATCH 6/7] Adding almost equality tests. --- .../Colors/ColorEqualityTests.cs | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs index 3209912ba..98f75c1ba 100644 --- a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs +++ b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs @@ -191,11 +191,25 @@ namespace ImageSharp.Tests.Colors { new CieLab(0f, 0f, 0f), new CieLab(0f, .001f, 0f), typeof(CieLab), .001f }, { new CieLab(0f, 0f, 0f), new CieLab(0f, 0f, .0001f), typeof(CieLab), .0001f }, { new CieLab(0f, 0f, 0f), new CieLab(.0005f, 0f, 0f), typeof(CieLab), .0005f }, - //{ new CieXyz(380f, 380f, 380f), null, typeof(CieXyz) }, - //{ new Cmyk(0f, 0f, 0f, 0f), null, typeof(Cmyk) }, - //{ new Hsl(0f, 0f, 0f), null, typeof(Hsl) }, - //{ new Hsv(360f, 1f, 1f), null, typeof(Hsv) }, - //{ new YCbCr(0, 0, 0), null, typeof(YCbCr) }, + { new CieXyz(380f, 380f, 380f), new CieXyz(380f, 380f, 380f), typeof(CieXyz), 0f }, + { new CieXyz(380f, 380f, 380f), new CieXyz(380.001f, 380f, 380f), typeof(CieXyz), .01f }, + { new CieXyz(380f, 380f, 380f), new CieXyz(380f, 380.001f, 380f), typeof(CieXyz), .01f }, + { new CieXyz(380f, 380f, 380f), new CieXyz(380f, 380f, 380.001f), typeof(CieXyz), .01f }, + { new Cmyk(0f, 0f, 0f, 0f), new Cmyk(0f, 0f, 0f, 0f), typeof(Cmyk), 0f }, + { new Cmyk(0f, 0f, 0f, 0f), new Cmyk(0.001f, 0f, 0f, 0f), typeof(Cmyk), .01f }, + { new Cmyk(0f, 0f, 0f, 0f), new Cmyk(0f, 0.001f, 0f, 0f), typeof(Cmyk), .01f }, + { new Cmyk(0f, 0f, 0f, 0f), new Cmyk(0f, 0f, 0.001f, 0f), typeof(Cmyk), .01f }, + { new Cmyk(0f, 0f, 0f, 0f), new Cmyk(0f, 0f, 0f, 0.001f), typeof(Cmyk), .01f }, + { new Hsl(0f, 0f, 0f), new Hsl(0f, 0f, 0f), typeof(Hsl), 0f }, + { new Hsl(0f, 0f, 0f), new Hsl(0.001f, 0f, 0f), typeof(Hsl), .01f }, + { new Hsl(0f, 0f, 0f), new Hsl(0f, 0.001f, 0f), typeof(Hsl), .01f }, + { new Hsl(0f, 0f, 0f), new Hsl(0f, 0f, 0.001f), typeof(Hsl), .01f }, + { new Hsv(360f, 1f, 1f), new Hsv(360f, 1f, 1f), typeof(Hsv), 0f }, + { new Hsv(0f, 0f, 0f), new Hsv(0f, 0f, 0f), typeof(Hsv), 0f }, + { new Hsv(0f, 0f, 0f), new Hsv(0.001f, 0f, 0f), typeof(Hsv), .01f }, + { new Hsv(0f, 0f, 0f), new Hsv(0f, 0.001f, 0f), typeof(Hsv), .01f }, + { new Hsv(0f, 0f, 0f), new Hsv(0f, 0f, 0.001f), typeof(Hsv), .01f }, + { new YCbCr(0, 0, 0), new YCbCr(0, 0, 0), typeof(YCbCr), 0f }, }; [Theory] From fe2ef7127660d0994f0994323f9f27fb7d1b81ea Mon Sep 17 00:00:00 2001 From: Olivia Date: Wed, 28 Dec 2016 21:21:46 +0200 Subject: [PATCH 7/7] Adding not almost equals tests. --- .../Colors/ColorEqualityTests.cs | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs index 98f75c1ba..c241e8d6f 100644 --- a/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs +++ b/tests/ImageSharp.Tests/Colors/ColorEqualityTests.cs @@ -209,7 +209,27 @@ namespace ImageSharp.Tests.Colors { new Hsv(0f, 0f, 0f), new Hsv(0.001f, 0f, 0f), typeof(Hsv), .01f }, { new Hsv(0f, 0f, 0f), new Hsv(0f, 0.001f, 0f), typeof(Hsv), .01f }, { new Hsv(0f, 0f, 0f), new Hsv(0f, 0f, 0.001f), typeof(Hsv), .01f }, - { new YCbCr(0, 0, 0), new YCbCr(0, 0, 0), typeof(YCbCr), 0f }, + }; + + public static readonly TheoryData AlmostNotEqualsData = + new TheoryData() + { + { new CieLab(0f, 0f, 0f), new CieLab(0.1f, 0f, 0f), typeof(CieLab), .001f }, + { new CieLab(0f, 0f, 0f), new CieLab(0f, 0.1f, 0f), typeof(CieLab), .001f }, + { new CieLab(0f, 0f, 0f), new CieLab(0f, 0f, 0.1f), typeof(CieLab), .001f }, + { new CieXyz(380f, 380f, 380f), new CieXyz(380.1f, 380f, 380f), typeof(CieXyz), .001f }, + { new CieXyz(380f, 380f, 380f), new CieXyz(380f, 380.1f, 380f), typeof(CieXyz), .001f }, + { new CieXyz(380f, 380f, 380f), new CieXyz(380f, 380f, 380.1f), typeof(CieXyz), .001f }, + { new Cmyk(0f, 0f, 0f, 0f), new Cmyk(0.1f, 0f, 0f, 0f), typeof(Cmyk), .001f }, + { new Cmyk(0f, 0f, 0f, 0f), new Cmyk(0f, 0.1f, 0f, 0f), typeof(Cmyk), .001f }, + { new Cmyk(0f, 0f, 0f, 0f), new Cmyk(0f, 0f, 0.1f, 0f), typeof(Cmyk), .001f }, + { new Cmyk(0f, 0f, 0f, 0f), new Cmyk(0f, 0f, 0f, 0.1f), typeof(Cmyk), .001f }, + { new Hsl(0f, 0f, 0f), new Hsl(0.1f, 0f, 0f), typeof(Hsl), .001f }, + { new Hsl(0f, 0f, 0f), new Hsl(0f, 0.1f, 0f), typeof(Hsl), .001f }, + { new Hsl(0f, 0f, 0f), new Hsl(0f, 0f, 0.1f), typeof(Hsl), .001f }, + { new Hsv(0f, 0f, 0f), new Hsv(0.1f, 0f, 0f), typeof(Hsv), .001f }, + { new Hsv(0f, 0f, 0f), new Hsv(0f, 0.1f, 0f), typeof(Hsv), .001f }, + { new Hsv(0f, 0f, 0f), new Hsv(0f, 0f, 0.1f), typeof(Hsv), .001f }, }; [Theory] @@ -357,5 +377,23 @@ namespace ImageSharp.Tests.Colors // Assert Assert.True(almostEqual); } + + [Theory] + [MemberData(nameof(AlmostNotEqualsData))] + public void AlmostNotEquals(object first, object second, Type type, float precision) + { + // 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 almostEqual = firstObject.AlmostEquals(secondObject, precision); + + // Assert + Assert.False(almostEqual); + } } }