using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using NUnit.Framework; // ReSharper disable UnusedMember.Local namespace Chernobyl.Mathematics { [TestFixture, Description("Tests for the Range type.")] public class RangeTests { [Test, Description("Ensures Normalize throws an argument out of range exception.")] [TestCaseSource(typeof(BadData), nameof(BadData.TestCases))] public void NormalizeThrowsArgumentOutOfRange(double value, Tuple oldRange, Tuple newRange) { Assert.Throws(() => value.Normalize(oldRange, newRange)); } [Test, Description("Ensures Normalize can scale values to the new range.")] [TestCaseSource(typeof(GoodData), nameof(GoodData.TestCases))] public double Normalize(double value, Tuple oldRange, Tuple newRange) { return value.Normalize(oldRange, newRange); } class BadData { public static IEnumerable TestCases { get { // Value out of range yield return new TestCaseData(9.0, Tuple.Create(10.0, 100.0), Tuple.Create(10.0, 200.0)).SetName("Value range 1"); yield return new TestCaseData(101.0, Tuple.Create(10.0, 100.0), Tuple.Create(10.0, 200.0)).SetName("Value range 2"); // Old range min greater than or equal to max yield return new TestCaseData(10.0, Tuple.Create(10.0, 10.0), Tuple.Create(10.0, 200.0)).SetName("Old range 1"); yield return new TestCaseData(10.0, Tuple.Create(10.0, 9.0), Tuple.Create(10.0, 200.0)).SetName("Old range 2"); // New range min greater than or equal to max yield return new TestCaseData(10.0, Tuple.Create(10.0, 100.0), Tuple.Create(10.0, 10.0)).SetName("New range 1"); yield return new TestCaseData(10.0, Tuple.Create(10.0, 100.0), Tuple.Create(10.0, 9.0)).SetName("New range 1"); } } } class GoodData { public static IEnumerable TestCases { get { // Scaling yield return new TestCaseData(10.0, Tuple.Create(10.0, 100.0), Tuple.Create(10.0, 200.0)).Returns(10.0).SetName("Scaling 1"); yield return new TestCaseData(100.0, Tuple.Create(10.0, 100.0), Tuple.Create(10.0, 200.0)).Returns(200.0).SetName("Scaling 2"); yield return new TestCaseData(50.0, Tuple.Create(20.0, 100.0), Tuple.Create(10.0, 200.0)).Returns(81.25).SetName("Scaling 3"); yield return new TestCaseData(80.0, Tuple.Create(20.0, 100.0), Tuple.Create(10.0, 200.0)).Returns(152.5).SetName("Scaling 4"); // Shifting yield return new TestCaseData(10.0, Tuple.Create(10.0, 100.0), Tuple.Create(20.0, 110.0)).Returns(20.0).SetName("Shifting 1"); yield return new TestCaseData(100.0, Tuple.Create(10.0, 100.0), Tuple.Create(20.0, 110.0)).Returns(110.0).SetName("Shifting 2"); yield return new TestCaseData(50.0, Tuple.Create(10.0, 100.0), Tuple.Create(20.0, 110.0)).Returns(60.0).SetName("Shifting 3"); yield return new TestCaseData(80.0, Tuple.Create(10.0, 100.0), Tuple.Create(20.0, 110.0)).Returns(90.0).SetName("Shifting 4"); } } } } }