[Commits] SDL: A simple test program for SDL_qsort().

libsdl.org revision control commits-owner at libsdl.org
Wed Mar 9 22:50:41 PST 2016


details:   https://hg.libsdl.org/SDL/rev/54209cfab627
changeset: 10109:54209cfab627
user:      Ryan C. Gordon <icculus at icculus.org>
date:      Thu Mar 10 01:50:43 2016 -0500
description:
A simple test program for SDL_qsort().

diffstat:

 .hgignore        |   1 +
 test/Makefile.in |   4 ++
 test/testqsort.c |  85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 90 insertions(+), 0 deletions(-)

diffs (121 lines):

diff -r 866896c224fd -r 54209cfab627 .hgignore
--- a/.hgignore	Tue Mar 08 20:26:26 2016 -0500
+++ b/.hgignore	Thu Mar 10 01:50:43 2016 -0500
@@ -119,6 +119,7 @@
 test/testbounds
 test/torturethread
 test/testdisplayinfo
+test/testqsort
 test/*.exe
 test/*.dSYM
 buildbot
diff -r 866896c224fd -r 54209cfab627 test/Makefile.in
--- a/test/Makefile.in	Tue Mar 08 20:26:26 2016 -0500
+++ b/test/Makefile.in	Thu Mar 10 01:50:43 2016 -0500
@@ -62,6 +62,7 @@
 	testrendercopyex$(EXE) \
 	testmessage$(EXE) \
 	testdisplayinfo$(EXE) \
+	testqsort$(EXE) \
 	controllermap$(EXE) \
 	
 all: Makefile $(TARGETS)
@@ -271,6 +272,9 @@
 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 -r 866896c224fd -r 54209cfab627 test/testqsort.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/testqsort.c	Thu Mar 10 01:50:43 2016 -0500
@@ -0,0 +1,85 @@
+/*
+  Copyright (C) 1997-2016 Sam Lantinga <slouken at 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: */
+


More information about the commits mailing list