private static string PrintKernelMap <TKernelMap>( TKernelMap kernelMap, Func <TKernelMap, int> getDestinationSize, Func <TKernelMap, int, ReferenceKernel> getKernel) { var bld = new StringBuilder(); if (kernelMap is ResizeKernelMap actualMap) { bld.AppendLine(actualMap.Info); } int destinationSize = getDestinationSize(kernelMap); for (int i = 0; i < destinationSize; i++) { ReferenceKernel kernel = getKernel(kernelMap, i); bld.Append($"[{i:D3}] (L{kernel.Left:D3}) || "); Span <float> span = kernel.Values; for (int j = 0; j < kernel.Length; j++) { float value = span[j]; bld.Append($"{value,8:F5}"); bld.Append(" | "); } bld.AppendLine(); } return(bld.ToString()); }
private void VerifyKernelMapContentIsCorrect(string resamplerName, int srcSize, int destSize) { IResampler resampler = TestUtils.GetResampler(resamplerName); var referenceMap = ReferenceKernelMap.Calculate(resampler, destSize, srcSize); var kernelMap = ResizeKernelMap.Calculate(resampler, destSize, srcSize, Configuration.Default.MemoryAllocator); #if DEBUG this.Output.WriteLine(kernelMap.Info); this.Output.WriteLine($"Expected KernelMap:\n{PrintKernelMap(referenceMap)}\n"); this.Output.WriteLine($"Actual KernelMap:\n{PrintKernelMap(kernelMap)}\n"); #endif var comparer = new ApproximateFloatComparer(1e-6f); for (int i = 0; i < kernelMap.DestinationLength; i++) { ResizeKernel kernel = kernelMap.GetKernel(i); ReferenceKernel referenceKernel = referenceMap.GetKernel(i); Assert.True( referenceKernel.Length == kernel.Length, $"referenceKernel.Length != kernel.Length: {referenceKernel.Length} != {kernel.Length}"); Assert.True( referenceKernel.Left == kernel.StartIndex, $"referenceKernel.Left != kernel.Left: {referenceKernel.Left} != {kernel.StartIndex}"); float[] expectedValues = referenceKernel.Values; Span <float> actualValues = kernel.Values; Assert.Equal(expectedValues.Length, actualValues.Length); for (int x = 0; x < expectedValues.Length; x++) { Assert.True( comparer.Equals(expectedValues[x], actualValues[x]), $"{expectedValues[x]} != {actualValues[x]} @ (Row:{i}, Col:{x})"); } } }