예제 #1
0
 class A(object):
     def __init__(self):
         self.d = RWeakValueDictionary(str, A)
     def f(self, key):
         a = A()
         self.d.set(key, a)
         return a
예제 #2
0
 class A(object):
     def __init__(self):
         self.d = RWeakValueDictionary(str, A)
     def f(self, key):
         a = A()
         self.d.set(key, a)
         return a
예제 #3
0
 def f(n):
     x = X()
     if n:
         d = empty
     else:
         d = RWeakValueDictionary(str, X)
         d.set("a", x)
     return d.get("a") is x
예제 #4
0
 def f(n):
     x = X()
     if n:
         d = None
     else:
         d = RWeakValueDictionary(str, X)
         d.set("a", x)
     return g(d, "a") is x
예제 #5
0
 def f(n):
     x = X()
     if n:
         d = None
     else:
         d = RWeakValueDictionary(str, X)
         d.set("a", x)
     return g(d, "a") is x
예제 #6
0
 def f(n):
     x = X()
     if n:
         d = empty
     else:
         d = RWeakValueDictionary(str, X)
         d.set("a", x)
     return d.get("a") is x
예제 #7
0
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()
예제 #8
0
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()
예제 #9
0
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, [])
예제 #10
0
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, [])
예제 #11
0
 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
예제 #12
0
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()
예제 #13
0
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])
예제 #14
0
 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
예제 #15
0
 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
예제 #16
0
 def g():
     X()
     Y()
     RWeakValueDictionary(str, X).get("foobar")
     RWeakValueDictionary(int, Y).get(42)
예제 #17
0
 def g(x):
     if x:
         d = RWeakValueDictionary(str, X)
     else:
         d = RWeakValueDictionary(str, Y)
     d.set("x", X())
예제 #18
0
 def __init__(self):
     self.d = RWeakValueDictionary(str, A)
예제 #19
0
 def __init__(self):
     self.d = RWeakValueDictionary(str, A)
예제 #20
0
 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
예제 #21
0
 def g(x):
     if x:
         d = RWeakValueDictionary(str, X)
     else:
         d = RWeakValueDictionary(str, Y)
     d.set("x", X())