[pypy-commit] pypy default: move array tests into their own file
antocuni
noreply at buildbot.pypy.org
Tue Jun 7 17:04:50 CEST 2011
Author: Antonio Cuni <anto.cuni at gmail.com>
Branch:
Changeset: r44798:dd7fab72b424
Date: 2011-06-07 16:20 +0200
http://bitbucket.org/pypy/pypy/changeset/dd7fab72b424/
Log: move array tests into their own file
diff --git a/pypy/module/pypyjit/test_pypy_c/test_array.py b/pypy/module/pypyjit/test_pypy_c/test_array.py
new file mode 100644
--- /dev/null
+++ b/pypy/module/pypyjit/test_pypy_c/test_array.py
@@ -0,0 +1,186 @@
+import py
+from pypy.module.pypyjit.test_pypy_c.test_model import BaseTestPyPyC
+
+class TestArray(BaseTestPyPyC):
+
+ def test_arraycopy_disappears(self):
+ def main(n):
+ i = 0
+ while i < n:
+ t = (1, 2, 3, i + 1)
+ t2 = t[:]
+ del t
+ i = t2[3]
+ del t2
+ return i
+ #
+ log = self.run(main, [500])
+ assert log.result == 500
+ loop, = log.loops_by_filename(self.filepath)
+ assert loop.match("""
+ i7 = int_lt(i5, i6)
+ guard_true(i7, descr=<Guard3>)
+ i9 = int_add(i5, 1)
+ --TICK--
+ jump(p0, p1, p2, p3, p4, i9, i6, descr=<Loop0>)
+ """)
+
+ def test_array_sum(self):
+ def main():
+ from array import array
+ img = array("i", range(128) * 5) * 480
+ l, i = 0, 0
+ while i < len(img):
+ l += img[i]
+ i += 1
+ return l
+ #
+ log = self.run(main, [])
+ assert log.result == 19507200
+ loop, = log.loops_by_filename(self.filepath)
+ assert loop.match("""
+ i13 = int_lt(i7, i9)
+ guard_true(i13, descr=<Guard3>)
+ i15 = getarrayitem_raw(i10, i7, descr=<.*ArrayNoLengthDescr>)
+ i16 = int_add_ovf(i8, i15)
+ guard_no_overflow(descr=<Guard4>)
+ i18 = int_add(i7, 1)
+ --TICK--
+ jump(p0, p1, p2, p3, p4, p5, p6, i18, i16, i9, i10, descr=<Loop0>)
+ """)
+
+ def test_array_intimg(self):
+ def main():
+ from array import array
+ img = array('i', range(3)) * (350 * 480)
+ intimg = array('i', (0,)) * (640 * 480)
+ l, i = 0, 640
+ while i < 640 * 480:
+ assert len(img) == 3*350*480
+ assert len(intimg) == 640*480
+ l = l + img[i]
+ intimg[i] = (intimg[i-640] + l)
+ i += 1
+ return intimg[i - 1]
+ #
+ log = self.run(main, [])
+ assert log.result == 73574560
+ loop, = log.loops_by_filename(self.filepath)
+ assert loop.match("""
+ i13 = int_lt(i8, 307200)
+ guard_true(i13, descr=<Guard3>)
+ # the bound check guard on img has been killed (thanks to the asserts)
+ i14 = getarrayitem_raw(i10, i8, descr=<.*ArrayNoLengthDescr>)
+ i15 = int_add_ovf(i9, i14)
+ guard_no_overflow(descr=<Guard4>)
+ i17 = int_sub(i8, 640)
+ # the bound check guard on intimg has been killed (thanks to the asserts)
+ i18 = getarrayitem_raw(i11, i17, descr=<.*ArrayNoLengthDescr>)
+ i19 = int_add_ovf(i18, i15)
+ guard_no_overflow(descr=<Guard5>)
+ # on 64bit, there is a guard checking that i19 actually fits into 32bit
+ ...
+ setarrayitem_raw(i11, i8, _, descr=<.*ArrayNoLengthDescr>)
+ i28 = int_add(i8, 1)
+ --TICK--
+ jump(p0, p1, p2, p3, p4, p5, p6, p7, i28, i15, i10, i11, descr=<Loop0>)
+ """)
+
+
+ def test_zeropadded(self):
+ def main():
+ from array import array
+ class ZeroPadded(array):
+ def __new__(cls, l):
+ self = array.__new__(cls, 'd', range(l))
+ return self
+
+ def __getitem__(self, i):
+ if i < 0 or i >= len(self):
+ return 0
+ return array.__getitem__(self, i) # ID: get
+ #
+ buf = ZeroPadded(2000)
+ i = 10
+ sa = 0
+ while i < 2000 - 10:
+ sa += buf[i-2] + buf[i-1] + buf[i] + buf[i+1] + buf[i+2]
+ i += 1
+ return sa
+
+ log = self.run(main, [])
+ assert log.result == 9895050.0
+ loop, = log.loops_by_filename(self.filepath)
+ #
+ # check that the overloaded __getitem__ does not introduce double
+ # array bound checks.
+ #
+ # The force_token()s are still there, but will be eliminated by the
+ # backend regalloc, so they are harmless
+ assert loop.match(ignore_ops=['force_token'],
+ expected_src="""
+ ...
+ i20 = int_ge(i18, i8)
+ guard_false(i20, descr=...)
+ f21 = getarrayitem_raw(i13, i18, descr=...)
+ f23 = getarrayitem_raw(i13, i14, descr=...)
+ f24 = float_add(f21, f23)
+ f26 = getarrayitem_raw(i13, i6, descr=...)
+ f27 = float_add(f24, f26)
+ i29 = int_add(i6, 1)
+ i31 = int_ge(i29, i8)
+ guard_false(i31, descr=...)
+ f33 = getarrayitem_raw(i13, i29, descr=...)
+ f34 = float_add(f27, f33)
+ i36 = int_add(i6, 2)
+ i38 = int_ge(i36, i8)
+ guard_false(i38, descr=...)
+ f39 = getarrayitem_raw(i13, i36, descr=...)
+ ...
+ """)
+
+ def test_circular(self):
+ def main():
+ from array import array
+ class Circular(array):
+ def __new__(cls):
+ self = array.__new__(cls, 'd', range(256))
+ return self
+ def __getitem__(self, i):
+ assert len(self) == 256
+ return array.__getitem__(self, i & 255)
+ #
+ buf = Circular()
+ i = 10
+ sa = 0
+ while i < 2000 - 10:
+ sa += buf[i-2] + buf[i-1] + buf[i] + buf[i+1] + buf[i+2]
+ i += 1
+ return sa
+ #
+ log = self.run(main, [])
+ assert log.result == 1239690.0
+ loop, = log.loops_by_filename(self.filepath)
+ #
+ # check that the array bound checks are removed
+ #
+ # The force_token()s are still there, but will be eliminated by the
+ # backend regalloc, so they are harmless
+ assert loop.match(ignore_ops=['force_token'],
+ expected_src="""
+ ...
+ i17 = int_and(i14, 255)
+ f18 = getarrayitem_raw(i8, i17, descr=...)
+ f20 = getarrayitem_raw(i8, i9, descr=...)
+ f21 = float_add(f18, f20)
+ f23 = getarrayitem_raw(i8, i10, descr=...)
+ f24 = float_add(f21, f23)
+ i26 = int_add(i6, 1)
+ i29 = int_and(i26, 255)
+ f30 = getarrayitem_raw(i8, i29, descr=...)
+ f31 = float_add(f24, f30)
+ i33 = int_add(i6, 2)
+ i36 = int_and(i33, 255)
+ f37 = getarrayitem_raw(i8, i36, descr=...)
+ ...
+ """)
diff --git a/pypy/module/pypyjit/test_pypy_c/test_pypy_c_new.py b/pypy/module/pypyjit/test_pypy_c/test_pypy_c_new.py
--- a/pypy/module/pypyjit/test_pypy_c/test_pypy_c_new.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_pypy_c_new.py
@@ -716,27 +716,6 @@
for opname in log.opnames(loop.allops(opcode="IMPORT_NAME")):
assert 'call' not in opname # no call-like opcode
- def test_arraycopy_disappears(self):
- def main(n):
- i = 0
- while i < n:
- t = (1, 2, 3, i + 1)
- t2 = t[:]
- del t
- i = t2[3]
- del t2
- return i
- #
- log = self.run(main, [500])
- assert log.result == 500
- loop, = log.loops_by_filename(self.filepath)
- assert loop.match("""
- i7 = int_lt(i5, i6)
- guard_true(i7, descr=<Guard3>)
- i9 = int_add(i5, 1)
- --TICK--
- jump(p0, p1, p2, p3, p4, i9, i6, descr=<Loop0>)
- """)
def test_boolrewrite_inverse(self):
"""
@@ -967,67 +946,6 @@
""" % (e1, e2)
yield self.run_and_check, src
- def test_array_sum(self):
- def main():
- from array import array
- img = array("i", range(128) * 5) * 480
- l, i = 0, 0
- while i < len(img):
- l += img[i]
- i += 1
- return l
- #
- log = self.run(main, [])
- assert log.result == 19507200
- loop, = log.loops_by_filename(self.filepath)
- assert loop.match("""
- i13 = int_lt(i7, i9)
- guard_true(i13, descr=<Guard3>)
- i15 = getarrayitem_raw(i10, i7, descr=<.*ArrayNoLengthDescr>)
- i16 = int_add_ovf(i8, i15)
- guard_no_overflow(descr=<Guard4>)
- i18 = int_add(i7, 1)
- --TICK--
- jump(p0, p1, p2, p3, p4, p5, p6, i18, i16, i9, i10, descr=<Loop0>)
- """)
-
- def test_array_intimg(self):
- def main():
- from array import array
- img = array('i', range(3)) * (350 * 480)
- intimg = array('i', (0,)) * (640 * 480)
- l, i = 0, 640
- while i < 640 * 480:
- assert len(img) == 3*350*480
- assert len(intimg) == 640*480
- l = l + img[i]
- intimg[i] = (intimg[i-640] + l)
- i += 1
- return intimg[i - 1]
- #
- log = self.run(main, [])
- assert log.result == 73574560
- loop, = log.loops_by_filename(self.filepath)
- assert loop.match("""
- i13 = int_lt(i8, 307200)
- guard_true(i13, descr=<Guard3>)
- # the bound check guard on img has been killed (thanks to the asserts)
- i14 = getarrayitem_raw(i10, i8, descr=<.*ArrayNoLengthDescr>)
- i15 = int_add_ovf(i9, i14)
- guard_no_overflow(descr=<Guard4>)
- i17 = int_sub(i8, 640)
- # the bound check guard on intimg has been killed (thanks to the asserts)
- i18 = getarrayitem_raw(i11, i17, descr=<.*ArrayNoLengthDescr>)
- i19 = int_add_ovf(i18, i15)
- guard_no_overflow(descr=<Guard5>)
- # on 64bit, there is a guard checking that i19 actually fits into 32bit
- ...
- setarrayitem_raw(i11, i8, _, descr=<.*ArrayNoLengthDescr>)
- i28 = int_add(i8, 1)
- --TICK--
- jump(p0, p1, p2, p3, p4, p5, p6, p7, i28, i15, i10, i11, descr=<Loop0>)
- """)
-
def test_func_defaults(self):
def main(n):
i = 1
@@ -1154,104 +1072,6 @@
""")
- def test_zeropadded(self):
- def main():
- from array import array
- class ZeroPadded(array):
- def __new__(cls, l):
- self = array.__new__(cls, 'd', range(l))
- return self
-
- def __getitem__(self, i):
- if i < 0 or i >= len(self):
- return 0
- return array.__getitem__(self, i) # ID: get
- #
- buf = ZeroPadded(2000)
- i = 10
- sa = 0
- while i < 2000 - 10:
- sa += buf[i-2] + buf[i-1] + buf[i] + buf[i+1] + buf[i+2]
- i += 1
- return sa
-
- log = self.run(main, [])
- assert log.result == 9895050.0
- loop, = log.loops_by_filename(self.filepath)
- #
- # check that the overloaded __getitem__ does not introduce double
- # array bound checks.
- #
- # The force_token()s are still there, but will be eliminated by the
- # backend regalloc, so they are harmless
- assert loop.match(ignore_ops=['force_token'],
- expected_src="""
- ...
- i20 = int_ge(i18, i8)
- guard_false(i20, descr=...)
- f21 = getarrayitem_raw(i13, i18, descr=...)
- f23 = getarrayitem_raw(i13, i14, descr=...)
- f24 = float_add(f21, f23)
- f26 = getarrayitem_raw(i13, i6, descr=...)
- f27 = float_add(f24, f26)
- i29 = int_add(i6, 1)
- i31 = int_ge(i29, i8)
- guard_false(i31, descr=...)
- f33 = getarrayitem_raw(i13, i29, descr=...)
- f34 = float_add(f27, f33)
- i36 = int_add(i6, 2)
- i38 = int_ge(i36, i8)
- guard_false(i38, descr=...)
- f39 = getarrayitem_raw(i13, i36, descr=...)
- ...
- """)
-
-
- def test_circular(self):
- def main():
- from array import array
- class Circular(array):
- def __new__(cls):
- self = array.__new__(cls, 'd', range(256))
- return self
- def __getitem__(self, i):
- assert len(self) == 256
- return array.__getitem__(self, i & 255)
- #
- buf = Circular()
- i = 10
- sa = 0
- while i < 2000 - 10:
- sa += buf[i-2] + buf[i-1] + buf[i] + buf[i+1] + buf[i+2]
- i += 1
- return sa
- #
- log = self.run(main, [])
- assert log.result == 1239690.0
- loop, = log.loops_by_filename(self.filepath)
- #
- # check that the array bound checks are removed
- #
- # The force_token()s are still there, but will be eliminated by the
- # backend regalloc, so they are harmless
- assert loop.match(ignore_ops=['force_token'],
- expected_src="""
- ...
- i17 = int_and(i14, 255)
- f18 = getarrayitem_raw(i8, i17, descr=...)
- f20 = getarrayitem_raw(i8, i9, descr=...)
- f21 = float_add(f18, f20)
- f23 = getarrayitem_raw(i8, i10, descr=...)
- f24 = float_add(f21, f23)
- i26 = int_add(i6, 1)
- i29 = int_and(i26, 255)
- f30 = getarrayitem_raw(i8, i29, descr=...)
- f31 = float_add(f24, f30)
- i33 = int_add(i6, 2)
- i36 = int_and(i33, 255)
- f37 = getarrayitem_raw(i8, i36, descr=...)
- ...
- """)
def test_min_max(self):
def main():
More information about the pypy-commit
mailing list