Add more tests and assertions for math.hypot() and math.dist() (GH-8747)
This commit is contained in:
parent
4d12e4dc28
commit
00414597b4
|
@ -751,6 +751,10 @@ class MathTests(unittest.TestCase):
|
|||
self.assertEqual(1.0,
|
||||
math.copysign(1.0, hypot(-0.0)) # Convert negative zero to positive zero
|
||||
)
|
||||
self.assertEqual( # Handling of moving max to the end
|
||||
hypot(1.5, 1.5, 0.5),
|
||||
hypot(1.5, 0.5, 1.5),
|
||||
)
|
||||
|
||||
# Test handling of bad arguments
|
||||
with self.assertRaises(TypeError): # Reject keyword args
|
||||
|
@ -771,7 +775,7 @@ class MathTests(unittest.TestCase):
|
|||
self.assertEqual(hypot(-INF, -INF), INF)
|
||||
self.assertEqual(hypot(10, -INF), INF)
|
||||
|
||||
# If no infinity, any NaN gives a Nan.
|
||||
# If no infinity, any NaN gives a NaN.
|
||||
self.assertTrue(math.isnan(hypot(NAN)))
|
||||
self.assertTrue(math.isnan(hypot(0, NAN)))
|
||||
self.assertTrue(math.isnan(hypot(NAN, 10)))
|
||||
|
@ -831,9 +835,13 @@ class MathTests(unittest.TestCase):
|
|||
self.assertEqual(1.0, # Convert negative zero to positive zero
|
||||
math.copysign(1.0, dist((0.0,), (-0.0,)))
|
||||
)
|
||||
self.assertEqual( # Handling of moving max to the end
|
||||
dist((1.5, 1.5, 0.5), (0, 0, 0)),
|
||||
dist((1.5, 0.5, 1.5), (0, 0, 0))
|
||||
)
|
||||
|
||||
# Verify tuple subclasses are allowed
|
||||
class T(tuple): # tuple subclas
|
||||
class T(tuple):
|
||||
pass
|
||||
self.assertEqual(dist(T((1, 2, 3)), ((4, 2, -1))), 5.0)
|
||||
|
||||
|
@ -855,8 +863,7 @@ class MathTests(unittest.TestCase):
|
|||
with self.assertRaises(ValueError): # Check dimension agree
|
||||
dist((1, 2, 3), (4, 5, 6, 7))
|
||||
|
||||
|
||||
# Verify that the one dimensional case equivalent to abs()
|
||||
# Verify that the one dimensional case is equivalent to abs()
|
||||
for i in range(20):
|
||||
p, q = random.random(), random.random()
|
||||
self.assertEqual(dist((p,), (q,)), abs(p - q))
|
||||
|
@ -870,7 +877,7 @@ class MathTests(unittest.TestCase):
|
|||
# Any infinite difference gives positive infinity.
|
||||
self.assertEqual(dist(p, q), INF)
|
||||
elif any(map(math.isnan, diffs)):
|
||||
# If no infinity, any NaN gives a Nan.
|
||||
# If no infinity, any NaN gives a NaN.
|
||||
self.assertTrue(math.isnan(dist(p, q)))
|
||||
|
||||
# Verify scaling for extremely large values
|
||||
|
|
|
@ -2071,6 +2071,7 @@ vector_norm(Py_ssize_t n, double *vec, double max, int found_nan)
|
|||
assert(n > 0);
|
||||
for (i=0 ; i < n-1 ; i++) {
|
||||
x = vec[i];
|
||||
assert(Py_IS_FINITE(x) && x >= 0.0 && x <= max);
|
||||
if (x == max) {
|
||||
x = vec[n-1];
|
||||
vec[n-1] = max;
|
||||
|
|
Loading…
Reference in New Issue