Reduce precision on fixture points

This commit is contained in:
Juan Ignacio Sánchez Lara 2018-07-04 13:24:11 +02:00
parent 9856adb7ce
commit 754c364d22
2 changed files with 38 additions and 9 deletions

View File

@ -2,6 +2,29 @@ import os
import requests import requests
import json import json
from nose.tools import assert_true
# From https://www.python.org/dev/peps/pep-0485/#proposed-implementation
def isclose(a, b, rel_tol=1e-09, abs_tol=0.0):
return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
def assert_close_enough(xy_a, xy_b, rel_tol=0.0001, abs_tol=0.0005):
"""
Asserts that the given points are "close enough", in a square.
:param xy_a: Array of 2 elements, X and Y.
:param xy_b: Array of 2 elements, X and Y.
:param rel_tol: Relative tolerance. Default: 0.001 (0.1%).
:param abs_tol: Absolute tolerance. Default: 0.0005.
"""
for i in [0, 1]:
assert_true(isclose(xy_a[i], xy_b[i], rel_tol, abs_tol),
"Coord {} error: {} and {} are not closer than {}, {}".format(
i, xy_a[i], xy_b[i], rel_tol, abs_tol
))
class IntegrationTestHelper: class IntegrationTestHelper:
@ -34,3 +57,5 @@ class IntegrationTestHelper:
@classmethod @classmethod
def execute_query(cls, sql_api_url, query): def execute_query(cls, sql_api_url, query):
return cls.execute_query_raw(sql_api_url, query)['rows'][0] return cls.execute_query_raw(sql_api_url, query)['rows'][0]

View File

@ -5,7 +5,7 @@ from unittest import TestCase
from nose.tools import assert_raises from nose.tools import assert_raises
from nose.tools import assert_not_equal, assert_equal from nose.tools import assert_not_equal, assert_equal
from ..helpers.integration_test_helper import IntegrationTestHelper from ..helpers.integration_test_helper import IntegrationTestHelper
from ..helpers.integration_test_helper import assert_close_enough
class TestStreetFunctionsSetUp(TestCase): class TestStreetFunctionsSetUp(TestCase):
@ -104,7 +104,7 @@ class TestBulkStreetFunctions(TestStreetFunctionsSetUp):
1: self.fixture_points['Plaza Mayor, Valladolid'], 1: self.fixture_points['Plaza Mayor, Valladolid'],
2: self.fixture_points['Paseo Zorrilla, Valladolid'] 2: self.fixture_points['Paseo Zorrilla, Valladolid']
} }
assert_equal(self._x_y_by_cartodb_id(response), points_by_cartodb_id) self.assert_close_points(self._x_y_by_cartodb_id(response), points_by_cartodb_id)
def test_empty_columns(self): def test_empty_columns(self):
query = "select *, st_x(the_geom), st_y(the_geom) " \ query = "select *, st_x(the_geom), st_y(the_geom) " \
@ -115,7 +115,7 @@ class TestBulkStreetFunctions(TestStreetFunctionsSetUp):
"'address', '''''', '''''', '''''')" "'address', '''''', '''''', '''''')"
response = self._run_authenticated(query) response = self._run_authenticated(query)
assert_equal(self._x_y_by_cartodb_id(response)[1], assert_close_enough(self._x_y_by_cartodb_id(response)[1],
self.fixture_points['1901 amphitheatre parkway']) self.fixture_points['1901 amphitheatre parkway'])
def test_null_columns(self): def test_null_columns(self):
@ -127,7 +127,7 @@ class TestBulkStreetFunctions(TestStreetFunctionsSetUp):
"'address')" "'address')"
response = self._run_authenticated(query) response = self._run_authenticated(query)
assert_equal(self._x_y_by_cartodb_id(response)[1], assert_close_enough(self._x_y_by_cartodb_id(response)[1],
self.fixture_points['1901 amphitheatre parkway']) self.fixture_points['1901 amphitheatre parkway'])
def test_batching(self): def test_batching(self):
@ -146,7 +146,7 @@ class TestBulkStreetFunctions(TestStreetFunctionsSetUp):
2: self.fixture_points['1901 amphitheatre parkway'], 2: self.fixture_points['1901 amphitheatre parkway'],
3: self.fixture_points['1902 amphitheatre parkway'], 3: self.fixture_points['1902 amphitheatre parkway'],
} }
assert_equal(self._x_y_by_cartodb_id(response), points_by_cartodb_id) self.assert_close_points(self._x_y_by_cartodb_id(response), points_by_cartodb_id)
def test_city_column_geocoding(self): def test_city_column_geocoding(self):
query = "select *, st_x(the_geom), st_y(the_geom) " \ query = "select *, st_x(the_geom), st_y(the_geom) " \
@ -164,7 +164,7 @@ class TestBulkStreetFunctions(TestStreetFunctionsSetUp):
1: self.fixture_points['Valladolid'], 1: self.fixture_points['Valladolid'],
2: self.fixture_points['Madrid'] 2: self.fixture_points['Madrid']
} }
assert_equal(self._x_y_by_cartodb_id(response), points_by_cartodb_id) self.assert_close_points(self._x_y_by_cartodb_id(response), points_by_cartodb_id)
def test_free_text_geocoding(self): def test_free_text_geocoding(self):
query = "select *, st_x(the_geom), st_y(the_geom) " \ query = "select *, st_x(the_geom), st_y(the_geom) " \
@ -176,7 +176,7 @@ class TestBulkStreetFunctions(TestStreetFunctionsSetUp):
"'''Logroño, La Rioja, Spain''')" "'''Logroño, La Rioja, Spain''')"
response = self._run_authenticated(query) response = self._run_authenticated(query)
assert_equal(self._x_y_by_cartodb_id(response)[1], assert_close_enough(self._x_y_by_cartodb_id(response)[1],
self.fixture_points['Logroño, Spain']) self.fixture_points['Logroño, Spain'])
def test_templating_geocoding(self): def test_templating_geocoding(self):
@ -195,7 +195,7 @@ class TestBulkStreetFunctions(TestStreetFunctionsSetUp):
1: self.fixture_points['Logroño, Spain'], 1: self.fixture_points['Logroño, Spain'],
2: self.fixture_points['Logroño, Argentina'] 2: self.fixture_points['Logroño, Argentina']
} }
assert_equal(self._x_y_by_cartodb_id(response), points_by_cartodb_id) self.assert_close_points(self._x_y_by_cartodb_id(response), points_by_cartodb_id)
def test_template_with_two_columns_geocoding(self): def test_template_with_two_columns_geocoding(self):
query = "SELECT cartodb_id, st_x(the_geom), st_y(the_geom) from " \ query = "SELECT cartodb_id, st_x(the_geom), st_y(the_geom) from " \
@ -212,7 +212,7 @@ class TestBulkStreetFunctions(TestStreetFunctionsSetUp):
1: self.fixture_points['Valladolid, Mexico'], 1: self.fixture_points['Valladolid, Mexico'],
2: self.fixture_points['Valladolid, Spain'] 2: self.fixture_points['Valladolid, Spain']
} }
assert_equal(self._x_y_by_cartodb_id(response), points_by_cartodb_id) self.assert_close_points(self._x_y_by_cartodb_id(response), points_by_cartodb_id)
def test_large_batches(self): def test_large_batches(self):
""" """
@ -245,3 +245,7 @@ class TestBulkStreetFunctions(TestStreetFunctionsSetUp):
return {r['cartodb_id']: [r['st_x'], r['st_y']] return {r['cartodb_id']: [r['st_x'], r['st_y']]
for r in response['rows']} for r in response['rows']}
@staticmethod
def assert_close_points(points_a_by_cartodb_id, points_b_by_cartodb_id):
for cartodb_id, point in points_a_by_cartodb_id.iteritems():
assert_close_enough(point, points_b_by_cartodb_id[cartodb_id])