11import cmath
2+ import math
3+ import pytest
4+
25from electricpy .geometry import triangle
36from electricpy .geometry import Point
47from test import compare_points
@@ -66,4 +69,132 @@ def test_1(self):
6669 p2 = Point (1 , 0 )
6770 p3 = Point (1 * cmath .cos (cmath .pi / 3 ), 1 * cmath .sin (cmath .pi / 3 ))
6871 t = triangle .Triangle (p1 , p2 , p3 )
69- assert compare_points (t .circum_center (), Point (0.5 , cmath .sqrt (3 )/ 6 ))
72+ assert compare_points (t .circum_center (), Point (0.5 , cmath .sqrt (3 )/ 6 ))
73+
74+
75+ def test_triangle_perimeter_and_area ():
76+ p1 = Point (0 , 0 )
77+ p2 = Point (3 , 0 )
78+ p3 = Point (0 , 4 )
79+ t = triangle .Triangle (p1 , p2 , p3 )
80+ assert t .perimeter () == 12
81+ assert t .perimeters () == 12
82+ assert t .area () == 6
83+
84+
85+ def test_triangle_radii ():
86+ p1 = Point (0 , 0 )
87+ p2 = Point (3 , 0 )
88+ p3 = Point (0 , 4 )
89+ t = triangle .Triangle (p1 , p2 , p3 )
90+ assert t .in_radius () == 1
91+ assert t .circum_radius () == 2.5
92+
93+
94+ def test_triangle_invalid_points ():
95+ p1 = Point (0 , 0 )
96+ p2 = Point (1 , 1 )
97+ p3 = Point (2 , 2 )
98+ with pytest .raises (ValueError ):
99+ triangle .Triangle (p1 , p2 , p3 )
100+
101+
102+ def test_triangle_init_validation_and_helpers ():
103+ with pytest .raises (ValueError ):
104+ triangle .Triangle (Point (0 , 0 ), Point (1 , 0 ))
105+
106+ with pytest .raises (TypeError ):
107+ triangle .Triangle (Point (0 , 0 ), (1 , 0 ), Point (0 , 1 ))
108+
109+ with pytest .raises (ValueError ):
110+ triangle .Triangle (Point (0 , 0 ), Point (0 , 0 ), Point (1 , 1 ))
111+
112+ assert triangle ._as_float (1 ) == 1.0
113+ assert triangle ._as_float (1 + 1e-13j ) == 1.0
114+ with pytest .raises (ValueError ):
115+ triangle ._as_float (1 + 1e-3j )
116+
117+ assert triangle ._is_close (1.0 , 1.0 + 1e-10 )
118+ assert not triangle ._is_close (1.0 , 1.01 , rel_tol = 1e-6 , abs_tol = 1e-6 )
119+
120+ p0 = Point (0 , 0 )
121+ p1 = Point (2 , 0 )
122+ p2 = Point (0 , 2 )
123+ assert triangle ._triangle_twice_area (p0 , p1 , p2 ) == 4.0
124+
125+
126+ def test_triangle_area_and_centers_errors ():
127+ tri = object .__new__ (triangle .Triangle )
128+ tri .points = (Point (0 , 0 ), Point (1 , 0 ), Point (0 , 1 ))
129+ tri ._tol = 1e-12
130+ tri .a = 0.0
131+ tri .b = 0.0
132+ tri .c = 0.0
133+
134+ with pytest .raises (ValueError ):
135+ tri .in_center ()
136+
137+ with pytest .raises (ValueError ):
138+ tri .in_radius ()
139+
140+ tri2 = object .__new__ (triangle .Triangle )
141+ tri2 .points = (Point (0 , 0 ), Point (1 , 0 ), Point (0 , 1 ))
142+ tri2 ._tol = 1e-12
143+ tri2 .a = 1.0
144+ tri2 .b = 1.0
145+ tri2 .c = 3.0
146+
147+ with pytest .raises (ValueError ):
148+ tri2 .area ()
149+
150+ tri3 = object .__new__ (triangle .Triangle )
151+ tri3 .points = (Point (0 , 0 ), Point (1 , 0 ), Point (0 , 1 ))
152+ tri3 ._tol = 1e-12
153+ tri3 .a = 1.0
154+ tri3 .b = 1.0
155+ tri3 .c = 2.0
156+
157+ with pytest .raises (ValueError ):
158+ tri3 .circum_radius ()
159+
160+ tri4 = object .__new__ (triangle .Triangle )
161+ tri4 .points = (Point (0 , 0 ), Point (1 , 0 ), Point (0 , 1 ))
162+ tri4 ._tol = 1e-12
163+ tri4 .a = 1.0
164+ tri4 .b = 1.0
165+ tri4 .c = 2.0 + 1e-13
166+ assert tri4 .area () == 0.0
167+
168+
169+ def test_triangle_validation_helper ():
170+ tri = object .__new__ (triangle .Triangle )
171+ tri .points = (Point (0 , 0 ), Point (1 , 0 ), Point (2 , 0 ))
172+ tri ._tol = 1e-12
173+ tri .a = 1.0
174+ tri .b = 1.0
175+ tri .c = 2.1
176+ assert not tri ._Triangle__is_valid ()
177+
178+ tri .c = 2.0
179+ assert not tri ._Triangle__is_valid ()
180+
181+ tri .a = 1.0
182+ tri .b = 3.0
183+ tri .c = 1.0
184+ assert not tri ._Triangle__is_valid ()
185+
186+ tri .a = 3.0
187+ tri .b = 1.0
188+ tri .c = 1.0
189+ assert not tri ._Triangle__is_valid ()
190+
191+ tri .a = 1.0
192+ tri .b = 1.0
193+ tri .c = 1.0
194+ assert not tri ._Triangle__is_valid ()
195+
196+ tri .points = (Point (0 , 0 ), Point (1 , 0 ), Point (0 , 1 ))
197+ tri .a = math .sqrt (2 )
198+ tri .b = 1.0
199+ tri .c = 1.0
200+ assert tri ._Triangle__is_valid ()
0 commit comments