A simple test program for SDL_qsort().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
diff --git a/.hgignore b/.hgignore
index 5fa33f7..84122f8 100644
--- a/.hgignore
+++ b/.hgignore
@@ -119,6 +119,7 @@ test/testwm2
test/testbounds
test/torturethread
test/testdisplayinfo
+test/testqsort
test/*.exe
test/*.dSYM
buildbot
diff --git a/test/Makefile.in b/test/Makefile.in
index 10ab2fd..f8b6516 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -62,6 +62,7 @@ TARGETS = \
testrendercopyex$(EXE) \
testmessage$(EXE) \
testdisplayinfo$(EXE) \
+ testqsort$(EXE) \
controllermap$(EXE) \
all: Makefile $(TARGETS)
@@ -271,6 +272,9 @@ testmessage$(EXE): $(srcdir)/testmessage.c
testdisplayinfo$(EXE): $(srcdir)/testdisplayinfo.c
$(CC) -o $@ $^ $(CFLAGS) $(LIBS)
+testqsort$(EXE): $(srcdir)/testqsort.c
+ $(CC) -o $@ $^ $(CFLAGS) $(LIBS)
+
testbounds$(EXE): $(srcdir)/testbounds.c
$(CC) -o $@ $^ $(CFLAGS) $(LIBS)
diff --git a/test/testqsort.c b/test/testqsort.c
new file mode 100644
index 0000000..a16da2e
--- /dev/null
+++ b/test/testqsort.c
@@ -0,0 +1,85 @@
+/*
+ Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "SDL.h"
+#include "SDL_revision.h"
+
+static int
+num_compare(const void *_a, const void *_b)
+{
+ const int a = *((const int *) _a);
+ const int b = *((const int *) _b);
+ return (a < b) ? -1 : ((a > b) ? 1 : 0);
+}
+
+static void
+test_sort(const char *desc, int *nums, const int arraylen)
+{
+ int i;
+ int prev;
+
+ SDL_Log("test: %s arraylen=%d", desc, arraylen);
+
+ SDL_qsort(nums, arraylen, sizeof (nums[0]), num_compare);
+
+ prev = nums[0];
+ for (i = 1; i < arraylen; i++) {
+ const int val = nums[i];
+ if (val < prev) {
+ SDL_Log("sort is broken!");
+ return;
+ }
+ prev = val;
+ }
+}
+
+int
+main(int argc, char *argv[])
+{
+ static int nums[1024 * 100];
+ static const int itervals[] = { SDL_arraysize(nums), 12 };
+ int iteration;
+
+ for (iteration = 0; iteration < SDL_arraysize(itervals); iteration++) {
+ const int arraylen = itervals[iteration];
+ int i;
+
+ for (i = 0; i < arraylen; i++) {
+ nums[i] = i;
+ }
+ test_sort("already sorted", nums, arraylen);
+
+ for (i = 0; i < arraylen; i++) {
+ nums[i] = i;
+ }
+ nums[arraylen-1] = -1;
+ test_sort("already sorted except last element", nums, arraylen);
+
+ for (i = 0; i < arraylen; i++) {
+ nums[i] = (arraylen-1) - i;
+ }
+ test_sort("reverse sorted", nums, arraylen);
+
+ for (i = 0; i < arraylen; i++) {
+ nums[i] = random();
+ }
+ test_sort("random sorted", nums, arraylen);
+ }
+
+ return 0;
+}
+
+/* vi: set ts=4 sw=4 expandtab: */
+