Dan Stace

using KSG.RoverTwo.Enums;
using KSG.RoverTwo.Helpers;
using KSG.RoverTwo.Models;

namespace KSG.RoverTwo.Tests;

public class LocationTests
{
	[Theory]
	[InlineData(0, 0, 1, 1, 2)]
	[InlineData(42.89, -74.58, 30.27, -97.74, 35.78)]
	public void ManhattanDistanceTo_Works(double x1, double y1, double x2, double y2, double expected)
	{
		var location = new Location() { X = x1, Y = y1 };
		var other = new Location() { X = x2, Y = y2 };
		var distance = Math.Round(location.ManhattanDistanceTo(other), 2);
		Assert.Equal(expected, distance);
	}

	[Theory]
	[InlineData(10, DistanceUnit.Foot, 3.048)]
	[InlineData(10, DistanceUnit.Metre, 10)]
	[InlineData(10, DistanceUnit.Ell, 11.43)]
	[InlineData(10, DistanceUnit.Fathom, 18.288)]
	[InlineData(10, DistanceUnit.Peninkulma, 60_000)]
	[InlineData(10, DistanceUnit.Rast, 100_000)]
	[InlineData(10, DistanceUnit.Degree, 1_110_000)]
	public void ConvertDistance_Works(double amount, DistanceUnit distanceUnit, double expectedMeters)
	{
		var meters = ConvertDistance.ToMeters(amount, distanceUnit);
		Assert.Equal(expectedMeters, meters);
		var distance = ConvertDistance.FromMeters(meters, distanceUnit);
		Assert.Equal(distance, amount);
	}
}