Browse Source

printing ReferenceKernelMap

af/merge-core
Anton Firszov 8 years ago
parent
commit
42b1bd115d
  1. 9
      tests/ImageSharp.Tests/Processing/Processors/Transforms/KernelMapTests.ReferenceKernelMap.cs
  2. 39
      tests/ImageSharp.Tests/Processing/Processors/Transforms/KernelMapTests.cs

9
tests/ImageSharp.Tests/Processing/Processors/Transforms/KernelMapTests.ReferenceKernelMap.cs

@ -10,7 +10,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms
/// <summary> /// <summary>
/// Simplified reference implementation for <see cref="KernelMap"/> functionality. /// Simplified reference implementation for <see cref="KernelMap"/> functionality.
/// </summary> /// </summary>
public class ReferenceKernelMap internal class ReferenceKernelMap
{ {
private readonly ReferenceKernel[] kernels; private readonly ReferenceKernel[] kernels;
@ -81,7 +81,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms
} }
} }
public struct ReferenceKernel internal struct ReferenceKernel
{ {
public ReferenceKernel(int left, float[] values) public ReferenceKernel(int left, float[] values)
{ {
@ -94,6 +94,11 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms
public float[] Values { get; } public float[] Values { get; }
public int Length => this.Values.Length; public int Length => this.Values.Length;
public static implicit operator ReferenceKernel(ResizeKernel orig)
{
return new ReferenceKernel(orig.Left, orig.GetValues().ToArray());
}
} }
} }
} }

39
tests/ImageSharp.Tests/Processing/Processors/Transforms/KernelMapTests.cs

@ -42,7 +42,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms
{ nameof(KnownResamplers.Lanczos3), 8, 6 }, { nameof(KnownResamplers.Lanczos3), 8, 6 },
// TODO: What's wrong here: // TODO: What's wrong here:
// { nameof(KnownResamplers.Lanczos3), 20, 12 }, { nameof(KnownResamplers.Lanczos3), 20, 12 },
{nameof(KnownResamplers.Lanczos8), 500, 200 }, {nameof(KnownResamplers.Lanczos8), 500, 200 },
{nameof(KnownResamplers.Lanczos8), 100, 10 }, {nameof(KnownResamplers.Lanczos8), 100, 10 },
@ -61,8 +61,8 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms
var referenceMap = ReferenceKernelMap.Calculate(resampler, destSize, srcSize); var referenceMap = ReferenceKernelMap.Calculate(resampler, destSize, srcSize);
#if DEBUG #if DEBUG
string text = PrintKernelMap(kernelMap); this.Output.WriteLine($"Actual KernelMap:\n{PrintKernelMap(kernelMap)}\n");
this.Output.WriteLine(text); this.Output.WriteLine($"Reference KernelMap:\n{PrintKernelMap(referenceMap)}\n");
#endif #endif
for (int i = 0; i < kernelMap.DestinationSize; i++) for (int i = 0; i < kernelMap.DestinationSize; i++)
@ -73,19 +73,42 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms
Assert.Equal(referenceKernel.Length, kernel.Length); Assert.Equal(referenceKernel.Length, kernel.Length);
Assert.Equal(referenceKernel.Left, kernel.Left); Assert.Equal(referenceKernel.Left, kernel.Left);
Assert.True(kernel.GetValues().SequenceEqual(referenceKernel.Values)); float[] expectedValues = referenceKernel.Values;
Span<float> actualValues = kernel.GetValues();
Assert.Equal(expectedValues.Length, actualValues.Length);
var comparer = new ApproximateFloatComparer(1e-6f);
for (int x = 0; x < expectedValues.Length; x++)
{
Assert.True(
comparer.Equals(expectedValues[x], actualValues[x]),
$"{expectedValues[x]} != {actualValues[x]} @ (Row:{i}, Col:{x})");
}
} }
} }
private static string PrintKernelMap(KernelMap kernelMap) private static string PrintKernelMap(KernelMap kernelMap) =>
PrintKernelMap(kernelMap, km => km.DestinationSize, (km, i) => km.GetKernel(i));
private static string PrintKernelMap(ReferenceKernelMap kernelMap) =>
PrintKernelMap(kernelMap, km => km.DestinationSize, (km, i) => km.GetKernel(i));
private static string PrintKernelMap<TKernelMap>(
TKernelMap kernelMap,
Func<TKernelMap, int> getDestinationSize,
Func<TKernelMap, int, ReferenceKernel> getKernel)
{ {
var bld = new StringBuilder(); var bld = new StringBuilder();
for (int i = 0; i < kernelMap.DestinationSize; i++) int destinationSize = getDestinationSize(kernelMap);
for (int i = 0; i < destinationSize; i++)
{ {
ResizeKernel kernel = kernelMap.GetKernel(i); ReferenceKernel kernel = getKernel(kernelMap, i);
bld.Append($"({kernel.Left:D3}) || "); bld.Append($"({kernel.Left:D3}) || ");
Span<float> span = kernel.GetValues(); Span<float> span = kernel.Values;
for (int j = 0; j < kernel.Length; j++) for (int j = 0; j < kernel.Length; j++)
{ {

Loading…
Cancel
Save