diff options
author | Mark Dickinson <dickinsm@gmail.com> | 2009-11-24 10:54:58 +0000 |
---|---|---|
committer | Mark Dickinson <dickinsm@gmail.com> | 2009-11-24 10:54:58 +0000 |
commit | bce783757ff5398280fc06efc2e0e951ec022d21 (patch) | |
tree | a993309641944c618f3b7f64f174f5b151f7307d | |
parent | 9dd5e16c5d8e7d9e7fa9c2fb1b2754df8161ab2b (diff) | |
download | cpython-git-bce783757ff5398280fc06efc2e0e951ec022d21.tar.gz |
round(0, "ermintrude") succeeded instead of producing a TypeError. Fix this.
-rw-r--r-- | Lib/test/test_float.py | 5 | ||||
-rw-r--r-- | Python/bltinmodule.c | 8 |
2 files changed, 9 insertions, 4 deletions
diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py index 573cc7e6e1..4e918fbb2f 100644 --- a/Lib/test/test_float.py +++ b/Lib/test/test_float.py @@ -367,6 +367,11 @@ class RoundTestCase(unittest.TestCase): self.assertEqual(round(-INF, n), -INF) self.assertTrue(math.isnan(round(NAN, n))) + self.assertRaises(TypeError, round, INF, 0.0) + self.assertRaises(TypeError, round, -INF, 1.0) + self.assertRaises(TypeError, round, NAN, "ceci n'est pas un integer") + self.assertRaises(TypeError, round, -0.0, 1j) + def test_large_n(self): for n in [324, 325, 400, 2**31-1, 2**31, 2**32, 2**100]: self.assertEqual(round(123.456, n), 123.456) diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index a8d8d97399..80fc9b4244 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -2130,10 +2130,6 @@ builtin_round(PyObject *self, PyObject *args, PyObject *kwds) kwlist, &x, &o_ndigits)) return NULL; - /* nans, infinities and zeros round to themselves */ - if (!Py_IS_FINITE(x) || x == 0.0) - return PyFloat_FromDouble(x); - if (o_ndigits == NULL) { /* second argument defaults to 0 */ ndigits = 0; @@ -2145,6 +2141,10 @@ builtin_round(PyObject *self, PyObject *args, PyObject *kwds) return NULL; } + /* nans, infinities and zeros round to themselves */ + if (!Py_IS_FINITE(x) || x == 0.0) + return PyFloat_FromDouble(x); + /* Deal with extreme values for ndigits. For ndigits > NDIGITS_MAX, x always rounds to itself. For ndigits < NDIGITS_MIN, x always rounds to +-0.0. Here 0.30103 is an upper bound for log10(2). */ |