Untitled

Anonymous
plain_text
02/13/2026 2:53 AM
3.9 KB
11
Indexable
import student.TestCase;

/**
 * Test class for the MemManager.
 * Verifies buddy allocation behavior, merging,
 * and proper free list ordering.
 *
 * @author Leguejou Awunganyi
 * @author Ishita Punna
 * @version 2026-02-12
 */
public class MemManagerTest extends TestCase {

    /**
     * Setup method executed before each test.
     * No shared fixture required.
     */
    public void setUp() {
        // Nothing to initialize globally.
    }

    /**
     * Test that free list maintains sorted addresses
     * when blocks are released out of order.
     */
    public void testFreeListWithSortedAddresses() {
        MemManager mm = new MemManager(32);

        Handle[] h = new Handle[8];
        for (int i = 0; i < 8; i++) {
            h[i] = mm.insert(new byte[4]);
        }

        assertEquals("No free blocks are available.", mm.printBlocks());

        mm.release(h[5]); // addr 20
        mm.release(h[1]); // addr 4
        mm.release(h[3]); // addr 12

        assertEquals("4: 4 12 20", mm.printBlocks());
    }

    /**
     * Test adding a block into an empty free list.
     */
    public void testFreeListAddIntoEmptyList() {
        MemManager mm = new MemManager(32);

        Handle h = mm.insert(new byte[32]);

        assertEquals("No free blocks are available.", mm.printBlocks());

        mm.release(h);

        assertEquals("32: 0", mm.printBlocks());
    }

    /**
     * Test removing buddy when it is at head of list.
     */
    public void testRemoveBuddyAtHeadPrevNull() {
        MemManager mm = new MemManager(32);

        Handle h0 = mm.insert(new byte[16]);
        Handle h1 = mm.insert(new byte[16]);

        assertEquals("No free blocks are available.", mm.printBlocks());

        mm.release(h1);
        assertEquals("16: 16", mm.printBlocks());

        mm.release(h0);

        assertEquals("32: 0", mm.printBlocks());
    }

    /**
     * Test removing buddy when it is not head
     * (prev not null case).
     */
    public void testRemoveBuddyNotHeadPrevNotNull() {
        MemManager mm = new MemManager(32);

        Handle[] h = new Handle[8];
        for (int i = 0; i < 8; i++) {
            h[i] = mm.insert(new byte[4]);
        }

        assertEquals("No free blocks are available.", mm.printBlocks());

        mm.release(h[1]);
        mm.release(h[5]);
        mm.release(h[7]);

        assertEquals("4: 4 20 28", mm.printBlocks());

        mm.release(h[4]);

        assertEquals("4: 4 28\r\n8: 16", mm.printBlocks());
    }

    /**
     * Test that no merge occurs when buddy is not free.
     */
    public void testRemoveBuddyNotFoundReturnsFalse() {
        MemManager mm = new MemManager(32);

        Handle[] h = new Handle[8];
        for (int i = 0; i < 8; i++) {
            h[i] = mm.insert(new byte[4]);
        }

        mm.release(h[0]);

        assertEquals("4: 0", mm.printBlocks());
    }
}
Editor is loading...
Leave a Comment