Skip to content

Commit ec3a08f

Browse files
committed
Add ValidateConversionFromRgb for all color conversions which use intrinsics
1 parent b7c2e6f commit ec3a08f

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed

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

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,21 +244,41 @@ static void RunTest(string arg) =>
244244
public void FromYCbCrAvx2(int seed) =>
245245
this.TestConversionToRgb(new JpegColorConverterBase.YCbCrAvx(8), 3, seed, new JpegColorConverterBase.YCbCrScalar(8));
246246

247+
[Theory]
248+
[MemberData(nameof(Seeds))]
249+
public void FromRgbToYCbCrAvx2(int seed) =>
250+
this.TestConversionFromRgb(new JpegColorConverterBase.YCbCrAvx(8), 3, seed, new JpegColorConverterBase.YCbCrScalar(8));
251+
247252
[Theory]
248253
[MemberData(nameof(Seeds))]
249254
public void FromCmykAvx2(int seed) =>
250255
this.TestConversionToRgb(new JpegColorConverterBase.CmykAvx(8), 4, seed, new JpegColorConverterBase.CmykScalar(8));
251256

257+
[Theory]
258+
[MemberData(nameof(Seeds))]
259+
public void FromRgbToCmykAvx2(int seed) =>
260+
this.TestConversionFromRgb(new JpegColorConverterBase.CmykAvx(8), 4, seed, new JpegColorConverterBase.CmykScalar(8));
261+
252262
[Theory]
253263
[MemberData(nameof(Seeds))]
254264
public void FromCmykArm(int seed) =>
255265
this.TestConversionToRgb( new JpegColorConverterBase.CmykArm64(8), 4, seed, new JpegColorConverterBase.CmykScalar(8));
256266

267+
[Theory]
268+
[MemberData(nameof(Seeds))]
269+
public void FromRgbToCmykArm(int seed) =>
270+
this.TestConversionFromRgb(new JpegColorConverterBase.CmykArm64(8), 4, seed, new JpegColorConverterBase.CmykScalar(8));
271+
257272
[Theory]
258273
[MemberData(nameof(Seeds))]
259274
public void FromGrayscaleAvx2(int seed) =>
260275
this.TestConversionToRgb(new JpegColorConverterBase.GrayscaleAvx(8), 1, seed, new JpegColorConverterBase.GrayscaleScalar(8));
261276

277+
[Theory]
278+
[MemberData(nameof(Seeds))]
279+
public void FromRgbToGrayscaleAvx2(int seed) =>
280+
this.TestConversionFromRgb(new JpegColorConverterBase.GrayscaleAvx(8), 1, seed, new JpegColorConverterBase.GrayscaleScalar(8));
281+
262282
[Theory]
263283
[MemberData(nameof(Seeds))]
264284
public void FromRgbAvx2(int seed) =>
@@ -274,6 +294,11 @@ public void FromRgbArm(int seed) =>
274294
public void FromYccKAvx2(int seed) =>
275295
this.TestConversionToRgb( new JpegColorConverterBase.YccKAvx(8), 4, seed, new JpegColorConverterBase.YccKScalar(8));
276296

297+
[Theory]
298+
[MemberData(nameof(Seeds))]
299+
public void FromRgbToYccKAvx2(int seed) =>
300+
this.TestConversionFromRgb(new JpegColorConverterBase.YccKAvx(8), 4, seed, new JpegColorConverterBase.YccKScalar(8));
301+
277302
private void TestConversionToRgb(
278303
JpegColorConverterBase converter,
279304
int componentCount,
@@ -294,6 +319,26 @@ private void TestConversionToRgb(
294319
baseLineConverter);
295320
}
296321

322+
private void TestConversionFromRgb(
323+
JpegColorConverterBase converter,
324+
int componentCount,
325+
int seed,
326+
JpegColorConverterBase baseLineConverter)
327+
{
328+
if (!converter.IsAvailable)
329+
{
330+
this.Output.WriteLine(
331+
$"Skipping test - {converter.GetType().Name} is not supported on current hardware.");
332+
return;
333+
}
334+
335+
ValidateConversionFromRgb(
336+
converter,
337+
componentCount,
338+
seed,
339+
baseLineConverter);
340+
}
341+
297342
private static JpegColorConverterBase.ComponentValues CreateRandomValues(
298343
int length,
299344
int componentCount,
@@ -320,6 +365,18 @@ private static JpegColorConverterBase.ComponentValues CreateRandomValues(
320365
return new JpegColorConverterBase.ComponentValues(buffers, 0);
321366
}
322367

368+
private static float[] CreateRandomValues(int length, Random rnd)
369+
{
370+
float[] values = new float[length];
371+
372+
for (int j = 0; j < values.Length; j++)
373+
{
374+
values[j] = (float)rnd.NextDouble() * MaxColorChannelValue;
375+
}
376+
377+
return values;
378+
}
379+
323380
private static void ValidateConversionToRgb(
324381
JpegColorConverterBase converter,
325382
int componentCount,
@@ -373,6 +430,46 @@ private static void ValidateConversionToRgb(
373430
}
374431
}
375432

433+
private static void ValidateConversionFromRgb(
434+
JpegColorConverterBase converter,
435+
int componentCount,
436+
int seed,
437+
JpegColorConverterBase baseLineConverter)
438+
{
439+
// arrange
440+
JpegColorConverterBase.ComponentValues actual = CreateRandomValues(TestBufferLength, componentCount, seed);
441+
JpegColorConverterBase.ComponentValues expected = CreateRandomValues(TestBufferLength, componentCount, seed);
442+
Random rnd = new(seed);
443+
float[] rLane = CreateRandomValues(TestBufferLength, rnd);
444+
float[] gLane = CreateRandomValues(TestBufferLength, rnd);
445+
float[] bLane = CreateRandomValues(TestBufferLength, rnd);
446+
447+
// act
448+
converter.ConvertFromRgb(actual, rLane, gLane, bLane);
449+
baseLineConverter.ConvertFromRgb(expected, rLane, gLane, bLane);
450+
451+
// assert
452+
if (componentCount == 1)
453+
{
454+
Assert.True(expected.Component0.SequenceEqual(actual.Component0));
455+
}
456+
457+
if (componentCount == 2)
458+
{
459+
Assert.True(expected.Component1.SequenceEqual(actual.Component1));
460+
}
461+
462+
if (componentCount == 3)
463+
{
464+
Assert.True(expected.Component2.SequenceEqual(actual.Component2));
465+
}
466+
467+
if (componentCount == 4)
468+
{
469+
Assert.True(expected.Component3.SequenceEqual(actual.Component3));
470+
}
471+
}
472+
376473
private static void Validate(
377474
JpegColorSpace colorSpace,
378475
in JpegColorConverterBase.ComponentValues original,

0 commit comments

Comments
 (0)