diff --git a/src/ImageSharp/Formats/Heif/Av1/Av1Math.cs b/src/ImageSharp/Formats/Heif/Av1/Av1Math.cs index ea93204d48..e3ad3242b5 100644 --- a/src/ImageSharp/Formats/Heif/Av1/Av1Math.cs +++ b/src/ImageSharp/Formats/Heif/Av1/Av1Math.cs @@ -26,17 +26,6 @@ internal static class Av1Math return log; } - public static uint Log2(uint n) - { - uint result = 0U; - while ((n >>= 1) > 0) - { - result++; - } - - return result; - } - public static int Log2(int n) { int result = 0; diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Inverse/Av1Adst32Inverse1dTransformer.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Inverse/Av1Adst32Inverse1dTransformer.cs index 1faca4b7a5..9d3e27d3bd 100644 --- a/src/ImageSharp/Formats/Heif/Av1/Transform/Inverse/Av1Adst32Inverse1dTransformer.cs +++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Inverse/Av1Adst32Inverse1dTransformer.cs @@ -1,8 +1,6 @@ // Copyright (c) Six Labors. // Licensed under the Six Labors Split License. -using System.Drawing; -using System; using System.Runtime.CompilerServices; namespace SixLabors.ImageSharp.Formats.Heif.Av1.Transform.Inverse; diff --git a/tests/ImageSharp.Tests/Formats/Heif/Av1/Av1MathTests.cs b/tests/ImageSharp.Tests/Formats/Heif/Av1/Av1MathTests.cs index 60f5b30a9c..0da23e0f36 100644 --- a/tests/ImageSharp.Tests/Formats/Heif/Av1/Av1MathTests.cs +++ b/tests/ImageSharp.Tests/Formats/Heif/Av1/Av1MathTests.cs @@ -8,6 +8,81 @@ namespace SixLabors.ImageSharp.Tests.Formats.Heif.Av1; [Trait("Format", "Avif")] public class Av1MathTests { + [Theory] + [InlineData(1, 0)] + [InlineData(2, 1)] + [InlineData(3, 1)] + [InlineData(4, 2)] + [InlineData(5, 2)] + [InlineData(7, 2)] + [InlineData(8, 3)] + [InlineData(9, 3)] + public void TestMostSignificantBit(uint value, int expected) + { + int actual = Av1Math.MostSignificantBit(value); + Assert.Equal(expected, actual); + } + + [Theory] + [InlineData(1, 0)] + [InlineData(2, 1)] + [InlineData(3, 1)] + [InlineData(4, 2)] + [InlineData(5, 2)] + [InlineData(7, 2)] + [InlineData(8, 3)] + [InlineData(9, 3)] + public void TestLog2(int value, int expected) + { + int actual = Av1Math.Log2(value); + Assert.Equal(expected, actual); + } + + [Theory] + [InlineData(1, 0)] + [InlineData(2, 1)] + [InlineData(3, 1)] + [InlineData(4, 2)] + [InlineData(5, 2)] + [InlineData(7, 2)] + [InlineData(8, 3)] + [InlineData(9, 3)] + public void TestFloorLog2(uint value, uint expected) + { + uint actual = Av1Math.FloorLog2(value); + Assert.Equal(expected, actual); + } + + [Theory] + [InlineData(1, 0)] + [InlineData(2, 1)] + [InlineData(3, 1)] + [InlineData(4, 2)] + [InlineData(5, 2)] + [InlineData(7, 2)] + [InlineData(8, 3)] + [InlineData(9, 3)] + public void TestLog2_32(uint value, uint expected) + { + uint actual = Av1Math.Log2_32(value); + Assert.Equal(expected, actual); + } + + [Theory] + [InlineData(1, 0)] + [InlineData(2, 1)] + [InlineData(3, 2)] + [InlineData(4, 2)] + [InlineData(5, 3)] + [InlineData(7, 3)] + [InlineData(8, 3)] + [InlineData(9, 4)] + public void TestLog2Ceiling(uint value, uint expected) + { + uint actual = Av1Math.CeilLog2(value); + Assert.Equal(expected, actual); + } + [Theory] [InlineData(4, 2, 1)] [InlineData(4, 3, 0)]