Пример #1
0
int main() {
  char *original[] = {
      "university", "of", "maryland", "college", "park", "computer", "science", "introduction", "to", "c", "programming"
  };
  char *sorted[] = {
      "c", "college", "computer", "introduction", "maryland", "of", "park", "programming", "science", "to", "university"
  };
  int i;

  mt_mergesort(&original[0], sizeof(original)/sizeof(*original), sizeof(*original),
	    cmpstringp,2);

  for (i = 0; i < sizeof(original)/sizeof(*original); i++) {
    if (strcmp(original[i], sorted[i]) == 0) {
      printf("CORRECT: ");
    }
    else {
      printf("INCORRECT: ");
    }
    printf("After sorting, arr[%d] == %s, should be %s\n",
	   i, original[i], sorted[i]);
  }

  return 0;
}
Пример #2
0
int main() {
  int original[10001];
  int sorted[10001];
  int i;
  Compare_fn my_cmp = cmp;

  srand(216);
  for (i = 0; i < 10001; i++) {
    original[i] = sorted[i] = rand() / 1000000;
  }

  qsort(&sorted[0], sizeof(sorted)/sizeof(*sorted), sizeof(*sorted), my_cmp);
  mt_mergesort(&original[0], sizeof(original)/sizeof(*original),
            sizeof(*original), my_cmp, 2);

  for (i = 0; i < sizeof(original)/sizeof(*original); i++) {
    if (original[i] == sorted[i]) {
      printf("CORRECT: ");
    }
    else {
      printf("INCORRECT: ");
    }
    printf("After sorting, arr[%d] == %d, should be %d\n",
	   i, original[i], sorted[i]);
  }

  return 0;
}
Пример #3
0
int main() {
  long original[] = {9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9};
  long sorted[] = {9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9};
  int i;

  mt_mergesort(original, sizeof(original)/sizeof(*original), sizeof(*original),
	       cmp, 3);

  for (i = 0; i < sizeof(original)/sizeof(*original); i++) {
    if (original[i] == sorted[i]) {
      printf("CORRECT: ");
    }
    else {
      printf("INCORRECT: ");
    }
    printf("After sorting, arr[%d] == %ld, should be %ld\n",
	   i, original[i], sorted[i]);
  }

  return 0;
}
int main(int argc, char *argv[]) {
  int num, seed, up_bound, i, j, *arr, *temp, z;
  struct rusage usage1, usage2;
  struct timeval wall1, wall2;
  
  if (argc < 4) {
    printf("need three args to run this mergetest\n");
    return 1;
  }
  num = atoi(argv[1]);
  z = atoi(argv[2]);
  seed = atoi(argv[3]);
  up_bound = atoi(argv[4]);
  arr = malloc(sizeof(int)*num);
  if (arr == NULL) {
    fprintf(stderr, "malloc failed\n");
    return -1;
  }
  temp = malloc(sizeof(int)*num);
  if (temp == NULL) {
    fprintf(stderr, "second malloc failed\n");
    return -1;
  }

  srand(seed);
  for (i = 0; i < num; i++) {
    arr[i] = rand()%up_bound;
  }
  for (i = 0; i <= 5; i++) {
    for (j = 0; j < num; j++) {
      temp[j] = arr[j];
    }
    printf("%d threads: ", i);
    gettimeofday(&wall1, NULL);
    getrusage(RUSAGE_SELF, &usage1);
    if (!i) {
      st_mergesort(temp, num, sizeof(int), cmp);
    }
    else {
      mt_mergesort(temp, num, z, sizeof(int), cmp, i);
    }
    gettimeofday(&wall2, NULL);
    getrusage(RUSAGE_SELF, &usage2);
    wall2.tv_sec -= wall1.tv_sec;
    if ((wall2.tv_usec -= wall1.tv_usec) < 0) {
      wall2.tv_usec += 1000000;
      wall2.tv_sec--;
    }
    usage2.ru_utime.tv_sec -= usage1.ru_utime.tv_sec;
    if ((usage2.ru_utime.tv_usec -= usage1.ru_utime.tv_usec) < 0) {
      usage2.ru_utime.tv_usec += 1000000;
      usage2.ru_utime.tv_sec--;
    }
    usage2.ru_stime.tv_sec -= usage1.ru_stime.tv_sec;
    if ((usage2.ru_stime.tv_usec -= usage1.ru_stime.tv_usec) < 0) {
      usage2.ru_stime.tv_usec += 1000000;
      usage2.ru_stime.tv_sec--;
    }
    printf("%d.%06ds wall; %d.%06ds user; %d.%06ds sys\n",
	   (int) wall2.tv_sec, (int) wall2.tv_usec,
	   (int) usage2.ru_utime.tv_sec, (int) usage2.ru_utime.tv_usec,
	   (int) usage2.ru_stime.tv_sec, (int) usage2.ru_stime.tv_usec);
  }
  free(arr);
  free(temp);
  return 0;
}