import unittest import ezdxf import numpy as np from pierzainer_ground.plan_registration import resolve_plan_registration class PlanRegistrationTests(unittest.TestCase): def fixture(self, duplicate=False): doc=ezdxf.new();controls=[];angle=.47 rotation=np.array([[np.cos(angle),np.sin(angle)],[-np.sin(angle),np.cos(angle)]]) for i,center in enumerate(([0,0],[45,1],[90,3],[140,6])): center=np.array(center,dtype=float) for offset in ([0,0],[0,30]) if duplicate else ([0,0],): corners=center+offset+np.array([[-1.2,-6],[1.2,-6],[1.2,6],[-1.2,6]]) doc.modelspace().add_lwpolyline(corners,close=True,dxfattribs={'layer':'교량'}) ends=np.array([center+[0,-6],center+[0,6]])@rotation+[200000,500000] controls.append({'id':f'P{i+1}','axis':ends[:,::-1].tolist()}) return doc,controls def test_all_original_centers_and_axes_register(self): doc,controls=self.fixture();result=resolve_plan_registration(doc,controls) self.assertEqual(result['status'],'registered') self.assertLess(max(result['solutions'][0]['residual_m']),1e-8) def test_inconsistent_holdout_pier_is_rejected(self): doc,controls=self.fixture() controls[1]['axis'][0][0]+=.4;controls[1]['axis'][1][0]+=.4 self.assertEqual(resolve_plan_registration(doc,controls)['status'],'no_verified_frame') def test_parallel_duplicate_layout_is_ambiguous(self): doc,controls=self.fixture(duplicate=True) self.assertEqual(resolve_plan_registration(doc,controls)['status'],'ambiguous') if __name__=='__main__':unittest.main()