using System; using Chernobyl.Measures.Length; using Chernobyl.Measures.Time; using NUnit.Framework; namespace Chernobyl.Measures.Speed { [TestFixture, Description("Tests for the Metres type.")] public class MetresTests { [Test, Description("A test that ensures the Metres(double) " + "constructor sets the proper value.")] public void ConstructorDoubeTest() { Metres metresPerSeconds = new Metres(32.1); Assert.AreEqual(32.1, metresPerSeconds.Value, 0.0, "The value returned by Metres.Value is not the expected value."); } [Test, Description("A test that ensures the Metres(Metres, TTime) " + "constructor sets the proper values.")] public void ConstructorMetresTTimeTest() { Metres metresPerSeconds = new Metres(new Metres(32.1), new Seconds(5)); Assert.AreEqual(32.1 / 5, metresPerSeconds.Value, 0.0, "The value returned by Metres.Value is not the expected value."); } [Test, Description("A test to ensure the implicit Metres to double " + "conversion works as expected.")] public void ImplicitDoubleToSecondsConversionTest() { Metres seconds = new Metres(32.1); double value = seconds; Assert.AreEqual(seconds.Value, value, 0.0, "The value returned by the implicit Metres to Double conversion " + "is not the expected value."); } [Test, Description("A test to ensure the implicit Double to Metres " + "conversion works as expected.")] public void ExplicitDoubleToSecondsConversionTest() { const double value = 32.1; Metres seconds = (Metres)value; Assert.AreEqual(value, seconds.Value, 0.0, "The value returned by the explicit Double to Metres conversion " + "is not the expected value."); } [TestFixture, Description("Tests for the IEquatable and Object " + "implementations of the Metres type.")] public class EquatableTests : EquatableTests> { protected override IEquatable> CreateEquatable() { return new Metres(32.1); } protected override Metres CreateEqualObject() { return new Metres(32.1); } protected override Metres CreateNotEqualObject() { return new Metres(15.5); } protected override string ExpectedToStringResult { get { return "32.1 m/s"; } } } [TestFixture, Description("Tests for the IComparable implementation " + "of the Metres type.")] public class ComparableTests : ComparableTests> { protected override IComparable> CreateComparable() { return new Metres(32.0); } protected override Metres CreateLessThanObject() { return new Metres(15.0); } protected override Metres CreateEqualObject() { return new Metres(32.0); } protected override Metres CreateGreaterThanObject() { return new Metres(33.0); } } [TestFixture, Description("Tests for the Metres type's mathematical " + "operator overloads.")] public class MathematicalOperatorTests : MathematicalOperatorTests> { protected override Metres CreateX() { return new Metres(X); } protected override Metres CreateY() { return new Metres(Y); } protected override Metres ExpectedBinaryAdditionResult { get { return new Metres(X + Y); } } protected override Metres ExpectedBinarySubtractionResult { get { return new Metres(X - Y); } } protected override Metres OppositeExpectedBinarySubtractionResult { get { return new Metres(Y - X); } } protected override Metres ExpectedNegationResult { get { return new Metres(-X); } } protected override Metres ExpectedMultiplicationResult { get { return new Metres(X * Y); } } protected override Metres ExpectedDivisionResult { get { return new Metres(X / Y); } } protected override Metres OppositeExpectedDivisionResult { get { return new Metres(Y / X); } } /// /// The double form of . /// const double X = 32.1; /// /// The double form of . /// const double Y = -56.75; } [TestFixture, Description("Tests for the Metres type's equality " + "operator overloads.")] public class EqualityOperatorTests : EqualityOperatorTests> { protected override Metres CreateX() { return new Metres(32.1); } protected override Metres CreateEqual() { return new Metres(32.1); } protected override Metres CreateNotEqual() { return new Metres(-43.6); } } [TestFixture, Description("Tests for the Metres type's relational " + "operator overloads.")] public class RelationalOperatorTests : RelationalOperatorTests> { protected override Metres CreateX() { return new Metres(32.1); } protected override Metres CreateLessThan() { return new Metres(32.0); } protected override Metres CreateEqual() { return new Metres(32.1); } protected override Metres CreateGreaterThan() { return new Metres(32.2); } } } }