[pypy-commit] pypy py3k: move the older py2 range tests (adapted to py3) into test_functional, they were
pjenvey
noreply at buildbot.pypy.org
Thu Oct 11 23:33:49 CEST 2012
Author: Philip Jenvey <pjenvey at underboss.org>
Branch: py3k
Changeset: r58019:86c7aad53f10
Date: 2012-10-11 14:32 -0700
http://bitbucket.org/pypy/pypy/changeset/86c7aad53f10/
Log: move the older py2 range tests (adapted to py3) into
test_functional, they were misplaced into test__functools instead of
reduce's tests. restore those too
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
@@ -168,6 +168,66 @@
# test again, to make sure that range() is not its own iterator
assert list(x) == [2, 5, 8]
+ def test_range_toofew(self):
+ raises(TypeError, range)
+
+ def test_range_toomany(self):
+ raises(TypeError, range, 1, 2, 3, 4)
+
+ def test_range_one(self):
+ assert list(range(1)) == [0]
+
+ def test_range_posstartisstop(self):
+ assert list(range(1, 1)) == []
+
+ def test_range_negstartisstop(self):
+ assert list(range(-1, -1)) == []
+
+ def test_range_zero(self):
+ assert list(range(0)) == []
+
+ def test_range_twoargs(self):
+ assert list(range(1, 2)) == [1]
+
+ def test_range_decreasingtwoargs(self):
+ assert list(range(3, 1)) == []
+
+ def test_range_negatives(self):
+ assert list(range(-3)) == []
+
+ def test_range_decreasing_negativestep(self):
+ assert list(range(5, -2, -1)) == [5, 4, 3, 2, 1, 0 , -1]
+
+ def test_range_posfencepost1(self):
+ assert list(range(1, 10, 3)) == [1, 4, 7]
+
+ def test_range_posfencepost2(self):
+ assert list(range(1, 11, 3)) == [1, 4, 7, 10]
+
+ def test_range_posfencepost3(self):
+ assert list(range(1, 12, 3)) == [1, 4, 7, 10]
+
+ def test_range_negfencepost1(self):
+ assert list(range(-1, -10, -3)) == [-1, -4, -7]
+
+ def test_range_negfencepost2(self):
+ assert list(range(-1, -11, -3)) == [-1, -4, -7, -10]
+
+ def test_range_negfencepost3(self):
+ assert list(range(-1, -12, -3)) == [-1, -4, -7, -10]
+
+ def test_range_decreasing_negativelargestep(self):
+ assert list(range(5, -2, -3)) == [5, 2, -1]
+
+ def test_range_increasing_positivelargestep(self):
+ assert list(range(-5, 2, 3)) == [-5, -2, 1]
+
+ def test_range_zerostep(self):
+ raises(ValueError, range, 1, 5, 0)
+
+ def test_range_wrong_type(self):
+ raises(TypeError, range, "42")
+
def test_range_iter(self):
x = range(2, 9, 3)
it = iter(x)
@@ -194,14 +254,93 @@
raises(TypeError, range, A2())
def test_range_float(self):
- raises(TypeError, "range(0.1, 2.0, 1.1)")
+ raises(TypeError, range, 0.1)
+ raises(TypeError, range, 0.1, 0)
+ raises(TypeError, range, 0, 0.1)
+ raises(TypeError, range, 0.1, 0, 0)
+ raises(TypeError, range, 0, 0.1, 0)
+ raises(TypeError, range, 0, 0, 0.1)
+ raises(TypeError, range, 0.1, 2.0, 1.1)
def test_range_long(self):
import sys
+ assert list(range(-2**100)) == []
+ assert list(range(0, -2**100)) == []
+ assert list(range(0, 2**100, -1)) == []
+ assert list(range(0, 2**100, -1)) == []
+
a = 10 * sys.maxsize
assert range(a)[-1] == a-1
assert range(0, a)[-1] == a-1
assert range(0, 1, a)[-1] == 0
+ assert list(range(a, a+2)) == [a, a+1]
+ assert list(range(a+2, a, -1)) == [a+2, a+1]
+ assert list(range(a+4, a, -2)) == [a+4, a+2]
+ assert list(range(a, a*5, a)) == [a, 2*a, 3*a, 4*a]
+
+ def test_range_cases(self):
+ import sys
+ for start in [10, 10 * sys.maxsize]:
+ for stop in [start-4, start-1, start, start+1, start+4]:
+ for step in [1, 2, 3, 4]:
+ lst = list(range(start, stop, step))
+ expected = []
+ a = start
+ while a < stop:
+ expected.append(a)
+ a += step
+ assert lst == expected
+ for step in [-1, -2, -3, -4]:
+ lst = list(range(start, stop, step))
+ expected = []
+ a = start
+ while a > stop:
+ expected.append(a)
+ a += step
+ assert lst == expected
+
+ def test_range_contains(self):
+ assert 3 in range(5)
+ assert 3 not in range(3)
+ assert 3 not in range(4, 5)
+ assert 3 in range(1, 5, 2)
+ assert 3 not in range(0, 5, 2)
+ assert '3' not in range(5)
+
+ def test_range_count(self):
+ assert range(5).count(3) == 1
+ assert type(range(5).count(3)) is int
+ assert range(0, 5, 2).count(3) == 0
+ assert range(5).count(3.0) == 1
+ assert range(5).count('3') == 0
+
+ def test_range_getitem(self):
+ assert range(6)[3] == 3
+ assert range(6)[-1] == 5
+ raises(IndexError, range(6).__getitem__, 6)
+
+ def test_range_slice(self):
+ # range objects don't implement equality in 3.2, use the repr
+ assert repr(range(6)[2:5]) == 'range(2, 5)'
+ assert repr(range(6)[-1:-3:-2]) == 'range(5, 3, -2)'
+
+ def test_large_range(self):
+ import sys
+ def _range_len(x):
+ try:
+ length = len(x)
+ except OverflowError:
+ step = x[1] - x[0]
+ length = 1 + ((x[-1] - x[0]) // step)
+ return length
+ a = -sys.maxsize
+ b = sys.maxsize
+ expected_len = b - a
+ x = range(a, b)
+ assert a in x
+ assert b not in x
+ raises(OverflowError, len, x)
+ assert _range_len(x) == expected_len
def test_range_reduce(self):
x = range(2, 9, 3)
diff --git a/pypy/module/test_lib_pypy/test__functools.py b/pypy/module/test_lib_pypy/test__functools.py
--- a/pypy/module/test_lib_pypy/test__functools.py
+++ b/pypy/module/test_lib_pypy/test__functools.py
@@ -1,157 +1,37 @@
-from _functools import reduce
+class AppTestReduce:
-class TestRange:
+ def test_None(self):
+ from _functools import reduce
+ raises(TypeError, reduce, lambda x, y: x+y, [1,2,3], None)
- def test_range_toofew(self):
- raises(TypeError, range)
+ def test_sum(self):
+ from _functools import reduce
+ assert reduce(lambda x, y: x+y, [1,2,3,4], 0) == 10
+ assert reduce(lambda x, y: x+y, [1,2,3,4]) == 10
- def test_range_toomany(self):
- raises(TypeError, range, 1, 2, 3, 4)
+ def test_minus(self):
+ from _functools import reduce
+ assert reduce(lambda x, y: x-y, [10, 2, 8]) == 0
+ assert reduce(lambda x, y: x-y, [2, 8], 10) == 0
- def test_range_one(self):
- assert list(range(1)) == [0]
+ def test_from_cpython(self):
+ from _functools import reduce
+ class SequenceClass(object):
+ def __init__(self, n):
+ self.n = n
+ def __getitem__(self, i):
+ if 0 <= i < self.n:
+ return i
+ else:
+ raise IndexError
- def test_range_posstartisstop(self):
- assert list(range(1, 1)) == []
+ from operator import add
+ assert reduce(add, SequenceClass(5)) == 10
+ assert reduce(add, SequenceClass(5), 42) == 52
+ raises(TypeError, reduce, add, SequenceClass(0))
+ assert reduce(add, SequenceClass(0), 42) == 42
+ assert reduce(add, SequenceClass(1)) == 0
+ assert reduce(add, SequenceClass(1), 42) == 42
- def test_range_negstartisstop(self):
- assert list(range(-1, -1)) == []
-
- def test_range_zero(self):
- assert list(range(0)) == []
-
- def test_range_twoargs(self):
- assert list(range(1, 2)) == [1]
-
- def test_range_decreasingtwoargs(self):
- assert list(range(3, 1)) == []
-
- def test_range_negatives(self):
- assert list(range(-3)) == []
-
- def test_range_decreasing_negativestep(self):
- assert list(range(5, -2, -1)) == [5, 4, 3, 2, 1, 0 , -1]
-
- def test_range_posfencepost1(self):
- assert list(range(1, 10, 3)) == [1, 4, 7]
-
- def test_range_posfencepost2(self):
- assert list(range(1, 11, 3)) == [1, 4, 7, 10]
-
- def test_range_posfencepost3(self):
- assert list(range(1, 12, 3)) == [1, 4, 7, 10]
-
- def test_range_negfencepost1(self):
- assert list(range(-1, -10, -3)) == [-1, -4, -7]
-
- def test_range_negfencepost2(self):
- assert list(range(-1, -11, -3)) == [-1, -4, -7, -10]
-
- def test_range_negfencepost3(self):
- assert list(range(-1, -12, -3)) == [-1, -4, -7, -10]
-
- def test_range_decreasing_negativelargestep(self):
- assert list(range(5, -2, -3)) == [5, 2, -1]
-
- def test_range_increasing_positivelargestep(self):
- assert list(range(-5, 2, 3)) == [-5, -2, 1]
-
- def test_range_zerostep(self):
- raises(ValueError, range, 1, 5, 0)
-
- def test_range_float(self):
- raises(TypeError, range, 0.1)
- raises(TypeError, range, 0.1, 0)
- raises(TypeError, range, 0, 0.1)
- raises(TypeError, range, 0.1, 0, 0)
- raises(TypeError, range, 0, 0.1, 0)
- raises(TypeError, range, 0, 0, 0.1)
-
- def test_range_wrong_type(self):
- raises(TypeError, range, "42")
-
- def test_range_object_with___index__(self):
- class A(object):
- def __index__(self):
- return 5
-
- assert list(range(A())) == [0, 1, 2, 3, 4]
- assert list(range(0, A())) == [0, 1, 2, 3, 4]
- assert list(range(0, 10, A())) == [0, 5]
-
- def test_range_long(self):
- import sys
- assert list(range(-2**100)) == []
- assert list(range(0, -2**100)) == []
- assert list(range(0, 2**100, -1)) == []
- assert list(range(0, 2**100, -1)) == []
-
- a = 10 * sys.maxsize
- assert list(range(a, a+2)) == [a, a+1]
- assert list(range(a+2, a, -1)) == [a+2, a+1]
- assert list(range(a+4, a, -2)) == [a+4, a+2]
- assert list(range(a, a*5, a)) == [a, 2*a, 3*a, 4*a]
-
- def test_range_cases(self):
- import sys
- for start in [10, 10 * sys.maxsize]:
- for stop in [start-4, start-1, start, start+1, start+4]:
- for step in [1, 2, 3, 4]:
- lst = list(range(start, stop, step))
- expected = []
- a = start
- while a < stop:
- expected.append(a)
- a += step
- assert lst == expected
- for step in [-1, -2, -3, -4]:
- lst = list(range(start, stop, step))
- expected = []
- a = start
- while a > stop:
- expected.append(a)
- a += step
- assert lst == expected
-
- def test_range_contains(self):
- assert 3 in range(5)
- assert 3 not in range(3)
- assert 3 not in range(4, 5)
- assert 3 in range(1, 5, 2)
- assert 3 not in range(0, 5, 2)
- assert '3' not in range(5)
-
- def test_range_count(self):
- assert range(5).count(3) == 1
- assert type(range(5).count(3)) is int
- assert range(0, 5, 2).count(3) == 0
- assert range(5).count(3.0) == 1
- assert range(5).count('3') == 0
-
- def test_range_getitem(self):
- assert range(6)[3] == 3
- assert range(6)[-1] == 5
- raises(IndexError, range(6).__getitem__, 6)
-
- def test_range_slice(self):
- # range objects don't implement equality in 3.2, use the repr
- assert repr(range(6)[2:5]) == 'range(2, 5)'
- assert repr(range(6)[-1:-3:-2]) == 'range(5, 3, -2)'
-
- def test_large_range(self):
- import sys
- def _range_len(x):
- try:
- length = len(x)
- except OverflowError:
- step = x[1] - x[0]
- length = 1 + ((x[-1] - x[0]) // step)
- return length
- a = -sys.maxsize
- b = sys.maxsize
- expected_len = b - a
- x = range(a, b)
- assert a in x
- assert b not in x
- raises(OverflowError, len, x)
- assert _range_len(x) == expected_len
+ d = {"one": 1, "two": 2, "three": 3}
+ assert reduce(add, d) == "".join(d.keys())
More information about the pypy-commit
mailing list