Files
Mileage-Logger/tests/test_distance_resolver.py

42 lines
1.8 KiB
Python

import os
import unittest
from mileage_logger.logic.detect_itinerary import SiteConfig, haversine_distance
from mileage_logger.distance.resolve import DistanceResolver
CONFIG_PATH = os.path.join(os.path.dirname(__file__), "..", "config", "sites.yml")
ROUTES_PATH = os.path.join(os.path.dirname(__file__), "data", "routes_golden.csv")
class TestDistanceResolver(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.site_config = SiteConfig.from_yaml(CONFIG_PATH)
cls.resolver = DistanceResolver(route_csv_path=ROUTES_PATH)
def test_route_lookup(self):
origin = "Home"
dest = "Lingwood Primary Academy"
origin_site = self.site_config.by_canonical[origin]
dest_site = self.site_config.by_canonical[dest]
dist = self.resolver.resolve(origin, dest, (origin_site.lat, origin_site.lon), (dest_site.lat, dest_site.lon))
self.assertAlmostEqual(dist, 13.0, places=1)
# Second call should hit cache and return same
dist2 = self.resolver.resolve(origin, dest, (origin_site.lat, origin_site.lon), (dest_site.lat, dest_site.lon))
self.assertEqual(dist2, dist)
def test_fallback_haversine(self):
# Choose a pair not in the route catalogue
origin = "Lingwood Primary Academy"
dest = "Unity SP"
origin_site = self.site_config.by_canonical[origin]
dest_site = self.site_config.by_canonical[dest]
dist = self.resolver.resolve(origin, dest, (origin_site.lat, origin_site.lon), (dest_site.lat, dest_site.lon))
# Compute haversine expected
expected = haversine_distance(origin_site.lat, origin_site.lon, dest_site.lat, dest_site.lon)
self.assertAlmostEqual(dist, expected, places=1)
if __name__ == '__main__':
unittest.main()