[pypy-commit] pypy default: Slight rewrite of these tests: if they fail, it may be because
arigo
noreply at buildbot.pypy.org
Tue Aug 16 13:05:07 CEST 2011
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r46532:39f3171067b9
Date: 2011-08-16 13:08 +0200
http://bitbucket.org/pypy/pypy/changeset/39f3171067b9/
Log: Slight rewrite of these tests: if they fail, it may be because of
some hash collision. In this case, try again, up to 20 times.
diff --git a/pypy/objspace/std/test/test_mapdict.py b/pypy/objspace/std/test/test_mapdict.py
--- a/pypy/objspace/std/test/test_mapdict.py
+++ b/pypy/objspace/std/test/test_mapdict.py
@@ -1000,45 +1000,57 @@
def test_mix_classes(self):
import __pypy__
- class A(object):
- def f(self):
- return 42
- class B(object):
- def f(self):
- return 43
- class C(object):
- def f(self):
- return 44
- l = [A(), B(), C()] * 10
- __pypy__.reset_method_cache_counter()
- # 'exec' to make sure that a.f() is compiled with CALL_METHOD
- exec """for i, a in enumerate(l):
- assert a.f() == 42 + i % 3
-"""
- cache_counter = __pypy__.mapdict_cache_counter("f")
- assert cache_counter[0] >= 15
- assert cache_counter[1] >= 3 # should be (27, 3)
- assert sum(cache_counter) == 30
+ seen = []
+ for i in range(20):
+ class A(object):
+ def f(self):
+ return 42
+ class B(object):
+ def f(self):
+ return 43
+ class C(object):
+ def f(self):
+ return 44
+ l = [A(), B(), C()] * 10
+ __pypy__.reset_method_cache_counter()
+ # 'exec' to make sure that a.f() is compiled with CALL_METHOD
+ exec """for i, a in enumerate(l):
+ assert a.f() == 42 + i % 3
+ """ in locals()
+ cache_counter = __pypy__.mapdict_cache_counter("f")
+ if cache_counter == (27, 3):
+ break
+ # keep them alive, to make sure that on the
+ # next try they have difference addresses
+ seen.append((l, cache_counter))
+ else:
+ assert 0, "failed: got %r" % ([got[1] for got in seen],)
def test_mix_classes_attribute(self):
import __pypy__
- class A(object):
- def __init__(self):
- self.x = 42
- class B(object):
- def __init__(self):
- self.x = 43
- class C(object):
- def __init__(self):
- self.x = 44
- l = [A(), B(), C()] * 10
- __pypy__.reset_method_cache_counter()
- for i, a in enumerate(l):
- assert a.x == 42 + i % 3
- cache_counter = __pypy__.mapdict_cache_counter("x")
- assert cache_counter[0] >= 15
- assert cache_counter[1] >= 3 # should be (27, 3)
- assert sum(cache_counter) == 30
+ seen = []
+ for i in range(20):
+ class A(object):
+ def __init__(self):
+ self.x = 42
+ class B(object):
+ def __init__(self):
+ self.x = 43
+ class C(object):
+ def __init__(self):
+ self.x = 44
+ l = [A(), B(), C()] * 10
+ __pypy__.reset_method_cache_counter()
+ for i, a in enumerate(l):
+ assert a.x == 42 + i % 3
+ cache_counter = __pypy__.mapdict_cache_counter("x")
+ if cache_counter == (27, 3):
+ break
+ # keep them alive, to make sure that on the
+ # next try they have difference addresses
+ seen.append((l, cache_counter))
+ else:
+ assert 0, "failed: got %r" % ([got[1] for got in seen],)
class TestDictSubclassShortcutBug(object):
def setup_class(cls):
More information about the pypy-commit
mailing list