Files
2026-08-07 19:59:27 +05:30

79 lines
2.2 KiB
Python

import unittest
import numpy as np
from surveyladder.geo import chainage_to_xy, chainage_offset_to_xy, poly_area, poly_centroid, trilaterate_xy
class TestPolyArea(unittest.TestCase):
def test_poly_area(self):
polygon = np.array([[0, 0], [4, 0], [4, 3]])
self.assertEqual(poly_area(polygon), 6)
class TestTrilaterateXY(unittest.TestCase):
def test_trilaterate_xy_on_line(self):
A = np.array([0, 0])
B = np.array([10, 0])
a = 5
b = 5
C = trilaterate_xy(A, a, B, b)
np.testing.assert_almost_equal(C, [5, 0])
def test_trilaterate_xy_right_triangle(self):
A = np.array([0, 0])
B = np.array([4, 0])
a = 5
b = 3
C = trilaterate_xy(A, a, B, b)
np.testing.assert_almost_equal(C, [4, 3])
def test_trilaterate_xy_right_triangle_swapped(self):
A = np.array([4, 0])
B = np.array([0, 0])
a = 3
b = 5
C = trilaterate_xy(A, a, B, b)
np.testing.assert_almost_equal(C, [4, -3])
class TestChainageToXY(unittest.TestCase):
def test_positive_distance(self):
np.testing.assert_almost_equal(
chainage_to_xy(np.array([3, 5]), np.array([6, 9]), 10),
[9, 13])
def test_negative_distance(self):
np.testing.assert_almost_equal(
chainage_to_xy(np.array([3, 5]), np.array([6, 9]), -5),
[0, 1])
class TestChainageOffsetToXY(unittest.TestCase):
def test_positive_offset(self):
A = np.array([0, 0])
B = np.array([0, 1])
a_distance = 5
perp_distance = 2
P = chainage_offset_to_xy(A, B, a_distance, perp_distance)
np.testing.assert_almost_equal(P, [-2, 5])
class TestPolyCentroid(unittest.TestCase):
def test_pos_square(self):
# mathematically positive point ordering
poly = np.array([[0,0], [1,0], [1,2], [0,2]])
np.testing.assert_almost_equal(poly_centroid(poly), [0.5, 1])
def test_neg_square(self):
# mathematically negative point ordering
poly = np.array([[0,0], [1,0], [1,-2], [0,-2]])
np.testing.assert_almost_equal(poly_centroid(poly), [0.5, -1])
unittest.main()