From 404342916e6808b4ac8641145d91b63074411d97 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 29 Mar 2023 18:25:09 +0200 Subject: [PATCH 1/3] Add test case for: Fixed wrong division hack #2413 --- .../Formats/WebP/LosslessUtilsTests.cs | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/tests/ImageSharp.Tests/Formats/WebP/LosslessUtilsTests.cs b/tests/ImageSharp.Tests/Formats/WebP/LosslessUtilsTests.cs index 73c034a6b..75ecc43eb 100644 --- a/tests/ImageSharp.Tests/Formats/WebP/LosslessUtilsTests.cs +++ b/tests/ImageSharp.Tests/Formats/WebP/LosslessUtilsTests.cs @@ -186,21 +186,32 @@ public class LosslessUtilsTests private static void RunPredictor13Test() { // arrange - uint[] topData = { 4278193922, 4278193666 }; - const uint left = 4278193410; - const uint expectedResult = 4278193154; + uint[] topData0 = { 4278193922, 4278193666 }; + const uint left0 = 4278193410; + const uint expectedResult0 = 4278193154; + uint[] topData1 = { 4294933015, 4278219803 }; + const uint left1 = 4278236686; + const uint expectedResult1 = 4278231571; + uint actual0 = 0; + uint actual1 = 0; // act unsafe { - fixed (uint* top = &topData[1]) + fixed (uint* top = &topData0[1]) { - uint actual = LosslessUtils.Predictor13(left, top); + actual0 = LosslessUtils.Predictor13(left0, top); + } - // assert - Assert.Equal(expectedResult, actual); + fixed (uint* top = &topData1[1]) + { + actual1 = LosslessUtils.Predictor13(left1, top); } } + + // assert + Assert.Equal(expectedResult0, actual0); + Assert.Equal(expectedResult1, actual1); } [Fact] From b0d9cb8b4b2bb205ccf3965e9000a71114521485 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 29 Mar 2023 19:51:35 +0200 Subject: [PATCH 2/3] Add BundleColorMap tests --- .../Formats/WebP/LosslessUtilsTests.cs | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/tests/ImageSharp.Tests/Formats/WebP/LosslessUtilsTests.cs b/tests/ImageSharp.Tests/Formats/WebP/LosslessUtilsTests.cs index 75ecc43eb..203cf5749 100644 --- a/tests/ImageSharp.Tests/Formats/WebP/LosslessUtilsTests.cs +++ b/tests/ImageSharp.Tests/Formats/WebP/LosslessUtilsTests.cs @@ -214,6 +214,62 @@ public class LosslessUtilsTests Assert.Equal(expectedResult1, actual1); } + [Fact] + public void BundleColorMap_WithXbitsZero_Works() + { + // arrange + 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 }; + int xBits = 0; + uint[] actual = new uint[row.Length]; + uint[] expected = + { + 4278251008, 4278251008, 4278251008, 4278251008, 4278251008, + 4278251008, 4278251520, 4278250752, 4278251520, 4278250240, + 4278247168, 4278247168, 4278245888, 4278246400, 4278247936, + 4278246144, 4278246400, 4278242304, 4278245888, 4278244096, + 4278245888, 4278246656, 4278255104, 4278255360 + }; + + // act + LosslessUtils.BundleColorMap(row, actual.Length, xBits, actual); + + // assert + Assert.True(actual.SequenceEqual(expected)); + } + + [Fact] + public void BundleColorMap_WithXbitsNoneZero_Works() + { + // arrange + byte[] row = + { + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 + }; + int xBits = 2; + uint[] actual = new uint[row.Length]; + uint[] expected = + { + 4278233600, 4278233600, 4278233600, 4278233600, 4278255360, 4278255360, 4278255360, 4278255360, 4278233600, 4278233600, 4278233600, 4278233600, + 4278255360, 4278255360, 4278255360, 4278255360, 4278211840, 4278211840, 4278211840, 4278211840, 4278255360, 4278255360, 4278255360, 4278255360, + 4278255360, 4278255360, 4278255360, 4278255360, 4278255360, 4278255360, 4278255360, 4278206208, 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, 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 + }; + + // act + LosslessUtils.BundleColorMap(row, actual.Length, xBits, actual); + + // assert + Assert.True(actual.SequenceEqual(expected)); + } + [Fact] public void CombinedShannonEntropy_Works() => RunCombinedShannonEntropyTest(); From 73e1306973486d1047402dbeaae7c9e98ef805b3 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 29 Mar 2023 19:55:50 +0200 Subject: [PATCH 3/3] Add SubtractGreen Scalar test --- .../ImageSharp.Tests/Formats/WebP/LosslessUtilsTests.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/ImageSharp.Tests/Formats/WebP/LosslessUtilsTests.cs b/tests/ImageSharp.Tests/Formats/WebP/LosslessUtilsTests.cs index 203cf5749..4551e3e23 100644 --- a/tests/ImageSharp.Tests/Formats/WebP/LosslessUtilsTests.cs +++ b/tests/ImageSharp.Tests/Formats/WebP/LosslessUtilsTests.cs @@ -282,9 +282,6 @@ public class LosslessUtilsTests [Fact] public void Predictor13_Works() => RunPredictor13Test(); - [Fact] - public void SubtractGreen_Works() => RunSubtractGreenTest(); - [Fact] public void AddGreenToBlueAndRed_Works() => RunAddGreenToBlueAndRedTest(); @@ -318,12 +315,18 @@ public class LosslessUtilsTests [Fact] public void Predictor13_WithoutSSE2_Works() => FeatureTestRunner.RunWithHwIntrinsicsFeature(RunPredictor13Test, HwIntrinsics.DisableSSE2); + [Fact] + public void SubtractGreen_Works() => RunSubtractGreenTest(); + [Fact] public void SubtractGreen_WithHardwareIntrinsics_Works() => FeatureTestRunner.RunWithHwIntrinsicsFeature(RunSubtractGreenTest, HwIntrinsics.AllowAll); [Fact] public void SubtractGreen_WithoutAVX2_Works() => FeatureTestRunner.RunWithHwIntrinsicsFeature(RunSubtractGreenTest, HwIntrinsics.DisableAVX2); + [Fact] + public void SubtractGreen_Scalar_Works() => FeatureTestRunner.RunWithHwIntrinsicsFeature(RunSubtractGreenTest, HwIntrinsics.DisableHWIntrinsic); + [Fact] public void SubtractGreen_WithoutAvxOrSSSE3_Works() => FeatureTestRunner.RunWithHwIntrinsicsFeature(RunSubtractGreenTest, HwIntrinsics.DisableAVX2 | HwIntrinsics.DisableSSSE3);