using System; using System.Collections.Generic; using System.Utility; using Chernobyl.Collections.Generic; using Chernobyl.Extensions; using NUnit.Framework; using Enumerable = System.Linq.Enumerable; namespace Chernobyl.Mathematics.Space { [TestFixture, Description("Tests for the Wave type.")] public class WaveTests { [Test, Description("Ensures Step starts at the expected value and increases that " + "value at the expected rate.")] public void StepStartsAndIncreasesAtExpectedValues() { var result = Wave.Step(1, 5); result().IsEqualTo(5, "first invoke"); result().IsEqualTo(6, "second invoke"); result().IsEqualTo(7, "third invoke"); result().IsEqualTo(8, "fourth invoke"); result().IsEqualTo(9, "fifth invoke"); } [Test, Description("Ensures Step starts at the expected value and increases that " + "value at the expected rate.")] public void StepResetsCorrectly() { var result = Wave.Step(1, 5, current => current >= 8); result().IsEqualTo(5, "first invoke"); result().IsEqualTo(6, "second invoke"); result().IsEqualTo(7, "third invoke"); result().IsEqualTo(5, "fourth invoke"); result().IsEqualTo(6, "fifth invoke"); } [Test, Description("Ensures Multiply returns the expected value.")] public void AmplifyReturnsExpectedValues() { var result = Wave.Step(1, 5).Multiply(2); result().IsEqualTo(10, "first invoke"); result().IsEqualTo(12, "second invoke"); result().IsEqualTo(14, "third invoke"); result().IsEqualTo(16, "fourth invoke"); result().IsEqualTo(18, "fifth invoke"); } [Test, Description("Ensures Square returns the expected value.")] public void SquareReturnsExpectedValues() { var items = new List> { Tuple.Create(1.0, 1), Tuple.Create(2.0, 3), Tuple.Create(3.0, 2) }; var squareFunction = items.GetEnumerator().AsFunc(Tuple.Create(1.0, 0)).Square(); squareFunction().IsEqualTo(1.0, "first invoke"); squareFunction().IsEqualTo(2.0, "second invoke"); squareFunction().IsEqualTo(2.0, "third invoke"); squareFunction().IsEqualTo(2.0, "fourth invoke"); squareFunction().IsEqualTo(3.0, "fifth invoke"); squareFunction().IsEqualTo(3.0, "sixth invoke"); } [Test, Description("Ensures Square skips values marked with zero.")] public void SquareSkipsValuesMarkedWithZero() { var items = new List> { Tuple.Create(1.0, 1), Tuple.Create(2.0, 0), Tuple.Create(3.0, 2) }; var squareFunction = items.GetEnumerator().AsFunc(Tuple.Create(1.0, 0)).Square(); squareFunction().IsEqualTo(1.0, "first invoke"); squareFunction().IsEqualTo(3.0, "second invoke"); squareFunction().IsEqualTo(3.0, "third invoke"); } } }