summaryrefslogtreecommitdiff
path: root/src/regress/lib/libc
diff options
context:
space:
mode:
authormillert <>2017-05-18 14:50:08 +0000
committermillert <>2017-05-18 14:50:08 +0000
commit9b92cdd78cb9cf5ccef1941bc1d989802b7e9f0e (patch)
tree2fc942ff3e7a48417af56dc1e4511c4ec41050f4 /src/regress/lib/libc
parent676818f5d9d7309fc3c3c923183eb05b15da3018 (diff)
downloadopenbsd-9b92cdd78cb9cf5ccef1941bc1d989802b7e9f0e.tar.gz
openbsd-9b92cdd78cb9cf5ccef1941bc1d989802b7e9f0e.tar.bz2
openbsd-9b92cdd78cb9cf5ccef1941bc1d989802b7e9f0e.zip
use mergesort instead of heapsort when comparing results
Diffstat (limited to 'src/regress/lib/libc')
-rw-r--r--src/regress/lib/libc/qsort/qsort_test.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/regress/lib/libc/qsort/qsort_test.c b/src/regress/lib/libc/qsort/qsort_test.c
index b1e1a25c92..f8507ce88c 100644
--- a/src/regress/lib/libc/qsort/qsort_test.c
+++ b/src/regress/lib/libc/qsort/qsort_test.c
@@ -22,9 +22,11 @@
22 22
23/* 23/*
24 * Test program based on Bentley & McIlroy's "Engineering a Sort Function". 24 * Test program based on Bentley & McIlroy's "Engineering a Sort Function".
25 * Uses heapsort(3) to check the results. 25 * Additional tests include the "median of three" killer from
26 * The "killer" input is from: 26 * David R. Musser's "Introspective Sorting and Selection Algorithms"
27 * http://calmerthanyouare.org/2014/06/11/algorithmic-complexity-attacks-and-libc-qsort.html 27 * and 4.4BSD qsort killer input from
28 * http://calmerthanyouare.org/2014/06/11/algorithmic-complexity-attacks-and-libc-qsort.html
29 * Uses mergesort(3) to check the results.
28 */ 30 */
29 31
30enum distribution { 32enum distribution {
@@ -168,7 +170,8 @@ test_distribution(int dist, int m, int n, int *x, int *y, int *z)
168 ret = 1; 170 ret = 1;
169 } else { 171 } else {
170 qsort(y, n, sizeof(y[0]), cmp_checked); 172 qsort(y, n, sizeof(y[0]), cmp_checked);
171 heapsort(z, n, sizeof(z[0]), cmp); 173 if (mergesort(z, n, sizeof(z[0]), cmp) != 0)
174 err(1, NULL);
172 if (check_result("copy", y, z, dist, m, n) != 0) 175 if (check_result("copy", y, z, dist, m, n) != 0)
173 ret = 1; 176 ret = 1;
174 } 177 }
@@ -183,7 +186,8 @@ test_distribution(int dist, int m, int n, int *x, int *y, int *z)
183 ret = 1; 186 ret = 1;
184 } else { 187 } else {
185 qsort(y, n, sizeof(y[0]), cmp_checked); 188 qsort(y, n, sizeof(y[0]), cmp_checked);
186 heapsort(z, n, sizeof(z[0]), cmp); 189 if (mergesort(z, n, sizeof(z[0]), cmp) != 0)
190 err(1, NULL);
187 if (check_result("reversed", y, z, dist, m, n) != 0) 191 if (check_result("reversed", y, z, dist, m, n) != 0)
188 ret = 1; 192 ret = 1;
189 } 193 }
@@ -200,7 +204,8 @@ test_distribution(int dist, int m, int n, int *x, int *y, int *z)
200 ret = 1; 204 ret = 1;
201 } else { 205 } else {
202 qsort(y, n, sizeof(y[0]), cmp_checked); 206 qsort(y, n, sizeof(y[0]), cmp_checked);
203 heapsort(z, n, sizeof(z[0]), cmp); 207 if (mergesort(z, n, sizeof(z[0]), cmp) != 0)
208 err(1, NULL);
204 if (check_result("front reversed", y, z, dist, m, n) != 0) 209 if (check_result("front reversed", y, z, dist, m, n) != 0)
205 ret = 1; 210 ret = 1;
206 } 211 }
@@ -217,13 +222,15 @@ test_distribution(int dist, int m, int n, int *x, int *y, int *z)
217 ret = 1; 222 ret = 1;
218 } else { 223 } else {
219 qsort(y, n, sizeof(y[0]), cmp_checked); 224 qsort(y, n, sizeof(y[0]), cmp_checked);
220 heapsort(z, n, sizeof(z[0]), cmp); 225 if (mergesort(z, n, sizeof(z[0]), cmp) != 0)
226 err(1, NULL);
221 if (check_result("back reversed", y, z, dist, m, n) != 0) 227 if (check_result("back reversed", y, z, dist, m, n) != 0)
222 ret = 1; 228 ret = 1;
223 } 229 }
224 230
225 /* Test on sorted copy of x[] */ 231 /* Test on sorted copy of x[] */
226 heapsort(x, n, sizeof(x[0]), cmp); 232 if (mergesort(x, n, sizeof(x[0]), cmp) != 0)
233 err(1, NULL);
227 for (i = 0; i < n; i++) 234 for (i = 0; i < n; i++)
228 y[i] = x[i]; 235 y[i] = x[i];
229 compares = 0; 236 compares = 0;
@@ -247,7 +254,8 @@ test_distribution(int dist, int m, int n, int *x, int *y, int *z)
247 ret = 1; 254 ret = 1;
248 } else { 255 } else {
249 qsort(y, n, sizeof(y[0]), cmp_checked); 256 qsort(y, n, sizeof(y[0]), cmp_checked);
250 heapsort(z, n, sizeof(z[0]), cmp); 257 if (mergesort(z, n, sizeof(z[0]), cmp) != 0)
258 err(1, NULL);
251 if (check_result("dithered", y, z, dist, m, n) != 0) 259 if (check_result("dithered", y, z, dist, m, n) != 0)
252 ret = 1; 260 ret = 1;
253 } 261 }