@@ -281,31 +281,32 @@ def test_py_c_abs(self):
281281 # Test _Py_c_abs()
282282 _py_c_abs = _testcapi ._py_c_abs
283283
284- try :
285- _testcapi . set_errno ( 0 )
286- self . assertEqual ( _py_c_abs ( - 1 ), ( 1.0 , 0 ))
284+ def c_abs ( num ) :
285+ # On success, _Py_c_abs() doesn't use errno and leaves errno
286+ # unchanged
287287 _testcapi .set_errno (0 )
288- self .assertEqual (_py_c_abs (1j ), (1.0 , 0 ))
289-
290- _testcapi .set_errno (0 )
291- self .assertEqual (_py_c_abs (complex ('+inf+1j' )), (INF , 0 ))
292- _testcapi .set_errno (0 )
293- self .assertEqual (_py_c_abs (complex ('-inf+1j' )), (INF , 0 ))
294- _testcapi .set_errno (0 )
295- self .assertEqual (_py_c_abs (complex ('1.25+infj' )), (INF , 0 ))
296- _testcapi .set_errno (0 )
297- self .assertEqual (_py_c_abs (complex ('1.25-infj' )), (INF , 0 ))
298-
299- _testcapi .set_errno (0 )
300- self .assertTrue (isnan (_py_c_abs (complex ('1.25+nanj' ))[0 ]))
301- _testcapi .set_errno (0 )
302- self .assertTrue (isnan (_py_c_abs (complex ('nan-1j' ))[0 ]))
288+ result , errno = _py_c_abs (num )
289+ self .assertEqual (errno , 0 )
290+ return result
303291
292+ try :
293+ self .assertEqual (c_abs (- 1 ), 1.0 )
294+ self .assertEqual (c_abs (1j ), 1.0 )
295+ self .assertEqual (c_abs (complex ('+inf+1j' )), INF )
296+ self .assertEqual (c_abs (complex ('-inf+1j' )), INF )
297+ self .assertEqual (c_abs (complex ('1.25+infj' )), INF )
298+ self .assertEqual (c_abs (complex ('1.25-infj' )), INF )
299+ self .assertTrue (isnan (c_abs (complex ('1.25+nanj' ))))
300+ self .assertTrue (isnan (c_abs (complex ('nan-1j' ))))
301+
302+ # Set errno to ERANGE on overflow
304303 _testcapi .set_errno (0 )
305- self .assertEqual (_py_c_abs (complex (* [DBL_MAX ]* 2 ))[1 ], errno .ERANGE )
304+ self .assertEqual (_py_c_abs (complex (* [DBL_MAX ]* 2 )),
305+ (INF , errno .ERANGE ))
306306
307- _testcapi .set_errno (errno .EACCES ) # preserve errno
308- self .assertEqual (_py_c_abs (1j ), (1 , errno .EACCES ))
307+ # Preserve errno on success
308+ _testcapi .set_errno (errno .EACCES )
309+ self .assertEqual (_py_c_abs (1j ), (1.0 , errno .EACCES ))
309310 finally :
310311 _testcapi .set_errno (0 )
311312
0 commit comments