using RobotNet10.GlobalPathPlanner.Model; namespace RobotNet10.GlobalPathPlanner.UnitTest; public class GlobalNodeTests { [Fact] public void DistanceTo_WithSamePosition_ShouldReturnZero() { // Arrange var node1 = new GlobalNode { X = 5.0, Y = 5.0 }; var node2 = new GlobalNode { X = 5.0, Y = 5.0 }; // Act var distance = node1.DistanceTo(node2); // Assert Assert.Equal(0.0, distance, 5); } [Fact] public void DistanceTo_WithHorizontalDistance_ShouldReturnCorrectValue() { // Arrange var node1 = new GlobalNode { X = 0.0, Y = 0.0 }; var node2 = new GlobalNode { X = 10.0, Y = 0.0 }; // Act var distance = node1.DistanceTo(node2); // Assert Assert.Equal(10.0, distance, 5); } [Fact] public void DistanceTo_WithVerticalDistance_ShouldReturnCorrectValue() { // Arrange var node1 = new GlobalNode { X = 0.0, Y = 0.0 }; var node2 = new GlobalNode { X = 0.0, Y = 10.0 }; // Act var distance = node1.DistanceTo(node2); // Assert Assert.Equal(10.0, distance, 5); } [Fact] public void DistanceTo_WithDiagonalDistance_ShouldReturnCorrectValue() { // Arrange var node1 = new GlobalNode { X = 0.0, Y = 0.0 }; var node2 = new GlobalNode { X = 3.0, Y = 4.0 }; // Act var distance = node1.DistanceTo(node2); // Assert Assert.Equal(5.0, distance, 5); // 3-4-5 triangle } [Fact] public void DistanceTo_ShouldBeCommutative() { // Arrange var node1 = new GlobalNode { X = 1.0, Y = 2.0 }; var node2 = new GlobalNode { X = 4.0, Y = 6.0 }; // Act var distance1 = node1.DistanceTo(node2); var distance2 = node2.DistanceTo(node1); // Assert Assert.Equal(distance1, distance2, 5); } [Fact] public void DistanceTo_WithNegativeCoordinates_ShouldReturnCorrectValue() { // Arrange var node1 = new GlobalNode { X = -5.0, Y = -5.0 }; var node2 = new GlobalNode { X = -2.0, Y = -1.0 }; // Act var distance = node1.DistanceTo(node2); // Assert Assert.Equal(5.0, distance, 5); // sqrt(3^2 + 4^2) = 5 } [Fact] public void ToString_WithName_ShouldReturnName() { // Arrange var node = new GlobalNode { Name = "TestNode" }; // Act var result = node.ToString(); // Assert Assert.Equal("TestNode", result); } [Fact] public void ToString_WithoutName_ShouldReturnTypeName() { // Arrange var node = new GlobalNode { Name = null }; // Act var result = node.ToString(); // Assert Assert.Equal(typeof(GlobalNode).ToString(), result); } [Fact] public void Properties_ShouldBeSettable() { // Arrange & Act var node = new GlobalNode { Id = Guid.NewGuid(), MapId = Guid.NewGuid(), Name = "Test", X = 1.5, Y = 2.5, Orientation = Orientation.FORWARD }; // Assert Assert.NotEqual(Guid.Empty, node.Id); Assert.NotEqual(Guid.Empty, node.MapId); Assert.Equal("Test", node.Name); Assert.Equal(1.5, node.X); Assert.Equal(2.5, node.Y); Assert.Equal(Orientation.FORWARD, node.Orientation); } }