@@ -186,21 +186,88 @@ private static void RunPredictor12Test()
186186 private static void RunPredictor13Test ( )
187187 {
188188 // 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 ;
192197
193198 // act
194199 unsafe
195200 {
196- fixed ( uint * top = & topData [ 1 ] )
201+ fixed ( uint * top = & topData0 [ 1 ] )
197202 {
198- uint actual = LosslessUtils . Predictor13 ( left , top ) ;
203+ actual0 = LosslessUtils . Predictor13 ( left0 , top ) ;
204+ }
199205
200- // assert
201- Assert . Equal ( expectedResult , actual ) ;
206+ fixed ( uint * top = & topData1 [ 1 ] )
207+ {
208+ actual1 = LosslessUtils . Predictor13 ( left1 , top ) ;
202209 }
203210 }
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 ) ) ;
204271 }
205272
206273 [ Fact ]
@@ -215,9 +282,6 @@ private static void RunPredictor13Test()
215282 [ Fact ]
216283 public void Predictor13_Works ( ) => RunPredictor13Test ( ) ;
217284
218- [ Fact ]
219- public void SubtractGreen_Works ( ) => RunSubtractGreenTest ( ) ;
220-
221285 [ Fact ]
222286 public void AddGreenToBlueAndRed_Works ( ) => RunAddGreenToBlueAndRedTest ( ) ;
223287
@@ -251,12 +315,18 @@ private static void RunPredictor13Test()
251315 [ Fact ]
252316 public void Predictor13_WithoutSSE2_Works ( ) => FeatureTestRunner . RunWithHwIntrinsicsFeature ( RunPredictor13Test , HwIntrinsics . DisableSSE2 ) ;
253317
318+ [ Fact ]
319+ public void SubtractGreen_Works ( ) => RunSubtractGreenTest ( ) ;
320+
254321 [ Fact ]
255322 public void SubtractGreen_WithHardwareIntrinsics_Works ( ) => FeatureTestRunner . RunWithHwIntrinsicsFeature ( RunSubtractGreenTest , HwIntrinsics . AllowAll ) ;
256323
257324 [ Fact ]
258325 public void SubtractGreen_WithoutAVX2_Works ( ) => FeatureTestRunner . RunWithHwIntrinsicsFeature ( RunSubtractGreenTest , HwIntrinsics . DisableAVX2 ) ;
259326
327+ [ Fact ]
328+ public void SubtractGreen_Scalar_Works ( ) => FeatureTestRunner . RunWithHwIntrinsicsFeature ( RunSubtractGreenTest , HwIntrinsics . DisableHWIntrinsic ) ;
329+
260330 [ Fact ]
261331 public void SubtractGreen_WithoutAvxOrSSSE3_Works ( ) => FeatureTestRunner . RunWithHwIntrinsicsFeature ( RunSubtractGreenTest , HwIntrinsics . DisableAVX2 | HwIntrinsics . DisableSSSE3 ) ;
262332
0 commit comments