public void BearingTest() { List <GpsLocation> inputLocations = new List <GpsLocation>() { new GpsLocation(0.0m, 0.0m), // Zero GPS coordinates, south of Ghana new GpsLocation(40.748456m, 175.985478m), // North Pacific Ocean new GpsLocation(89.1m, -115.122701m), // Close to North Pole new GpsLocation(73.507778m, 80.537315m), // Dikson Island, Russia }; List <double> expectedInitialBearings = new List <double>() { // Zero GPS to 4.645278, // North Pacific Ocean 359.185, // Close to North Pole 16.279722, // Dikson Island // North Pacific Ocean to 1.113611, // Close to North Pole 339.201389, // Dikson Island // Cose to North Pole to 345.118889, // Dikson Island }; List <double> expectedFinalBearings = new List <double>() { // Zero GPS to 173.863333, // North Pacific Ocean 244.88, // Close to North Pole 80.92, // Dikson Island // North Pacific Ocean to 69.621111, // Close to North Pole 251.368056, // Dikson Island // Cose to North Pole to 180.814167, // Dikson Island }; int index = 0; for (int i = 0; i < inputLocations.Count - 1; i++) { GpsLocation locFrom = inputLocations[i]; for (int j = i + 1; j < inputLocations.Count; j++) { GpsLocation locTo = inputLocations[j]; double initialBearing = locFrom.InitialBearingTo(locTo); double finalBearing = locFrom.FinalBearingTo(locTo); Assert.True(initialBearing.ApproxEqual(expectedInitialBearings[index], 0.0003)); Assert.True(finalBearing.ApproxEqual(expectedFinalBearings[index], 0.0003)); index++; } } }