class A(object): def __init__(self): self.d = RWeakValueDictionary(str, A) def f(self, key): a = A() self.d.set(key, a) return a
def f(n): x = X() if n: d = empty else: d = RWeakValueDictionary(str, X) d.set("a", x) return d.get("a") is x
def f(n): x = X() if n: d = None else: d = RWeakValueDictionary(str, X) d.set("a", x) return g(d, "a") is x
def test_translation_prebuilt_2(): from rpython.rlib import rsiphash d = RWeakValueDictionary(str, X) k1 = "key1"; k2 = "key2" x1 = X(); x2 = X() d.set(k1, x1) d.set(k2, x2) def f(): rsiphash.enable_siphash24() i = nonconst.NonConstant(1) assert d.get("key%d" % (i,)) is x1 assert d.get("key%d" % (i+1,)) is x2 fc = compile(f, [], gcpolicy="boehm", rweakref=True) fc()
def test_translation_prebuilt_1(): class K: pass d = RWeakValueDictionary(K, X) k1 = K(); k2 = K() x1 = X(); x2 = X() d.set(k1, x1) d.set(k2, x2) def f(): assert d.get(k1) is x1 assert d.get(k2) is x2 f() fc = compile(f, [], gcpolicy="boehm", rweakref=True) fc()
def test_rpython_prebuilt(): d = RWeakValueDictionary(str, X) living = [X() for i in range(8)] for i in range(8): d.set(str(i), living[i]) # def f(): x = X() for i in range(8, 13): d.set(str(i), x) for i in range(0, 8): assert d.get(str(i)) is living[i] for i in range(8, 13): assert d.get(str(i)) is x assert d.get("foobar") is None # f() interpret(f, [])
def f(): keys.append(K()) d = RWeakValueDictionary(K, X) x1, x3 = g(d) rgc.collect(); rgc.collect() assert d.get(keys[0]) is x1 assert d.get(keys[1]) is None assert d.get(keys[2]) is x3 assert d.get(keys[3]) is None d.set(keys[0], None) assert d.get(keys[0]) is None assert d.get(keys[1]) is None assert d.get(keys[2]) is x3 assert d.get(keys[3]) is None
def make_weak_value_dictionary(space, keytype, valuetype): if space.config.translation.rweakref: from rpython.rlib.rweakref import RWeakValueDictionary return RWeakValueDictionary(keytype, valuetype) else: class FakeWeakValueDict(object): def __init__(self): self._dict = {} def get(self, key): return self._dict.get(key, None) def set(self, key, value): self._dict[key] = value return FakeWeakValueDict()
def test_rpython_merge_RWeakValueDictionary(): empty = RWeakValueDictionary(str, X) def f(n): x = X() if n: d = empty else: d = RWeakValueDictionary(str, X) d.set("a", x) return d.get("a") is x assert f(0) assert interpret(f, [0]) assert not f(1) assert not interpret(f, [1])
def f(): d = RWeakValueDictionary(keyclass, X) x1, x3 = g(d) rgc.collect() rgc.collect() assert d.get(keys[0]) is x1 assert d.get(keys[1]) is None assert d.get(keys[2]) is x3 assert d.get(keys[3]) is None d.set(keys[0], None) assert d.get(keys[0]) is None assert d.get(keys[1]) is None assert d.get(keys[2]) is x3 assert d.get(keys[3]) is None # resizing should also work for i in range(loop): d.set(make_key(i), x1) for i in range(loop): assert d.get(make_key(i)) is x1 assert d.get(keys[0]) is None assert d.get(keys[1]) is None assert d.get(keys[2]) is x3 assert d.get(keys[3]) is None # a subclass y = Y() d.set(keys[3], y) assert d.get(keys[3]) is y # storing a lot of Nones for i in range(loop, loop * 2 - 5): d.set(make_key(1000 + i), x1) for i in range(loop): d.set(make_key(i), None) for i in range(loop): assert d.get(make_key(i)) is None assert d.get(keys[0]) is None assert d.get(keys[1]) is None assert d.get(keys[2]) is x3 assert d.get(keys[3]) is y for i in range(loop, loop * 2 - 5): assert d.get(make_key(1000 + i)) is x1
def g(): X() Y() RWeakValueDictionary(str, X).get("foobar") RWeakValueDictionary(int, Y).get(42)
def g(x): if x: d = RWeakValueDictionary(str, X) else: d = RWeakValueDictionary(str, Y) d.set("x", X())
def __init__(self): self.d = RWeakValueDictionary(str, A)