|
17 | 17 |
|
18 | 18 | eps = 1E-05 |
19 | 19 | NAN = float('nan') |
| 20 | +NNAN = float('-nan') |
| 21 | +DNAN = decimal.Decimal("nan") |
| 22 | +DNNAN = decimal.Decimal("-nan") |
20 | 23 | INF = float('inf') |
21 | 24 | NINF = float('-inf') |
| 25 | +DINF = decimal.Decimal("inf") |
| 26 | +DNINF = decimal.Decimal("-inf") |
22 | 27 | FLOAT_MAX = sys.float_info.max |
23 | 28 | FLOAT_MIN = sys.float_info.min |
24 | 29 |
|
@@ -475,6 +480,14 @@ def testCopysign(self): |
475 | 480 | # similarly, copysign(2., NAN) could be 2. or -2. |
476 | 481 | self.assertEqual(abs(math.copysign(2., NAN)), 2.) |
477 | 482 |
|
| 483 | + def test_signbit(self): |
| 484 | + for arg in [0, 0., 1, 1., INF, NAN, DINF, DNAN]: |
| 485 | + with self.subTest('positive', arg=arg): |
| 486 | + self.assertFalse(math.signbit(arg)) |
| 487 | + for arg in [-0., -1, -1., NINF, NNAN, DNINF, DNNAN]: |
| 488 | + with self.subTest('negative', arg=arg): |
| 489 | + self.assertTrue(math.signbit(arg)) |
| 490 | + |
478 | 491 | def testCos(self): |
479 | 492 | self.assertRaises(TypeError, math.cos) |
480 | 493 | self.ftest('cos(-pi/2)', math.cos(-math.pi/2), 0, abs_tol=math.ulp(1)) |
@@ -1387,7 +1400,6 @@ def __rmul__(self, other): |
1387 | 1400 | args = ((-5, -5, 10), (1.5, 4611686018427387904, 2305843009213693952)) |
1388 | 1401 | self.assertEqual(sumprod(*args), 0.0) |
1389 | 1402 |
|
1390 | | - |
1391 | 1403 | @requires_IEEE_754 |
1392 | 1404 | @unittest.skipIf(HAVE_DOUBLE_ROUNDING, |
1393 | 1405 | "sumprod() accuracy not guaranteed on machines with double rounding") |
@@ -2486,7 +2498,6 @@ def test_nextafter(self): |
2486 | 2498 | with self.assertRaises(ValueError): |
2487 | 2499 | math.nextafter(1.0, INF, steps=-1) |
2488 | 2500 |
|
2489 | | - |
2490 | 2501 | @requires_IEEE_754 |
2491 | 2502 | def test_ulp(self): |
2492 | 2503 | self.assertEqual(math.ulp(1.0), sys.float_info.epsilon) |
|
0 commit comments