Время в пути не учитывает кратчайший путь, но путешествие по одной и той же железнодорожной линии через несколько станций.
public double TravelTimeOnSameLine(IStation from, IStation to, int speed)
{
//check values
if (from == to || from == null || to == null || speed <= 0)
throw new ArgumentException();
var commonLines = from.Lines.Intersect(to.Lines);
if (!commonLines.Any())
{
throw new ArgumentException();
}
var line = commonLines.First();
var distance = 0.0;
//how to fimd the path?
var path = new List<IStation>();
var current = from;
path.Add(from);
while (current != to)
{
current = line.Next(current);
path.Add(current);
}
for (int i = 0; i < path.Count; i++)
{
IStation firstStation = null;
IStation secondStation = null;
firstStation = from;
secondStation = to;
//calcul de distance entre deux points;
var distanceBetween1and2 = GetDistancebtween(firstStation.X, firstStation.Y, secondStation.X, secondStation.Y);
distance = distance + distanceBetween1and2;
}
var travelTime = distance / speed;
return travelTime;
}
Я пытаюсь пройти последние юнит-тесты (строки кода 12-16, где разная скорость используется для одинакового расстояния и последней строки с добавлением нескольких станций на одной линии поезда, которые графически не находятся на одной и той же горизонтальной или вертикальной линии), и мне не хватает вычисления, когда я считаю время в пути на нескольких станциях.
public void T2_travel_time_on_simple_stations()
{
ICity c = CityFactory.CreateCity("Paris");
IStation s = c.AddStation("Opera", 0, 0);
IStation s1 = c.AddStation("Chatelet", 10, 0);
ILine l = c.AddLine("RER A");
l.AddBefore(s);
l.AddBefore(s1);
c.TravelTimeOnSameLine( s, s1, 1).Should().Be(10.0);
c.TravelTimeOnSameLine( s, s1, 10).Should().Be(1.0);
c.TravelTimeOnSameLine( s, s1, 100).Should().Be(0.1);
c.TravelTimeOnSameLine( s, s1, 20).Should().Be(0.5);
c.TravelTimeOnSameLine( s, s1, 20).Should().Be(c.TravelTimeOnSameLine( s1, s, 20));
}
[Test]
public void T3_travel_time_on_more_stations()
{
ICity city = CityFactory.CreateCity("Paris");
IStation a = city.AddStation("A", 0, 0);
IStation b = city.AddStation("B", 0, 10);
IStation c = city.AddStation("C", 10, 10);
IStation d = city.AddStation("D", 10, 0);
ILine l1 = city.AddLine("ligne 1");
l1.AddBefore(a);
l1.AddBefore(b);
l1.AddBefore(c);
l1.AddBefore(d);
city.TravelTimeOnSameLine( a, d, 1).Should().Be(30.0);
}
Сообщение об ошибке Ожидаемое значение 10,0, но найдено 20,0.