Author: Armin Rigo <ar...@tunes.org> Branch: rpython-hash Changeset: r89789:90dc3abfc8f2 Date: 2017-01-26 16:55 +0100 http://bitbucket.org/pypy/pypy/changeset/90dc3abfc8f2/
Log: Check popitem() in the hypothesis test 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 @@ -1155,6 +1155,8 @@ class MappingSpace(object): def __init__(self, s_key, s_value): + from rpython.rtyper.rtuple import TupleRepr + self.s_key = s_key self.s_value = s_value rtyper = PseudoRTyper() @@ -1168,6 +1170,8 @@ self.reference = self.new_reference() self.ll_key = r_key.convert_const self.ll_value = r_value.convert_const + r_tuple = TupleRepr(rtyper, [r_key, r_value]) + self.TUPLE = r_tuple.lowleveltype def setitem(self, key, value): ll_key = self.ll_key(key) @@ -1191,6 +1195,22 @@ self.reference.clear() assert self.ll_len(self.l_dict) == 0 + def popitem(self): + try: + ll_tuple = self.ll_popitem(self.TUPLE, self.l_dict) + except KeyError: + assert len(self.reference) == 0 + else: + ll_key = ll_tuple.item0 + ll_value = ll_tuple.item1 + for key, value in self.reference.iteritems(): + if self.ll_key(key) == ll_key: + assert self.ll_value(value) == ll_value + del self.reference[key] + break + else: + raise AssertionError("popitem() returned unexpected key") + def fullcheck(self): assert self.ll_len(self.l_dict) == len(self.reference) for key, value in self.reference.iteritems(): @@ -1217,7 +1237,8 @@ def steps(self): if not self.space: return builds(Action, just('setup'), tuples(st_keys, st_values)) - global_actions = [Action('copydict', ()), Action('cleardict', ())] + global_actions = [Action('copydict', ()), Action('cleardict', ()), + Action('popitem', ())] if self.space.reference: return ( self.st_setitem() | sampled_from(global_actions) | @@ -1249,6 +1270,7 @@ ll_contains = staticmethod(rdict.ll_contains) ll_copy = staticmethod(rdict.ll_copy) ll_clear = staticmethod(rdict.ll_clear) + ll_popitem = staticmethod(rdict.ll_popitem) def newdict(self, repr): return rdict.ll_newdict(repr.DICT) diff --git a/rpython/rtyper/test/test_rordereddict.py b/rpython/rtyper/test/test_rordereddict.py --- a/rpython/rtyper/test/test_rordereddict.py +++ b/rpython/rtyper/test/test_rordereddict.py @@ -345,6 +345,7 @@ ll_contains = staticmethod(rodct.ll_dict_contains) ll_copy = staticmethod(rodct.ll_dict_copy) ll_clear = staticmethod(rodct.ll_dict_clear) + ll_popitem = staticmethod(rodct.ll_dict_popitem) def newdict(self, repr): return rodct.ll_newdict(repr.DICT) @@ -363,6 +364,20 @@ break return keys_ll + def popitem(self): + # overridden to check that we're getting the most recent key, + # not a random one + try: + ll_tuple = self.ll_popitem(self.TUPLE, self.l_dict) + except KeyError: + assert len(self.reference) == 0 + else: + ll_key = ll_tuple.item0 + ll_value = ll_tuple.item1 + key, value = self.reference.popitem() + assert self.ll_key(key) == ll_key + assert self.ll_value(value) == ll_value + def fullcheck(self): # overridden to also check key order assert self.ll_len(self.l_dict) == len(self.reference) @@ -379,4 +394,4 @@ def test_hypothesis(): run_state_machine_as_test( - ODictSM, settings(max_examples=500, stateful_step_count=100)) + ODictSM, settings(max_examples=50000, stateful_step_count=100)) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit