forked from hans/Nominatim
57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
# This file is part of Nominatim. (https://nominatim.org)
|
|
#
|
|
# Copyright (C) 2022 by the Nominatim developer community.
|
|
# For a full list of authors see the git log.
|
|
"""
|
|
Tests for centroid computation.
|
|
"""
|
|
import pytest
|
|
|
|
from nominatim.utils.centroid import PointsCentroid
|
|
|
|
def test_empty_set():
|
|
c = PointsCentroid()
|
|
|
|
with pytest.raises(ValueError, match='No points'):
|
|
c.centroid()
|
|
|
|
|
|
@pytest.mark.parametrize("centroid", [(0,0), (-1, 3), [0.0000032, 88.4938]])
|
|
def test_one_point_centroid(centroid):
|
|
c = PointsCentroid()
|
|
|
|
c += centroid
|
|
|
|
assert len(c.centroid()) == 2
|
|
assert c.centroid() == (pytest.approx(centroid[0]), pytest.approx(centroid[1]))
|
|
|
|
|
|
def test_multipoint_centroid():
|
|
c = PointsCentroid()
|
|
|
|
c += (20.0, -10.0)
|
|
assert c.centroid() == (pytest.approx(20.0), pytest.approx(-10.0))
|
|
c += (20.2, -9.0)
|
|
assert c.centroid() == (pytest.approx(20.1), pytest.approx(-9.5))
|
|
c += (20.2, -9.0)
|
|
assert c.centroid() == (pytest.approx(20.13333), pytest.approx(-9.333333))
|
|
|
|
|
|
def test_manypoint_centroid():
|
|
c = PointsCentroid()
|
|
|
|
for _ in range(10000):
|
|
c += (4.564732, -0.000034)
|
|
|
|
assert c.centroid() == (pytest.approx(4.564732), pytest.approx(-0.000034))
|
|
|
|
|
|
@pytest.mark.parametrize("param", ["aa", None, 5, [1, 2, 3], (3, None), ("a", 3.9)])
|
|
def test_add_non_tuple(param):
|
|
c = PointsCentroid()
|
|
|
|
with pytest.raises(ValueError, match='2-element tuples'):
|
|
c += param
|