@@ -186,21 +186,88 @@ private static void RunPredictor12Test()
186
186
private static void RunPredictor13Test ( )
187
187
{
188
188
// arrange
189
- uint [ ] topData = { 4278193922 , 4278193666 } ;
190
- const uint left = 4278193410 ;
191
- const uint expectedResult = 4278193154 ;
189
+ uint [ ] topData0 = { 4278193922 , 4278193666 } ;
190
+ const uint left0 = 4278193410 ;
191
+ const uint expectedResult0 = 4278193154 ;
192
+ uint [ ] topData1 = { 4294933015 , 4278219803 } ;
193
+ const uint left1 = 4278236686 ;
194
+ const uint expectedResult1 = 4278231571 ;
195
+ uint actual0 = 0 ;
196
+ uint actual1 = 0 ;
192
197
193
198
// act
194
199
unsafe
195
200
{
196
- fixed ( uint * top = & topData [ 1 ] )
201
+ fixed ( uint * top = & topData0 [ 1 ] )
197
202
{
198
- uint actual = LosslessUtils . Predictor13 ( left , top ) ;
203
+ actual0 = LosslessUtils . Predictor13 ( left0 , top ) ;
204
+ }
199
205
200
- // assert
201
- Assert . Equal ( expectedResult , actual ) ;
206
+ fixed ( uint * top = & topData1 [ 1 ] )
207
+ {
208
+ actual1 = LosslessUtils . Predictor13 ( left1 , top ) ;
202
209
}
203
210
}
211
+
212
+ // assert
213
+ Assert . Equal ( expectedResult0 , actual0 ) ;
214
+ Assert . Equal ( expectedResult1 , actual1 ) ;
215
+ }
216
+
217
+ [ Fact ]
218
+ public void BundleColorMap_WithXbitsZero_Works ( )
219
+ {
220
+ // arrange
221
+ byte [ ] row = { 238 , 238 , 238 , 238 , 238 , 238 , 240 , 237 , 240 , 235 , 223 , 223 , 218 , 220 , 226 , 219 , 220 , 204 , 218 , 211 , 218 , 221 , 254 , 255 } ;
222
+ int xBits = 0 ;
223
+ uint [ ] actual = new uint [ row . Length ] ;
224
+ uint [ ] expected =
225
+ {
226
+ 4278251008 , 4278251008 , 4278251008 , 4278251008 , 4278251008 ,
227
+ 4278251008 , 4278251520 , 4278250752 , 4278251520 , 4278250240 ,
228
+ 4278247168 , 4278247168 , 4278245888 , 4278246400 , 4278247936 ,
229
+ 4278246144 , 4278246400 , 4278242304 , 4278245888 , 4278244096 ,
230
+ 4278245888 , 4278246656 , 4278255104 , 4278255360
231
+ } ;
232
+
233
+ // act
234
+ LosslessUtils . BundleColorMap ( row , actual . Length , xBits , actual ) ;
235
+
236
+ // assert
237
+ Assert . True ( actual . SequenceEqual ( expected ) ) ;
238
+ }
239
+
240
+ [ Fact ]
241
+ public void BundleColorMap_WithXbitsNoneZero_Works ( )
242
+ {
243
+ // arrange
244
+ byte [ ] row =
245
+ {
246
+ 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
247
+ 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
248
+ 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
249
+ 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
250
+ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
251
+ 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
252
+ 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
253
+ 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3
254
+ } ;
255
+ int xBits = 2 ;
256
+ uint [ ] actual = new uint [ row . Length ] ;
257
+ uint [ ] expected =
258
+ {
259
+ 4278233600 , 4278233600 , 4278233600 , 4278233600 , 4278255360 , 4278255360 , 4278255360 , 4278255360 , 4278233600 , 4278233600 , 4278233600 , 4278233600 ,
260
+ 4278255360 , 4278255360 , 4278255360 , 4278255360 , 4278211840 , 4278211840 , 4278211840 , 4278211840 , 4278255360 , 4278255360 , 4278255360 , 4278255360 ,
261
+ 4278255360 , 4278255360 , 4278255360 , 4278255360 , 4278255360 , 4278255360 , 4278255360 , 4278206208 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
262
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
263
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
264
+ } ;
265
+
266
+ // act
267
+ LosslessUtils . BundleColorMap ( row , actual . Length , xBits , actual ) ;
268
+
269
+ // assert
270
+ Assert . True ( actual . SequenceEqual ( expected ) ) ;
204
271
}
205
272
206
273
[ Fact ]
@@ -215,9 +282,6 @@ private static void RunPredictor13Test()
215
282
[ Fact ]
216
283
public void Predictor13_Works ( ) => RunPredictor13Test ( ) ;
217
284
218
- [ Fact ]
219
- public void SubtractGreen_Works ( ) => RunSubtractGreenTest ( ) ;
220
-
221
285
[ Fact ]
222
286
public void AddGreenToBlueAndRed_Works ( ) => RunAddGreenToBlueAndRedTest ( ) ;
223
287
@@ -251,12 +315,18 @@ private static void RunPredictor13Test()
251
315
[ Fact ]
252
316
public void Predictor13_WithoutSSE2_Works ( ) => FeatureTestRunner . RunWithHwIntrinsicsFeature ( RunPredictor13Test , HwIntrinsics . DisableSSE2 ) ;
253
317
318
+ [ Fact ]
319
+ public void SubtractGreen_Works ( ) => RunSubtractGreenTest ( ) ;
320
+
254
321
[ Fact ]
255
322
public void SubtractGreen_WithHardwareIntrinsics_Works ( ) => FeatureTestRunner . RunWithHwIntrinsicsFeature ( RunSubtractGreenTest , HwIntrinsics . AllowAll ) ;
256
323
257
324
[ Fact ]
258
325
public void SubtractGreen_WithoutAVX2_Works ( ) => FeatureTestRunner . RunWithHwIntrinsicsFeature ( RunSubtractGreenTest , HwIntrinsics . DisableAVX2 ) ;
259
326
327
+ [ Fact ]
328
+ public void SubtractGreen_Scalar_Works ( ) => FeatureTestRunner . RunWithHwIntrinsicsFeature ( RunSubtractGreenTest , HwIntrinsics . DisableHWIntrinsic ) ;
329
+
260
330
[ Fact ]
261
331
public void SubtractGreen_WithoutAvxOrSSSE3_Works ( ) => FeatureTestRunner . RunWithHwIntrinsicsFeature ( RunSubtractGreenTest , HwIntrinsics . DisableAVX2 | HwIntrinsics . DisableSSSE3 ) ;
262
332
0 commit comments