Browse Source

Add ValidateConversionFromRgb for all color conversions which use intrinsics

pull/2400/head
Brian Popow 3 years ago
parent
commit
ec3a08f687
  1. 97
      tests/ImageSharp.Tests/Formats/Jpg/JpegColorConverterTests.cs

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

@ -244,21 +244,41 @@ public class JpegColorConverterTests
public void FromYCbCrAvx2(int seed) =>
this.TestConversionToRgb(new JpegColorConverterBase.YCbCrAvx(8), 3, seed, new JpegColorConverterBase.YCbCrScalar(8));
[Theory]
[MemberData(nameof(Seeds))]
public void FromRgbToYCbCrAvx2(int seed) =>
this.TestConversionFromRgb(new JpegColorConverterBase.YCbCrAvx(8), 3, seed, new JpegColorConverterBase.YCbCrScalar(8));
[Theory]
[MemberData(nameof(Seeds))]
public void FromCmykAvx2(int seed) =>
this.TestConversionToRgb(new JpegColorConverterBase.CmykAvx(8), 4, seed, new JpegColorConverterBase.CmykScalar(8));
[Theory]
[MemberData(nameof(Seeds))]
public void FromRgbToCmykAvx2(int seed) =>
this.TestConversionFromRgb(new JpegColorConverterBase.CmykAvx(8), 4, seed, new JpegColorConverterBase.CmykScalar(8));
[Theory]
[MemberData(nameof(Seeds))]
public void FromCmykArm(int seed) =>
this.TestConversionToRgb( new JpegColorConverterBase.CmykArm64(8), 4, seed, new JpegColorConverterBase.CmykScalar(8));
[Theory]
[MemberData(nameof(Seeds))]
public void FromRgbToCmykArm(int seed) =>
this.TestConversionFromRgb(new JpegColorConverterBase.CmykArm64(8), 4, seed, new JpegColorConverterBase.CmykScalar(8));
[Theory]
[MemberData(nameof(Seeds))]
public void FromGrayscaleAvx2(int seed) =>
this.TestConversionToRgb(new JpegColorConverterBase.GrayscaleAvx(8), 1, seed, new JpegColorConverterBase.GrayscaleScalar(8));
[Theory]
[MemberData(nameof(Seeds))]
public void FromRgbToGrayscaleAvx2(int seed) =>
this.TestConversionFromRgb(new JpegColorConverterBase.GrayscaleAvx(8), 1, seed, new JpegColorConverterBase.GrayscaleScalar(8));
[Theory]
[MemberData(nameof(Seeds))]
public void FromRgbAvx2(int seed) =>
@ -274,6 +294,11 @@ public class JpegColorConverterTests
public void FromYccKAvx2(int seed) =>
this.TestConversionToRgb( new JpegColorConverterBase.YccKAvx(8), 4, seed, new JpegColorConverterBase.YccKScalar(8));
[Theory]
[MemberData(nameof(Seeds))]
public void FromRgbToYccKAvx2(int seed) =>
this.TestConversionFromRgb(new JpegColorConverterBase.YccKAvx(8), 4, seed, new JpegColorConverterBase.YccKScalar(8));
private void TestConversionToRgb(
JpegColorConverterBase converter,
int componentCount,
@ -294,6 +319,26 @@ public class JpegColorConverterTests
baseLineConverter);
}
private void TestConversionFromRgb(
JpegColorConverterBase converter,
int componentCount,
int seed,
JpegColorConverterBase baseLineConverter)
{
if (!converter.IsAvailable)
{
this.Output.WriteLine(
$"Skipping test - {converter.GetType().Name} is not supported on current hardware.");
return;
}
ValidateConversionFromRgb(
converter,
componentCount,
seed,
baseLineConverter);
}
private static JpegColorConverterBase.ComponentValues CreateRandomValues(
int length,
int componentCount,
@ -320,6 +365,18 @@ public class JpegColorConverterTests
return new JpegColorConverterBase.ComponentValues(buffers, 0);
}
private static float[] CreateRandomValues(int length, Random rnd)
{
float[] values = new float[length];
for (int j = 0; j < values.Length; j++)
{
values[j] = (float)rnd.NextDouble() * MaxColorChannelValue;
}
return values;
}
private static void ValidateConversionToRgb(
JpegColorConverterBase converter,
int componentCount,
@ -373,6 +430,46 @@ public class JpegColorConverterTests
}
}
private static void ValidateConversionFromRgb(
JpegColorConverterBase converter,
int componentCount,
int seed,
JpegColorConverterBase baseLineConverter)
{
// arrange
JpegColorConverterBase.ComponentValues actual = CreateRandomValues(TestBufferLength, componentCount, seed);
JpegColorConverterBase.ComponentValues expected = CreateRandomValues(TestBufferLength, componentCount, seed);
Random rnd = new(seed);
float[] rLane = CreateRandomValues(TestBufferLength, rnd);
float[] gLane = CreateRandomValues(TestBufferLength, rnd);
float[] bLane = CreateRandomValues(TestBufferLength, rnd);
// act
converter.ConvertFromRgb(actual, rLane, gLane, bLane);
baseLineConverter.ConvertFromRgb(expected, rLane, gLane, bLane);
// assert
if (componentCount == 1)
{
Assert.True(expected.Component0.SequenceEqual(actual.Component0));
}
if (componentCount == 2)
{
Assert.True(expected.Component1.SequenceEqual(actual.Component1));
}
if (componentCount == 3)
{
Assert.True(expected.Component2.SequenceEqual(actual.Component2));
}
if (componentCount == 4)
{
Assert.True(expected.Component3.SequenceEqual(actual.Component3));
}
}
private static void Validate(
JpegColorSpace colorSpace,
in JpegColorConverterBase.ComponentValues original,

Loading…
Cancel
Save