diff --git a/urbantz/tests/test_coordinates.py b/urbantz/tests/test_coordinates.py index 50f2712..4766f9c 100644 --- a/urbantz/tests/test_coordinates.py +++ b/urbantz/tests/test_coordinates.py @@ -1,5 +1,5 @@ from unittest import TestCase -from math import trunc, floor, ceil +from math import trunc, floor, ceil, radians from urbantz.utils import Coordinates @@ -59,5 +59,30 @@ class TestCoordinates(TestCase): def test_ceil(self): self.assertTupleEqual(tuple(ceil(self.coords)), (13, -13)) + def test_add(self): + other = Coordinates(lat=7.43, lng=-6.51) + self.assertEqual(self.coords + other, Coordinates(lat=20, lng=-20)) + with self.assertRaises(TypeError): + self.coords + 4 + + def test_sub(self): + other = Coordinates(lat=2.57, lng=-3.49) + self.assertEqual(self.coords - other, Coordinates(lat=10, lng=-10)) + with self.assertRaises(TypeError): + self.coords - "lol" + def test_toJSON(self): self.assertListEqual(self.coords.toJSON(), [-13.49, 12.57]) + + def test_fromJSON(self): + self.assertEqual(Coordinates.fromJSON([-13.49, 12.57]), self.coords) + + def test_to_radians(self): + self.assertTupleEqual(self.coords.to_radians(), (radians(12.57), radians(-13.49))) + + def test_distance(self): + other = Coordinates(lat=2.57, lng=-3.49) + self.assertEqual(self.coords.distance(other), other.distance(self.coords)) + self.assertEqual(self.coords.distance(other), 1564640.3229974532) + with self.assertRaises(NotImplementedError): + self.coords.distance("lol") diff --git a/urbantz/utils.py b/urbantz/utils.py index 49888d5..dfbb5af 100644 --- a/urbantz/utils.py +++ b/urbantz/utils.py @@ -42,7 +42,7 @@ class Coordinates(object): tuple(self) == tuple(other) def __add__(self, other): - if not hasattr(other, 'lat') or hasattr(other, 'lng'): + if not hasattr(other, 'lat') or not hasattr(other, 'lng'): return NotImplemented return self.__class__( lat=self.lat + other.lat, @@ -50,7 +50,7 @@ class Coordinates(object): ) def __sub__(self, other): - if not hasattr(other, 'lat') or hasattr(other, 'lng'): + if not hasattr(other, 'lat') or not hasattr(other, 'lng'): return NotImplemented return self.__class__( lat=self.lat - other.lat,