def test_allocate_block(): memmgr = AsmMemoryManager(min_fragment=8, num_indices=5) memmgr._add_free_block(10, 18) memmgr._add_free_block(20, 30) (start, stop) = memmgr._allocate_block(4) assert (start, stop) == (10, 18) assert memmgr.free_blocks == {20: 30} assert memmgr.free_blocks_end == {30: 20} assert memmgr.blocks_by_size == [[], [20], [], [], []] (start, stop) = memmgr._allocate_block(4) assert (start, stop) == (20, 30) assert memmgr.free_blocks == {} assert memmgr.free_blocks_end == {} assert memmgr.blocks_by_size == [[], [], [], [], []]
def test_malloc_with_fragment(): for reqsize in range(1, 33): memmgr = AsmMemoryManager(min_fragment=8, num_indices=5) memmgr._add_free_block(12, 44) (start, stop) = memmgr.malloc(reqsize, reqsize) if reqsize + 8 <= 32: assert (start, stop) == (12, 12 + reqsize) assert memmgr.free_blocks == {stop: 44} assert memmgr.free_blocks_end == {44: stop} assert [stop] in memmgr.blocks_by_size else: assert (start, stop) == (12, 44) assert memmgr.free_blocks == {} assert memmgr.free_blocks_end == {} assert memmgr.blocks_by_size == [[], [], [], [], []]
def test_add_free_block(): memmgr = AsmMemoryManager(min_fragment=8, num_indices=5) memmgr._add_free_block(10, 18) assert memmgr.free_blocks == {10: 18} assert memmgr.free_blocks_end == {18: 10} assert memmgr.blocks_by_size == [[10], [], [], [], []] memmgr._add_free_block(20, 30) assert memmgr.free_blocks == {10: 18, 20: 30} assert memmgr.free_blocks_end == {18: 10, 30: 20} assert memmgr.blocks_by_size == [[10], [20], [], [], []] memmgr._add_free_block(18, 20) # merge both left and right assert memmgr.free_blocks == {10: 30} assert memmgr.free_blocks_end == {30: 10} assert memmgr.blocks_by_size == [[], [], [], [10], []]
def test_malloc_without_fragment(): memmgr = AsmMemoryManager(min_fragment=8, num_indices=5) memmgr._add_free_block(10, 18) memmgr._add_free_block(20, 30) for minsize in range(1, 11): for maxsize in range(minsize, 14): (start, stop) = memmgr.malloc(minsize, maxsize) if minsize <= 8: assert (start, stop) == (10, 18) else: assert (start, stop) == (20, 30) memmgr._add_free_block(start, stop) memmgr._add_free_block(40, 49) (start, stop) = memmgr.malloc(10, 10) assert (start, stop) == (20, 30)