Make bitonic work for non powers of 2 (#24)
This commit is contained in:
77
test/test.c
77
test/test.c
@@ -52,7 +52,8 @@ void cleanup() {
|
||||
* El programa de test
|
||||
*/
|
||||
int main(int argc, char **argv) {
|
||||
int n = 32768;
|
||||
int n = 50000;
|
||||
int n2 = 32768;
|
||||
int i;
|
||||
int gen;
|
||||
int pass;
|
||||
@@ -99,7 +100,7 @@ int main(int argc, char **argv) {
|
||||
|
||||
// Prepare for sort tests
|
||||
for (i = 0; i < n; i++) {
|
||||
test_case[i] = gen_rand(-100, 100);
|
||||
test_case[i] = gen_rand(-1000000, 1000000);
|
||||
}
|
||||
memcpy(qarray, test_case, sizeof(int) * n);
|
||||
qsort(qarray, n, sizeof(int), compar);
|
||||
@@ -156,25 +157,6 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (pass) {
|
||||
fprintf(stdout, "pass\n");
|
||||
passed++;
|
||||
}
|
||||
|
||||
// Test bitonic sort
|
||||
pass = 1;
|
||||
memcpy(test_array, test_case, sizeof(int) * n);
|
||||
fprintf(stdout, "\tbitonic sort: ");
|
||||
fflush(stdout);
|
||||
bitonic_sort(test_array, n);
|
||||
for (i = 0; i < n; i++) {
|
||||
if (test_array[i] != qarray[i]) {
|
||||
fprintf(stdout, "fail\n");
|
||||
failed++;
|
||||
pass = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (pass) {
|
||||
fprintf(stdout, "pass\n");
|
||||
passed++;
|
||||
@@ -218,6 +200,59 @@ int main(int argc, char **argv) {
|
||||
passed++;
|
||||
}
|
||||
|
||||
// Test bitonic sort without 2^n
|
||||
pass = 1;
|
||||
memcpy(test_array, test_case, sizeof(int) * n);
|
||||
fprintf(stdout, "\tbitonic sort: ");
|
||||
fflush(stdout);
|
||||
bitonic_sort(test_array, n);
|
||||
for (i = 0; i < n; i++) {
|
||||
if (test_array[i] != qarray[i]) {
|
||||
fprintf(stdout, "fail\n");
|
||||
failed++;
|
||||
pass = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (pass) {
|
||||
fprintf(stdout, "pass\n");
|
||||
passed++;
|
||||
}
|
||||
|
||||
// Test bitonic sort with 2^n
|
||||
pass = 1;
|
||||
int *bitonic_test_case = malloc(sizeof(int) * n2);
|
||||
if (bitonic_test_case == NULL) {
|
||||
fprintf(stderr, "Error: Out of heap space!\n");
|
||||
exit(1);
|
||||
}
|
||||
int *bitonic_test_array = malloc(sizeof(int) * n2);
|
||||
if (bitonic_test_array == NULL) {
|
||||
fprintf(stderr, "Error: Out of heap space!\n");
|
||||
exit(1);
|
||||
}
|
||||
for (i = 0; i < n; i++) {
|
||||
bitonic_test_case[i] = gen_rand(-1000000, 1000000);
|
||||
}
|
||||
memcpy(qarray, bitonic_test_case, sizeof(int) * n2);
|
||||
qsort(qarray, n2, sizeof(int), compar);
|
||||
memcpy(bitonic_test_array, bitonic_test_case, sizeof(int) * n2);
|
||||
fprintf(stdout, "\tbitonic sort 2^n: ");
|
||||
fflush(stdout);
|
||||
bitonic_sort(bitonic_test_array, n2);
|
||||
for (i = 0; i < n2; i++) {
|
||||
if (bitonic_test_array[i] != qarray[i]) {
|
||||
fprintf(stdout, "fail\n");
|
||||
failed++;
|
||||
pass = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (pass) {
|
||||
fprintf(stdout, "pass\n");
|
||||
passed++;
|
||||
}
|
||||
|
||||
fprintf(stdout, "%d tests passed\n", passed);
|
||||
fprintf(stdout, "%d tests failed\n", failed);
|
||||
|
||||
|
Reference in New Issue
Block a user