// Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; using SixLabors.ImageSharp.ColorSpaces.Conversion; using Xunit; namespace SixLabors.ImageSharp.Tests.Colorspaces { /// /// Tests - conversions. /// /// /// Test data generated using: /// /// /// public class RgbAndHslConversionTest { private static readonly ColorSpaceConverter Converter = new ColorSpaceConverter(); private static readonly ApproximateColorSpaceComparer ColorSpaceComparer = new ApproximateColorSpaceComparer(.0001F); /// /// Tests conversion from to . /// [Theory] [InlineData(0, 0, 0, 0, 0, 0)] [InlineData(0, 1, 1, 1, 1, 1)] [InlineData(360, 1, 1, 1, 1, 1)] [InlineData(0, 1, .5F, 1, 0, 0)] [InlineData(120, 1, .5F, 0, 1, 0)] [InlineData(240, 1, .5F, 0, 0, 1)] public void Convert_Hsl_To_Rgb(float h, float s, float l, float r, float g, float b) { // Arrange var input = new Hsl(h, s, l); var expected = new Rgb(r, g, b); Span inputSpan = new Hsl[5]; inputSpan.Fill(input); Span actualSpan = new Rgb[5]; // Act var actual = Converter.ToRgb(input); Converter.Convert(inputSpan, actualSpan, actualSpan.Length); // Assert Assert.Equal(Rgb.DefaultWorkingSpace, actual.WorkingSpace, ColorSpaceComparer); Assert.Equal(expected, actual, ColorSpaceComparer); for (int i = 0; i < actualSpan.Length; i++) { Assert.Equal(expected, actualSpan[i], ColorSpaceComparer); } } /// /// Tests conversion from to . /// [Theory] [InlineData(0, 0, 0, 0, 0, 0)] [InlineData(1, 1, 1, 0, 0, 1)] [InlineData(1, 0, 0, 0, 1, .5F)] [InlineData(0, 1, 0, 120, 1, .5F)] [InlineData(0, 0, 1, 240, 1, .5F)] public void Convert_Rgb_To_Hsl(float r, float g, float b, float h, float s, float l) { // Arrange var input = new Rgb(r, g, b); var expected = new Hsl(h, s, l); Span inputSpan = new Rgb[5]; inputSpan.Fill(input); Span actualSpan = new Hsl[5]; // Act var actual = Converter.ToHsl(input); Converter.Convert(inputSpan, actualSpan, actualSpan.Length); // Assert Assert.Equal(expected, actual, ColorSpaceComparer); for (int i = 0; i < actualSpan.Length; i++) { Assert.Equal(expected, actualSpan[i], ColorSpaceComparer); } } } }