summaryrefslogtreecommitdiff
path: root/qsort.c
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2011-03-19 22:26:06 -0400
committerRich Felker <dalias@aerifal.cx>2011-03-19 22:26:06 -0400
commita9baddd7d07b9fe15e212985a808a79773ec72e4 (patch)
treefce0a089eedeacef8b25b409c2ba50f5f30a8327 /qsort.c
downloadlibc-testsuite-a9baddd7d07b9fe15e212985a808a79773ec72e4.tar.gz
initial check-in, taken from old libc svn repo with significant additions
Diffstat (limited to 'qsort.c')
-rw-r--r--qsort.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/qsort.c b/qsort.c
new file mode 100644
index 0000000..818426c
--- /dev/null
+++ b/qsort.c
@@ -0,0 +1,59 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+static int scmp(const void *a, const void *b)
+{
+ return strcmp(*(char **)a, *(char **)b);
+}
+
+static int icmp(const void *a, const void *b)
+{
+ return *(int*)a - *(int*)b;
+}
+
+#define FAIL(m) (printf(__FILE__ ":%d: %s failed\n", __LINE__, m), err++, 0)
+
+int test_qsort(void)
+{
+ int i;
+ int err=0;
+ /* 26 items -- even */
+ char *s[] = {
+ "Bob", "Alice", "John", "Ceres",
+ "Helga", "Drepper", "Emeralda", "Zoran",
+ "Momo", "Frank", "Pema", "Xavier",
+ "Yeva", "Gedun", "Irina", "Nono",
+ "Wiener", "Vincent", "Tsering", "Karnica",
+ "Lulu", "Quincy", "Osama", "Riley",
+ "Ursula", "Sam"
+ };
+ /* 23 items -- odd, prime */
+ int n[] = {
+ 879045, 394, 99405644, 33434, 232323, 4334, 5454,
+ 343, 45545, 454, 324, 22, 34344, 233, 45345, 343,
+ 848405, 3434, 3434344, 3535, 93994, 2230404, 4334
+ };
+
+ qsort(s, sizeof(s)/sizeof(char *), sizeof(char *), scmp);
+ for (i=0; i<sizeof(s)/sizeof(char *)-1; i++) {
+ if (strcmp(s[i], s[i+1]) > 0) {
+ FAIL("string sort");
+ for (i=0; i<sizeof(s)/sizeof(char *); i++)
+ printf("\t%s\n", s[i]);
+ break;
+ }
+ }
+
+ qsort(n, sizeof(n)/sizeof(int), sizeof(int), icmp);
+ for (i=0; i<sizeof(n)/sizeof(int)-1; i++) {
+ if (n[i] > n[i+1]) {
+ FAIL("integer sort");
+ for (i=0; i<sizeof(n)/sizeof(int); i++)
+ printf("\t%d\n", n[i]);
+ break;
+ }
+ }
+
+ return err;
+}