Author: Brian Kearns <bdkea...@gmail.com> Branch: Changeset: r70999:171d134c9340 Date: 2014-04-26 02:14 -0400 http://bitbucket.org/pypy/pypy/changeset/171d134c9340/
Log: test/fix xrange rejecting floats diff --git a/pypy/module/__builtin__/functional.py b/pypy/module/__builtin__/functional.py --- a/pypy/module/__builtin__/functional.py +++ b/pypy/module/__builtin__/functional.py @@ -351,17 +351,17 @@ self.promote_step = promote_step def descr_new(space, w_subtype, w_start, w_stop=None, w_step=None): - start = _toint(space, w_start) + start = space.int_w(w_start) if space.is_none(w_step): # no step argument provided step = 1 promote_step = True else: - step = _toint(space, w_step) + step = space.int_w(w_step) promote_step = False if space.is_none(w_stop): # only 1 argument provided start, stop = 0, start else: - stop = _toint(space, w_stop) + stop = space.int_w(w_stop) howmany = get_len_of_range(space, start, stop, step) obj = space.allocate_instance(W_XRange, w_subtype) W_XRange.__init__(obj, space, start, howmany, step, promote_step) @@ -425,11 +425,6 @@ minint = -sys.maxint - 1 return minint if last < minint - step else last + step -def _toint(space, w_obj): - # this also supports float arguments. CPython still does, too. - # needs a bit more thinking in general... - return space.int_w(space.int(w_obj)) - W_XRange.typedef = TypeDef("xrange", __new__ = interp2app(W_XRange.descr_new.im_func), __repr__ = interp2app(W_XRange.descr_repr), diff --git a/pypy/module/__builtin__/test/test_builtin.py b/pypy/module/__builtin__/test/test_builtin.py --- a/pypy/module/__builtin__/test/test_builtin.py +++ b/pypy/module/__builtin__/test/test_builtin.py @@ -311,14 +311,14 @@ def test_xrange_len(self): x = xrange(33) assert len(x) == 33 - x = xrange(33.2) - assert len(x) == 33 + exc = raises(TypeError, xrange, 33.2) + assert "integer" in str(exc.value) x = xrange(33,0,-1) assert len(x) == 33 x = xrange(33,0) assert len(x) == 0 - x = xrange(33,0.2) - assert len(x) == 0 + exc = raises(TypeError, xrange, 33, 0.2) + assert "integer" in str(exc.value) x = xrange(0,33) assert len(x) == 33 x = xrange(0,33,-1) diff --git a/pypy/module/__builtin__/test/test_functional.py b/pypy/module/__builtin__/test/test_functional.py --- a/pypy/module/__builtin__/test/test_functional.py +++ b/pypy/module/__builtin__/test/test_functional.py @@ -1,5 +1,4 @@ class AppTestMap: - def test_trivial_map_one_seq(self): assert map(lambda x: x+2, [1, 2, 3, 4]) == [3, 4, 5, 6] @@ -77,6 +76,7 @@ assert result == [(2, 7), (1, 6), (None, 5), (None, 4), (None, 3), (None, 2), (None, 1)] + class AppTestZip: def test_one_list(self): assert zip([1,2,3]) == [(1,), (2,), (3,)] @@ -93,6 +93,7 @@ yield None assert zip(Foo()) == [] + class AppTestReduce: def test_None(self): raises(TypeError, reduce, lambda x, y: x+y, [1,2,3], None) @@ -105,6 +106,7 @@ assert reduce(lambda x, y: x-y, [10, 2, 8]) == 0 assert reduce(lambda x, y: x-y, [2, 8], 10) == 0 + class AppTestFilter: def test_None(self): assert filter(None, ['a', 'b', 1, 0, None]) == ['a', 'b', 1] @@ -125,6 +127,7 @@ return i * 10 assert filter(lambda x: x != 20, T("abcd")) == (0, 10, 30) + class AppTestXRange: def test_xrange(self): x = xrange(2, 9, 3) @@ -155,7 +158,8 @@ assert list(xrange(0, 10, A())) == [0, 5] def test_xrange_float(self): - assert list(xrange(0.1, 2.0, 1.1)) == [0, 1] + exc = raises(TypeError, xrange, 0.1, 2.0, 1.1) + assert "integer" in str(exc.value) def test_xrange_long(self): import sys @@ -218,6 +222,7 @@ assert list(reversed(list(reversed("hello")))) == ['h','e','l','l','o'] raises(TypeError, reversed, reversed("hello")) + class AppTestApply: def test_apply(self): def f(*args, **kw): @@ -228,6 +233,7 @@ assert apply(f, args) == (args, {}) assert apply(f, args, kw) == (args, kw) + class AppTestAllAny: """ These are copied directly and replicated from the Python 2.5 source code. @@ -277,6 +283,7 @@ S = [10, 20, 30] assert any([x > 42 for x in S]) == False + class AppTestMinMax: def test_min(self): assert min(1, 2) == 1 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit