@@ -244,21 +244,41 @@ static void RunTest(string arg) =>
244
244
public void FromYCbCrAvx2 ( int seed ) =>
245
245
this . TestConversionToRgb ( new JpegColorConverterBase . YCbCrAvx ( 8 ) , 3 , seed , new JpegColorConverterBase . YCbCrScalar ( 8 ) ) ;
246
246
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
+
247
252
[ Theory ]
248
253
[ MemberData ( nameof ( Seeds ) ) ]
249
254
public void FromCmykAvx2 ( int seed ) =>
250
255
this . TestConversionToRgb ( new JpegColorConverterBase . CmykAvx ( 8 ) , 4 , seed , new JpegColorConverterBase . CmykScalar ( 8 ) ) ;
251
256
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
+
252
262
[ Theory ]
253
263
[ MemberData ( nameof ( Seeds ) ) ]
254
264
public void FromCmykArm ( int seed ) =>
255
265
this . TestConversionToRgb ( new JpegColorConverterBase . CmykArm64 ( 8 ) , 4 , seed , new JpegColorConverterBase . CmykScalar ( 8 ) ) ;
256
266
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
+
257
272
[ Theory ]
258
273
[ MemberData ( nameof ( Seeds ) ) ]
259
274
public void FromGrayscaleAvx2 ( int seed ) =>
260
275
this . TestConversionToRgb ( new JpegColorConverterBase . GrayscaleAvx ( 8 ) , 1 , seed , new JpegColorConverterBase . GrayscaleScalar ( 8 ) ) ;
261
276
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
+
262
282
[ Theory ]
263
283
[ MemberData ( nameof ( Seeds ) ) ]
264
284
public void FromRgbAvx2 ( int seed ) =>
@@ -274,6 +294,11 @@ public void FromRgbArm(int seed) =>
274
294
public void FromYccKAvx2 ( int seed ) =>
275
295
this . TestConversionToRgb ( new JpegColorConverterBase . YccKAvx ( 8 ) , 4 , seed , new JpegColorConverterBase . YccKScalar ( 8 ) ) ;
276
296
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
+
277
302
private void TestConversionToRgb (
278
303
JpegColorConverterBase converter ,
279
304
int componentCount ,
@@ -294,6 +319,26 @@ private void TestConversionToRgb(
294
319
baseLineConverter ) ;
295
320
}
296
321
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
+
297
342
private static JpegColorConverterBase . ComponentValues CreateRandomValues (
298
343
int length ,
299
344
int componentCount ,
@@ -320,6 +365,18 @@ private static JpegColorConverterBase.ComponentValues CreateRandomValues(
320
365
return new JpegColorConverterBase . ComponentValues ( buffers , 0 ) ;
321
366
}
322
367
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
+
323
380
private static void ValidateConversionToRgb (
324
381
JpegColorConverterBase converter ,
325
382
int componentCount ,
@@ -373,6 +430,46 @@ private static void ValidateConversionToRgb(
373
430
}
374
431
}
375
432
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
+
376
473
private static void Validate (
377
474
JpegColorSpace colorSpace ,
378
475
in JpegColorConverterBase . ComponentValues original ,
0 commit comments