Browse Source

Add Vp8CostArray Serialization test, add stub for Vp8CostArray JsonConverter

pull/2432/head
Brian Popow 4 years ago
parent
commit
4dcf8569a7
  1. 15
      tests/ImageSharp.Tests/Formats/WebP/Serialization/Vp8CostArrayJsonConverter.cs
  2. 51
      tests/ImageSharp.Tests/Formats/WebP/Vp8ResidualTests.cs

15
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<Vp8CostArray>
{
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();
}

51
tests/ImageSharp.Tests/Formats/WebP/Vp8ResidualTests.cs

@ -5,7 +5,9 @@ using System.Runtime.Intrinsics.X86;
using System.Text.Json; using System.Text.Json;
using SixLabors.ImageSharp.Formats.Webp; using SixLabors.ImageSharp.Formats.Webp;
using SixLabors.ImageSharp.Formats.Webp.Lossy; using SixLabors.ImageSharp.Formats.Webp.Lossy;
using SixLabors.ImageSharp.Tests.Formats.WebP.Serialization;
using SixLabors.ImageSharp.Tests.TestUtilities; using SixLabors.ImageSharp.Tests.TestUtilities;
using JsonSerializer = System.Text.Json.JsonSerializer;
namespace SixLabors.ImageSharp.Tests.Formats.Webp; namespace SixLabors.ImageSharp.Tests.Formats.Webp;
@ -13,29 +15,30 @@ namespace SixLabors.ImageSharp.Tests.Formats.Webp;
public class Vp8ResidualTests public class Vp8ResidualTests
{ {
[Fact] [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. expected.Costs[i] = i;
return;
} }
// arrange JsonSerializerOptions options = new()
int ctx0 = 0; {
int expected = 20911; Converters = { new Vp8CostArrayJsonConverter() }
string jsonString = File.ReadAllText(Path.Combine("TestDataWebp", "Vp8Residual.json")); };
Vp8Residual residual = JsonSerializer.Deserialize<Vp8Residual>(jsonString);
// act // act
int actual = residual.GetResidualCost(ctx0); string jsonString = JsonSerializer.Serialize(expected);
Vp8CostArray actual = JsonSerializer.Deserialize<Vp8CostArray>(jsonString, options);
// assert // assert
Assert.Equal(expected, actual); Assert.Equal(expected.Costs, actual.Costs);
} }
[Fact] [Fact]
public void Serialization_Works() public void Vp8Residual_Serialization_Works()
{ {
if (!Sse2.IsSupported) 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<Vp8Residual>(jsonString);
// act
int actual = residual.GetResidualCost(ctx0);
// assert
Assert.Equal(expected, actual);
}
private static void CreateRandomProbas(Vp8EncProba probas, Random rand) private static void CreateRandomProbas(Vp8EncProba probas, Random rand)
{ {
for (int t = 0; t < WebpConstants.NumTypes; ++t) for (int t = 0; t < WebpConstants.NumTypes; ++t)

Loading…
Cancel
Save