src/cs/Tests/Coordinate.Tests.cs

using Xunit;
using Prelude.Geodetic;
 
namespace CoordinateTests {
    public class UnitTests {
        [Theory]
        [InlineData(0, 0, "N", "E")]
        [InlineData(37, -111, "N", "W")]
        [InlineData(-41.25, 96.4, "S", "E")]
        public void Can_Assign_Cardinal_Directions(double lat, double lon, string NS, string EW) {
            var A = new Coordinate(lat, lon);
            Assert.Equal(new string[] { NS, EW }, A.Hemisphere);
        }
        [Theory]
        [InlineData(41.25, 96.0, 0, -501980.22547, 4776022.81393, 4183337.2134)]
        [InlineData(41.25, 96.0, 1000, -502058.81413, 4776770.53508, 4183996.55921)]
        [InlineData(41.25, 96.0, 10000, -502766.11207, 4783500.02543, 4189930.67155)]
        [InlineData(41.25, 96.0, 100000, -509839.09144, 4850794.92896, 4249271.79491)]
        public void Can_Convert_Geodetic_to_Cartesian(double lat, double lon, double height, double x, double y, double z) {
            var cartesian = Coordinate.ToCartesian(lat, lon, height);
            Assert.Equal(x, cartesian[0], 5);
            Assert.Equal(y, cartesian[1], 5);
            Assert.Equal(z, cartesian[2], 5);
        }
        [Theory]
        [InlineData(-501980.22547, 4776022.81393, 4183337.2134, 41.25, 96, 0)]
        [InlineData(-502058.81413, 4776770.53508, 4183996.55921, 41.25, 96, 1000)]
        [InlineData(-502766.11207, 4783500.02543, 4189930.67155, 41.25, 96, 10000)]
        [InlineData(-509839.09144, 4850794.92896, 4249271.79491, 41.25, 96, 100000)]
        public void Can_Convert_Cartesian_to_Geodetic(double x, double y, double z, double lat, double lon, double height) {
            var geodetic = Coordinate.ToGeodetic(x, y, z);
            Assert.Equal(lat, geodetic[0], 2);
            Assert.Equal(lon, geodetic[1], 2);
            Assert.Equal(height, geodetic[2], 2);
        }
        [Theory]
        [InlineData(32.7157, 32, 42, 56.52)]
        [InlineData(96, 96, 0, 0)]
        [InlineData(116.7762, 116, 46, 34.32)]
        [InlineData(-116.7762, -116, 46, 34.32)]
        public void Can_Convert_to_Sexgesimal(double decimalDegrees, double degrees, double minutes, double seconds) {
            var sexagesimal = Coordinate.ToSexagesimal(decimalDegrees);
            Assert.Equal(degrees, sexagesimal[0]);
            Assert.Equal(minutes, sexagesimal[1]);
            Assert.Equal(seconds, sexagesimal[2]);
        }
        [Theory]
        [InlineData(0, 0, 0, "0°0'0\"N 0°0'0\"E")]
        [InlineData(42.62, -123, 10, "42°37'12\"N 123°0'0\"W")]
        [InlineData(-12.75, 77, 10, "12°45'0\"S 77°0'0\"E")]
        [Trait("Category", "Instance")]
        public void Can_Override_ToString(double lat, double lon, double height, string expected) {
            var latlon = new Coordinate(lat, lon, height);
            Assert.Equal(expected, latlon.ToString());
        }
    }
}