Example #1
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
Example #2
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
Example #3
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
Example #4
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)
Example #5
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)
 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
Example #7
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
Example #8
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"))
 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"))
Example #10
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
Example #11
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
Example #12
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
Example #13
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
Example #14
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)
Example #15
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)
Example #16
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
Example #17
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
Example #18
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