Author: Philip Jenvey <[email protected]>
Branch: py3k
Changeset: r69747:10973dec5068
Date: 2014-03-05 17:12 -0800
http://bitbucket.org/pypy/pypy/changeset/10973dec5068/
Log: merge default
diff --git a/pypy/doc/whatsnew-head.rst b/pypy/doc/whatsnew-head.rst
--- a/pypy/doc/whatsnew-head.rst
+++ b/pypy/doc/whatsnew-head.rst
@@ -99,3 +99,6 @@
Implements SimpleRangeListStrategy for case range(n) where n is a positive
number.
Makes some traces nicer by getting rid of multiplication for calculating loop
counter
and propagates that n > 0 further to get rid of guards.
+
+.. branch: popen-pclose
+Provide an exit status for popen'ed RFiles via pclose
diff --git a/pypy/interpreter/special.py b/pypy/interpreter/special.py
--- a/pypy/interpreter/special.py
+++ b/pypy/interpreter/special.py
@@ -2,16 +2,10 @@
class Ellipsis(W_Root):
- def __init__(self, space):
- self.space = space
-
- def descr__repr__(self):
- return self.space.wrap('Ellipsis')
+ def descr__repr__(self, space):
+ return space.wrap('Ellipsis')
class NotImplemented(W_Root):
- def __init__(self, space):
- self.space = space
-
- def descr__repr__(self):
- return self.space.wrap('NotImplemented')
+ def descr__repr__(self, space):
+ return space.wrap('NotImplemented')
diff --git a/pypy/module/micronumpy/compile.py
b/pypy/module/micronumpy/compile.py
--- a/pypy/module/micronumpy/compile.py
+++ b/pypy/module/micronumpy/compile.py
@@ -71,8 +71,8 @@
def __init__(self):
"""NOT_RPYTHON"""
self.fromcache = InternalSpaceCache(self).getorbuild
- self.w_Ellipsis = special.Ellipsis(self)
- self.w_NotImplemented = special.NotImplemented(self)
+ self.w_Ellipsis = special.Ellipsis()
+ self.w_NotImplemented = special.NotImplemented()
def _freeze_(self):
return True
diff --git a/pypy/module/micronumpy/test/test_ndarray.py
b/pypy/module/micronumpy/test/test_ndarray.py
--- a/pypy/module/micronumpy/test/test_ndarray.py
+++ b/pypy/module/micronumpy/test/test_ndarray.py
@@ -2319,6 +2319,16 @@
a[...] = 4
assert (a == [4, 4, 4]).all()
+ b = np.arange(24).reshape(2,3,4)
+ b[...] = 100
+ assert (b == 100).all()
+ assert b.shape == (2, 3, 4)
+ b[...] = [10, 20, 30, 40]
+ assert (b[:,:,0] == 10).all()
+ assert (b[0,0,:] == [10, 20, 30, 40]).all()
+ assert b.shape == b[...].shape
+ assert (b == b[...]).all()
+
class AppTestNumArrayFromBuffer(BaseNumpyAppTest):
spaceconfig = dict(usemodules=["micronumpy", "array", "mmap"])
diff --git a/pypy/objspace/std/objspace.py b/pypy/objspace/std/objspace.py
--- a/pypy/objspace/std/objspace.py
+++ b/pypy/objspace/std/objspace.py
@@ -59,8 +59,8 @@
self.w_None = W_NoneObject.w_None
self.w_False = W_BoolObject.w_False
self.w_True = W_BoolObject.w_True
- self.w_NotImplemented = self.wrap(special.NotImplemented(self))
- self.w_Ellipsis = self.wrap(special.Ellipsis(self))
+ self.w_NotImplemented = self.wrap(special.NotImplemented())
+ self.w_Ellipsis = self.wrap(special.Ellipsis())
# types
self.builtin_types = {}
diff --git a/pypy/objspace/std/test/test_intobject.py
b/pypy/objspace/std/test/test_intobject.py
--- a/pypy/objspace/std/test/test_intobject.py
+++ b/pypy/objspace/std/test/test_intobject.py
@@ -543,10 +543,13 @@
assert a == 9007199254740991
a = operator.truediv(x, 7)
assert a == 9007199254740991.0
- exec("from __future__ import division; "
- "a = x / 7; b = operator.truediv(x, 7)")
- assert a == 9007199254740991.0
- assert b == 9007199254740991.0
+
+ def test_truediv_future(self):
+ ns = dict(x=63050394783186940)
+ exec("from __future__ import division; import operator; "
+ "a = x / 7; b = operator.truediv(x, 7)", ns)
+ assert ns['a'] == 9007199254740991.0
+ assert ns['b'] == 9007199254740991.0
class AppTestIntShortcut(AppTestInt):
diff --git a/pypy/objspace/std/test/test_listobject.py
b/pypy/objspace/std/test/test_listobject.py
--- a/pypy/objspace/std/test/test_listobject.py
+++ b/pypy/objspace/std/test/test_listobject.py
@@ -433,7 +433,7 @@
intlist.find(w(4), 0, 2)
-class AppTestW_ListObject(object):
+class AppTestListObject(object):
def setup_class(cls):
import platform
import sys
@@ -526,6 +526,18 @@
l.__init__(assignment)
assert l == list(assignment)
+ def test_range_init(self):
+ x = range(5,1)
+ assert x == []
+
+ x = range(1,10)
+ x[22:0:-1] == range(1,10)
+
+ r = range(10, 10)
+ assert len(r) == 0
+ assert list(reversed(r)) == []
+ assert r[:] == []
+
def test_extend_list(self):
l = l0 = [1]
l.extend([2])
@@ -598,24 +610,28 @@
def test_sort_key(self):
def lower(x): return x.lower()
l = ['a', 'C', 'b']
- l.sort(key = lower)
+ l.sort(key=lower)
assert l == ['a', 'b', 'C']
l = []
- l.sort(key = lower)
+ l.sort(key=lower)
assert l == []
- l = [ 'a' ]
- l.sort(key = lower)
- assert l == [ 'a' ]
+ l = ['a']
+ l.sort(key=lower)
+ assert l == ['a']
+
+ r = range(10)
+ r.sort(key=lambda x: -x)
+ assert r == range(9, -1, -1)
def test_sort_reversed(self):
l = list(range(10))
- l.sort(reverse = True)
+ l.sort(reverse=True)
assert l == list(range(9, -1, -1))
l = []
- l.sort(reverse = True)
+ l.sort(reverse=True)
assert l == []
l = [1]
- l.sort(reverse = True)
+ l.sort(reverse=True)
assert l == [1]
raises(TypeError, sorted, [], None, lambda x, y: 0)
@@ -630,6 +646,17 @@
l.sort()
assert l == ["a", "b", "c", "d"]
+ def test_sort_range(self):
+ l = range(3, 10, 3)
+ l.sort()
+ assert l == [3, 6, 9]
+ l.sort(reverse=True)
+ assert l == [9, 6, 3]
+ l.sort(reverse=True)
+ assert l == [9, 6, 3]
+ l.sort()
+ assert l == [3, 6, 9]
+
def test_getitem(self):
l = [1, 2, 3, 4, 5, 6, 9]
assert l[0] == 1
@@ -653,6 +680,23 @@
l = []
raises(IndexError, "l[1]")
+ def test_getitem_range(self):
+ l = range(5)
+ raises(IndexError, "l[-6]")
+ raises(IndexError, "l[5]")
+ assert l[0] == 0
+ assert l[-1] == 4
+ assert l[-2] == 3
+ assert l[-5] == 0
+
+ l = range(1, 5)
+ raises(IndexError, "l[-5]")
+ raises(IndexError, "l[4]")
+ assert l[0] == 1
+ assert l[-1] == 4
+ assert l[-2] == 3
+ assert l[-4] == 1
+
def test_setitem(self):
l = []
raises(IndexError, "l[1] = 2")
@@ -665,6 +709,10 @@
l[0] = "2"
assert l == ["2",3]
+ l = range(3)
+ l[0] = 1
+ assert l == [1,1,2]
+
def test_delitem(self):
l = [1, 2, 3, 4, 5, 6, 9]
del l[0]
@@ -730,6 +778,29 @@
assert l[1:0:None] == []
assert l[1:0] == []
+ def test_getslice_invalid(self):
+ x = [1,2,3,4]
+ assert x[10:0] == []
+ assert x[10:0:None] == []
+
+ x = range(1,5)
+ assert x[10:0] == []
+ assert x[10:0:None] == []
+
+ assert x[0:22] == [1,2,3,4]
+ assert x[-1:10] == [4]
+
+ assert x[0:22:None] == [1,2,3,4]
+ assert x[-1:10:None] == [4]
+
+ def test_getslice_range_backwards(self):
+ x = range(1,10)
+ assert x[22:-10] == []
+ assert x[22:-10:-1] == [9,8,7,6,5,4,3,2,1]
+ assert x[10:3:-1] == [9,8,7,6,5]
+ assert x[10:3:-2] == [9,7,5]
+ assert x[1:5:-1] == []
+
def test_delall(self):
l = l0 = [1,2,3]
del l[:]
@@ -763,6 +834,13 @@
l1 += [0]
assert l1 == ['a', 'b', 'c', 0]
+ r1 = r2 = range(5)
+ assert r1 is r2
+ r1 += [15]
+ assert r1 is r2
+ assert r1 == [0, 1, 2, 3, 4, 15]
+ assert r2 == [0, 1, 2, 3, 4, 15]
+
def test_iadd_iterable(self):
l = l0 = [1,2,3]
l += iter([4,5])
@@ -813,6 +891,17 @@
assert l is l0
assert l == [1.1, 2.2, 1.1, 2.2]
+ l = list(range(2))
+ l *= 2
+ assert l == [0, 1, 0, 1]
+
+ r1 = r2 = list(range(3))
+ assert r1 is r2
+ r1 *= 2
+ assert r1 is r2
+ assert r1 == [0, 1, 2, 0, 1, 2]
+ assert r2 == [0, 1, 2, 0, 1, 2]
+
def test_mul_errors(self):
try:
[1, 2, 3] * (3,)
@@ -894,6 +983,11 @@
assert l == []
assert l is l0
+ l = []
+ l2 = range(3)
+ l.__setslice__(0,3,l2)
+ assert l == [0,1,2]
+
def test_assign_extended_slice(self):
l = l0 = ['a', 'b', 'c']
l[::-1] = ['a', 'b', 'c']
@@ -980,10 +1074,6 @@
l.append(x)
assert l == list(range(5))
- l = list(range(4))
- l.append(4)
- assert l == list(range(5))
-
l = [1,2,3]
l.append("a")
assert l == [1,2,3,"a"]
@@ -992,6 +1082,22 @@
l.append(4.4)
assert l == [1.1, 2.2, 3.3, 4.4]
+ l = range(4)
+ l.append(4)
+ assert l == range(5)
+
+ l = range(5)
+ l.append(26)
+ assert l == [0,1,2,3,4,26]
+
+ l = range(5)
+ l.append("a")
+ assert l == [0,1,2,3,4,"a"]
+
+ l = range(5)
+ l.append(5)
+ assert l == [0,1,2,3,4,5]
+
def test_count(self):
c = list('hello')
assert c.count('l') == 2
@@ -1019,6 +1125,10 @@
l.insert(0,"a")
assert l == ["a", 1, 2, 3]
+ l = range(3)
+ l.insert(1,5)
+ assert l == [0,5,1,2]
+
def test_pop(self):
c = list('hello world')
s = ''
@@ -1031,6 +1141,7 @@
l = list(range(10))
l.pop()
assert l == list(range(9))
+ assert l.pop(0) == 0
l = [1.1, 2.2, 3.3]
l.pop()
@@ -1101,6 +1212,16 @@
c.reverse()
assert ''.join(c) == 'dlrow olleh'
+ l = range(3)
+ l.reverse()
+ assert l == [2,1,0]
+
+ r = range(3)
+ r[0] = 1
+ assert r == [1, 1, 2]
+ r.reverse()
+ assert r == [2, 1, 1]
+
def test_reversed(self):
assert list(list('hello').__reversed__()) == ['o', 'l', 'l', 'e', 'h']
assert list(reversed(list('hello'))) == ['o', 'l', 'l', 'e', 'h']
@@ -1377,7 +1498,114 @@
assert item11 in l[::11]
-class AppTestWithoutStrategies(object):
+class AppTestListObjectWithRangeList(AppTestListObject):
+ """Run the list object tests with range lists enabled. Tests should go in
+ AppTestListObject so they can be run -A against CPython as well.
+ """
+ spaceconfig = {"objspace.std.withrangelist": True}
+
+
+class AppTestRangeListForcing:
+ """Tests for range lists that test forcing. Regular tests should go in
+ AppTestListObject so they can be run -A against CPython as well. Separate
+ from AppTestListObjectWithRangeList so we don't silently overwrite tests
+ with the same names.
+ """
+ spaceconfig = {"objspace.std.withrangelist": True}
+
+ def setup_class(cls):
+ if cls.runappdirect:
+ py.test.skip("__pypy__.internal_repr() cannot be used to see "
+ "if a range list was forced on top of pypy-c")
+ cls.w_not_forced = cls.space.appexec([], """():
+ import __pypy__
+ def f(r):
+ return (isinstance(r, list) and
+ "RangeListStrategy" in __pypy__.internal_repr(r))
+ return f
+ """)
+
+ def test_simple(self):
+ result = []
+ r = range(1, 8, 2)
+ for i in r:
+ result.append(i)
+ assert result == [1, 3, 5, 7]
+ assert self.not_forced(r)
+
+ def test_getitem_slice(self):
+ result = []
+ r = range(1, 100, 2)
+ for i in r[10:15]:
+ result.append(i)
+ assert result == [21, 23, 25, 27, 29]
+ assert not self.not_forced(r)
+
+ def test_getitem_extended_slice(self):
+ result = []
+ r = range(1, 100, 2)
+ for i in r[40:30:-2]:
+ result.append(i)
+ assert result == [81, 77, 73, 69, 65]
+ assert not self.not_forced(r)
+
+ def test_repr(self):
+ r = range(5)
+ assert repr(r) == "[0, 1, 2, 3, 4]"
+ assert self.not_forced(r)
+
+ def test_force(self):
+ r = range(10)
+ r[0] = 42
+ assert not self.not_forced(r)
+ assert r == [42, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+
+ def test_reverse(self):
+ r = range(10)
+ r.reverse()
+ assert not self.not_forced(r)
+ assert r == range(9, -1, -1)
+
+ def test_pop(self):
+ # RangeListStrategy
+ r = range(1, 10)
+ res = r.pop()
+ assert res == 9
+ assert self.not_forced(r)
+ assert repr(r) == repr(range(1, 9))
+ res = r.pop(0)
+ assert res == 1
+ assert self.not_forced(r)
+ assert repr(r) == repr(range(2, 9))
+ res = r.pop(len(r) - 1)
+ assert res == 8
+ assert self.not_forced(r)
+ assert repr(r) == repr(range(2, 8))
+ res = r.pop(2)
+ assert res == 4
+ assert not self.not_forced(r)
+ assert r == [2, 3, 5, 6, 7]
+ res = r.pop(2)
+ assert res == 5
+ assert not self.not_forced(r)
+ assert r == [2, 3, 6, 7]
+
+ # SimpleRangeListStrategy
+ r = range(10)
+ res = r.pop()
+ assert res == 9
+ assert self.not_forced(r)
+ res = r.pop()
+ assert res == 8
+ assert repr(r) == repr(range(8))
+ assert self.not_forced(r)
+ res = r.pop(0)
+ assert res == 0
+ assert not self.not_forced(r)
+ assert r == [1, 2, 3, 4, 5, 6, 7]
+
+
+class AppTestWithoutStrategies:
spaceconfig = {"objspace.std.withliststrategies": False}
def test_no_shared_empty_list(self):
diff --git a/pypy/objspace/std/test/test_liststrategies.py
b/pypy/objspace/std/test/test_liststrategies.py
--- a/pypy/objspace/std/test/test_liststrategies.py
+++ b/pypy/objspace/std/test/test_liststrategies.py
@@ -10,7 +10,6 @@
py.test.py3k_skip("XXX: strategies are currently broken")
class TestW_ListStrategies(TestW_ListObject):
-
def test_check_strategy(self):
space = self.space
w = space.wrap
@@ -237,7 +236,6 @@
l.setslice(0, 1, 2, make_range_list(space, 5, 1, 4))
assert isinstance(l.strategy, IntegerListStrategy)
-
def test_setslice_List(self):
space = self.space
@@ -710,7 +708,6 @@
w_l2.sort(False)
assert space.eq_w(w_l, w_l2)
-
def test_listview_bytes_list(self):
space = self.space
w_l = W_ListObject(space, [space.wrapbytes("a"), space.wrapbytes("b")])
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit