Browse Source

Fix tests

af/merge-core
James Jackson-South 8 years ago
parent
commit
53566333c5
  1. 4
      src/ImageSharp/ColorSpaces/Cmyk.cs
  2. 7
      src/ImageSharp/ColorSpaces/Rgb.cs
  3. 46
      tests/ImageSharp.Tests/Colorspaces/ApproximateColorspaceComparer.cs
  4. 15
      tests/ImageSharp.Tests/Formats/Jpg/JpegColorConverterTests.cs

4
src/ImageSharp/ColorSpaces/Cmyk.cs

@ -58,8 +58,8 @@ namespace SixLabors.ImageSharp.ColorSpaces
{
vector = Vector4.Clamp(vector, Vector4.Zero, Vector4.One);
this.C = vector.X;
this.Y = vector.Y;
this.M = vector.Z;
this.M = vector.Y;
this.Y = vector.Z;
this.K = vector.W;
}

7
src/ImageSharp/ColorSpaces/Rgb.cs

@ -64,9 +64,10 @@ namespace SixLabors.ImageSharp.ColorSpaces
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Rgb(float r, float g, float b, RgbWorkingSpace workingSpace)
{
this.R = r;
this.G = g;
this.B = b;
// Clamp to 0-1 range.
this.R = r.Clamp(0, 1F);
this.G = g.Clamp(0, 1F);
this.B = b.Clamp(0, 1F);
this.WorkingSpace = workingSpace;
}

46
tests/ImageSharp.Tests/Colorspaces/ApproximateColorspaceComparer.cs

@ -0,0 +1,46 @@
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System.Collections.Generic;
using SixLabors.ImageSharp.ColorSpaces;
namespace SixLabors.ImageSharp.Tests.Colorspaces
{
/// <summary>
/// Allows the approximate comparison of colorspace component values.
/// </summary>
internal class ApproximateColorSpaceComparer : IEqualityComparer<Rgb>
{
private readonly float Epsilon;
/// <summary>
/// Initializes a new instance of the <see cref="ApproximateColorSpaceComparer"/> class.
/// </summary>
/// <param name="epsilon">The comparison error difference epsilon to use.</param>
public ApproximateColorSpaceComparer(float epsilon = 1F)
{
this.Epsilon = epsilon;
}
/// <inheritdoc/>
public bool Equals(Rgb x, Rgb y)
{
return this.Equals(x.R, y.R)
&& this.Equals(x.G, y.G)
&& this.Equals(x.B, y.B);
}
/// <inheritdoc/>
public int GetHashCode(Rgb obj)
{
return obj.GetHashCode();
}
private bool Equals(float x, float y)
{
float d = x - y;
return d >= -this.Epsilon && d <= this.Epsilon;
}
}
}

15
tests/ImageSharp.Tests/Formats/Jpg/JpegColorConverterTests.cs

@ -8,6 +8,7 @@ using SixLabors.ImageSharp.ColorSpaces;
using SixLabors.ImageSharp.ColorSpaces.Conversion;
using SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder;
using SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder.ColorConverters;
using SixLabors.ImageSharp.Tests.Colorspaces;
using SixLabors.Memory;
using Xunit;
@ -17,7 +18,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
{
public class JpegColorConverterTests
{
private const float Precision = 0.1f / 255;
private const float Precision = 0.1F / 255;
private static readonly ApproximateColorSpaceComparer ColorSpaceComparer = new ApproximateColorSpaceComparer(Precision);
public static readonly TheoryData<int, int, int> CommonConversionData =
new TheoryData<int, int, int>
@ -59,7 +62,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
var actual = new Rgb(rgba.X, rgba.Y, rgba.Z);
var expected = ColorSpaceConverter.ToRgb(ycbcr);
Assert.True(actual.AlmostEquals(expected, Precision), $"{actual} != {expected}");
Assert.Equal(expected, actual, ColorSpaceComparer);
Assert.Equal(1, rgba.W);
}
@ -182,7 +185,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
var actual = new Rgb(rgba.X, rgba.Y, rgba.Z);
var expected = new Rgb(v.X, v.Y, v.Z);
Assert.True(actual.AlmostEquals(expected, Precision));
Assert.Equal(expected, actual);
Assert.Equal(1, rgba.W);
}
}
@ -204,7 +207,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
var actual = new Rgb(rgba.X, rgba.Y, rgba.Z);
var expected = new Rgb(y / 255F, y / 255F, y / 255F);
Assert.True(actual.AlmostEquals(expected, Precision));
Assert.Equal(expected, actual, ColorSpaceComparer);
Assert.Equal(1, rgba.W);
}
}
@ -228,7 +231,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
var actual = new Rgb(rgba.X, rgba.Y, rgba.Z);
var expected = new Rgb(r / 255F, g / 255F, b / 255F);
Assert.True(actual.AlmostEquals(expected, Precision));
Assert.Equal(expected, actual, ColorSpaceComparer);
Assert.Equal(1, rgba.W);
}
}
@ -266,7 +269,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
var actual = new Rgb(rgba.X, rgba.Y, rgba.Z);
var expected = new Rgb(v.X, v.Y, v.Z);
Assert.True(actual.AlmostEquals(expected, Precision));
Assert.Equal(expected, actual, ColorSpaceComparer);
Assert.Equal(1, rgba.W);
}
}

Loading…
Cancel
Save