using HPPH.Reference; namespace HPPH.Test.PixelHelper; [TestClass] public class SumTests { private static IEnumerable GetTestImages() => Directory.EnumerateFiles(@"..\..\..\..\sample_data", "*.png", SearchOption.AllDirectories); [TestMethod] public void SumRefImage() { foreach (string image in GetTestImages()) { SumRefImage(image); SumRefImage(image); SumRefImage(image); SumRefImage(image); SumRefImage(image); SumRefImage(image); } } private static void SumRefImage(string image) where T : struct, IColor { RefImage data = ImageHelper.GetImage(image).AsRefImage(); ISum reference = ReferencePixelHelper.Sum(data); ISum test = data.Sum(); 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 SumGenericImage() { foreach (string image in GetTestImages()) { SumGenericImage(image); SumGenericImage(image); SumGenericImage(image); SumGenericImage(image); SumGenericImage(image); SumGenericImage(image); } } private static void SumGenericImage(string image) where T : struct, IColor { Image data = ImageHelper.GetImage(image); ISum reference = ReferencePixelHelper.Sum(data); ISum test = data.Sum(); 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 SumImage() { foreach (string image in GetTestImages()) { SumImage(image); SumImage(image); SumImage(image); SumImage(image); SumImage(image); SumImage(image); } } private static void SumImage(string image) where T : struct, IColor { IImage data = ImageHelper.GetImage(image); ISum reference = ReferencePixelHelper.Sum(data); ISum test = data.Sum(); 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 SumSpan() { foreach (string image in GetTestImages()) { SumSpan(image); SumSpan(image); SumSpan(image); SumSpan(image); SumSpan(image); SumSpan(image); } } private static void SumSpan(string image) where T : struct, IColor { T[] data = ImageHelper.GetColorsFromImage(image); Span span = data; ISum reference = ReferencePixelHelper.Sum(span); ISum test = span.Sum(); 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 SumReadOnlySpan() { foreach (string image in GetTestImages()) { SumReadOnlySpan(image); SumReadOnlySpan(image); SumReadOnlySpan(image); SumReadOnlySpan(image); SumReadOnlySpan(image); SumReadOnlySpan(image); } } private static void SumReadOnlySpan(string image) where T : struct, IColor { T[] data = ImageHelper.GetColorsFromImage(image); ReadOnlySpan span = data; ISum reference = ReferencePixelHelper.Sum(span); ISum test = span.Sum(); 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}'"); } }