mirror of
https://github.com/python/cpython.git
synced 2025-12-31 04:23:37 +00:00
gh-102837: improve test coverage for math module (#102523)
- input checks for math_1(L989), math_1a(L1023), math_2(L1064,L1071), hypot(L2682), log(L2307), ldexp(L2168), ceil(L1165), floor(L1236,L1239) and dist(L2587,L2588,L2628).
- drop inaccessible "if" branch (L3518) in perm_comb_small()
- improve fsum coverage for exceptional cases (L1433,L1438,L1451,L1497), ditto fmod(L2378)
- rewrite modf to fix inaccessible case(L2229), ditto for pow(L2988)
(all line numbers are wrt the main branch at 5e6661bce9)
This commit is contained in:
parent
f373c6b948
commit
9c995abd78
2 changed files with 48 additions and 10 deletions
|
|
@ -2195,12 +2195,10 @@ math_modf_impl(PyObject *module, double x)
|
|||
double y;
|
||||
/* some platforms don't do the right thing for NaNs and
|
||||
infinities, so we take care of special cases directly. */
|
||||
if (!Py_IS_FINITE(x)) {
|
||||
if (Py_IS_INFINITY(x))
|
||||
return Py_BuildValue("(dd)", copysign(0., x), x);
|
||||
else if (Py_IS_NAN(x))
|
||||
return Py_BuildValue("(dd)", x, x);
|
||||
}
|
||||
if (Py_IS_INFINITY(x))
|
||||
return Py_BuildValue("(dd)", copysign(0., x), x);
|
||||
else if (Py_IS_NAN(x))
|
||||
return Py_BuildValue("(dd)", x, x);
|
||||
|
||||
errno = 0;
|
||||
x = modf(x, &y);
|
||||
|
|
@ -2950,7 +2948,8 @@ math_pow_impl(PyObject *module, double x, double y)
|
|||
else /* y < 0. */
|
||||
r = odd_y ? copysign(0., x) : 0.;
|
||||
}
|
||||
else if (Py_IS_INFINITY(y)) {
|
||||
else {
|
||||
assert(Py_IS_INFINITY(y));
|
||||
if (fabs(x) == 1.0)
|
||||
r = 1.;
|
||||
else if (y > 0. && fabs(x) > 1.0)
|
||||
|
|
@ -3480,9 +3479,7 @@ static const uint8_t factorial_trailing_zeros[] = {
|
|||
static PyObject *
|
||||
perm_comb_small(unsigned long long n, unsigned long long k, int iscomb)
|
||||
{
|
||||
if (k == 0) {
|
||||
return PyLong_FromLong(1);
|
||||
}
|
||||
assert(k != 0);
|
||||
|
||||
/* For small enough n and k the result fits in the 64-bit range and can
|
||||
* be calculated without allocating intermediate PyLong objects. */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue