@@ -1859,3 +1859,49 @@ def test_conj_conjugate_identity(func, value):
18591859 else :
18601860 assert result == x
18611861
1862+
1863+ @pytest .mark .parametrize ("x1,x2,expected" , [
1864+ # Basic Pythagorean triples
1865+ (3.0 , 4.0 , 5.0 ),
1866+ (5.0 , 12.0 , 13.0 ),
1867+ # Zero cases
1868+ (0.0 , 0.0 , 0.0 ),
1869+ (0.0 , 5.0 , 5.0 ),
1870+ (5.0 , 0.0 , 5.0 ),
1871+ # Negative values (hypot uses absolute values)
1872+ (- 3.0 , - 4.0 , 5.0 ),
1873+ (- 3.0 , 4.0 , 5.0 ),
1874+ (3.0 , - 4.0 , 5.0 ),
1875+ # Symmetry
1876+ (3.14159265358979323846 , 2.71828182845904523536 , None ), # Will test symmetry
1877+ (2.71828182845904523536 , 3.14159265358979323846 , None ), # Will test symmetry
1878+ # Infinity cases
1879+ (np .inf , 0.0 , np .inf ),
1880+ (0.0 , np .inf , np .inf ),
1881+ (np .inf , np .inf , np .inf ),
1882+ (- np .inf , 0.0 , np .inf ),
1883+ (np .inf , - np .inf , np .inf ),
1884+ # NaN cases
1885+ (np .nan , 3.0 , np .nan ),
1886+ (3.0 , np .nan , np .nan ),
1887+ (np .nan , np .nan , np .nan ),
1888+ ])
1889+ def test_hypot (x1 , x2 , expected ):
1890+ """Test hypot ufunc with various edge cases"""
1891+ q1 = QuadPrecision (x1 )
1892+ q2 = QuadPrecision (x2 )
1893+ result = np .hypot (q1 , q2 )
1894+
1895+ assert isinstance (result , QuadPrecision )
1896+
1897+ if expected is None :
1898+ # Symmetry test - just check the values are equal
1899+ result_reverse = np .hypot (q2 , q1 )
1900+ assert result == result_reverse
1901+ elif np .isnan (expected ):
1902+ assert np .isnan (float (result ))
1903+ elif np .isinf (expected ):
1904+ assert np .isinf (float (result ))
1905+ else :
1906+ np .testing .assert_allclose (float (result ), expected , rtol = 1e-13 )
1907+
0 commit comments