Initial commit (clean, ignores in place)
This commit is contained in:
42
tests/test_distance_resolver.py
Normal file
42
tests/test_distance_resolver.py
Normal file
@@ -0,0 +1,42 @@
|
||||
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()
|
Reference in New Issue
Block a user