45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
|
|
from django.test import SimpleTestCase, override_settings
|
||
|
|
|
||
|
|
from location_data.block_subdivision import (
|
||
|
|
build_block_subdivision_payload,
|
||
|
|
detect_elbow_point,
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
@override_settings(SUBDIVISION_CHUNK_SQM=100)
|
||
|
|
class BlockSubdivisionServiceTests(SimpleTestCase):
|
||
|
|
def test_detect_elbow_point_from_sse_curve(self):
|
||
|
|
inertia_curve = [
|
||
|
|
{"k": 1, "sse": 1000.0},
|
||
|
|
{"k": 2, "sse": 400.0},
|
||
|
|
{"k": 3, "sse": 220.0},
|
||
|
|
{"k": 4, "sse": 180.0},
|
||
|
|
]
|
||
|
|
|
||
|
|
optimal_k = detect_elbow_point(inertia_curve)
|
||
|
|
|
||
|
|
self.assertEqual(optimal_k, 2)
|
||
|
|
|
||
|
|
def test_build_block_subdivision_payload_returns_grid_and_centroids(self):
|
||
|
|
boundary = {
|
||
|
|
"type": "Polygon",
|
||
|
|
"coordinates": [
|
||
|
|
[
|
||
|
|
[51.3890, 35.6890],
|
||
|
|
[51.3902, 35.6890],
|
||
|
|
[51.3902, 35.6900],
|
||
|
|
[51.3890, 35.6900],
|
||
|
|
[51.3890, 35.6890],
|
||
|
|
]
|
||
|
|
],
|
||
|
|
}
|
||
|
|
|
||
|
|
result = build_block_subdivision_payload(boundary, block_code="block-1")
|
||
|
|
|
||
|
|
self.assertEqual(result["block_code"], "block-1")
|
||
|
|
self.assertEqual(result["chunk_size_sqm"], 100)
|
||
|
|
self.assertGreater(result["grid_point_count"], 0)
|
||
|
|
self.assertGreater(result["centroid_count"], 0)
|
||
|
|
self.assertIn("optimal_k", result["metadata"])
|
||
|
|
self.assertTrue(result["metadata"]["inertia_curve"])
|