Skip to content

Commit 1e2607e

Browse files
committed
Add comparing intrinsics color conversion to scalar version
1 parent e8f68d3 commit 1e2607e

File tree

1 file changed

+66
-28
lines changed

1 file changed

+66
-28
lines changed

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

Lines changed: 66 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public JpegColorConverterTests(ITestOutputHelper output)
3636
[Fact]
3737
public void GetConverterThrowsExceptionOnInvalidColorSpace()
3838
{
39-
var invalidColorSpace = (JpegColorSpace)(-1);
39+
JpegColorSpace invalidColorSpace = (JpegColorSpace)(-1);
4040
Assert.Throws<InvalidImageContentException>(() => JpegColorConverterBase.GetConverter(invalidColorSpace, 8));
4141
}
4242

@@ -61,7 +61,7 @@ public void GetConverterThrowsExceptionOnInvalidPrecision()
6161
[InlineData(JpegColorSpace.YCbCr, 12)]
6262
internal void GetConverterReturnsValidConverter(JpegColorSpace colorSpace, int precision)
6363
{
64-
var converter = JpegColorConverterBase.GetConverter(colorSpace, precision);
64+
JpegColorConverterBase converter = JpegColorConverterBase.GetConverter(colorSpace, precision);
6565

6666
Assert.NotNull(converter);
6767
Assert.True(converter.IsAvailable);
@@ -77,7 +77,7 @@ internal void GetConverterReturnsValidConverter(JpegColorSpace colorSpace, int p
7777
[InlineData(JpegColorSpace.YCbCr, 3)]
7878
internal void ConvertWithSelectedConverter(JpegColorSpace colorSpace, int componentCount)
7979
{
80-
var converter = JpegColorConverterBase.GetConverter(colorSpace, 8);
80+
JpegColorConverterBase converter = JpegColorConverterBase.GetConverter(colorSpace, 8);
8181
ValidateConversion(
8282
converter,
8383
componentCount,
@@ -93,7 +93,7 @@ public void FromYCbCrBasic(int seed) =>
9393
[MemberData(nameof(Seeds))]
9494
public void FromYCbCrVector(int seed)
9595
{
96-
var converter = new JpegColorConverterBase.YCbCrVector(8);
96+
JpegColorConverterBase.YCbCrVector converter = new(8);
9797

9898
if (!converter.IsAvailable)
9999
{
@@ -111,7 +111,8 @@ static void RunTest(string arg) =>
111111
ValidateConversion(
112112
new JpegColorConverterBase.YCbCrVector(8),
113113
3,
114-
FeatureTestRunner.Deserialize<int>(arg));
114+
FeatureTestRunner.Deserialize<int>(arg),
115+
new JpegColorConverterBase.YCbCrScalar(8));
115116
}
116117

117118
[Theory]
@@ -123,7 +124,7 @@ public void FromCmykBasic(int seed) =>
123124
[MemberData(nameof(Seeds))]
124125
public void FromCmykVector(int seed)
125126
{
126-
var converter = new JpegColorConverterBase.CmykVector(8);
127+
JpegColorConverterBase.CmykVector converter = new(8);
127128

128129
if (!converter.IsAvailable)
129130
{
@@ -141,7 +142,8 @@ static void RunTest(string arg) =>
141142
ValidateConversion(
142143
new JpegColorConverterBase.CmykVector(8),
143144
4,
144-
FeatureTestRunner.Deserialize<int>(arg));
145+
FeatureTestRunner.Deserialize<int>(arg),
146+
new JpegColorConverterBase.CmykScalar(8));
145147
}
146148

147149
[Theory]
@@ -153,7 +155,7 @@ public void FromGrayscaleBasic(int seed) =>
153155
[MemberData(nameof(Seeds))]
154156
public void FromGrayscaleVector(int seed)
155157
{
156-
var converter = new JpegColorConverterBase.GrayScaleVector(8);
158+
JpegColorConverterBase.GrayScaleVector converter = new JpegColorConverterBase.GrayScaleVector(8);
157159

158160
if (!converter.IsAvailable)
159161
{
@@ -171,7 +173,8 @@ static void RunTest(string arg) =>
171173
ValidateConversion(
172174
new JpegColorConverterBase.GrayScaleVector(8),
173175
1,
174-
FeatureTestRunner.Deserialize<int>(arg));
176+
FeatureTestRunner.Deserialize<int>(arg),
177+
new JpegColorConverterBase.GrayscaleScalar(8));
175178
}
176179

177180
[Theory]
@@ -183,7 +186,7 @@ public void FromRgbBasic(int seed) =>
183186
[MemberData(nameof(Seeds))]
184187
public void FromRgbVector(int seed)
185188
{
186-
var converter = new JpegColorConverterBase.RgbVector(8);
189+
JpegColorConverterBase.RgbVector converter = new JpegColorConverterBase.RgbVector(8);
187190

188191
if (!converter.IsAvailable)
189192
{
@@ -201,7 +204,8 @@ static void RunTest(string arg) =>
201204
ValidateConversion(
202205
new JpegColorConverterBase.RgbVector(8),
203206
3,
204-
FeatureTestRunner.Deserialize<int>(arg));
207+
FeatureTestRunner.Deserialize<int>(arg),
208+
new JpegColorConverterBase.RgbScalar(8));
205209
}
206210

207211
[Theory]
@@ -213,7 +217,7 @@ public void FromYccKBasic(int seed) =>
213217
[MemberData(nameof(Seeds))]
214218
public void FromYccKVector(int seed)
215219
{
216-
var converter = new JpegColorConverterBase.YccKVector(8);
220+
JpegColorConverterBase.YccKVector converter = new JpegColorConverterBase.YccKVector(8);
217221

218222
if (!converter.IsAvailable)
219223
{
@@ -231,48 +235,50 @@ static void RunTest(string arg) =>
231235
ValidateConversion(
232236
new JpegColorConverterBase.YccKVector(8),
233237
4,
234-
FeatureTestRunner.Deserialize<int>(arg));
238+
FeatureTestRunner.Deserialize<int>(arg),
239+
new JpegColorConverterBase.YccKScalar(8));
235240
}
236241

237242
[Theory]
238243
[MemberData(nameof(Seeds))]
239244
public void FromYCbCrAvx2(int seed) =>
240-
this.TestConverter(new JpegColorConverterBase.YCbCrAvx(8), 3, seed);
245+
this.TestConverter(new JpegColorConverterBase.YCbCrAvx(8), 3, seed, new JpegColorConverterBase.YCbCrScalar(8));
241246

242247
[Theory]
243248
[MemberData(nameof(Seeds))]
244249
public void FromCmykAvx2(int seed) =>
245-
this.TestConverter(new JpegColorConverterBase.CmykAvx(8), 4, seed);
250+
this.TestConverter(new JpegColorConverterBase.CmykAvx(8), 4, seed, new JpegColorConverterBase.CmykScalar(8));
246251

247252
[Theory]
248253
[MemberData(nameof(Seeds))]
249254
public void FromCmykArm(int seed) =>
250-
this.TestConverter(new JpegColorConverterBase.CmykArm64(8), 4, seed);
255+
this.TestConverter( new JpegColorConverterBase.CmykArm64(8), 4, seed, new JpegColorConverterBase.CmykScalar(8));
251256

252257
[Theory]
253258
[MemberData(nameof(Seeds))]
254259
public void FromGrayscaleAvx2(int seed) =>
255-
this.TestConverter(new JpegColorConverterBase.GrayscaleAvx(8), 1, seed);
260+
this.TestConverter(new JpegColorConverterBase.GrayscaleAvx(8), 1, seed, new JpegColorConverterBase.GrayscaleScalar(8));
256261

257262
[Theory]
258263
[MemberData(nameof(Seeds))]
259264
public void FromRgbAvx2(int seed) =>
260-
this.TestConverter(new JpegColorConverterBase.RgbAvx(8), 3, seed);
265+
this.TestConverter(new JpegColorConverterBase.RgbAvx(8), 3, seed, new JpegColorConverterBase.RgbScalar(8));
261266

262267
[Theory]
263268
[MemberData(nameof(Seeds))]
264269
public void FromRgbArm(int seed) =>
265-
this.TestConverter(new JpegColorConverterBase.RgbArm(8), 3, seed);
270+
this.TestConverter(new JpegColorConverterBase.RgbArm(8), 3, seed, new JpegColorConverterBase.RgbScalar(8));
266271

267272
[Theory]
268273
[MemberData(nameof(Seeds))]
269274
public void FromYccKAvx2(int seed) =>
270-
this.TestConverter(new JpegColorConverterBase.YccKAvx(8), 4, seed);
275+
this.TestConverter( new JpegColorConverterBase.YccKAvx(8), 4, seed, new JpegColorConverterBase.YccKScalar(8));
271276

272277
private void TestConverter(
273278
JpegColorConverterBase converter,
274279
int componentCount,
275-
int seed)
280+
int seed,
281+
JpegColorConverterBase baseLineConverter = null)
276282
{
277283
if (!converter.IsAvailable)
278284
{
@@ -284,7 +290,8 @@ private void TestConverter(
284290
ValidateConversion(
285291
converter,
286292
componentCount,
287-
seed);
293+
seed,
294+
baseLineConverter);
288295
}
289296

290297
private static JpegColorConverterBase.ComponentValues CreateRandomValues(
@@ -316,21 +323,52 @@ private static JpegColorConverterBase.ComponentValues CreateRandomValues(
316323
private static void ValidateConversion(
317324
JpegColorConverterBase converter,
318325
int componentCount,
319-
int seed)
326+
int seed,
327+
JpegColorConverterBase baseLineConverter = null)
320328
{
321329
JpegColorConverterBase.ComponentValues original = CreateRandomValues(TestBufferLength, componentCount, seed);
322-
JpegColorConverterBase.ComponentValues values = new(
330+
JpegColorConverterBase.ComponentValues actual = new(
323331
original.ComponentCount,
324332
original.Component0.ToArray(),
325333
original.Component1.ToArray(),
326334
original.Component2.ToArray(),
327335
original.Component3.ToArray());
328336

329-
converter.ConvertToRgbInplace(values);
337+
converter.ConvertToRgbInplace(actual);
330338

331339
for (int i = 0; i < TestBufferLength; i++)
332340
{
333-
Validate(converter.ColorSpace, original, values, i);
341+
Validate(converter.ColorSpace, original, actual, i);
342+
}
343+
344+
if (baseLineConverter != null)
345+
{
346+
JpegColorConverterBase.ComponentValues expected = new(
347+
original.ComponentCount,
348+
original.Component0.ToArray(),
349+
original.Component1.ToArray(),
350+
original.Component2.ToArray(),
351+
original.Component3.ToArray());
352+
baseLineConverter.ConvertToRgbInplace(expected);
353+
if (componentCount == 1)
354+
{
355+
Assert.True(expected.Component0.SequenceEqual(actual.Component0));
356+
}
357+
358+
if (componentCount == 2)
359+
{
360+
Assert.True(expected.Component1.SequenceEqual(actual.Component1));
361+
}
362+
363+
if (componentCount == 3)
364+
{
365+
Assert.True(expected.Component2.SequenceEqual(actual.Component2));
366+
}
367+
368+
if (componentCount == 4)
369+
{
370+
Assert.True(expected.Component3.SequenceEqual(actual.Component3));
371+
}
334372
}
335373
}
336374

@@ -368,9 +406,9 @@ private static void ValidateYCbCr(in JpegColorConverterBase.ComponentValues valu
368406
float y = values.Component0[i];
369407
float cb = values.Component1[i];
370408
float cr = values.Component2[i];
371-
var expected = ColorSpaceConverter.ToRgb(new YCbCr(y, cb, cr));
409+
Rgb expected = ColorSpaceConverter.ToRgb(new YCbCr(y, cb, cr));
372410

373-
var actual = new Rgb(result.Component0[i], result.Component1[i], result.Component2[i]);
411+
Rgb actual = new(result.Component0[i], result.Component1[i], result.Component2[i]);
374412

375413
bool equal = ColorSpaceComparer.Equals(expected, actual);
376414
Assert.True(equal, $"Colors {expected} and {actual} are not equal at index {i}");

0 commit comments

Comments
 (0)