Exemplo n.º 1
0
    def test_direct_move_to_end(self, lst):
        DICT = self._get_int_dict()
        ll_d = rordereddict.ll_newdict(DICT)
        rordereddict.ll_dict_setitem(ll_d, 1, 11)
        rordereddict.ll_dict_setitem(ll_d, 2, 22)

        def content():
            return [(entry.key, entry.value) for entry in self._ll_iter(ll_d)]

        for case in lst:
            if case == 1:
                rordereddict.ll_dict_move_to_end(ll_d, 1, True)
                assert content() == [(2, 22), (1, 11)]
            elif case == 2:
                rordereddict.ll_dict_move_to_end(ll_d, 2, True)
                assert content() == [(1, 11), (2, 22)]
            elif case == 3:
                py.test.raises(KeyError, rordereddict.ll_dict_move_to_end,
                               ll_d, 3, True)
            elif case == 4:
                rordereddict.ll_dict_move_to_end(ll_d, 2, False)
                assert content() == [(2, 22), (1, 11)]
            elif case == 5:
                rordereddict.ll_dict_move_to_end(ll_d, 1, False)
                assert content() == [(1, 11), (2, 22)]
Exemplo n.º 2
0
 def test_dict_iteration(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 2)
     assert [hlstr(entry.key)
             for entry in self._ll_iter(ll_d)] == ["k", "j"]
Exemplo n.º 3
0
 def test_dict_creation_2(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     llab = llstr("ab")
     llb = llstr("b")
     rordereddict.ll_dict_setitem(ll_d, llab, 1)
     rordereddict.ll_dict_setitem(ll_d, llb, 2)
     assert rordereddict.ll_dict_getitem(ll_d, llb) == 2
Exemplo n.º 4
0
 def test_dict_creation_2(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     llab = llstr("ab")
     llb = llstr("b")
     rordereddict.ll_dict_setitem(ll_d, llab, 1)
     rordereddict.ll_dict_setitem(ll_d, llb, 2)
     assert rordereddict.ll_dict_getitem(ll_d, llb) == 2
Exemplo n.º 5
0
 def test_dict_del_not_lastitem(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("abc"), 13)
     rordereddict.ll_dict_setitem(ll_d, llstr("def"), 15)
     rordereddict.ll_dict_delitem(ll_d, llstr("abc"))
     assert count_items(ll_d, rordereddict.FREE) == rordereddict.DICT_INITSIZE - 2
     assert count_items(ll_d, rordereddict.DELETED) == 1
Exemplo n.º 6
0
 def test_dict_grow_cleanup(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     lls = llstr("a")
     for i in range(40):
         rordereddict.ll_dict_setitem(ll_d, lls, i)
         rordereddict.ll_dict_delitem(ll_d, lls)
     assert ll_d.num_ever_used_items <= 10
Exemplo n.º 7
0
 def test_bug_remove_deleted_items(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     for i in range(15):
         rordereddict.ll_dict_setitem(ll_d, llstr(chr(i)), 5)
     for i in range(15):
         rordereddict.ll_dict_delitem(ll_d, llstr(chr(i)))
     rordereddict.ll_prepare_dict_update(ll_d, 7)
Exemplo n.º 8
0
 def test_setdefault(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     assert rordereddict.ll_dict_setdefault(ll_d, llstr("j"), 42) == 42
     assert rordereddict.ll_dict_getitem(ll_d, llstr("j")) == 42
     assert rordereddict.ll_dict_setdefault(ll_d, llstr("k"), 42) == 1
     assert rordereddict.ll_dict_getitem(ll_d, llstr("k")) == 1
Exemplo n.º 9
0
 def test_dict_grow_cleanup(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     lls = llstr("a")
     for i in range(40):
         rordereddict.ll_dict_setitem(ll_d, lls, i)
         rordereddict.ll_dict_delitem(ll_d, lls)
     assert ll_d.num_ever_used_items <= 10
Exemplo n.º 10
0
 def test_dict_del_not_lastitem(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("abc"), 13)
     rordereddict.ll_dict_setitem(ll_d, llstr("def"), 15)
     rordereddict.ll_dict_delitem(ll_d, llstr("abc"))
     assert count_items(ll_d, rordereddict.FREE) == rordereddict.DICT_INITSIZE - 2
     assert count_items(ll_d, rordereddict.DELETED) == 1
Exemplo n.º 11
0
 def test_bug_remove_deleted_items(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     for i in range(15):
         rordereddict.ll_dict_setitem(ll_d, llstr(chr(i)), 5)
     for i in range(15):
         rordereddict.ll_dict_delitem(ll_d, llstr(chr(i)))
     rordereddict.ll_prepare_dict_update(ll_d, 7)
Exemplo n.º 12
0
 def test_setdefault(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     assert rordereddict.ll_dict_setdefault(ll_d, llstr("j"), 42) == 42
     assert rordereddict.ll_dict_getitem(ll_d, llstr("j")) == 42
     assert rordereddict.ll_dict_setdefault(ll_d, llstr("k"), 42) == 1
     assert rordereddict.ll_dict_getitem(ll_d, llstr("k")) == 1
Exemplo n.º 13
0
 def test_pop(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 5)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 6)
     assert rordereddict.ll_dict_pop(ll_d, llstr("k")) == 5
     assert rordereddict.ll_dict_pop(ll_d, llstr("j")) == 6
     py.test.raises(KeyError, rordereddict.ll_dict_pop, ll_d, llstr("k"))
     py.test.raises(KeyError, rordereddict.ll_dict_pop, ll_d, llstr("j"))
Exemplo n.º 14
0
 def test_direct_enter_and_del(self):
     DICT = self._get_int_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     numbers = [i * rordereddict.DICT_INITSIZE + 1 for i in range(8)]
     for num in numbers:
         rordereddict.ll_dict_setitem(ll_d, num, 1)
         rordereddict.ll_dict_delitem(ll_d, num)
         for k in foreach_index(ll_d):
             assert k < rordereddict.VALID_OFFSET
Exemplo n.º 15
0
 def test_pop(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 5)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 6)
     assert rordereddict.ll_dict_pop(ll_d, llstr("k")) == 5
     assert rordereddict.ll_dict_pop(ll_d, llstr("j")) == 6
     py.test.raises(KeyError, rordereddict.ll_dict_pop, ll_d, llstr("k"))
     py.test.raises(KeyError, rordereddict.ll_dict_pop, ll_d, llstr("j"))
Exemplo n.º 16
0
 def test_pop_default(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 5)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 6)
     assert rordereddict.ll_dict_pop_default(ll_d, llstr("k"), 42) == 5
     assert rordereddict.ll_dict_pop_default(ll_d, llstr("j"), 41) == 6
     assert rordereddict.ll_dict_pop_default(ll_d, llstr("k"), 40) == 40
     assert rordereddict.ll_dict_pop_default(ll_d, llstr("j"), 39) == 39
Exemplo n.º 17
0
 def test_pop_default(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 5)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 6)
     assert rordereddict.ll_dict_pop_default(ll_d, llstr("k"), 42) == 5
     assert rordereddict.ll_dict_pop_default(ll_d, llstr("j"), 41) == 6
     assert rordereddict.ll_dict_pop_default(ll_d, llstr("k"), 40) == 40
     assert rordereddict.ll_dict_pop_default(ll_d, llstr("j"), 39) == 39
Exemplo n.º 18
0
 def test_copy(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 2)
     ll_d2 = rordereddict.ll_dict_copy(ll_d)
     for ll_d3 in [ll_d, ll_d2]:
         assert rordereddict.ll_dict_getitem(ll_d3, llstr("k")) == 1
         assert rordereddict.ll_dict_get(ll_d3, llstr("j"), 42) == 2
         assert rordereddict.ll_dict_get(ll_d3, llstr("i"), 42) == 42
Exemplo n.º 19
0
 def test_dict_del_lastitem(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     py.test.raises(KeyError, rordereddict.ll_dict_delitem, ll_d, llstr("abc"))
     rordereddict.ll_dict_setitem(ll_d, llstr("abc"), 13)
     py.test.raises(KeyError, rordereddict.ll_dict_delitem, ll_d, llstr("def"))
     rordereddict.ll_dict_delitem(ll_d, llstr("abc"))
     assert count_items(ll_d, rordereddict.FREE) == rordereddict.DICT_INITSIZE - 1
     assert count_items(ll_d, rordereddict.DELETED) == 1
     py.test.raises(KeyError, rordereddict.ll_dict_getitem, ll_d, llstr("abc"))
Exemplo n.º 20
0
 def test_dict_del_lastitem(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     py.test.raises(KeyError, rordereddict.ll_dict_delitem, ll_d, llstr("abc"))
     rordereddict.ll_dict_setitem(ll_d, llstr("abc"), 13)
     py.test.raises(KeyError, rordereddict.ll_dict_delitem, ll_d, llstr("def"))
     rordereddict.ll_dict_delitem(ll_d, llstr("abc"))
     assert count_items(ll_d, rordereddict.FREE) == rordereddict.DICT_INITSIZE - 1
     assert count_items(ll_d, rordereddict.DELETED) == 1
     py.test.raises(KeyError, rordereddict.ll_dict_getitem, ll_d, llstr("abc"))
Exemplo n.º 21
0
 def test_dict_store_get(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     for i in range(20):
         for j in range(i):
             assert rordereddict.ll_dict_getitem(ll_d, llstr(str(j))) == j
         rordereddict.ll_dict_setitem(ll_d, llstr(str(i)), i)
     assert ll_d.num_live_items == 20
     for i in range(20):
         assert rordereddict.ll_dict_getitem(ll_d, llstr(str(i))) == i
Exemplo n.º 22
0
 def test_copy(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 2)
     ll_d2 = rordereddict.ll_dict_copy(ll_d)
     for ll_d3 in [ll_d, ll_d2]:
         assert rordereddict.ll_dict_getitem(ll_d3, llstr("k")) == 1
         assert rordereddict.ll_dict_get(ll_d3, llstr("j"), 42) == 2
         assert rordereddict.ll_dict_get(ll_d3, llstr("i"), 42) == 42
Exemplo n.º 23
0
 def test_dict_store_get(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     for i in range(20):
         for j in range(i):
             assert rordereddict.ll_dict_getitem(ll_d, llstr(str(j))) == j
         rordereddict.ll_dict_setitem(ll_d, llstr(str(i)), i)
     assert ll_d.num_live_items == 20
     for i in range(20):
         assert rordereddict.ll_dict_getitem(ll_d, llstr(str(i))) == i
Exemplo n.º 24
0
 def test_dict_store_get_del(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     for i in range(20):
         for j in range(0, i, 2):
             assert rordereddict.ll_dict_getitem(ll_d, llstr(str(j))) == j
         rordereddict.ll_dict_setitem(ll_d, llstr(str(i)), i)
         if i % 2 != 0:
             rordereddict.ll_dict_delitem(ll_d, llstr(str(i)))
     assert ll_d.num_live_items == 10
     for i in range(0, 20, 2):
         assert rordereddict.ll_dict_getitem(ll_d, llstr(str(i))) == i
Exemplo n.º 25
0
 def test_dict_store_get_del(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     for i in range(20):
         for j in range(0, i, 2):
             assert rordereddict.ll_dict_getitem(ll_d, llstr(str(j))) == j
         rordereddict.ll_dict_setitem(ll_d, llstr(str(i)), i)
         if i % 2 != 0:
             rordereddict.ll_dict_delitem(ll_d, llstr(str(i)))
     assert ll_d.num_live_items == 10
     for i in range(0, 20, 2):
         assert rordereddict.ll_dict_getitem(ll_d, llstr(str(i))) == i
Exemplo n.º 26
0
 def test_dict_iteration(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 2)
     ITER = rordereddict.get_ll_dictiter(lltype.Ptr(DICT))
     ll_iter = rordereddict.ll_dictiter(ITER, ll_d)
     ll_dictnext = rordereddict._ll_dictnext
     num = ll_dictnext(ll_iter)
     assert hlstr(ll_d.entries[num].key) == "k"
     num = ll_dictnext(ll_iter)
     assert hlstr(ll_d.entries[num].key) == "j"
     py.test.raises(StopIteration, ll_dictnext, ll_iter)
Exemplo n.º 27
0
 def test_dict_iteration(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 2)
     ITER = rordereddict.get_ll_dictiter(lltype.Ptr(DICT))
     ll_iter = rordereddict.ll_dictiter(ITER, ll_d)
     ll_dictnext = rordereddict._ll_dictnext
     num = ll_dictnext(ll_iter)
     assert hlstr(ll_d.entries[num].key) == "k"
     num = ll_dictnext(ll_iter)
     assert hlstr(ll_d.entries[num].key) == "j"
     py.test.raises(StopIteration, ll_dictnext, ll_iter)
Exemplo n.º 28
0
 def test_dict_iteration(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 2)
     ITER = rordereddict.get_ll_dictiter(lltype.Ptr(DICT))
     ll_iter = rordereddict.ll_dictiter(ITER, ll_d)
     ll_iterkeys = rordereddict.ll_dictnext_group['keys']
     next = ll_iterkeys(lltype.Signed, ll_iter)
     assert hlstr(next) == "k"
     next = ll_iterkeys(lltype.Signed, ll_iter)
     assert hlstr(next) == "j"
     py.test.raises(StopIteration, ll_iterkeys, lltype.Signed, ll_iter)
Exemplo n.º 29
0
 def test_popitem(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 2)
     TUP = lltype.Ptr(lltype.GcStruct('x', ('item0', lltype.Ptr(rstr.STR)),
                                           ('item1', lltype.Signed)))
     ll_elem = rordereddict.ll_dict_popitem(TUP, ll_d)
     assert hlstr(ll_elem.item0) == "j"
     assert ll_elem.item1 == 2
     ll_elem = rordereddict.ll_dict_popitem(TUP, ll_d)
     assert hlstr(ll_elem.item0) == "k"
     assert ll_elem.item1 == 1
     py.test.raises(KeyError, rordereddict.ll_dict_popitem, TUP, ll_d)
Exemplo n.º 30
0
 def test_popitem(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 2)
     TUP = lltype.Ptr(lltype.GcStruct('x', ('item0', lltype.Ptr(rstr.STR)),
                                           ('item1', lltype.Signed)))
     ll_elem = rordereddict.ll_dict_popitem(TUP, ll_d)
     assert hlstr(ll_elem.item0) == "j"
     assert ll_elem.item1 == 2
     ll_elem = rordereddict.ll_dict_popitem(TUP, ll_d)
     assert hlstr(ll_elem.item0) == "k"
     assert ll_elem.item1 == 1
     py.test.raises(KeyError, rordereddict.ll_dict_popitem, TUP, ll_d)
Exemplo n.º 31
0
    def test_direct_enter_and_del(self):
        def eq(a, b):
            return a == b

        DICT = rordereddict.get_ll_dict(lltype.Signed, lltype.Signed,
                                 ll_fasthash_function=intmask,
                                 ll_hash_function=intmask,
                                 ll_eq_function=eq)
        ll_d = rordereddict.ll_newdict(DICT)
        numbers = [i * rordereddict.DICT_INITSIZE + 1 for i in range(8)]
        for num in numbers:
            rordereddict.ll_dict_setitem(ll_d, num, 1)
            rordereddict.ll_dict_delitem(ll_d, num)
            for k in foreach_index(ll_d):
                assert k < rordereddict.VALID_OFFSET
Exemplo n.º 32
0
 def test_popitem_first_bug(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 1)
     rordereddict.ll_dict_delitem(ll_d, llstr("k"))
     ITER = rordereddict.get_ll_dictiter(lltype.Ptr(DICT))
     ll_iter = rordereddict.ll_dictiter(ITER, ll_d)
     num = rordereddict._ll_dictnext(ll_iter)
     ll_key = ll_d.entries[num].key
     assert hlstr(ll_key) == "j"
     assert ll_d.lookup_function_no == 4    # 1 free item found at the start
     rordereddict.ll_dict_delitem(ll_d, llstr("j"))
     assert ll_d.num_ever_used_items == 0
     assert ll_d.lookup_function_no == 0    # reset
Exemplo n.º 33
0
 def test_popitem_first_bug(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 1)
     rordereddict.ll_dict_delitem(ll_d, llstr("k"))
     ITER = rordereddict.get_ll_dictiter(lltype.Ptr(DICT))
     ll_iter = rordereddict.ll_dictiter(ITER, ll_d)
     num = rordereddict._ll_dictnext(ll_iter)
     ll_key = ll_d.entries[num].key
     assert hlstr(ll_key) == "j"
     assert ll_d.lookup_function_no == 4  # 1 free item found at the start
     rordereddict.ll_dict_delitem(ll_d, llstr("j"))
     assert ll_d.num_ever_used_items == 0
     assert ll_d.lookup_function_no == 0  # reset
Exemplo n.º 34
0
    def test_direct_enter_and_del(self):
        def eq(a, b):
            return a == b

        DICT = rordereddict.get_ll_dict(lltype.Signed,
                                        lltype.Signed,
                                        ll_fasthash_function=intmask,
                                        ll_hash_function=intmask,
                                        ll_eq_function=eq)
        ll_d = rordereddict.ll_newdict(DICT)
        numbers = [i * rordereddict.DICT_INITSIZE + 1 for i in range(8)]
        for num in numbers:
            rordereddict.ll_dict_setitem(ll_d, num, 1)
            rordereddict.ll_dict_delitem(ll_d, num)
            for k in foreach_index(ll_d):
                assert k < rordereddict.VALID_OFFSET
Exemplo n.º 35
0
def test_ll_get_dict_item():
    """
    Tests the low-level implementation of get_dict_item.
    """
    from rpython.annotator.annrpython import RPythonAnnotator
    from rpython.annotator.model import SomeTuple, SomeInteger, SomeString

    from rpython.rtyper.rtyper import RPythonTyper
    from rpython.rtyper.rmodel import inputconst
    from rpython.rtyper.annlowlevel import llstr, hlstr

    from rpython.rtyper.lltypesystem import lltype, rffi
    from rpython.rtyper.lltypesystem import rordereddict, rstr

    dummykeyobj = None
    dummyvalueobj = None

    def _get_str_dict():
        # STR -> lltype.Signed
        DICT = rordereddict.get_ll_dict(
            lltype.Ptr(rstr.STR),
            lltype.Signed,
            ll_fasthash_function=rstr.LLHelpers.ll_strhash,
            ll_hash_function=rstr.LLHelpers.ll_strhash,
            ll_eq_function=rstr.LLHelpers.ll_streq,
            dummykeyobj=dummykeyobj,
            dummyvalueobj=dummyvalueobj)
        return DICT

    s_tuple = SomeTuple([SomeString(), SomeInteger()])
    DICT = _get_str_dict()

    ll_d = rordereddict.ll_newdict(DICT)
    a = RPythonAnnotator()
    rtyper = RPythonTyper(a)
    a.translator.rtyper = rtyper
    r_tuple = rtyper.getrepr(s_tuple)
    cTUPLE = inputconst(lltype.Void, r_tuple.lowleveltype)
    s_tuple = rtyper.annotation(cTUPLE)
    rtyper.call_all_setups()

    for i in range(20):
        rordereddict.ll_dict_setitem(ll_d, llstr(str(i)), i)
    for i in range(20):
        element = ll_get_dict_item(s_tuple.const, ll_d, i)
        assert (str(i), i) == (hlstr(element.item0), element.item1)
Exemplo n.º 36
0
 def test_update(self):
     DICT = self._get_str_dict()
     ll_d1 = rordereddict.ll_newdict(DICT)
     ll_d2 = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d1, llstr("k"), 5)
     rordereddict.ll_dict_setitem(ll_d1, llstr("j"), 6)
     rordereddict.ll_dict_setitem(ll_d2, llstr("i"), 7)
     rordereddict.ll_dict_setitem(ll_d2, llstr("k"), 8)
     rordereddict.ll_dict_update(ll_d1, ll_d2)
     for key, value in [("k", 8), ("i", 7), ("j", 6)]:
         assert rordereddict.ll_dict_getitem(ll_d1, llstr(key)) == value
Exemplo n.º 37
0
 def test_update(self):
     DICT = self._get_str_dict()
     ll_d1 = rordereddict.ll_newdict(DICT)
     ll_d2 = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d1, llstr("k"), 5)
     rordereddict.ll_dict_setitem(ll_d1, llstr("j"), 6)
     rordereddict.ll_dict_setitem(ll_d2, llstr("i"), 7)
     rordereddict.ll_dict_setitem(ll_d2, llstr("k"), 8)
     rordereddict.ll_dict_update(ll_d1, ll_d2)
     for key, value in [("k", 8), ("i", 7), ("j", 6)]:
         assert rordereddict.ll_dict_getitem(ll_d1, llstr(key)) == value
Exemplo n.º 38
0
def test_ll_get_dict_item():
    """
    Tests the low-level implementation of get_dict_item.
    """
    from rpython.annotator.annrpython import RPythonAnnotator
    from rpython.annotator.model import SomeTuple, SomeInteger, SomeString

    from rpython.rtyper.rtyper import RPythonTyper
    from rpython.rtyper.rmodel import inputconst
    from rpython.rtyper.annlowlevel import llstr, hlstr

    from rpython.rtyper.lltypesystem import lltype, rffi
    from rpython.rtyper.lltypesystem import rordereddict, rstr

    dummykeyobj = None
    dummyvalueobj = None

    def _get_str_dict():
        # STR -> lltype.Signed
        DICT = rordereddict.get_ll_dict(lltype.Ptr(rstr.STR), lltype.Signed,
                            ll_fasthash_function=rstr.LLHelpers.ll_strhash,
                            ll_hash_function=rstr.LLHelpers.ll_strhash,
                            ll_eq_function=rstr.LLHelpers.ll_streq,
                            dummykeyobj=dummykeyobj,
                            dummyvalueobj=dummyvalueobj)
        return DICT
    s_tuple = SomeTuple([SomeString(), SomeInteger()])
    DICT = _get_str_dict()

    ll_d = rordereddict.ll_newdict(DICT)
    a = RPythonAnnotator()
    rtyper = RPythonTyper(a)
    a.translator.rtyper = rtyper
    r_tuple = rtyper.getrepr(s_tuple)
    cTUPLE = inputconst(lltype.Void, r_tuple.lowleveltype)
    s_tuple = rtyper.annotation(cTUPLE)
    rtyper.call_all_setups()

    for i in range(20):
        rordereddict.ll_dict_setitem(ll_d, llstr(str(i)), i)
    for i in range(20):
        element = ll_get_dict_item(s_tuple.const, ll_d, i)
        assert (str(i), i) == (hlstr(element.item0), element.item1)
Exemplo n.º 39
0
 def test_clear(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("l"), 1)
     rordereddict.ll_dict_clear(ll_d)
     assert ll_d.num_live_items == 0
Exemplo n.º 40
0
 def test_clear(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("l"), 1)
     rordereddict.ll_dict_clear(ll_d)
     assert ll_d.num_live_items == 0
Exemplo n.º 41
0
 def test_dict_creation(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     lls = llstr("abc")
     rordereddict.ll_dict_setitem(ll_d, lls, 13)
     assert count_items(ll_d, rordereddict.FREE) == rordereddict.DICT_INITSIZE - 1
     assert rordereddict.ll_dict_getitem(ll_d, llstr("abc")) == 13
     assert rordereddict.ll_dict_getitem(ll_d, lls) == 13
     rordereddict.ll_dict_setitem(ll_d, lls, 42)
     assert rordereddict.ll_dict_getitem(ll_d, lls) == 42
     rordereddict.ll_dict_setitem(ll_d, llstr("abc"), 43)
     assert rordereddict.ll_dict_getitem(ll_d, lls) == 43
Exemplo n.º 42
0
 def test_dict_creation(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     lls = llstr("abc")
     rordereddict.ll_dict_setitem(ll_d, lls, 13)
     assert count_items(ll_d, rordereddict.FREE) == rordereddict.DICT_INITSIZE - 1
     assert rordereddict.ll_dict_getitem(ll_d, llstr("abc")) == 13
     assert rordereddict.ll_dict_getitem(ll_d, lls) == 13
     rordereddict.ll_dict_setitem(ll_d, lls, 42)
     assert rordereddict.ll_dict_getitem(ll_d, lls) == 42
     rordereddict.ll_dict_setitem(ll_d, llstr("abc"), 43)
     assert rordereddict.ll_dict_getitem(ll_d, lls) == 43
Exemplo n.º 43
0
 def test_popitem_first(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 2)
     rordereddict.ll_dict_setitem(ll_d, llstr("m"), 3)
     ITER = rordereddict.get_ll_dictiter(lltype.Ptr(DICT))
     for expected in ["k", "j", "m"]:
         ll_iter = rordereddict.ll_dictiter(ITER, ll_d)
         num = rordereddict._ll_dictnext(ll_iter)
         ll_key = ll_d.entries[num].key
         assert hlstr(ll_key) == expected
         rordereddict.ll_dict_delitem(ll_d, ll_key)
     ll_iter = rordereddict.ll_dictiter(ITER, ll_d)
     py.test.raises(StopIteration, rordereddict._ll_dictnext, ll_iter)
Exemplo n.º 44
0
 def test_popitem_first(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 2)
     rordereddict.ll_dict_setitem(ll_d, llstr("m"), 3)
     ITER = rordereddict.get_ll_dictiter(lltype.Ptr(DICT))
     for expected in ["k", "j", "m"]:
         ll_iter = rordereddict.ll_dictiter(ITER, ll_d)
         num = rordereddict._ll_dictnext(ll_iter)
         ll_key = ll_d.entries[num].key
         assert hlstr(ll_key) == expected
         rordereddict.ll_dict_delitem(ll_d, ll_key)
     ll_iter = rordereddict.ll_dictiter(ITER, ll_d)
     py.test.raises(StopIteration, rordereddict._ll_dictnext, ll_iter)
Exemplo n.º 45
0
 def test_dict_resize(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("a"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("b"), 2)
     rordereddict.ll_dict_setitem(ll_d, llstr("c"), 3)
     rordereddict.ll_dict_setitem(ll_d, llstr("d"), 4)
     assert len(get_indexes(ll_d)) == 8
     rordereddict.ll_dict_setitem(ll_d, llstr("e"), 5)
     rordereddict.ll_dict_setitem(ll_d, llstr("f"), 6)
     assert len(get_indexes(ll_d)) == 32
     for item in ['a', 'b', 'c', 'd', 'e', 'f']:
         assert rordereddict.ll_dict_getitem(ll_d, llstr(item)) == ord(item) - ord('a') + 1
Exemplo n.º 46
0
 def test_bug_resize_counter(self):
     DICT = self._get_int_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, 0, 0)
     rordereddict.ll_dict_delitem(ll_d, 0)
     rordereddict.ll_dict_setitem(ll_d, 0, 0)
     rordereddict.ll_dict_delitem(ll_d, 0)
     rordereddict.ll_dict_setitem(ll_d, 0, 0)
     rordereddict.ll_dict_delitem(ll_d, 0)
     rordereddict.ll_dict_setitem(ll_d, 0, 0)
     rordereddict.ll_dict_delitem(ll_d, 0)
     rordereddict.ll_dict_setitem(ll_d, 1, 0)
     rordereddict.ll_dict_setitem(ll_d, 0, 0)
     rordereddict.ll_dict_setitem(ll_d, 2, 0)
     rordereddict.ll_dict_delitem(ll_d, 1)
     rordereddict.ll_dict_delitem(ll_d, 0)
     rordereddict.ll_dict_delitem(ll_d, 2)
     rordereddict.ll_dict_setitem(ll_d, 0, 0)
     rordereddict.ll_dict_delitem(ll_d, 0)
     rordereddict.ll_dict_setitem(ll_d, 0, 0)
     rordereddict.ll_dict_delitem(ll_d, 0)
     rordereddict.ll_dict_setitem(ll_d, 0, 0)
     rordereddict.ll_dict_setitem(ll_d, 1, 0)
     d = ll_d
     idx = d.indexes._obj.container
     num_nonfrees = 0
     for i in range(idx.getlength()):
         got = idx.getitem(i)  # 0: unused; 1: deleted
         num_nonfrees += (got > 0)
     assert d.resize_counter <= idx.getlength() * 2 - num_nonfrees * 3
Exemplo n.º 47
0
 def test_dict_resize(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("a"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("b"), 2)
     rordereddict.ll_dict_setitem(ll_d, llstr("c"), 3)
     rordereddict.ll_dict_setitem(ll_d, llstr("d"), 4)
     rordereddict.ll_dict_setitem(ll_d, llstr("e"), 5)
     rordereddict.ll_dict_setitem(ll_d, llstr("f"), 6)
     rordereddict.ll_dict_setitem(ll_d, llstr("g"), 7)
     rordereddict.ll_dict_setitem(ll_d, llstr("h"), 8)
     rordereddict.ll_dict_setitem(ll_d, llstr("i"), 9)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 10)
     assert len(get_indexes(ll_d)) == 16
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 11)
     rordereddict.ll_dict_setitem(ll_d, llstr("l"), 12)
     rordereddict.ll_dict_setitem(ll_d, llstr("m"), 13)
     assert len(get_indexes(ll_d)) == 64
     for item in 'abcdefghijklm':
         assert rordereddict.ll_dict_getitem(
             ll_d, llstr(item)) == ord(item) - ord('a') + 1
Exemplo n.º 48
0
 def test_contains(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     assert rordereddict.ll_dict_contains(ll_d, llstr("k"))
     assert not rordereddict.ll_dict_contains(ll_d, llstr("j"))
Exemplo n.º 49
0
 def test_dict_resize(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("a"), 1)
     rordereddict.ll_dict_setitem(ll_d, llstr("b"), 2)
     rordereddict.ll_dict_setitem(ll_d, llstr("c"), 3)
     rordereddict.ll_dict_setitem(ll_d, llstr("d"), 4)
     rordereddict.ll_dict_setitem(ll_d, llstr("e"), 5)
     rordereddict.ll_dict_setitem(ll_d, llstr("f"), 6)
     rordereddict.ll_dict_setitem(ll_d, llstr("g"), 7)
     rordereddict.ll_dict_setitem(ll_d, llstr("h"), 8)
     rordereddict.ll_dict_setitem(ll_d, llstr("i"), 9)
     rordereddict.ll_dict_setitem(ll_d, llstr("j"), 10)
     assert len(get_indexes(ll_d)) == 16
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 11)
     rordereddict.ll_dict_setitem(ll_d, llstr("l"), 12)
     rordereddict.ll_dict_setitem(ll_d, llstr("m"), 13)
     assert len(get_indexes(ll_d)) == 64
     for item in 'abcdefghijklm':
         assert rordereddict.ll_dict_getitem(ll_d, llstr(item)) == ord(item) - ord('a') + 1
Exemplo n.º 50
0
 def test_contains(self):
     DICT = self._get_str_dict()
     ll_d = rordereddict.ll_newdict(DICT)
     rordereddict.ll_dict_setitem(ll_d, llstr("k"), 1)
     assert rordereddict.ll_dict_contains(ll_d, llstr("k"))
     assert not rordereddict.ll_dict_contains(ll_d, llstr("j"))