Author: Amaury Forgeot d'Arc <[email protected]>
Branch:
Changeset: r63665:d47342f86927
Date: 2013-04-26 22:07 +0200
http://bitbucket.org/pypy/pypy/changeset/d47342f86927/
Log: Fix tests when run with -A: CPython folds constants differently. In
particular, unused values are not removed from co_consts.
diff --git a/pypy/interpreter/test/test_compiler.py
b/pypy/interpreter/test/test_compiler.py
--- a/pypy/interpreter/test/test_compiler.py
+++ b/pypy/interpreter/test/test_compiler.py
@@ -765,6 +765,9 @@
class AppTestOptimizer:
+ def setup_class(cls):
+ cls.w_runappdirect = cls.space.wrap(cls.runappdirect)
+
def test_remove_ending(self):
source = """def f():
return 3
@@ -785,7 +788,8 @@
def test_none_constant(self):
import opcode
co = compile("def f(): return None", "<test>", "exec").co_consts[0]
- assert "None" not in co.co_names
+ if not self.runappdirect: # This is a pypy optimization
+ assert "None" not in co.co_names
co = co.co_code
op = ord(co[0]) + (ord(co[1]) << 8)
assert op == opcode.opmap["LOAD_CONST"]
@@ -800,29 +804,48 @@
def code(source):
return compile(source, "<test>", "exec")
co = code("x = 10//4")
- assert len(co.co_consts) == 2
- assert co.co_consts[0] == 2
+ if self.runappdirect:
+ assert 2 in co.co_consts
+ else:
+ # PyPy is more precise
+ assert len(co.co_consts) == 2
+ assert co.co_consts[0] == 2
co = code("x = 10/4")
assert len(co.co_consts) == 3
assert co.co_consts[:2] == (10, 4)
co = code("from __future__ import division\nx = 10/4")
- assert co.co_consts[2] == 2.5
+ if self.runappdirect:
+ assert 2.5 in co.co_consts
+ else:
+ assert co.co_consts[2] == 2.5
def test_tuple_folding(self):
co = compile("x = (1, 2, 3)", "<test>", "exec")
- assert co.co_consts == ((1, 2, 3), None)
+ if not self.runappdirect:
+ # PyPy is more precise
+ assert co.co_consts == ((1, 2, 3), None)
+ else:
+ assert (1, 2, 3) in co.co_consts
+ assert None in co.co_consts
co = compile("x = ()", "<test>", "exec")
- assert co.co_consts == ((), None)
+ assert set(co.co_consts) == set(((), None))
def test_unary_folding(self):
+ def check_const(co, value):
+ assert value in co.co_consts
+ if not self.runappdirect:
+ # This is a pypy optimization
+ assert co.co_consts[0] == value
co = compile("x = -(3)", "<test>", "exec")
- assert co.co_consts[0] == -3
+ check_const(co, -3)
co = compile("x = ~3", "<test>", "exec")
- assert co.co_consts[0] == ~3
+ check_const(co, ~3)
co = compile("x = +(-3)", "<test>", "exec")
- assert co.co_consts[0] == -3
+ check_const(co, -3)
co = compile("x = not None", "<test>", "exec")
- assert co.co_consts[0] is True
+ if not self.runappdirect:
+ # CPython does not have this optimization
+ assert co.co_consts == (True, None)
def test_folding_of_binops_on_constants(self):
def disassemble(func):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit