MCPcopy Index your code
hub / github.com/python/cpython / test_nextafter

Method test_nextafter

Lib/test/test_math.py:2318–2374  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 4

assertEqualSignMethod · 0.95
assertIsNaNMethod · 0.95
assertEqualMethod · 0.45
assertRaisesMethod · 0.45

Tested by

no test coverage detected