annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #include<stdio.h>
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 #include<stdlib.h>
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 #include<assert.h>
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 #include<unistd.h>
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 #include"quicksort_test.h"
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 #define STACK_SIZE 10240
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 extern void quicksort_IF();
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 void
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 random_initialize(int *v, int size, int min, int max)
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 {
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 int i;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 int diff = max-min+1;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 for (i=0; i<size; i++) {
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 v[i] = min+random()%diff;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 }
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 return;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 }
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 static void
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 print_array(int *v, int size)
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 {
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 int i;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 printf("[");
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 for (i=0; i<size; i++) {
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 printf("%s%4d", (i%10==0)? "\n ":" ", v[i]);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 }
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 printf(" ]\n");
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 }
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 int *IFv;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 int IFs;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 int IFe;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 void* IFret;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 void *IFarg;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 void* IFsp;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 int IFsize;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 void
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 starter(int size)
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 {
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 int *target;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 void *sp;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 target = (int*)malloc(sizeof(int)*size);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 if (!target) {
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 perror("malloc");
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 exit(1);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 }
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 random_initialize(target, size, 0, 90);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 sp = malloc(STACK_SIZE);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 if (!sp) {
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 perror("malloc");
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 exit(1);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 }
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 //print_array(target, size);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 //goto quicksort(target, 0, size-1, exit0, (void*)target);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 IFv= target;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 IFs= 0;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 IFe= size-1;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 IFret= exit0;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 IFarg=(void*)target;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 IFsp= sp;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 IFsize= STACK_SIZE;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 quicksort_IF();
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 printf("bad region\n");
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 }
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 static int size=100;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 int
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 main(int argc, char **argv)
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 {
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 unsigned int seed=0;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 int opt;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 while ((opt = getopt(argc, argv, "s:n:")) != -1) {
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 switch (opt) {
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 case 's':
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 seed = atoi(optarg);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 break;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 case 'n':
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 size = atoi(optarg);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 break;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 default:
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 fprintf(stderr, "Usage: %s [-t times] [-n sizeofarray] [-s seed]\n", argv[0]);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 exit(1);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 }
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 }
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 srandom(seed);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 starter(size);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 return 0;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 }
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
103
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 static int
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 check_sort(int *v, int size)
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 {
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 int i;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 for (i=0; i<size-1; i++) {
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 if (v[i] > v[i+1])
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 return 0;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 }
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 return 1;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 }
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 void
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 exit0(void *arg)
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 {
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 int b;
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 //print_array(arg, size);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 b = check_sort(arg, size);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 if (b) {
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 printf("sorting successful!\n");
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 exit(EXIT_SUCCESS);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 } else {
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 printf("sorting failure! \n");
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 exit(EXIT_FAILURE);
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 }
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 }
3d9addf62d0b organized repository.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
129