using System; using System.Drawing; using NUnit.Framework; namespace Developpez.Dotnet.Drawing.Tests { [TestFixture] public class ColorExtensionsTests { [Test] public void Test_RgbToHsv_And_Back_Gives_Original_Color() { var expected = Color.FromArgb(42, 99, 123); var hsv = expected.ToHsv(); var actual = hsv.ToRgb(); Assert.AreEqual(actual, expected); } [Test] public void Test_HsvToRgb_And_Back_Gives_Original_Color() { var expected = new HsvColor(198.0, 0.66, 0.5); var rgb = expected.ToRgb(); var actual = rgb.ToHsv(); Assert.IsTrue(AlmostEqual(actual, expected), "Expected {0}, but was {1}", expected, actual); } [Test] public void Test_RgbToHsl_And_Back_Gives_Original_Color() { var expected = Color.FromArgb(42, 99, 123); var hsl = expected.ToHsl(); var actual = hsl.ToRgb(); Assert.AreEqual(actual, expected); } [Test] public void Test_HslToRgb_And_Back_Gives_Original_Color() { var expected = new HslColor(120.0, 1.0, 0.5); var rgb = expected.ToRgb(); var actual = rgb.ToHsl(); Assert.IsTrue(AlmostEqual(actual, expected), "Expected {0}, but was {1}", expected, actual); } static bool AlmostEqual(HsvColor a, HsvColor b) { double dh = Math.Abs(a.H - b.H); double ds = Math.Abs(a.S - b.S); double dv = Math.Abs(a.V - b.V); return dh < 1.0 && ds < 1.0 && dv < 1.0; } static bool AlmostEqual(HslColor a, HslColor b) { double dh = Math.Abs(a.H - b.H); double ds = Math.Abs(a.S - b.S); double dl = Math.Abs(a.L - b.L); return dh < 1.0 && ds < 1.0 && dl < 1.0; } } }