Index: Ringtoets/Common/src/Ringtoets.Common.IO/SoilProfile/SoilLayer2DLoop.cs
===================================================================
diff -u -r7585d2fd78627d94d55ffa16423af90a91e4efd4 -r0ae39cf7e804cdb6d5932d8d5aeced1e54febb60
--- Ringtoets/Common/src/Ringtoets.Common.IO/SoilProfile/SoilLayer2DLoop.cs (.../SoilLayer2DLoop.cs) (revision 7585d2fd78627d94d55ffa16423af90a91e4efd4)
+++ Ringtoets/Common/src/Ringtoets.Common.IO/SoilProfile/SoilLayer2DLoop.cs (.../SoilLayer2DLoop.cs) (revision 0ae39cf7e804cdb6d5932d8d5aeced1e54febb60)
@@ -20,6 +20,7 @@
// All rights reserved.
using System;
+using System.Linq;
using Core.Common.Base.Geometry;
using Ringtoets.Common.IO.Properties;
@@ -33,9 +34,15 @@
///
/// Creates a new instance of .
///
+ /// Thrown when is null.
/// Thrown when do not form a loop.
public SoilLayer2DLoop(Segment2D[] segments)
{
+ if (segments == null)
+ {
+ throw new ArgumentNullException(nameof(segments));
+ }
+
CheckValidLoop(segments);
Segments = segments;
@@ -82,5 +89,34 @@
return true;
}
+
+ private bool Equals(SoilLayer2DLoop other)
+ {
+ return Segments.SequenceEqual(other.Segments);
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (ReferenceEquals(null, obj)) return false;
+ if (ReferenceEquals(this, obj)) return true;
+ if (obj.GetType() != GetType()) return false;
+
+ return Equals((SoilLayer2DLoop) obj);
+ }
+
+ public override int GetHashCode()
+ {
+ unchecked
+ {
+ var hashCode = 0;
+
+ foreach (Segment2D segment in Segments)
+ {
+ hashCode = (hashCode * 397) ^ segment.GetHashCode();
+ }
+
+ return hashCode;
+ }
+ }
}
}
\ No newline at end of file
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/SoilLayer2DGeometryReaderTest.cs
===================================================================
diff -u -r7585d2fd78627d94d55ffa16423af90a91e4efd4 -r0ae39cf7e804cdb6d5932d8d5aeced1e54febb60
--- Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/SoilLayer2DGeometryReaderTest.cs (.../SoilLayer2DGeometryReaderTest.cs) (revision 7585d2fd78627d94d55ffa16423af90a91e4efd4)
+++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/SoilLayer2DGeometryReaderTest.cs (.../SoilLayer2DGeometryReaderTest.cs) (revision 0ae39cf7e804cdb6d5932d8d5aeced1e54febb60)
@@ -631,7 +631,7 @@
}
///
- /// Takes a and returns an of
+ /// Takes and returns an of
/// which contains the same information as the original .
///
/// The to convert to an of
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/SoilLayer2DLoopTest.cs
===================================================================
diff -u -r7585d2fd78627d94d55ffa16423af90a91e4efd4 -r0ae39cf7e804cdb6d5932d8d5aeced1e54febb60
--- Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/SoilLayer2DLoopTest.cs (.../SoilLayer2DLoopTest.cs) (revision 7585d2fd78627d94d55ffa16423af90a91e4efd4)
+++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/SoilLayer2DLoopTest.cs (.../SoilLayer2DLoopTest.cs) (revision 0ae39cf7e804cdb6d5932d8d5aeced1e54febb60)
@@ -30,6 +30,17 @@
public class SoilLayer2DLoopTest
{
[Test]
+ public void Constructor_SegmentsNull_ThrowsArgumentNullException()
+ {
+ // Call
+ TestDelegate test = () => new SoilLayer2DLoop(null);
+
+ // Assert
+ string paramName = Assert.Throws(test).ParamName;
+ Assert.AreEqual("segments", paramName);
+ }
+
+ [Test]
public void Constructor_ConnectedSegments_SetsSegments()
{
// Setup
@@ -95,5 +106,61 @@
var exception = Assert.Throws(test);
Assert.AreEqual("De segmenten van de geometrie van de laag vormen geen lus.", exception.Message);
}
+
+ [Test]
+ public void GetHashCode_EqualLoops_AreEqual()
+ {
+ // Setup
+ SoilLayer2DLoop loopA = CreateValidLoop();
+ SoilLayer2DLoop loopB = CreateValidLoop();
+
+ // Precondition
+ Assert.AreEqual(loopA, loopB);
+ Assert.AreEqual(loopB, loopA);
+
+ // Call & Assert
+ Assert.AreEqual(loopA.GetHashCode(), loopB.GetHashCode());
+ Assert.AreEqual(loopB.GetHashCode(), loopA.GetHashCode());
+ }
+
+ [Test]
+ public void Equals_DifferentType_ReturnsFalse()
+ {
+ // Setup
+ SoilLayer2DLoop loop = CreateValidLoop();
+
+ // Call
+ bool areEqual = loop.Equals(new object());
+
+ // Assert
+ Assert.IsFalse(areEqual);
+ }
+
+ [Test]
+ public void Equals_Null_ReturnsFalse()
+ {
+ // Setup
+ SoilLayer2DLoop loop = CreateValidLoop();
+
+ // Call
+ bool areEqual = loop.Equals(null);
+
+ // Assert
+ Assert.IsFalse(areEqual);
+ }
+
+ private static SoilLayer2DLoop CreateValidLoop()
+ {
+ var pointA = new Point2D(0.0, 0.0);
+ var pointB = new Point2D(1.0, 0.0);
+
+ var segments = new[]
+ {
+ new Segment2D(pointA, pointB),
+ new Segment2D(pointB, pointA)
+ };
+
+ return new SoilLayer2DLoop(segments);
+ }
}
}
\ No newline at end of file