public void TestHaarReversiblitySingle() { Single[] array = new Single[2048]; for (int i = 0; i < array.Length; i++) { array[i] = (Single)Math.Sin(2.0 * Math.PI * i / array.Length); } Single[] copy = new Single[array.Length]; Array.Copy(array, copy, array.Length); Span <Single> span = new Span <Single>(array); WaveletTransformation.HaarMultiLevel(span); Span <Single> transformed = stackalloc Single[array.Length]; span.CopyTo(transformed); WaveletTransformation.HaarInverseMultiLevel(span); try { for (int i = 0; i < array.Length; i++) { Assert.AreEqual(copy[i], array[i], -1.0 / short.MinValue); } Console.WriteLine("Source,Transformed"); for (int i = 0; i < array.Length; i++) { Console.WriteLine($"{copy[i]}, {transformed[i]}"); } } catch (Exception) { Console.WriteLine("Expected,Actual"); for (int i = 0; i < array.Length; i++) { Console.WriteLine($"{copy[i]}, {array[i]}"); } throw; } }
public void TestHaarReversiblityInt() { int[] array = new int[2048]; for (int i = 0; i < array.Length; i++) { array[i] = (int)(int.MaxValue * Math.Sin(2.0 * Math.PI * i / array.Length)); } int[] copy = new int[array.Length]; Array.Copy(array, copy, array.Length); Span <int> span = new Span <int>(array); WaveletTransformation.HaarMultiLevel(span); Span <int> transformed = stackalloc int[array.Length]; span.CopyTo(transformed); WaveletTransformation.HaarInverseMultiLevel(span); AssertEqualityAndDumpInt(array, copy, transformed); }