using HPPH.Reference; namespace HPPH.Test.PixelHelper; [TestClass] public class AverageTests { private static IEnumerable GetTestImages() => Directory.EnumerateFiles(@"..\..\..\..\sample_data", "*.png", SearchOption.AllDirectories); [TestMethod] public void AverageRefImage() { foreach (string image in GetTestImages()) { AverageRefImage(image); AverageRefImage(image); AverageRefImage(image); AverageRefImage(image); AverageRefImage(image); AverageRefImage(image); } } private static void AverageRefImage(string image) where T : struct, IColor { RefImage data = ImageHelper.GetImage(image).AsRefImage(); T reference = ReferencePixelHelper.Average(data); T test = data.Average(); Assert.AreEqual(reference.R, test.R, $"R differs in type '{T.ColorFormat.Name}'"); Assert.AreEqual(reference.G, test.G, $"G differs in type '{T.ColorFormat.Name}'"); Assert.AreEqual(reference.B, test.B, $"B differs in type '{T.ColorFormat.Name}'"); Assert.AreEqual(reference.A, test.A, $"A differs in type '{T.ColorFormat.Name}'"); } [TestMethod] public void AverageGenericImage() { foreach (string image in GetTestImages()) { AverageGenericImage(image); AverageGenericImage(image); AverageGenericImage(image); AverageGenericImage(image); AverageGenericImage(image); AverageGenericImage(image); } } private static void AverageGenericImage(string image) where T : struct, IColor { Image data = ImageHelper.GetImage(image); IColor reference = ReferencePixelHelper.Average(data); T test = data.Average(); Assert.AreEqual(reference.R, test.R, $"R differs in type '{T.ColorFormat.Name}'"); Assert.AreEqual(reference.G, test.G, $"G differs in type '{T.ColorFormat.Name}'"); Assert.AreEqual(reference.B, test.B, $"B differs in type '{T.ColorFormat.Name}'"); Assert.AreEqual(reference.A, test.A, $"A differs in type '{T.ColorFormat.Name}'"); } [TestMethod] public void AverageImage() { foreach (string image in GetTestImages()) { AverageImage(image); AverageImage(image); AverageImage(image); AverageImage(image); AverageImage(image); AverageImage(image); } } private static void AverageImage(string image) where T : struct, IColor { IImage data = ImageHelper.GetImage(image); IColor reference = ReferencePixelHelper.Average(data); IColor test = data.Average(); Assert.AreEqual(reference.R, test.R, $"R differs in type '{T.ColorFormat.Name}'"); Assert.AreEqual(reference.G, test.G, $"G differs in type '{T.ColorFormat.Name}'"); Assert.AreEqual(reference.B, test.B, $"B differs in type '{T.ColorFormat.Name}'"); Assert.AreEqual(reference.A, test.A, $"A differs in type '{T.ColorFormat.Name}'"); } [TestMethod] public void AverageSpan() { foreach (string image in GetTestImages()) { AverageSpan(image); AverageSpan(image); AverageSpan(image); AverageSpan(image); AverageSpan(image); AverageSpan(image); } } private static void AverageSpan(string image) where T : struct, IColor { T[] data = ImageHelper.GetColorsFromImage(image); Span span = data; T reference = ReferencePixelHelper.Average(span); T test = span.Average(); Assert.AreEqual(reference.R, test.R, $"R differs in type '{T.ColorFormat.Name}'"); Assert.AreEqual(reference.G, test.G, $"G differs in type '{T.ColorFormat.Name}'"); Assert.AreEqual(reference.B, test.B, $"B differs in type '{T.ColorFormat.Name}'"); Assert.AreEqual(reference.A, test.A, $"A differs in type '{T.ColorFormat.Name}'"); } [TestMethod] public void AverageReadOnlySpan() { foreach (string image in GetTestImages()) { AverageReadOnlySpan(image); AverageReadOnlySpan(image); AverageReadOnlySpan(image); AverageReadOnlySpan(image); AverageReadOnlySpan(image); AverageReadOnlySpan(image); } } private static void AverageReadOnlySpan(string image) where T : struct, IColor { T[] data = ImageHelper.GetColorsFromImage(image); ReadOnlySpan span = data; T reference = ReferencePixelHelper.Average(span); T test = span.Average(); Assert.AreEqual(reference.R, test.R, $"R differs in type '{T.ColorFormat.Name}'"); Assert.AreEqual(reference.G, test.G, $"G differs in type '{T.ColorFormat.Name}'"); Assert.AreEqual(reference.B, test.B, $"B differs in type '{T.ColorFormat.Name}'"); Assert.AreEqual(reference.A, test.A, $"A differs in type '{T.ColorFormat.Name}'"); } }