void initialize_freelist(int i, int j)

{
    int x=0;
    printf("Initializing freelist \n");
    
    NODE *temp;
    int data = (j-i)+1;
    head_freelist = list_create(data);
    
    if(head_freelist==NULL)
        printf(" Head not created\n");
    
    for(x=(j-i+2);x<=j;x++)
    {
	  addNodeBottom(x, head_freelist);
    }
    printf("free list initialized \n");
    
    print_freelist(head_freelist);
    
}
void initialize_swap_freelist(int i, int j)

{
    int x=0;
    printf("Initializing swap space freelist \n");
    
    NODE *temp;
    int data = (j-i)+1;
    head_freelist_swap = list_create(data);
    
    if(head_freelist_swap==NULL)
        printf(" Head not created\n");
    
    for(x=(j-i+2);x<=i;x++)
    {
        addNodeBottom(x, head_freelist_swap);
    }
    printf(" ********** SWAP SPACE FREE LIST ********** \n");
    
    print_freelist(head_freelist_swap);
    
}
Example #3
0
int main(int argc, char *argv[]) {
  
  int size;
  int itr;
  void *ptr[BUFLEN];
  int i,j;
  double randvar;
  int fail = 0;
  //size_t global[LOOPCNT][2];
  long int global[LOOPCNT][2];
  
  
  clock_t begin, end;
  double time_spent;
  
  for(j = 0; j < LOOPCNT; j++) {
      global[j][0] = -1;
      global[j][1] = -1;
  }
  
  /* Set the PSEUDO_RANDOM_SEED for pseduo random seed initialization based on time, i.e.,
   * the random values changes after each execution 
   */
  if(PSEUDO_RANDOM_SEED)
    SEED(time(NULL));
  
  assert(MAX_HEAP_SIZE >= 1024*1024 && "MAX_HEAP_SIZE is too low; Recommended setting is at least 1MB for test_stress2");
  
  for(i=0; i < BUFLEN; i++) {
    ptr[i] = NULL;
  }
  
  begin = clock();
  
  for(i = 0; i < LOOPCNT; i++) {
    itr = (int)(RAND() * BUFLEN);
    
    randvar = RAND();
    
    if(randvar < ALLOC_CONST && ptr[itr] == NULL) {
      size = (int)(RAND() * MAX_ALLOC_SIZE);
      if(size > 0) {
	ptr[itr] = dmalloc(size);
	//memset(ptr[itr], 0, size);
      }
      else
	continue;
      if(ptr[itr] == NULL) {
	DEBUG("malloc at iteration %d failed for size %d\n", i,size);
	fflush(stderr);
	++fail;
	continue;
      }
      /* Range check */
      for(j = 0; j < i; j++) {
	if(global[j][0] == -1) {
	  continue;
	}
	if(((long)ptr[itr] >= global[j][0]) && ((long)ptr[itr]+size <= global[j][1])) {
	  printf("[s] = %ld, [e] = %ld, [p] = %ld, [itr] = %d, [size] = %ld\n", global[j][0], global[j][1], (long)ptr[itr], i, (long)size);
	  printf("Correctness check failed\n");
	  exit(EXIT_FAILURE);
	}
      }
      global[i][0] = (long)ptr[itr];
      global[i][1] = (long)ptr[itr] + (long)size;
      printf("Assigned: [s] = %ld, [e] = %ld, [p] = %ld, [itr] = %d, [size] = %ld\n", global[i][0], global[i][1], (long)ptr[itr],i, (long)size);
      
    } else if(randvar >= ALLOC_CONST && ptr[itr] != NULL) {
      DEBUG("Freeing ptr[%d]\n", itr);
      for(j = 0; j < i; j++) {
	if(global[j][0] == (long)ptr[itr]) {
	  global[j][0] = -1;
	  global[j][1] = -1;
	}
      }
      dfree(ptr[itr]);
      ptr[itr] = NULL;
    }
  }
  
  /*
   * now -- free them
   * */
  for(i=0; i < BUFLEN; i++) {
    if(ptr[i] != NULL) {
      dfree(ptr[i]);
      ptr[i] = NULL;
    }
  }
  end = clock();
  
  print_freelist();
  DEBUG("\n");
  time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
  
  printf("Test case summary\n");
  printf("Loop count: %d, malloc successful: %d, malloc failed: %d, execution time: %g seconds\n\n", LOOPCNT, LOOPCNT-fail, fail, time_spent);
  
  printf("Stress testcases2 passed!\n");
  return 0;
}
Example #4
0
int main(int argc, char *argv[]) {
	char *array1, *array2, *array3;
	int i;

	printf("malloc(10)\n");
	array1 = (char*)dmalloc(10);
	if(array1 == NULL)
	{
		fprintf(stderr,"call to dmalloc() failed\n");
		fflush(stderr);
		exit(1);
	}
	for(i=0; i < 9; i++)
	{
		array1[i] = 'a';
	}
	array1[9] = '\0';

	printf("String: %s\n",array1);
    assert(strncmp(array1,"aaaaaaaaa",9)==0);
	
	printf("malloc(100)\n");
	array2 = (char*)dmalloc(100);
	if(array2 == NULL)
	{
		fprintf(stderr,"call to dmalloc() failed\n");
		fflush(stderr);
		exit(1);
	}
	for(i=0; i < 99; i++)
	{
		array2[i] = 'b';
	}
	array2[99] = '\0';
	printf("String: %s\n",array2);
    assert(strncmp(array2,"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",99)==0);

	printf("malloc(50)\n");
	array3 = (char*)dmalloc(50);

	if(array3 == NULL)
	{
		fprintf(stderr,"call to dmalloc() failed\n");
		fflush(stderr);
		exit(1);
	}
	for(i=0; i < 49; i++)
	{
		array3[i] = 'c';
	}
	array3[49] = '\0';

	printf("String: %s\n",array3);
    assert(strncmp(array3,"ccccccccccccccccccccccccccccccccccccccccccccccccc",49)==0);

	printf("free(10)\n");
	dfree(array1);
	printf("After free\n");
	print_freelist();
	printf("free(50)\n");
	dfree(array3);
	printf("After free\n");
	print_freelist();
	printf("free(100)\n");
	dfree(array2);
	printf("After free\n");
	print_freelist();

	printf("malloc(510)\n");
	array3 = (char*)dmalloc(510);

	if(array3 == NULL)
	{
		fprintf(stderr,"call to dmalloc() failed\n");
		fflush(stderr);
		exit(1);
	}
	for(i=0; i < 509; i++)
	{
		array3[i] = 'c';
	}
	array3[509] = '\0';
    //assert(strncmp(array3,"ccccccccccccccccccccccccccccccccccccccccccccccccc")==0);

	printf("malloc(510)\n");
	array3 = (char*)dmalloc(510);
    if(array3 == NULL)
	{
		fprintf(stderr,"call to dmalloc() failed\n");
		fflush(stderr);
		//exit(1); // We expect the fail here. So do not exit
	}

	printf("Coalescing test cases passed!\n");
	return(0);
}