]> granicus.if.org Git - python/commitdiff
bpo-36546: More tests: type preservation and equal inputs (#13000)
authorRaymond Hettinger <rhettinger@users.noreply.github.com>
Mon, 29 Apr 2019 04:31:55 +0000 (21:31 -0700)
committerGitHub <noreply@github.com>
Mon, 29 Apr 2019 04:31:55 +0000 (21:31 -0700)
Lib/test/test_statistics.py

index c988d7fd8be7b7298ffe31fa022d1aebafd64051..0a967055f0fe6c55a514e3e58e142f67b371542d 100644 (file)
@@ -2153,12 +2153,11 @@ class TestQuantiles(unittest.TestCase):
                 ]:
             self.assertEqual(expected, quantiles(data, n=n))
             self.assertEqual(len(quantiles(data, n=n)), n - 1)
-            self.assertEqual(list(map(float, expected)),
-                             quantiles(map(Decimal, data), n=n))
-            self.assertEqual(list(map(Decimal, expected)),
-                             quantiles(map(Decimal, data), n=n))
-            self.assertEqual(list(map(Fraction, expected)),
-                             quantiles(map(Fraction, data), n=n))
+            # Preserve datatype when possible
+            for datatype in (float, Decimal, Fraction):
+                result = quantiles(map(datatype, data), n=n)
+                self.assertTrue(all(type(x) == datatype) for x in result)
+                self.assertEqual(result, list(map(datatype, expected)))
             # Invariant under tranlation and scaling
             def f(x):
                 return 3.5 * x - 1234.675
@@ -2199,12 +2198,11 @@ class TestQuantiles(unittest.TestCase):
                 ]:
             self.assertEqual(expected, quantiles(data, n=n, method="inclusive"))
             self.assertEqual(len(quantiles(data, n=n, method="inclusive")), n - 1)
-            self.assertEqual(list(map(float, expected)),
-                             quantiles(map(Decimal, data), n=n, method="inclusive"))
-            self.assertEqual(list(map(Decimal, expected)),
-                             quantiles(map(Decimal, data), n=n, method="inclusive"))
-            self.assertEqual(list(map(Fraction, expected)),
-                             quantiles(map(Fraction, data), n=n, method="inclusive"))
+            # Preserve datatype when possible
+            for datatype in (float, Decimal, Fraction):
+                result = quantiles(map(datatype, data), n=n, method="inclusive")
+                self.assertTrue(all(type(x) == datatype) for x in result)
+                self.assertEqual(result, list(map(datatype, expected)))
             # Invariant under tranlation and scaling
             def f(x):
                 return 3.5 * x - 1234.675
@@ -2222,6 +2220,14 @@ class TestQuantiles(unittest.TestCase):
             self.assertTrue(all(math.isclose(e, a, abs_tol=0.0001)
                             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):
         quantiles = statistics.quantiles
         total = 10_000