import ceylon.test {
	test,
	assertEquals
}

import examples.routemap {
	example,
	RouteMap,
	City,
	Route,
	period,
	km
}

import graph {
	Walk
}

"Test [[Walk]] using [[RouteMap]] [[example]]."
by ("ThorstenSeitz")
shared class WalkTests() {

	RouteMap routeMap = example.routeMap;

	// helper to determine unique route between two cities.
	Route route(String name, City from, City to) {
		Route? route = routeMap.edgesConnecting(from, to).find((Route route) => route.name == name);
		assert(is Route route);
		return route;
	}

	"Test [[Walk.distance]] with different [[weights|graph::Weights]]."
	test
	shared void walkDistances() {
		// define TravelRoute
		class TravelRoute(shared actual [Route*] edges) satisfies Walk<City,Route> {}
		// find legs for the travel route hamburg->berlin->leipzig
		Route hamburgBerlin = route("A24", example.hamburg, example.berlin);
		Route berlinLeipzig = route("A9", example.berlin, example.leipzig);
		// create travel route (= a Walk)
		TravelRoute travelRoute = TravelRoute([hamburgBerlin, berlinLeipzig]);
		// check different distances along that Walk
		assertEquals(travelRoute.distance(routeMap.distances), km(288+190));
		assertEquals(travelRoute.distance(routeMap.travelTimes), period(2, 54) + period(2, 11));
	}
}