(self)
| 2316 | |
| 2317 | @requires_IEEE_754 |
| 2318 | def test_nextafter(self): |
| 2319 | # around 2^52 and 2^63 |
| 2320 | self.assertEqual(math.nextafter(4503599627370496.0, -INF), |
| 2321 | 4503599627370495.5) |
| 2322 | self.assertEqual(math.nextafter(4503599627370496.0, INF), |
| 2323 | 4503599627370497.0) |
| 2324 | self.assertEqual(math.nextafter(9223372036854775808.0, 0.0), |
| 2325 | 9223372036854774784.0) |
| 2326 | self.assertEqual(math.nextafter(-9223372036854775808.0, 0.0), |
| 2327 | -9223372036854774784.0) |
| 2328 | |
| 2329 | # around 1.0 |
| 2330 | self.assertEqual(math.nextafter(1.0, -INF), |
| 2331 | float.fromhex('0x1.fffffffffffffp-1')) |
| 2332 | self.assertEqual(math.nextafter(1.0, INF), |
| 2333 | float.fromhex('0x1.0000000000001p+0')) |
| 2334 | self.assertEqual(math.nextafter(1.0, -INF, steps=1), |
| 2335 | float.fromhex('0x1.fffffffffffffp-1')) |
| 2336 | self.assertEqual(math.nextafter(1.0, INF, steps=1), |
| 2337 | float.fromhex('0x1.0000000000001p+0')) |
| 2338 | self.assertEqual(math.nextafter(1.0, -INF, steps=3), |
| 2339 | float.fromhex('0x1.ffffffffffffdp-1')) |
| 2340 | self.assertEqual(math.nextafter(1.0, INF, steps=3), |
| 2341 | float.fromhex('0x1.0000000000003p+0')) |
| 2342 | |
| 2343 | # x == y: y is returned |
| 2344 | for steps in range(1, 5): |
| 2345 | self.assertEqual(math.nextafter(2.0, 2.0, steps=steps), 2.0) |
| 2346 | self.assertEqualSign(math.nextafter(-0.0, +0.0, steps=steps), +0.0) |
| 2347 | self.assertEqualSign(math.nextafter(+0.0, -0.0, steps=steps), -0.0) |
| 2348 | |
| 2349 | # around 0.0 |
| 2350 | smallest_subnormal = sys.float_info.min * sys.float_info.epsilon |
| 2351 | self.assertEqual(math.nextafter(+0.0, INF), smallest_subnormal) |
| 2352 | self.assertEqual(math.nextafter(-0.0, INF), smallest_subnormal) |
| 2353 | self.assertEqual(math.nextafter(+0.0, -INF), -smallest_subnormal) |
| 2354 | self.assertEqual(math.nextafter(-0.0, -INF), -smallest_subnormal) |
| 2355 | self.assertEqualSign(math.nextafter(smallest_subnormal, +0.0), +0.0) |
| 2356 | self.assertEqualSign(math.nextafter(-smallest_subnormal, +0.0), -0.0) |
| 2357 | self.assertEqualSign(math.nextafter(smallest_subnormal, -0.0), +0.0) |
| 2358 | self.assertEqualSign(math.nextafter(-smallest_subnormal, -0.0), -0.0) |
| 2359 | |
| 2360 | # around infinity |
| 2361 | largest_normal = sys.float_info.max |
| 2362 | self.assertEqual(math.nextafter(INF, 0.0), largest_normal) |
| 2363 | self.assertEqual(math.nextafter(-INF, 0.0), -largest_normal) |
| 2364 | self.assertEqual(math.nextafter(largest_normal, INF), INF) |
| 2365 | self.assertEqual(math.nextafter(-largest_normal, -INF), -INF) |
| 2366 | |
| 2367 | # NaN |
| 2368 | self.assertIsNaN(math.nextafter(NAN, 1.0)) |
| 2369 | self.assertIsNaN(math.nextafter(1.0, NAN)) |
| 2370 | self.assertIsNaN(math.nextafter(NAN, NAN)) |
| 2371 | |
| 2372 | self.assertEqual(1.0, math.nextafter(1.0, INF, steps=0)) |
| 2373 | with self.assertRaises(ValueError): |
| 2374 | math.nextafter(1.0, INF, steps=-1) |
| 2375 |
nothing calls this directly
no test coverage detected