Mercurial > hg > Papers > 2010 > kent-master
diff paper/quicksort_for_ppc/quicksort_test.cbc @ 10:3d9addf62d0b
organized repository.
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 16 Feb 2010 14:35:36 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/quicksort_for_ppc/quicksort_test.cbc Tue Feb 16 14:35:36 2010 +0900 @@ -0,0 +1,129 @@ +#include<stdio.h> +#include<stdlib.h> +#include<assert.h> +#include<unistd.h> + +#include"quicksort_test.h" + +#define STACK_SIZE 10240 + +extern void quicksort_IF(); + + +void +random_initialize(int *v, int size, int min, int max) +{ + int i; + int diff = max-min+1; + + for (i=0; i<size; i++) { + v[i] = min+random()%diff; + } + return; +} + +static void +print_array(int *v, int size) +{ + int i; + printf("["); + for (i=0; i<size; i++) { + printf("%s%4d", (i%10==0)? "\n ":" ", v[i]); + } + printf(" ]\n"); +} + +int *IFv; +int IFs; +int IFe; +void* IFret; +void *IFarg; +void* IFsp; +int IFsize; + +void +starter(int size) +{ + int *target; + void *sp; + + target = (int*)malloc(sizeof(int)*size); + if (!target) { + perror("malloc"); + exit(1); + } + + random_initialize(target, size, 0, 90); + + sp = malloc(STACK_SIZE); + if (!sp) { + perror("malloc"); + exit(1); + } + //print_array(target, size); + //goto quicksort(target, 0, size-1, exit0, (void*)target); + IFv= target; + IFs= 0; + IFe= size-1; + IFret= exit0; + IFarg=(void*)target; + IFsp= sp; + IFsize= STACK_SIZE; + quicksort_IF(); + + printf("bad region\n"); +} + +static int size=100; + +int +main(int argc, char **argv) +{ + unsigned int seed=0; + int opt; + + while ((opt = getopt(argc, argv, "s:n:")) != -1) { + switch (opt) { + case 's': + seed = atoi(optarg); + break; + case 'n': + size = atoi(optarg); + break; + default: + fprintf(stderr, "Usage: %s [-t times] [-n sizeofarray] [-s seed]\n", argv[0]); + exit(1); + } + } + + srandom(seed); + starter(size); + return 0; +} + +static int +check_sort(int *v, int size) +{ + int i; + for (i=0; i<size-1; i++) { + if (v[i] > v[i+1]) + return 0; + } + return 1; +} + +void +exit0(void *arg) +{ + int b; + //print_array(arg, size); + b = check_sort(arg, size); + if (b) { + printf("sorting successful!\n"); + exit(EXIT_SUCCESS); + } else { + printf("sorting failure! \n"); + exit(EXIT_FAILURE); + } +} +