Spaces:
Running on Zero
Running on Zero
| """Brick 0 tests: plain routing, geocoding, and bounds handling.""" | |
| from __future__ import annotations | |
| import pytest | |
| from discoverroute import config | |
| from discoverroute.routing import graph as g | |
| from discoverroute.routing.graph import RouteError | |
| # Known Paris points. | |
| REPUBLIQUE = (48.8674, 2.3636) | |
| LUXEMBOURG = (48.8462, 2.3372) | |
| LONDON = (51.5074, -0.1278) # out of bounds | |
| graph_available = pytest.mark.skipif( | |
| not config.GRAPH_WALK_PATH.exists(), | |
| reason="Paris graph not built (run: python -m discoverroute.data.build_graph)", | |
| ) | |
| def test_latlon_parsing(): | |
| assert g._try_parse_latlon("48.8674, 2.3636") == (48.8674, 2.3636) | |
| assert g._try_parse_latlon("48.8674; 2.3636") == (48.8674, 2.3636) | |
| assert g._try_parse_latlon("not a point") is None | |
| def test_in_paris_bounds(): | |
| assert config.in_paris(*REPUBLIQUE) | |
| assert config.in_paris(*LUXEMBOURG) | |
| assert not config.in_paris(*LONDON) | |
| def test_geocode_accepts_world_latlon(): | |
| # World support: an explicit lat/lon anywhere on Earth resolves (no network). | |
| lat, lon = g.geocode_point(f"{LONDON[0]}, {LONDON[1]}") | |
| assert abs(lat - LONDON[0]) < 1e-6 and abs(lon - LONDON[1]) < 1e-6 | |
| def test_geocode_rejects_invalid_latlon(): | |
| with pytest.raises(RouteError): | |
| g.geocode_point("123.0, 999.0") # out of valid coordinate range | |
| def test_geocode_empty(): | |
| with pytest.raises(RouteError): | |
| g.geocode_point("") | |
| def test_speed_model(): | |
| # walk is slower than bike => walking takes longer for the same distance | |
| assert config.speed_ms("walk") < config.speed_ms("bike") | |
| def test_plain_route_connected(): | |
| graph = g.load_graph() | |
| route = g.plain_route(graph, *REPUBLIQUE, *LUXEMBOURG, mode="walk") | |
| assert route.distance_m > 0 | |
| assert route.time_s > 0 | |
| assert len(route.coords) >= 2 | |
| # The straight-line distance is ~2.4 km; a real walk path is longer, not shorter. | |
| assert route.distance_m >= 2000 | |
| def test_bike_faster_than_walk_same_route(): | |
| graph = g.load_graph() | |
| walk = g.plain_route(graph, *REPUBLIQUE, *LUXEMBOURG, mode="walk") | |
| bike = g.plain_route(graph, *REPUBLIQUE, *LUXEMBOURG, mode="bike") | |
| assert bike.time_s < walk.time_s | |