diff --git a/tests/ImageSharp.Tests/Formats/WebP/Serialization/Vp8CostArrayJsonConverter.cs b/tests/ImageSharp.Tests/Formats/WebP/Serialization/Vp8CostArrayJsonConverter.cs new file mode 100644 index 0000000000..b3cfd03401 --- /dev/null +++ b/tests/ImageSharp.Tests/Formats/WebP/Serialization/Vp8CostArrayJsonConverter.cs @@ -0,0 +1,15 @@ +// Copyright (c) Six Labors. +// Licensed under the Six Labors Split License. + +using System.Text.Json; +using System.Text.Json.Serialization; +using SixLabors.ImageSharp.Formats.Webp.Lossy; + +namespace SixLabors.ImageSharp.Tests.Formats.WebP.Serialization; + +internal class Vp8CostArrayJsonConverter : JsonConverter +{ + public override Vp8CostArray Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => throw new NotImplementedException(); + + public override void Write(Utf8JsonWriter writer, Vp8CostArray value, JsonSerializerOptions options) => throw new NotImplementedException(); +} diff --git a/tests/ImageSharp.Tests/Formats/WebP/Vp8ResidualTests.cs b/tests/ImageSharp.Tests/Formats/WebP/Vp8ResidualTests.cs index cadf92973c..457f3576fe 100644 --- a/tests/ImageSharp.Tests/Formats/WebP/Vp8ResidualTests.cs +++ b/tests/ImageSharp.Tests/Formats/WebP/Vp8ResidualTests.cs @@ -5,7 +5,9 @@ using System.Runtime.Intrinsics.X86; using System.Text.Json; using SixLabors.ImageSharp.Formats.Webp; using SixLabors.ImageSharp.Formats.Webp.Lossy; +using SixLabors.ImageSharp.Tests.Formats.WebP.Serialization; using SixLabors.ImageSharp.Tests.TestUtilities; +using JsonSerializer = System.Text.Json.JsonSerializer; namespace SixLabors.ImageSharp.Tests.Formats.Webp; @@ -13,29 +15,30 @@ namespace SixLabors.ImageSharp.Tests.Formats.Webp; public class Vp8ResidualTests { [Fact] - public void GetResidualCost_Works() + public void Vp8CostArray_Serialization_Works() { - if (!Sse2.IsSupported) + // arrange + Vp8CostArray expected = new(); + for (ushort i = 0; i < expected.Costs.Length; i++) { - // JsonSerializer without SSE2 does not seem to work, skip test then. - return; + expected.Costs[i] = i; } - // arrange - int ctx0 = 0; - int expected = 20911; - string jsonString = File.ReadAllText(Path.Combine("TestDataWebp", "Vp8Residual.json")); - Vp8Residual residual = JsonSerializer.Deserialize(jsonString); + JsonSerializerOptions options = new() + { + Converters = { new Vp8CostArrayJsonConverter() } + }; // act - int actual = residual.GetResidualCost(ctx0); + string jsonString = JsonSerializer.Serialize(expected); + Vp8CostArray actual = JsonSerializer.Deserialize(jsonString, options); // assert - Assert.Equal(expected, actual); + Assert.Equal(expected.Costs, actual.Costs); } [Fact] - public void Serialization_Works() + public void Vp8Residual_Serialization_Works() { if (!Sse2.IsSupported) { @@ -101,6 +104,30 @@ public class Vp8ResidualTests } } + [Fact] + public void GetResidualCost_Works() + { + if (!Sse2.IsSupported) + { + // JsonSerializer without SSE2 does not seem to work, skip test then. + return; + } + + // arrange + int ctx0 = 0; + int expected = 20911; + string jsonString = File.ReadAllText(Path.Combine("TestDataWebp", "Vp8Residual.json")); + Vp8Residual residual = JsonSerializer.Deserialize(jsonString); + + // act + int actual = residual.GetResidualCost(ctx0); + + // assert + Assert.Equal(expected, actual); + } + + + private static void CreateRandomProbas(Vp8EncProba probas, Random rand) { for (int t = 0; t < WebpConstants.NumTypes; ++t)