diff --git a/README.md b/README.md index a9eb65b..1c8ac6e 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,9 @@ AppyWay geojson model and json serialization converters. | Package | Latest Stable | | --- | --- | -| [Appy.Spatial.GeoJSON](https://www.nuget.org/packages/Appy.Spatial.GeoJSON) | [![Nuget Package](https://img.shields.io/badge/nuget-2.0.0-blue.svg)](https://www.nuget.org/packages/Appy.Spatial.GeoJSON) | -| [Appy.Spatial.GeoJSON.Newtonsoft](https://www.nuget.org/packages/Appy.Spatial.GeoJSON.Newtonsoft) | [![Nuget Package](https://img.shields.io/badge/nuget-2.0.0-blue.svg)](https://www.nuget.org/packages/Appy.Spatial.GeoJSON.Newtonsoft) | -| [Appy.Spatial.GeoJSON.TextJson](https://www.nuget.org/packages/Appy.Spatial.GeoJSON.TextJson) | [![Nuget Package](https://img.shields.io/badge/nuget-2.0.0-blue.svg)](https://www.nuget.org/packages/Appy.Spatial.GeoJSON.TextJson) | +| [Appy.Spatial.GeoJSON](https://www.nuget.org/packages/Appy.Spatial.GeoJSON) | [![Nuget Package](https://img.shields.io/badge/nuget-2.0.1-blue.svg)](https://www.nuget.org/packages/Appy.Spatial.GeoJSON) | +| [Appy.Spatial.GeoJSON.Newtonsoft](https://www.nuget.org/packages/Appy.Spatial.GeoJSON.Newtonsoft) | [![Nuget Package](https://img.shields.io/badge/nuget-2.0.1-blue.svg)](https://www.nuget.org/packages/Appy.Spatial.GeoJSON.Newtonsoft) | +| [Appy.Spatial.GeoJSON.TextJson](https://www.nuget.org/packages/Appy.Spatial.GeoJSON.TextJson) | [![Nuget Package](https://img.shields.io/badge/nuget-2.0.1-blue.svg)](https://www.nuget.org/packages/Appy.Spatial.GeoJSON.TextJson) | ## Supported frameworks diff --git a/src/Appy.Spatial.GeoJSON.Tests/LatLngComparerTests.cs b/src/Appy.Spatial.GeoJSON.Tests/LatLngComparerTests.cs new file mode 100644 index 0000000..46bf037 --- /dev/null +++ b/src/Appy.Spatial.GeoJSON.Tests/LatLngComparerTests.cs @@ -0,0 +1,60 @@ +using FluentAssertions; +using Xunit; + +namespace Appy.Spatial.GeoJSON.Tests; + +public class LatLngComparerTests +{ + readonly LatLngComparer _comparer = new(); + + [Fact] + public void ShouldBeEqualWhenCoordinatesMatch() + { + var x = new LatLng { Latitude = 51.5, Longitude = -0.12 }; + var y = new LatLng { Latitude = 51.5, Longitude = -0.12 }; + + _comparer.Equals(x, y).Should().BeTrue(); + _comparer.GetHashCode(x).Should().Be(_comparer.GetHashCode(y)); + } + + [Fact] + public void ShouldNotBeEqualWhenLatitudeDiffers() + { + var x = new LatLng { Latitude = 51.5, Longitude = -0.12 }; + var y = new LatLng { Latitude = 52.5, Longitude = -0.12 }; + + _comparer.Equals(x, y).Should().BeFalse(); + } + + [Fact] + public void ShouldNotBeEqualWhenLongitudeDiffers() + { + var x = new LatLng { Latitude = 51.5, Longitude = -0.12 }; + var y = new LatLng { Latitude = 51.5, Longitude = 1.5 }; + + _comparer.Equals(x, y).Should().BeFalse(); + } + + [Fact] + public void ShouldNotBeEqualWhenOtherLongitudeMatchesLatitude() + { + // Regression: longitude was compared against the other point's latitude + var x = new LatLng { Latitude = 10, Longitude = 10 }; + var y = new LatLng { Latitude = 10, Longitude = 20 }; + + _comparer.Equals(x, y).Should().BeFalse(); + } + + [Fact] + public void ShouldBeEqualWhenBothNull() => + _comparer.Equals(null, null).Should().BeTrue(); + + [Fact] + public void ShouldNotBeEqualWhenOneIsNull() + { + var x = new LatLng { Latitude = 51.5, Longitude = -0.12 }; + + _comparer.Equals(x, null).Should().BeFalse(); + _comparer.Equals(null, x).Should().BeFalse(); + } +} diff --git a/src/Appy.Spatial.GeoJSON/LatLng.cs b/src/Appy.Spatial.GeoJSON/LatLng.cs index 2aed527..2712c54 100644 --- a/src/Appy.Spatial.GeoJSON/LatLng.cs +++ b/src/Appy.Spatial.GeoJSON/LatLng.cs @@ -14,7 +14,7 @@ public class LatLngComparer : IEqualityComparer { public bool Equals(LatLng x, LatLng y) => x == null && y == null || - x != null && y != null && x.Latitude.Equals(y.Latitude) && x.Longitude.Equals(y.Latitude); + x != null && y != null && x.Latitude.Equals(y.Latitude) && x.Longitude.Equals(y.Longitude); public int GetHashCode(LatLng obj) => obj.Latitude.GetHashCode() + diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets index b95c04b..8d0579f 100644 --- a/src/Directory.Build.targets +++ b/src/Directory.Build.targets @@ -1,7 +1,7 @@ true - 2.0.0 + 2.0.1