Esempio n. 1
0
def test_skiplist_clear():
    pool_folder, conf_path, block_file = _get_common_file_paths()
    _clean_up()

    index = SkipListIndex(
        MemoryManager(pool_folder=pool_folder,
                      conf_path=conf_path,
                      block_file=block_file))
    for i in range(100):
        index.set(random.randint(1, 100), random.randint(1, 1000))
    index.clear()

    assert index.keys() == []
    assert (len(index._heads) == 1 and not index._heads[0].right
            and not index._heads[0].down)

    _clean_up()
Esempio n. 2
0
def test_skiplist_remove():
    pool_folder, conf_path, block_file = _get_common_file_paths()
    _clean_up()

    index = SkipListIndex(
        MemoryManager(pool_folder=pool_folder,
                      conf_path=conf_path,
                      block_file=block_file))
    index.set(1, 10)
    index.set(10, 20)

    assert index.remove(1) == True
    assert index.remove(10) == True
    assert index.remove(1) == False
    assert index.remove(10) == False
    assert index.remove(100) == False

    assert index.keys() == []

    _clean_up()
Esempio n. 3
0
def test_skiplist_compact():
    pool_folder, conf_path, block_file = _get_common_file_paths()
    _clean_up()

    index = SkipListIndex(
        MemoryManager(pool_folder=pool_folder,
                      conf_path=conf_path,
                      block_file=block_file))
    index.set(1, 10)
    index.set(100, 20)
    index.clear()
    index.compact()

    # all blocks are compacted
    for block in index._blocks:
        assert block.used_memory == 0 and block.free_memory == block.block_size

    index.set(1, 10)
    index.set(2, 100)
    free_memory_list_origin = [block.free_memory for block in index._blocks]

    index.remove(1)
    index.compact()
    free_memory_list_now = [block.free_memory for block in index._blocks]

    assert index.get(1, -1)
    assert index.get(2, 100)
    assert index.keys() == [2]

    assert len(free_memory_list_origin) == len(free_memory_list_now)

    cnt = 0
    for origin, now in zip(free_memory_list_origin, free_memory_list_now):
        assert origin <= now
        if origin < now:
            cnt += 1
    assert cnt > 0

    _clean_up()
Esempio n. 4
0
def test_skiplist_keys():
    pool_folder, conf_path, block_file = _get_common_file_paths()
    _clean_up()

    index = SkipListIndex(
        MemoryManager(pool_folder=pool_folder,
                      conf_path=conf_path,
                      block_file=block_file))
    keys = []
    vis = set()
    for _ in range(100):
        key = random.randint(1, 10000)
        while key in vis:
            key = random.randint(1, 10000)
        vis.add(key)
        keys.append(key)
    keys.sort()
    assert len(keys) == 100 and len(set(keys)) == 100

    for key in keys:
        index.set(key, key)
    assert index.keys() == keys

    _clean_up()