Browse Source

Use custom comparer

pull/457/head
James Jackson-South 8 years ago
parent
commit
6cf6ea497f
  1. 7
      tests/ImageSharp.Tests/Colorspaces/RgbAndCieXyzConversionTest.cs
  2. 4
      tests/ImageSharp.Tests/Colorspaces/RgbAndHslConversionTest.cs
  3. 4
      tests/ImageSharp.Tests/Colorspaces/RgbAndHsvConversionTest.cs
  4. 4
      tests/ImageSharp.Tests/Colorspaces/RgbAndYCbCrConversionTest.cs
  5. 57
      tests/ImageSharp.Tests/TestUtilities/ApproximateFloatComparer.cs

7
tests/ImageSharp.Tests/Colorspaces/RgbAndCieXyzConversionTest.cs

@ -19,6 +19,8 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
{
private static readonly IEqualityComparer<float> FloatRoundingComparer = new FloatRoundingComparer(6);
private static readonly ApproximateFloatComparer ApproximateComparer = new ApproximateFloatComparer(0.0001F);
/// <summary>
/// Tests conversion from <see cref="CieXyz"/> (<see cref="Illuminants.D50"/>)
/// to <see cref="Rgb"/> (<see cref="Rgb.DefaultWorkingSpace">default sRGB working space</see>).
@ -40,7 +42,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
Rgb output = converter.ToRgb(input);
// Assert
Assert.Equal(Rgb.DefaultWorkingSpace, output.WorkingSpace);
Assert.Equal(Rgb.DefaultWorkingSpace, output.WorkingSpace, ApproximateComparer);
Assert.Equal(r, output.R, FloatRoundingComparer);
Assert.Equal(g, output.G, FloatRoundingComparer);
Assert.Equal(b, output.B, FloatRoundingComparer);
@ -68,8 +70,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
Rgb output = converter.ToRgb(input);
// Assert
// TODO: Enable next line
// Assert.Equal(Rgb.DefaultWorkingSpace, output.WorkingSpace);
Assert.Equal(Rgb.DefaultWorkingSpace, output.WorkingSpace, ApproximateComparer);
Assert.Equal(r, output.R, FloatRoundingComparer);
Assert.Equal(g, output.G, FloatRoundingComparer);
Assert.Equal(b, output.B, FloatRoundingComparer);

4
tests/ImageSharp.Tests/Colorspaces/RgbAndHslConversionTest.cs

@ -22,6 +22,8 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
private static readonly ColorSpaceConverter Converter = new ColorSpaceConverter();
private static readonly ApproximateFloatComparer ApproximateComparer = new ApproximateFloatComparer(0.0001F);
/// <summary>
/// Tests conversion from <see cref="Hsl"/> to <see cref="Rgb"/>.
/// </summary>
@ -41,7 +43,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
Rgb output = Converter.ToRgb(input);
// Assert
Assert.Equal(Rgb.DefaultWorkingSpace, output.WorkingSpace);
Assert.Equal(Rgb.DefaultWorkingSpace, output.WorkingSpace, ApproximateComparer);
Assert.Equal(r, output.R, FloatRoundingComparer);
Assert.Equal(g, output.G, FloatRoundingComparer);
Assert.Equal(b, output.B, FloatRoundingComparer);

4
tests/ImageSharp.Tests/Colorspaces/RgbAndHsvConversionTest.cs

@ -21,6 +21,8 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
private static readonly ColorSpaceConverter Converter = new ColorSpaceConverter();
private static readonly ApproximateFloatComparer ApproximateComparer = new ApproximateFloatComparer(0.0001F);
/// <summary>
/// Tests conversion from <see cref="Hsv"/> to <see cref="Rgb"/>.
/// </summary>
@ -40,7 +42,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
Rgb output = Converter.ToRgb(input);
// Assert
Assert.Equal(Rgb.DefaultWorkingSpace, output.WorkingSpace);
Assert.Equal(Rgb.DefaultWorkingSpace, output.WorkingSpace, ApproximateComparer);
Assert.Equal(r, output.R, FloatRoundingComparer);
Assert.Equal(g, output.G, FloatRoundingComparer);
Assert.Equal(b, output.B, FloatRoundingComparer);

4
tests/ImageSharp.Tests/Colorspaces/RgbAndYCbCrConversionTest.cs

@ -20,6 +20,8 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
private static readonly ColorSpaceConverter Converter = new ColorSpaceConverter();
private static readonly ApproximateFloatComparer ApproximateComparer = new ApproximateFloatComparer(0.0001F);
/// <summary>
/// Tests conversion from <see cref="YCbCr"/> to <see cref="Rgb"/>.
/// </summary>
@ -36,7 +38,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
Rgb output = Converter.ToRgb(input);
// Assert
Assert.Equal(Rgb.DefaultWorkingSpace, output.WorkingSpace);
Assert.Equal(Rgb.DefaultWorkingSpace, output.WorkingSpace, ApproximateComparer);
Assert.Equal(r, output.R, FloatRoundingComparer);
Assert.Equal(g, output.G, FloatRoundingComparer);
Assert.Equal(b, output.B, FloatRoundingComparer);

57
tests/ImageSharp.Tests/TestUtilities/ApproximateFloatComparer.cs

@ -4,10 +4,18 @@
using System;
using System.Collections.Generic;
using System.Numerics;
using SixLabors.ImageSharp.ColorSpaces;
using SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.RgbColorSapce;
namespace SixLabors.ImageSharp.Tests
{
internal struct ApproximateFloatComparer : IEqualityComparer<float>, IEqualityComparer<Vector4>
internal struct ApproximateFloatComparer :
IEqualityComparer<float>,
IEqualityComparer<Vector4>,
IEqualityComparer<CieXyChromaticityCoordinates>,
IEqualityComparer<RgbPrimariesChromaticityCoordinates>,
IEqualityComparer<CieXyz>,
IEqualityComparer<IRgbWorkingSpace>
{
private readonly float Eps;
@ -37,5 +45,52 @@ namespace SixLabors.ImageSharp.Tests
{
throw new InvalidOperationException();
}
public bool Equals(CieXyChromaticityCoordinates x, CieXyChromaticityCoordinates y)
{
return this.Equals(x.X, y.X) && this.Equals(x.Y, y.Y);
}
public int GetHashCode(CieXyChromaticityCoordinates obj)
{
throw new NotImplementedException();
}
public bool Equals(RgbPrimariesChromaticityCoordinates x, RgbPrimariesChromaticityCoordinates y)
{
return this.Equals(x.R, y.R) && this.Equals(x.G, y.G) && this.Equals(x.B, y.B);
}
public int GetHashCode(RgbPrimariesChromaticityCoordinates obj)
{
throw new NotImplementedException();
}
public bool Equals(CieXyz x, CieXyz y)
{
return this.Equals(x.X, y.X) && this.Equals(x.Y, y.Y) && this.Equals(x.Z, y.Z);
}
public int GetHashCode(CieXyz obj)
{
throw new NotImplementedException();
}
public bool Equals(IRgbWorkingSpace x, IRgbWorkingSpace y)
{
if (x is RgbGammaWorkingSpace g1 && y is RgbGammaWorkingSpace g2)
{
return this.Equals(g1.WhitePoint, g2.WhitePoint)
&& this.Equals(g1.ChromaticityCoordinates, g2.ChromaticityCoordinates);
}
return this.Equals(x.WhitePoint, y.WhitePoint)
&& this.Equals(x.ChromaticityCoordinates, y.ChromaticityCoordinates);
}
public int GetHashCode(IRgbWorkingSpace obj)
{
throw new NotImplementedException();
}
}
}
Loading…
Cancel
Save