6 static int scmp(const void *a, const void *b)
8 return strcmp(*(char **)a, *(char **)b);
11 static int icmp(const void *a, const void *b)
13 return *(int*)a - *(int*)b;
16 static int ccmp(const void *a, const void *b)
18 return *(char*)a - *(char*)b;
21 /* 26 items -- even */
22 static const char *s[] = {
23 "Bob", "Alice", "John", "Ceres",
24 "Helga", "Drepper", "Emeralda", "Zoran",
25 "Momo", "Frank", "Pema", "Xavier",
26 "Yeva", "Gedun", "Irina", "Nono",
27 "Wiener", "Vincent", "Tsering", "Karnica",
28 "Lulu", "Quincy", "Osama", "Riley",
31 static const char *s_sorted[] = {
32 "Alice", "Bob", "Ceres", "Drepper",
33 "Emeralda", "Frank", "Gedun", "Helga",
34 "Irina", "John", "Karnica", "Lulu",
35 "Momo", "Nono", "Osama", "Pema",
36 "Quincy", "Riley", "Sam", "Tsering",
37 "Ursula", "Vincent", "Wiener", "Xavier",
41 /* 23 items -- odd, prime */
43 879045, 394, 99405644, 33434, 232323, 4334, 5454,
44 343, 45545, 454, 324, 22, 34344, 233, 45345, 343,
45 848405, 3434, 3434344, 3535, 93994, 2230404, 4334
47 static int n_sorted[] = {
48 22, 233, 324, 343, 343, 394, 454, 3434,
49 3535, 4334, 4334, 5454, 33434, 34344, 45345, 45545,
50 93994, 232323, 848405, 879045, 2230404, 3434344, 99405644
53 static void string_sort(const char **a, const char **a_sorted, int len)
56 qsort(a, len, sizeof *a, scmp);
57 for (i=0; i<len; i++) {
58 if (strcmp(a[i], a_sorted[i]) != 0) {
59 error("string sort failed at index %d\n", i);
60 test_printf("\ti\tgot\twant\n");
62 test_printf("\t%d\t%s\t%s\n", i, a[i], a_sorted[i]);
68 static void integer_sort(int *a, int *a_sorted, int len)
71 qsort(a, len, sizeof *a, icmp);
72 for (i=0; i<len; i++) {
73 if (a[i] != a_sorted[i]) {
74 error("integer sort failed at index %d\n", i);
75 test_printf("\ti\tgot\twant\n");
77 test_printf("\t%d\t%d\t%d\n", i, a[i], a_sorted[i]);
83 #define T(a, a_sorted) do { \
85 qsort(p, sizeof p - 1, 1, ccmp); \
86 if (memcmp(p, a_sorted, sizeof p) != 0) { \
87 error("character sort failed\n"); \
88 test_printf("\tgot: \"%s\"\n", p); \
89 test_printf("\twant: \"%s\"\n", a_sorted); \
93 static void character_sort(void)
115 T("261435", "123456");
116 T("4517263", "1234567");
117 T("37245618", "12345678");
118 T("812436597", "123456789");
119 T("987654321", "123456789");
120 T("321321321", "111222333");
121 T("49735862185236174", "11223344556677889");
126 string_sort(s, s_sorted, sizeof s/sizeof*s);
127 integer_sort(n, n_sorted, sizeof n/sizeof*n);