using System; using System.Utility; using NUnit.Framework; namespace Chernobyl.Graphics { [TestFixture, Description("Tests for the ColorHsla type.")] public class ColorHslaTests { ColorHsla _color = new ColorHsla(.91, 1, .44, .5); #region RGBA Conversion [Test, Description("Ensures that RGBA to HSLA conversion works.")] public void RgbaToHsla() { // Color 1 { var rgba1 = new ColorRgba(224, 0, 120, 127); var hsla1 = (ColorHsla)rgba1; hsla1.Round(2).IsEqualTo(new ColorHsla(.91, 1, .44, .5), "color 1"); } // Color 2 { var rgba1 = new ColorRgba(214, 174, 174, 45); var hsla1 = (ColorHsla)rgba1; hsla1.Round(2).IsEqualTo(new ColorHsla(0, .33, .76, .18), "color 2"); } } [Test, Description("Ensures that HSLA to RGBA conversion works.")] public void HslaToRgba() { // Color 1 { var hsla1 = new ColorHsla(.91, 1, .44, .5); var rgba1 = (ColorRgba)hsla1; rgba1.IsEqualTo(new ColorRgba(224, 0, 121, 127), "color 1"); } // Color 2 { var hsla1 = new ColorHsla(0, .33, .76, .18); var rgba1 = (ColorRgba)hsla1; rgba1.IsEqualTo(new ColorRgba(214, 174, 174, 45), "color 2"); } } #endregion #region Darken [Test, Description(".Darken returns correct result.")] public void Darken() { _color.Darken(.20).IsEqualTo(new ColorHsla(.91, 1, .24, .5), "HSLA"); _color.Darken(.50).IsEqualTo(new ColorHsla(.91, 1, 0, .5), "HSLA"); } [Test, Description(".Darken throws if given out of range argument.")] public void DarkenThrows() { Assert.Throws(() => _color.Darken(1.1)); Assert.Throws(() => _color.Darken(-.1)); } #endregion #region Lighten [Test, Description(".Lighten returns correct result.")] public void Lighten() { _color.Lighten(.20).IsEqualTo(new ColorHsla(.91, 1, .64, .5), "HSLA"); _color.Lighten(.60).IsEqualTo(new ColorHsla(.91, 1, 1.0, .5), "HSLA"); } [Test, Description(".Lighten throws if given out of range argument.")] public void LightenThrows() { Assert.Throws(() => _color.Lighten(1.1)); Assert.Throws(() => _color.Lighten(-.1)); } #endregion #region Lerp [Test, Description(".Lerp returns correct result.")] public void Lerp() { var start = new ColorHsla(0, 0, 0, 0); var end = new ColorHsla(1, 1, 1, 1); var actual = new[] { start.Lerp(end, 0.0), start.Lerp(end, 0.4), start.Lerp(end, 0.8), start.Lerp(end, 1.0) }; actual.IsEqualTo(new[] { new ColorHsla(0.0, 0.0, 0.0, 0.0), new ColorHsla(0.4, 0.4, 0.4, 0.4), new ColorHsla(0.8, 0.8, 0.8, 0.8), new ColorHsla(1.0, 1.0, 1.0, 1.0) }, "Lerp Results"); } [Test, Description(".Lerp throws when amount is less than 0.")] public void LerpThrowsWhenAmountIsLessThanZero() => Assert.Throws(() => _color.Lerp(new ColorHsla(1, 1, 1, 1), -0.1)); [Test, Description(".Lerp throws when amount is greater than 1.")] public void LerpThrowsWhenAmountIsGreaterThanZero() => Assert.Throws(() => _color.Lerp(new ColorHsla(1, 1, 1, 1), 1.1)); #endregion } }