From deb2acbcd92beb2ae9f40cff585700ee5757fccd Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 10 Mar 2016 01:50:43 -0500 Subject: [PATCH] A simple test program for SDL_qsort(). --- .hgignore | 1 + test/Makefile.in | 4 +++ test/testqsort.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 test/testqsort.c diff --git a/.hgignore b/.hgignore index 5fa33f7820bbe..84122f80f9deb 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 10ab2fd8f2a75..f8b65168513db 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 0000000000000..a16da2e98141b --- /dev/null +++ b/test/testqsort.c @@ -0,0 +1,85 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + 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 +#include + +#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: */ +