+}
+
+#define T(a, a_sorted) do { \
+ char p[] = a; \
+ qsort(p, sizeof p - 1, 1, ccmp); \
+ if (memcmp(p, a_sorted, sizeof p) != 0) { \
+ error("character sort failed\n"); \
+ test_printf("\tgot: \"%s\"\n", p); \
+ test_printf("\twant: \"%s\"\n", a_sorted); \
+ } \
+} while(0)
+
+static void character_sort(void)
+{
+ T("", "");
+ T("1", "1");
+ T("11", "11");
+ T("12", "12");
+ T("21", "12");
+ T("111", "111");
+ T("211", "112");
+ T("121", "112");
+ T("112", "112");
+ T("221", "122");
+ T("212", "122");
+ T("122", "122");
+ T("123", "123");
+ T("132", "123");
+ T("213", "123");
+ T("231", "123");
+ T("321", "123");
+ T("312", "123");
+ T("1423", "1234");
+ T("51342", "12345");
+ T("261435", "123456");
+ T("4517263", "1234567");
+ T("37245618", "12345678");
+ T("812436597", "123456789");
+ T("987654321", "123456789");
+ T("321321321", "111222333");
+ T("49735862185236174", "11223344556677889");
+}
+
+int main(void)
+{
+ string_sort(s, s_sorted, sizeof s/sizeof*s);
+ integer_sort(n, n_sorted, sizeof n/sizeof*n);
+ character_sort();