Example #1
0
        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})");
                }
            }
        }