/* Checks that merging of contiguous locations works
   well.
*/

#include <stdio.h>
#include <unistd.h>
#include "mem.h"

int main()
{
    int err, i, j;
    void *p[8];
    int sizes[8] = { 88, 488, 288, 488, 388, 1216, 88, 956};

    err = Mem_Init(4096, P_FIRSTFIT);
    if(err == -1)
        return -1;

    for(i=0; i<8; i++) {
        p[i] = Mem_Alloc(sizes[i]);
        if(p[i] == NULL)
             return -1;
    }
    err = Mem_Free(p[5]);
       if(err == -1)
             return -1;
    err = Mem_Free(p[1]);
       if(err == -1)
             return -1;
    err = Mem_Free(p[6]);
       if(err == -1)
             return -1;
    err = Mem_Free(p[3]);
       if(err == -1)
             return -1;
    err = Mem_Free(p[2]);
       if(err == -1)
             return -1;


    p[1]= Mem_Alloc(1268);
    if(p[1] == NULL)
         return -1;

    p[5]= Mem_Alloc(1300);
    if(p[5] == NULL)
         return -1;

    err = Mem_Free(p[7]);
       if(err == -1)
             return -1;
    err = Mem_Free(p[5]);
       if(err == -1)
             return -1;
    err = Mem_Free(p[4]);
       if(err == -1)
             return -1;
    
    p[4]= Mem_Alloc(2668);
    if(p[4] == NULL)
         return -1;

    err = Mem_Free(p[0]);
       if(err == -1)
             return -1;
    err = Mem_Free(p[1]);
       if(err == -1)
             return -1;

    p[0]= Mem_Alloc(1342);
    if(p[0] == NULL)
         return -1;
    

    return 0;
}

