Commit db81ba13 authored by Raymond Hettinger's avatar Raymond Hettinger Committed by GitHub

bpo-36546: More tests: type preservation and equal inputs (#13000)

parent 86f0c821
...@@ -2153,12 +2153,11 @@ class TestQuantiles(unittest.TestCase): ...@@ -2153,12 +2153,11 @@ class TestQuantiles(unittest.TestCase):
]: ]:
self.assertEqual(expected, quantiles(data, n=n)) self.assertEqual(expected, quantiles(data, n=n))
self.assertEqual(len(quantiles(data, n=n)), n - 1) self.assertEqual(len(quantiles(data, n=n)), n - 1)
self.assertEqual(list(map(float, expected)), # Preserve datatype when possible
quantiles(map(Decimal, data), n=n)) for datatype in (float, Decimal, Fraction):
self.assertEqual(list(map(Decimal, expected)), result = quantiles(map(datatype, data), n=n)
quantiles(map(Decimal, data), n=n)) self.assertTrue(all(type(x) == datatype) for x in result)
self.assertEqual(list(map(Fraction, expected)), self.assertEqual(result, list(map(datatype, expected)))
quantiles(map(Fraction, data), n=n))
# Invariant under tranlation and scaling # Invariant under tranlation and scaling
def f(x): def f(x):
return 3.5 * x - 1234.675 return 3.5 * x - 1234.675
...@@ -2199,12 +2198,11 @@ class TestQuantiles(unittest.TestCase): ...@@ -2199,12 +2198,11 @@ class TestQuantiles(unittest.TestCase):
]: ]:
self.assertEqual(expected, quantiles(data, n=n, method="inclusive")) self.assertEqual(expected, quantiles(data, n=n, method="inclusive"))
self.assertEqual(len(quantiles(data, n=n, method="inclusive")), n - 1) self.assertEqual(len(quantiles(data, n=n, method="inclusive")), n - 1)
self.assertEqual(list(map(float, expected)), # Preserve datatype when possible
quantiles(map(Decimal, data), n=n, method="inclusive")) for datatype in (float, Decimal, Fraction):
self.assertEqual(list(map(Decimal, expected)), result = quantiles(map(datatype, data), n=n, method="inclusive")
quantiles(map(Decimal, data), n=n, method="inclusive")) self.assertTrue(all(type(x) == datatype) for x in result)
self.assertEqual(list(map(Fraction, expected)), self.assertEqual(result, list(map(datatype, expected)))
quantiles(map(Fraction, data), n=n, method="inclusive"))
# Invariant under tranlation and scaling # Invariant under tranlation and scaling
def f(x): def f(x):
return 3.5 * x - 1234.675 return 3.5 * x - 1234.675
...@@ -2222,6 +2220,14 @@ class TestQuantiles(unittest.TestCase): ...@@ -2222,6 +2220,14 @@ class TestQuantiles(unittest.TestCase):
self.assertTrue(all(math.isclose(e, a, abs_tol=0.0001) self.assertTrue(all(math.isclose(e, a, abs_tol=0.0001)
for e, a in zip(expected, actual))) for e, a in zip(expected, actual)))
def test_equal_inputs(self):
quantiles = statistics.quantiles
for n in range(2, 10):
data = [10.0] * n
self.assertEqual(quantiles(data), [10.0, 10.0, 10.0])
self.assertEqual(quantiles(data, method='inclusive'),
[10.0, 10.0, 10.0])
def test_equal_sized_groups(self): def test_equal_sized_groups(self):
quantiles = statistics.quantiles quantiles = statistics.quantiles
total = 10_000 total = 10_000
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment