Loading...
--- /dev/null
+++ Libc/Libc-1244.50.9/tests/qsort.c
@@ -0,0 +1,54 @@
+/*
+ * Randomized test for qsort() routine.
+ */
+
+#include <sys/cdefs.h>
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <darwintest.h>
+#include <darwintest_utils.h>
+
+#include "freebsd_qsort.h"
+
+#define BUFLEN (32 * 1024)
+
+static int tests = 10;
+
+T_DECL(qsort_random, "qsort random test", T_META_CHECK_LEAKS(NO))
+{
+ char testvector[BUFLEN];
+ char sresvector[BUFLEN];
+ size_t i;
+
+ while (--tests >= 0) {
+ size_t elmsize = (tests % 32) + 1;
+ size_t elmcount = sizeof(testvector) / elmsize;
+ T_LOG("%d: size = %zu, count = %zu", tests, elmsize, elmcount);
+
+ /* Populate test vectors */
+ arc4random_buf(testvector, sizeof(testvector));
+ memcpy(sresvector, testvector, sizeof(testvector));
+
+ /* Sort using qsort(3) */
+ qsort_r(testvector, elmcount, elmsize, (void*)elmsize, szsorthelp);
+ /* Sort using reference slow sorting routine */
+ szsort(sresvector, elmcount, elmsize);
+
+ /* Compare results */
+ for (i = 0; i < elmcount; i++){
+ if (memcmp(testvector + (i * elmsize), sresvector + (i * elmsize), elmsize) != 0) {
+ T_LOG("testvector =");
+ dt_print_hex_dump((uint8_t*)testvector, sizeof(testvector));
+ T_LOG("sresvector =");
+ dt_print_hex_dump((uint8_t*)sresvector, sizeof(sresvector));
+ T_ASSERT_FAIL("%d: item at index %zd should match", tests, i);
+ break;
+ }
+ }
+ if (i == elmcount) {
+ T_PASS("%d: Sorted successfully.", tests);
+ }
+ }
+}