Index: Core/Common/src/Core.Common.Base/Data/RoundedDouble.cs
===================================================================
diff -u -rf8eeb4e21d9e282d998f3f218593bfb0fec681b7 -r22f847897e3a8dcefbb04b51dd1fc346448cd62d
--- Core/Common/src/Core.Common.Base/Data/RoundedDouble.cs (.../RoundedDouble.cs) (revision f8eeb4e21d9e282d998f3f218593bfb0fec681b7)
+++ Core/Common/src/Core.Common.Base/Data/RoundedDouble.cs (.../RoundedDouble.cs) (revision 22f847897e3a8dcefbb04b51dd1fc346448cd62d)
@@ -9,7 +9,7 @@
/// This class represents a that is being rounded to a certain
/// number of places.
///
- public sealed class RoundedDouble : IEquatable
+ public sealed class RoundedDouble : IEquatable, IEquatable
{
private double value;
@@ -55,6 +55,21 @@
}
}
+ public static bool operator ==(RoundedDouble left, RoundedDouble right)
+ {
+ return Equals(left, right);
+ }
+
+ public static bool operator !=(RoundedDouble left, RoundedDouble right)
+ {
+ return !Equals(left, right);
+ }
+
+ public static implicit operator double(RoundedDouble d)
+ {
+ return d.Value;
+ }
+
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
@@ -90,6 +105,11 @@
return Value.ToString(GetFormat(), CultureInfo.CurrentCulture);
}
+ public bool Equals(double other)
+ {
+ return Value.Equals(other);
+ }
+
public bool Equals(RoundedDouble other)
{
if (ReferenceEquals(null, other))
@@ -103,16 +123,6 @@
return Value.Equals(other.Value);
}
- public static bool operator ==(RoundedDouble left, RoundedDouble right)
- {
- return Equals(left, right);
- }
-
- public static bool operator !=(RoundedDouble left, RoundedDouble right)
- {
- return !Equals(left, right);
- }
-
private static bool IsSpecialDoubleValue(double value)
{
return double.IsNaN(value) ||
Index: Core/Common/test/Core.Common.Base.Test/Data/RoundedDoubleTest.cs
===================================================================
diff -u -rf8eeb4e21d9e282d998f3f218593bfb0fec681b7 -r22f847897e3a8dcefbb04b51dd1fc346448cd62d
--- Core/Common/test/Core.Common.Base.Test/Data/RoundedDoubleTest.cs (.../RoundedDoubleTest.cs) (revision f8eeb4e21d9e282d998f3f218593bfb0fec681b7)
+++ Core/Common/test/Core.Common.Base.Test/Data/RoundedDoubleTest.cs (.../RoundedDoubleTest.cs) (revision 22f847897e3a8dcefbb04b51dd1fc346448cd62d)
@@ -21,6 +21,7 @@
// Assert
Assert.IsInstanceOf>(roundedDouble);
+ Assert.IsInstanceOf>(roundedDouble);
Assert.AreEqual(numberOfDecimalPlaces, roundedDouble.NumberOfDecimalPlaces);
Assert.AreEqual(0.0, roundedDouble.Value);
}
@@ -379,6 +380,190 @@
Assert.IsFalse(isNotEqual2);
}
+ [Test]
+ [TestCase(987654321.0, 5)]
+ [TestCase(-9876543.1200, 2)]
+ public void Equals_RoundedDoubleEqualToDouble_ReturnTrue(
+ double value, int numberOfDecimalPlaces)
+ {
+ // Setup
+ var roundedDouble = new RoundedDouble(numberOfDecimalPlaces)
+ {
+ Value = value
+ };
+ // Call
+ var isEqual1 = roundedDouble.Equals(value);
+ var isEqual2 = value.Equals(roundedDouble);
+
+ // Assert
+ Assert.IsTrue(isEqual1);
+ Assert.IsTrue(isEqual2);
+ }
+
+ [Test]
+ [TestCase(987654321.1, 0)]
+ [TestCase(-9876543.1234, 2)]
+ public void Equals_RoundedDoubleNotEqualToDouble_ReturnFalse(
+ double value, int numberOfDecimalPlaces)
+ {
+ // Setup
+ var roundedDouble = new RoundedDouble(numberOfDecimalPlaces)
+ {
+ Value = value
+ };
+
+ // Call
+ var isEqual1 = roundedDouble.Equals(value);
+ var isEqual2 = value.Equals(roundedDouble);
+
+ // Assert
+ Assert.IsFalse(isEqual1);
+ Assert.IsFalse(isEqual2);
+ }
+
+ [Test]
+ public void Equals_RoundedDoubleTotallyDifferentFromDouble_ReturnFalse()
+ {
+ // Setup
+ var roundedDouble = new RoundedDouble(2)
+ {
+ Value = 1.23
+ };
+ double otherValue = 4.56;
+
+ // Call
+ var isEqual1 = roundedDouble.Equals(otherValue);
+ var isEqual2 = otherValue.Equals(roundedDouble);
+
+ // Assert
+ Assert.IsFalse(isEqual1);
+ Assert.IsFalse(isEqual2);
+ }
+
+ [Test]
+ public void GetHashCode_RoundedDoubleEqualToDouble_ReturnSameHashCode()
+ {
+ // Setup
+ double otherValue = 4.56;
+ var roundedDouble = new RoundedDouble(2)
+ {
+ Value = otherValue
+ };
+
+ // Precondition:
+ Assert.IsTrue(otherValue.Equals(roundedDouble));
+
+ // Call
+ var hash1 = roundedDouble.GetHashCode();
+ var hash2 = otherValue.GetHashCode();
+
+ // Assert
+ Assert.AreEqual(hash1, hash2);
+ }
+
+ [Test]
+ public void DoubleEqualityOperator_DoubleIsEqualToRoundedDouble_ReturnTrue()
+ {
+ // Setup
+ double value = 1.234;
+ var roundedDouble = new RoundedDouble(4)
+ {
+ Value = value
+ };
+
+ // Precondition
+ Assert.IsTrue(roundedDouble.Equals(value));
+
+ // Call
+ var isEqual1 = value == roundedDouble;
+ var isEqual2 = roundedDouble == value;
+
+ // Assert
+ Assert.IsTrue(isEqual1);
+ Assert.IsTrue(isEqual2);
+ }
+
+ [Test]
+ public void DoubleEqualityOperator_DoubleIsNotEqualToRoundedDouble_ReturnFalse()
+ {
+ // Setup
+ double value = 1.234;
+ var roundedDouble = new RoundedDouble(4)
+ {
+ Value = 3.21543
+ };
+
+ // Precondition
+ Assert.IsFalse(roundedDouble.Equals(value));
+
+ // Call
+ var isEqual1 = value == roundedDouble;
+ var isEqual2 = roundedDouble == value;
+
+ // Assert
+ Assert.IsFalse(isEqual1);
+ Assert.IsFalse(isEqual2);
+ }
+
+ [Test]
+ public void DoubleInequalityOperator_DoubleIsEqualToRoundedDouble_ReturnFalse()
+ {
+ // Setup
+ double value = 1.234;
+ var roundedDouble = new RoundedDouble(4)
+ {
+ Value = value
+ };
+
+ // Precondition
+ Assert.IsTrue(roundedDouble.Equals(value));
+
+ // Call
+ var isEqual1 = value != roundedDouble;
+ var isEqual2 = roundedDouble != value;
+
+ // Assert
+ Assert.IsFalse(isEqual1);
+ Assert.IsFalse(isEqual2);
+ }
+
+ [Test]
+ public void DoubleInequalityOperator_DoubleIsNotEqualToRoundedDouble_ReturnTrue()
+ {
+ // Setup
+ double value = 1.234;
+ var roundedDouble = new RoundedDouble(4)
+ {
+ Value = 3.21543
+ };
+
+ // Precondition
+ Assert.IsFalse(roundedDouble.Equals(value));
+
+ // Call
+ var isEqual1 = value != roundedDouble;
+ var isEqual2 = roundedDouble != value;
+
+ // Assert
+ Assert.IsTrue(isEqual1);
+ Assert.IsTrue(isEqual2);
+ }
+
+ [Test]
+ public void ImplicitConversion_FromRoundedDoubleToDouble_ConvertedValueIsEqual()
+ {
+ // Setup
+ var roundedDouble = new RoundedDouble(4)
+ {
+ Value = 3.2154
+ };
+
+ // Call
+ double convertedValue = roundedDouble;
+
+ // Assert
+ Assert.AreEqual(roundedDouble.Value, convertedValue);
+ }
}
}
\ No newline at end of file