using HPPH.Reference; namespace HPPH.Test.PixelHelper; [TestClass] public class CreateSimpleColorPaletteTests { private static IEnumerable GetTestImages() => Directory.EnumerateFiles(@"..\..\..\..\sample_data", "*.png", SearchOption.AllDirectories); private static int[] SimpleSizes => [0, 1, 2, 16, 64]; private static int[] Sizes => [0, 1, 2, 9, 16, 53]; private static readonly Dictionary>> _simpleReference = []; private static readonly Dictionary>> _reference = []; [ClassInitialize] public static void Initialize(TestContext context) { foreach (string image in GetTestImages()) { _simpleReference[image] = []; Initialize(image); Initialize(image); Initialize(image); Initialize(image); Initialize(image); Initialize(image); } } private static void Initialize(string image) where T : unmanaged, IColor { _simpleReference[image][typeof(T)] = []; Image img = ImageHelper.GetImage(image); foreach (int size in SimpleSizes) _simpleReference[image][typeof(T)][size] = [.. ReferencePixelHelper.CreateSimpleColorPalette(img, size).OrderBy(x => x.R).ThenBy(x => x.G).ThenBy(x => x.B).ThenBy(x => x.A)]; foreach (int size in Sizes) _reference[image][typeof(T)][size] = [.. ReferencePixelHelper.CreateColorPalette(img, size).OrderBy(x => x.R).ThenBy(x => x.G).ThenBy(x => x.B).ThenBy(x => x.A)]; } [TestMethod] public void CreateSimpleColorPaletteReadOnlySpan() { ReadOnlySpan sizes = SimpleSizes; foreach (string image in GetTestImages()) { foreach (int size in sizes) { CreateSimpleColorPaletteReadOnlySpan(image, size); CreateSimpleColorPaletteReadOnlySpan(image, size); CreateSimpleColorPaletteReadOnlySpan(image, size); CreateSimpleColorPaletteReadOnlySpan(image, size); CreateSimpleColorPaletteReadOnlySpan(image, size); CreateSimpleColorPaletteReadOnlySpan(image, size); } } } private void CreateSimpleColorPaletteReadOnlySpan(string image, int size) where T : unmanaged, IColor { T[] data = ImageHelper.GetColorsFromImage(image); ReadOnlySpan span = data; T[] test = [.. span.CreateSimpleColorPalette(size).OrderBy(x => x.R).ThenBy(x => x.G).ThenBy(x => x.B).ThenBy(x => x.A)]; IColor[] reference = _simpleReference[image][typeof(T)][size]; Assert.AreEqual(reference.Length, test.Length, $"Palette Size differs for image {image}, size {size}"); for (int i = 0; i < reference.Length; i++) Assert.AreEqual(reference[i], test[i], $"Index {i} differs for image {image}, size {size}"); } [TestMethod] public void CreateSimpleColorPaletteSpan() { ReadOnlySpan sizes = SimpleSizes; foreach (string image in GetTestImages()) { foreach (int size in sizes) { CreateSimpleColorPaletteSpan(image, size); CreateSimpleColorPaletteSpan(image, size); CreateSimpleColorPaletteSpan(image, size); CreateSimpleColorPaletteSpan(image, size); CreateSimpleColorPaletteSpan(image, size); CreateSimpleColorPaletteSpan(image, size); } } } private void CreateSimpleColorPaletteSpan(string image, int size) where T : unmanaged, IColor { T[] data = ImageHelper.GetColorsFromImage(image); Span span = data; T[] test = [.. span.CreateSimpleColorPalette(size).OrderBy(x => x.R).ThenBy(x => x.G).ThenBy(x => x.B).ThenBy(x => x.A)]; IColor[] reference = _simpleReference[image][typeof(T)][size]; Assert.AreEqual(reference.Length, test.Length, $"Palette Size differs for image {image}, size {size}"); for (int i = 0; i < reference.Length; i++) Assert.AreEqual(reference[i], test[i], $"Index {i} differs for image {image}, size {size}"); } [TestMethod] public void CreateSimpleColorPaletteImage() { ReadOnlySpan sizes = SimpleSizes; foreach (string image in GetTestImages()) { foreach (int size in sizes) { CreateSimpleColorPaletteImage(image, size); CreateSimpleColorPaletteImage(image, size); CreateSimpleColorPaletteImage(image, size); CreateSimpleColorPaletteImage(image, size); CreateSimpleColorPaletteImage(image, size); CreateSimpleColorPaletteImage(image, size); } } } private void CreateSimpleColorPaletteImage(string image, int size) where T : struct, IColor { IImage data = ImageHelper.GetImage(image); IColor[] test = [.. data.CreateSimpleColorPalette(size).OrderBy(x => x.R).ThenBy(x => x.G).ThenBy(x => x.B).ThenBy(x => x.A)]; IColor[] reference = _simpleReference[image][typeof(T)][size]; Assert.AreEqual(reference.Length, test.Length, $"Palette Size differs for image {image}, size {size}"); for (int i = 0; i < reference.Length; i++) Assert.AreEqual(reference[i], test[i], $"Index {i} differs for image {image}, size {size}"); } [TestMethod] public void CreateSimpleColorPaletteGenericImage() { ReadOnlySpan sizes = SimpleSizes; foreach (string image in GetTestImages()) { foreach (int size in sizes) { CreateSimpleColorPaletteGenericImage(image, size); CreateSimpleColorPaletteGenericImage(image, size); CreateSimpleColorPaletteGenericImage(image, size); CreateSimpleColorPaletteGenericImage(image, size); CreateSimpleColorPaletteGenericImage(image, size); CreateSimpleColorPaletteGenericImage(image, size); } } } private void CreateSimpleColorPaletteGenericImage(string image, int size) where T : unmanaged, IColor { Image data = ImageHelper.GetImage(image); T[] test = [.. data.CreateSimpleColorPalette(size).OrderBy(x => x.R).ThenBy(x => x.G).ThenBy(x => x.B).ThenBy(x => x.A)]; IColor[] reference = _simpleReference[image][typeof(T)][size]; Assert.AreEqual(reference.Length, test.Length, $"Palette Size differs for image {image}, size {size}"); for (int i = 0; i < reference.Length; i++) Assert.AreEqual(reference[i], test[i], $"Index {i} differs for image {image}, size {size}"); } [TestMethod] public void CreateSimpleColorPaletteRefImage() { ReadOnlySpan sizes = SimpleSizes; foreach (string image in GetTestImages()) { foreach (int size in sizes) { CreateSimpleColorPaletteRefImage(image, size); CreateSimpleColorPaletteRefImage(image, size); CreateSimpleColorPaletteRefImage(image, size); CreateSimpleColorPaletteRefImage(image, size); CreateSimpleColorPaletteRefImage(image, size); CreateSimpleColorPaletteRefImage(image, size); } } } private void CreateSimpleColorPaletteRefImage(string image, int size) where T : unmanaged, IColor { RefImage data = ImageHelper.GetImage(image).AsRefImage(); T[] test = [.. data.CreateSimpleColorPalette(size).OrderBy(x => x.R).ThenBy(x => x.G).ThenBy(x => x.B).ThenBy(x => x.A)]; IColor[] reference = _simpleReference[image][typeof(T)][size]; Assert.AreEqual(reference.Length, test.Length, $"Palette Size differs for image {image}, size {size}"); for (int i = 0; i < reference.Length; i++) Assert.AreEqual(reference[i], test[i], $"Index {i} differs for image {image}, size {size}"); } //[TestMethod] //public void CreateColorPaletteReadOnlySpan() //{ // ReadOnlySpan sizes = SimpleSizes; // foreach (string image in GetTestImages()) // { // foreach (int size in sizes) // { // CreateColorPaletteReadOnlySpan(image, size); // CreateColorPaletteReadOnlySpan(image, size); // CreateColorPaletteReadOnlySpan(image, size); // CreateColorPaletteReadOnlySpan(image, size); // CreateColorPaletteReadOnlySpan(image, size); // CreateColorPaletteReadOnlySpan(image, size); // } // } //} //private void CreateColorPaletteReadOnlySpan(string image, int size) // where T : unmanaged, IColor //{ // T[] data = ImageHelper.GetColorsFromImage(image); // ReadOnlySpan span = data; // T[] test = [.. span.CreateColorPalette(size).OrderBy(x => x.R).ThenBy(x => x.G).ThenBy(x => x.B).ThenBy(x => x.A)]; // IColor[] reference = _simpleReference[image][typeof(T)][size]; // Assert.AreEqual(reference.Length, test.Length, $"Palette Size differs for image {image}, size {size}"); // for (int i = 0; i < reference.Length; i++) // Assert.AreEqual(reference[i], test[i], $"Index {i} differs for image {image}, size {size}"); //} //[TestMethod] //public void CreateColorPaletteSpan() //{ // ReadOnlySpan sizes = SimpleSizes; // foreach (string image in GetTestImages()) // { // foreach (int size in sizes) // { // CreateColorPaletteSpan(image, size); // CreateColorPaletteSpan(image, size); // CreateColorPaletteSpan(image, size); // CreateColorPaletteSpan(image, size); // CreateColorPaletteSpan(image, size); // CreateColorPaletteSpan(image, size); // } // } //} //private void CreateColorPaletteSpan(string image, int size) // where T : unmanaged, IColor //{ // T[] data = ImageHelper.GetColorsFromImage(image); // Span span = data; // T[] test = [.. span.CreateColorPalette(size).OrderBy(x => x.R).ThenBy(x => x.G).ThenBy(x => x.B).ThenBy(x => x.A)]; // IColor[] reference = _simpleReference[image][typeof(T)][size]; // Assert.AreEqual(reference.Length, test.Length, $"Palette Size differs for image {image}, size {size}"); // for (int i = 0; i < reference.Length; i++) // Assert.AreEqual(reference[i], test[i], $"Index {i} differs for image {image}, size {size}"); //} //[TestMethod] //public void CreateColorPaletteImage() //{ // ReadOnlySpan sizes = SimpleSizes; // foreach (string image in GetTestImages()) // { // foreach (int size in sizes) // { // CreateColorPaletteImage(image, size); // CreateColorPaletteImage(image, size); // CreateColorPaletteImage(image, size); // CreateColorPaletteImage(image, size); // CreateColorPaletteImage(image, size); // CreateColorPaletteImage(image, size); // } // } //} //private void CreateColorPaletteImage(string image, int size) // where T : struct, IColor //{ // IImage data = ImageHelper.GetImage(image); // IColor[] test = [.. data.CreateColorPalette(size).OrderBy(x => x.R).ThenBy(x => x.G).ThenBy(x => x.B).ThenBy(x => x.A)]; // IColor[] reference = _simpleReference[image][typeof(T)][size]; // Assert.AreEqual(reference.Length, test.Length, $"Palette Size differs for image {image}, size {size}"); // for (int i = 0; i < reference.Length; i++) // Assert.AreEqual(reference[i], test[i], $"Index {i} differs for image {image}, size {size}"); //} //[TestMethod] //public void CreateColorPaletteGenericImage() //{ // ReadOnlySpan sizes = SimpleSizes; // foreach (string image in GetTestImages()) // { // foreach (int size in sizes) // { // CreateColorPaletteGenericImage(image, size); // CreateColorPaletteGenericImage(image, size); // CreateColorPaletteGenericImage(image, size); // CreateColorPaletteGenericImage(image, size); // CreateColorPaletteGenericImage(image, size); // CreateColorPaletteGenericImage(image, size); // } // } //} //private void CreateColorPaletteGenericImage(string image, int size) // where T : unmanaged, IColor //{ // Image data = ImageHelper.GetImage(image); // T[] test = [.. data.CreateColorPalette(size).OrderBy(x => x.R).ThenBy(x => x.G).ThenBy(x => x.B).ThenBy(x => x.A)]; // IColor[] reference = _simpleReference[image][typeof(T)][size]; // Assert.AreEqual(reference.Length, test.Length, $"Palette Size differs for image {image}, size {size}"); // for (int i = 0; i < reference.Length; i++) // Assert.AreEqual(reference[i], test[i], $"Index {i} differs for image {image}, size {size}"); //} //[TestMethod] //public void CreateColorPaletteRefImage() //{ // ReadOnlySpan sizes = SimpleSizes; // foreach (string image in GetTestImages()) // { // foreach (int size in sizes) // { // CreateColorPaletteRefImage(image, size); // CreateColorPaletteRefImage(image, size); // CreateColorPaletteRefImage(image, size); // CreateColorPaletteRefImage(image, size); // CreateColorPaletteRefImage(image, size); // CreateColorPaletteRefImage(image, size); // } // } //} //private void CreateColorPaletteRefImage(string image, int size) // where T : unmanaged, IColor //{ // RefImage data = ImageHelper.GetImage(image).AsRefImage(); // T[] test = [.. data.CreateColorPalette(size).OrderBy(x => x.R).ThenBy(x => x.G).ThenBy(x => x.B).ThenBy(x => x.A)]; // IColor[] reference = _simpleReference[image][typeof(T)][size]; // Assert.AreEqual(reference.Length, test.Length, $"Palette Size differs for image {image}, size {size}"); // for (int i = 0; i < reference.Length; i++) // Assert.AreEqual(reference[i], test[i], $"Index {i} differs for image {image}, size {size}"); //} }