def test_bearing_threshold(self): myconfig = Config(max_bear_deviation=10.0) reference = get_test_linelocation_3() decode(reference, self.reader, config=myconfig) too_strict_config = Config(max_bear_deviation=0.0) with self.assertRaises(LRDecodeError): decode(reference, self.reader, config=too_strict_config)
def test_observer_decode_poi(self): "Add a simple observer for decoding a valid POI with access point location" reference = get_test_poi() observer = SimpleObserver() decode(reference, self.reader, observer=observer) self.assertTrue(observer.candidates) self.assertListEqual( [route.success for route in observer.attempted_routes], [True])
def test_observer_decode_3_lrps(self): "Add a simple observer for decoding a line location of 3 lrps " observer = SimpleObserver() reference = get_test_linelocation_1() decode(reference, self.reader, observer=observer) self.assertTrue(observer.candidates) self.assertListEqual( [route.success for route in observer.attempted_routes], [True, True])
def test_decode_pointalongline(self): "Test a valid point along line location" # Get a list of 2 LRPs reference = get_test_pointalongline() pal: PointAlongLine = decode(reference, self.reader) coords = pal.coordinates() self.assertAlmostEqual(coords.lon, 13.4153, delta=0.0001) self.assertAlmostEqual(coords.lat, 52.5270, delta=0.0001)
def test_decode_poi(self): "Test decoding a valid POI with access point location" reference = get_test_poi() poi: PoiWithAccessPoint = decode(reference, self.reader) coords = poi.access_point_coordinates() self.assertAlmostEqual(coords.lon, 13.4153, delta=0.0001) self.assertAlmostEqual(coords.lat, 52.5270, delta=0.0001) self.assertEqual(poi.poi, Coordinates(13.414, 52.526))
def test_decode_midline(self): reference = get_test_linelocation_3() line_location = decode(reference, self.reader) coords = line_location.coordinates() self.assertEqual(len(coords), 2) for ((lon1, lat1), (lon2, lat2)) in zip(coords, [(13.411, 52.525), (13.413, 52.525)]): self.assertAlmostEqual(lon1, lon2) self.assertAlmostEqual(lat1, lat2)
def test_backtracking(self): myconfig = Config(search_radius=5, max_dnp_deviation=0.02) reference = get_test_linelocation_4() observer = SimpleObserver() location = decode(reference, self.reader, observer=observer, config=myconfig) lines = [l.line_id for l in location.lines] self.assertListEqual([20], lines) self.assertGreater(len(observer.failed_matches), 0)
def test_decode_offsets(self): "Decode a line location with offsets" reference = get_test_linelocation_1() reference = reference._replace(poffs=0.25) reference = reference._replace(noffs=0.75) path = decode(reference, self.reader) self.assertTrue(isinstance(path, LineLocation)) path = path.coordinates() self.assertEqual(len(path), 4) self.assertAlmostEqual(path[0].lon, 13.4126, delta=0.001) self.assertAlmostEqual(path[0].lat, 52.525, delta=0.001) self.assertAlmostEqual(path[1].lon, 13.414, delta=0.001) self.assertAlmostEqual(path[1].lat, 52.525, delta=0.001)
def test_decode_3_lrps(self): "Decode a line location of 3 LRPs" reference = get_test_linelocation_1() location = decode(reference, self.reader) self.assertTrue(isinstance(location, LineLocation)) lines = [l.line_id for l in location.lines] self.assertListEqual([1, 3, 4], lines) for (a, b) in zip(location.coordinates(), [ Coordinates(13.41, 52.525), Coordinates(13.414, 52.525), Coordinates(13.4145, 52.529), Coordinates(13.416, 52.525) ]): self.assertAlmostEqual(a.lon, b.lon, delta=0.00001) self.assertAlmostEqual(a.lat, b.lat, delta=0.00001)
def test_decode_coord(self): coord = Coordinates(13.0, 51.0) reference = GeoCoordinateLocationReference(coord) location = decode(reference, self.reader) self.assertAlmostEqual(coord.lon, location.lon) self.assertAlmostEqual(coord.lat, location.lat)
def test_decode_invalid_poi(self): "Test if decoding an invalid POI with access point location raises an error" reference = get_test_poi() reference = reference._replace(poffs=1500) with self.assertRaises(LRDecodeError): decode(reference, self.reader)
def test_decode_pointalong_raises(self): "Test an invalid point along line location with too high offset" # Get a list of 2 LRPs reference = get_test_invalid_pointalongline() with self.assertRaises(LRDecodeError): decode(reference, self.reader)
def test_inapt_reference_type(self): with self.assertRaises(LRDecodeError): decode("Hello", self.reader)
def test_decode_nopath(self): "Decode a line location where no short-enough path exists" reference = get_test_linelocation_2() with self.assertRaises(LRDecodeError): decode(reference, self.reader)