[pypy-commit] pypy default: Simplify tests by using a dict as the reference.
rlamy
pypy.commits at gmail.com
Sat Feb 27 14:52:36 EST 2016
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch:
Changeset: r82592:56afe29ed2bf
Date: 2016-02-27 16:35 +0100
http://bitbucket.org/pypy/pypy/changeset/56afe29ed2bf/
Log: Simplify tests by using a dict as the reference.
diff --git a/rpython/rtyper/test/test_rdict.py b/rpython/rtyper/test/test_rdict.py
--- a/rpython/rtyper/test/test_rdict.py
+++ b/rpython/rtyper/test/test_rdict.py
@@ -1,5 +1,8 @@
from rpython.translator.translator import TranslationContext
+from rpython.annotator import model as annmodel
+from rpython.annotator.dictdef import DictKey, DictValue
from rpython.rtyper.lltypesystem import lltype, rffi
+from rpython.rtyper.lltypesystem.rstr import string_repr
from rpython.rtyper import rint
from rpython.rtyper.lltypesystem import rdict, rstr
from rpython.rtyper.test.tool import BaseRtypingTest
@@ -1182,113 +1185,88 @@
count_frees += 1
assert count_frees >= 3
+N_KEYS = 400
def test_stress():
- from rpython.annotator.dictdef import DictKey, DictValue
- from rpython.annotator import model as annmodel
dictrepr = rdict.DictRepr(None, rint.signed_repr, rint.signed_repr,
DictKey(None, annmodel.SomeInteger()),
DictValue(None, annmodel.SomeInteger()))
dictrepr.setup()
l_dict = rdict.ll_newdict(dictrepr.DICT)
- referencetable = [None] * 400
- referencelength = 0
+ reference = {}
value = 0
+ def check_value(n):
+ try:
+ gotvalue = rdict.ll_dict_getitem(l_dict, n)
+ except KeyError:
+ n not in reference
+ else:
+ assert gotvalue == reference[n]
+
def complete_check():
- for n, refvalue in zip(range(len(referencetable)), referencetable):
- try:
- gotvalue = rdict.ll_dict_getitem(l_dict, n)
- except KeyError:
- assert refvalue is None
- else:
- assert gotvalue == refvalue
+ for n in range(N_KEYS):
+ check_value(n)
for x in not_really_random():
n = int(x*100.0) # 0 <= x < 400
op = repr(x)[-1]
- if op <= '2' and referencetable[n] is not None:
+ if op <= '2' and n in reference:
rdict.ll_dict_delitem(l_dict, n)
- referencetable[n] = None
- referencelength -= 1
+ del reference[n]
elif op <= '6':
rdict.ll_dict_setitem(l_dict, n, value)
- if referencetable[n] is None:
- referencelength += 1
- referencetable[n] = value
+ reference[n] = value
value += 1
else:
- try:
- gotvalue = rdict.ll_dict_getitem(l_dict, n)
- except KeyError:
- assert referencetable[n] is None
- else:
- assert gotvalue == referencetable[n]
+ check_value(n)
if 1.38 <= x <= 1.39:
complete_check()
- print 'current dict length:', referencelength
- assert l_dict.num_items == referencelength
+ print 'current dict length:', len(reference)
+ assert l_dict.num_items == len(reference)
complete_check()
+
@py.test.mark.parametrize('key_can_be_none', [True, False])
@py.test.mark.parametrize('value_can_be_none', [True, False])
def test_stress_2(key_can_be_none, value_can_be_none):
- from rpython.rtyper.lltypesystem.rstr import string_repr
- from rpython.annotator.dictdef import DictKey, DictValue
- from rpython.annotator import model as annmodel
-
- print
- print "Testing combination with can_be_None: keys %s, values %s" % (
- key_can_be_none, value_can_be_none)
-
class PseudoRTyper:
cache_dummy_values = {}
dictrepr = rdict.DictRepr(PseudoRTyper(), string_repr, string_repr,
DictKey(None, annmodel.SomeString(key_can_be_none)),
DictValue(None, annmodel.SomeString(value_can_be_none)))
dictrepr.setup()
- print dictrepr.lowleveltype
- for key, value in dictrepr.DICTENTRY._adtmeths.items():
- print ' %s = %s' % (key, value)
l_dict = rdict.ll_newdict(dictrepr.DICT)
- referencetable = [None] * 400
- referencelength = 0
+ reference = {}
values = not_really_random()
- keytable = [string_repr.convert_const("foo%d" % n)
- for n in range(len(referencetable))]
+ keytable = [string_repr.convert_const("foo%d" % n) for n in range(N_KEYS)]
+
+ def check_value(n):
+ try:
+ gotvalue = rdict.ll_dict_getitem(l_dict, keytable[n])
+ except KeyError:
+ assert n not in reference
+ else:
+ assert gotvalue == reference[n]
def complete_check():
- for n, refvalue in zip(range(len(referencetable)), referencetable):
- try:
- gotvalue = rdict.ll_dict_getitem(l_dict, keytable[n])
- except KeyError:
- assert refvalue is None
- else:
- assert gotvalue == refvalue
+ for n in range(N_KEYS):
+ check_value(n)
for x in not_really_random():
n = int(x*100.0) # 0 <= x < 400
op = repr(x)[-1]
- if op <= '2' and referencetable[n] is not None:
+ if op <= '2' and n in reference:
rdict.ll_dict_delitem(l_dict, keytable[n])
- referencetable[n] = None
- referencelength -= 1
+ del reference[n]
elif op <= '6':
ll_value = string_repr.convert_const(str(values.next()))
rdict.ll_dict_setitem(l_dict, keytable[n], ll_value)
- if referencetable[n] is None:
- referencelength += 1
- referencetable[n] = ll_value
+ reference[n] = ll_value
else:
- try:
- gotvalue = rdict.ll_dict_getitem(l_dict, keytable[n])
- except KeyError:
- assert referencetable[n] is None
- else:
- assert gotvalue == referencetable[n]
+ check_value(n)
if 1.38 <= x <= 1.39:
complete_check()
- print 'current dict length:', referencelength
- assert l_dict.num_items == referencelength
+ print 'current dict length:', len(reference)
+ assert l_dict.num_items == len(reference)
complete_check()
-
More information about the pypy-commit
mailing list