Author: Ronan Lamy <[email protected]>
Branch:
Changeset: r82678:67aa41de326b
Date: 2016-03-03 15:52 +0000
http://bitbucket.org/pypy/pypy/changeset/67aa41de326b/
Log: Reuse rdict hypothesis test in test_rordereddict.py
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
@@ -1166,50 +1166,51 @@
st_keys = sampled_from(keytypes_s)
st_values = sampled_from(keytypes_s + [SomeString(can_be_None=True)])
-class Space(object):
+class MappingSpace(object):
def __init__(self, s_key, s_value):
self.s_key = s_key
self.s_value = s_value
rtyper = PseudoRTyper()
r_key = s_key.rtyper_makerepr(rtyper)
r_value = s_value.rtyper_makerepr(rtyper)
- dictrepr = rdict.DictRepr(rtyper, r_key, r_value,
+ dictrepr = self.MappingRepr(rtyper, r_key, r_value,
DictKey(None, s_key),
DictValue(None, s_value))
dictrepr.setup()
- self.l_dict = rdict.ll_newdict(dictrepr.DICT)
- self.reference = {}
+ self.l_dict = self.newdict(dictrepr)
+ self.reference = self.new_reference()
self.ll_key = r_key.convert_const
self.ll_value = r_value.convert_const
def setitem(self, key, value):
ll_key = self.ll_key(key)
ll_value = self.ll_value(value)
- rdict.ll_dict_setitem(self.l_dict, ll_key, ll_value)
+ self.ll_setitem(self.l_dict, ll_key, ll_value)
self.reference[key] = value
- assert rdict.ll_contains(self.l_dict, ll_key)
+ assert self.ll_contains(self.l_dict, ll_key)
def delitem(self, key):
ll_key = self.ll_key(key)
- rdict.ll_dict_delitem(self.l_dict, ll_key)
+ self.ll_delitem(self.l_dict, ll_key)
del self.reference[key]
- assert not rdict.ll_contains(self.l_dict, ll_key)
+ assert not self.ll_contains(self.l_dict, ll_key)
def copydict(self):
- self.l_dict = rdict.ll_copy(self.l_dict)
+ self.l_dict = self.ll_copy(self.l_dict)
+ assert self.ll_len(self.l_dict) == len(self.reference)
def cleardict(self):
- rdict.ll_clear(self.l_dict)
+ self.ll_clear(self.l_dict)
self.reference.clear()
- assert rdict.ll_dict_len(self.l_dict) == 0
+ assert self.ll_len(self.l_dict) == 0
def fullcheck(self):
- assert rdict.ll_dict_len(self.l_dict) == len(self.reference)
+ assert self.ll_len(self.l_dict) == len(self.reference)
for key, value in self.reference.iteritems():
- assert (rdict.ll_dict_getitem(self.l_dict, self.ll_key(key)) ==
+ assert (self.ll_getitem(self.l_dict, self.ll_key(key)) ==
self.ll_value(value))
-class StressTest(GenericStateMachine):
+class MappingSM(GenericStateMachine):
def __init__(self):
self.space = None
@@ -1239,7 +1240,7 @@
def execute_step(self, action):
if action.method == 'setup':
- self.space = Space(*action.args)
+ self.space = self.Space(*action.args)
self.st_keys = ann2strategy(self.space.s_key)
self.st_values = ann2strategy(self.space.s_value)
return
@@ -1250,5 +1251,24 @@
if self.space:
self.space.fullcheck()
+
+class DictSpace(MappingSpace):
+ MappingRepr = rdict.DictRepr
+ new_reference = dict
+ ll_getitem = staticmethod(rdict.ll_dict_getitem)
+ ll_setitem = staticmethod(rdict.ll_dict_setitem)
+ ll_delitem = staticmethod(rdict.ll_dict_delitem)
+ ll_len = staticmethod(rdict.ll_dict_len)
+ ll_contains = staticmethod(rdict.ll_contains)
+ ll_copy = staticmethod(rdict.ll_copy)
+ ll_clear = staticmethod(rdict.ll_clear)
+
+ def newdict(self, repr):
+ return rdict.ll_newdict(repr.DICT)
+
+class DictSM(MappingSM):
+ Space = DictSpace
+
def test_hypothesis():
- run_state_machine_as_test(StressTest, settings(max_examples=500,
stateful_step_count=100))
+ run_state_machine_as_test(
+ DictSM, settings(max_examples=500, stateful_step_count=100))
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
@@ -1,14 +1,18 @@
-
import py
from collections import OrderedDict
+from hypothesis import settings
+from hypothesis.stateful import run_state_machine_as_test
+
from rpython.rtyper.lltypesystem import lltype, rffi
from rpython.rtyper.lltypesystem import rordereddict, rstr
from rpython.rlib.rarithmetic import intmask
from rpython.rtyper.annlowlevel import llstr, hlstr
-from rpython.rtyper.test.test_rdict import BaseTestRDict
+from rpython.rtyper.test.test_rdict import (
+ BaseTestRDict, MappingSpace, MappingSM)
from rpython.rlib import objectmodel
+rodct = rordereddict
def get_indexes(ll_d):
return ll_d.indexes._obj.container._as_ptr()
@@ -451,3 +455,50 @@
print 'current dict length:', referencelength
assert l_dict.num_live_items == referencelength
complete_check()
+
+
+class ODictSpace(MappingSpace):
+ MappingRepr = rodct.OrderedDictRepr
+ new_reference = OrderedDict
+ ll_getitem = staticmethod(rodct.ll_dict_getitem)
+ ll_setitem = staticmethod(rodct.ll_dict_setitem)
+ ll_delitem = staticmethod(rodct.ll_dict_delitem)
+ ll_len = staticmethod(rodct.ll_dict_len)
+ ll_contains = staticmethod(rodct.ll_dict_contains)
+ ll_copy = staticmethod(rodct.ll_dict_copy)
+ ll_clear = staticmethod(rodct.ll_dict_clear)
+
+ def newdict(self, repr):
+ return rodct.ll_newdict(repr.DICT)
+
+ def get_keys(self):
+ DICT = lltype.typeOf(self.l_dict).TO
+ ITER = rordereddict.get_ll_dictiter(lltype.Ptr(DICT))
+ ll_iter = rordereddict.ll_dictiter(ITER, self.l_dict)
+ ll_dictnext = rordereddict._ll_dictnext
+ keys_ll = []
+ while True:
+ try:
+ num = ll_dictnext(ll_iter)
+ keys_ll.append(self.l_dict.entries[num].key)
+ except StopIteration:
+ break
+ return keys_ll
+
+ def fullcheck(self):
+ # overridden to also check key order
+ assert self.ll_len(self.l_dict) == len(self.reference)
+ keys_ll = self.get_keys()
+ assert len(keys_ll) == len(self.reference)
+ for key, ll_key in zip(self.reference, keys_ll):
+ assert self.ll_key(key) == ll_key
+ assert (self.ll_getitem(self.l_dict, self.ll_key(key)) ==
+ self.ll_value(self.reference[key]))
+
+
+class ODictSM(MappingSM):
+ Space = ODictSpace
+
+def test_hypothesis():
+ run_state_machine_as_test(
+ ODictSM, settings(max_examples=500, stateful_step_count=100))
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit