mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-36018: Test idempotence. Test two methods against one-another. (GH-13021)
This commit is contained in:
parent
ee0309f3d8
commit
b0a2c0fa83
1 changed files with 23 additions and 0 deletions
|
@ -2158,6 +2158,20 @@ class TestQuantiles(unittest.TestCase):
|
|||
result = quantiles(map(datatype, data), n=n)
|
||||
self.assertTrue(all(type(x) == datatype) for x in result)
|
||||
self.assertEqual(result, list(map(datatype, expected)))
|
||||
# Quantiles should be idempotent
|
||||
if len(expected) >= 2:
|
||||
self.assertEqual(quantiles(expected, n=n), expected)
|
||||
# Cross-check against other methods
|
||||
if len(data) >= n:
|
||||
# After end caps are added, method='inclusive' should
|
||||
# give the same result as method='exclusive' whenever
|
||||
# there are more data points than desired cut points.
|
||||
padded_data = [min(data) - 1000] + data + [max(data) + 1000]
|
||||
self.assertEqual(
|
||||
quantiles(data, n=n),
|
||||
quantiles(padded_data, n=n, method='inclusive'),
|
||||
(n, data),
|
||||
)
|
||||
# Invariant under tranlation and scaling
|
||||
def f(x):
|
||||
return 3.5 * x - 1234.675
|
||||
|
@ -2219,6 +2233,15 @@ class TestQuantiles(unittest.TestCase):
|
|||
actual = quantiles(statistics.NormalDist(), n=n, method="inclusive")
|
||||
self.assertTrue(all(math.isclose(e, a, abs_tol=0.0001)
|
||||
for e, a in zip(expected, actual)))
|
||||
# Whenever n is smaller than the number of data points, running
|
||||
# method='inclusive' should give the same result as method='exclusive'
|
||||
# after the two included extreme points are removed.
|
||||
data = [random.randrange(10_000) for i in range(501)]
|
||||
actual = quantiles(data, n=32, method='inclusive')
|
||||
data.remove(min(data))
|
||||
data.remove(max(data))
|
||||
expected = quantiles(data, n=32)
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
def test_equal_inputs(self):
|
||||
quantiles = statistics.quantiles
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue