summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/stdlib/.cvsignore5
-rw-r--r--test/stdlib/Makefile37
-rw-r--r--test/stdlib/qsort.c46
3 files changed, 87 insertions, 1 deletions
diff --git a/test/stdlib/.cvsignore b/test/stdlib/.cvsignore
index 89fe8faa4..253c81051 100644
--- a/test/stdlib/.cvsignore
+++ b/test/stdlib/.cvsignore
@@ -9,3 +9,8 @@ teststrtol.out
teststrtol_glibc.out
mallocbug
mallocbug_glibc
+qsort
+qsort_glibc
+qsort.out
+qsort_glibc.out
+
diff --git a/test/stdlib/Makefile b/test/stdlib/Makefile
index 1a054fbe3..43b942f99 100644
--- a/test/stdlib/Makefile
+++ b/test/stdlib/Makefile
@@ -4,8 +4,9 @@ include $(TESTDIR)/Rules.mak
TARGETS=testmalloc testmalloc_glibc
-TARGETS=mallocbug mallocbug_glibc
+TARGETS+=mallocbug mallocbug_glibc
TARGETS+=teststrtol teststrtol_glibc teststrtol_diff
+TARGETS+=qsort qsort_glibc qsort_diff
all: $(TARGETS)
@@ -109,6 +110,40 @@ teststrtol_diff: teststrtol_glibc teststrtol
-diff -u teststrtol_glibc.out teststrtol.out
-@ echo " "
+qsort: qsort.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(TESTCC)
+ -@ echo "-------"
+ -@ echo " "
+ -@ echo "Compiling vs uClibc: "
+ -@ echo " "
+ $(TESTCC) $(CFLAGS) -c $< -o $@.o
+ $(TESTCC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LIBS)
+ $(STRIPTOOL) -x -R .note -R .comment $@
+ -ldd $@
+ ls $(LSFLAGS) $@
+ -./$@ > $@.out
+ -@ echo " "
+
+qsort_glibc: qsort.c Makefile
+ -@ echo "-------"
+ -@ echo " "
+ -@ echo "Compiling vs GNU libc: "
+ -@ echo " "
+ $(CC) $(CFLAGS) -c $< -o $@.o
+ $(CC) $(LDFLAGS) $@.o -o $@
+ $(STRIPTOOL) -x -R .note -R .comment $@
+ -ldd $@
+ ls -sh $@
+ -./$@ > $@.out
+ -@ echo " "
+
+qsort_diff: qsort_glibc qsort
+ -@ echo "-------"
+ -@ echo " "
+ -@ echo "Diffing output: "
+ -@ echo " "
+ -diff -u qsort_glibc.out qsort.out
+ -@ echo " "
+
clean:
rm -f *.[oa] *~ core $(TARGETS) teststrtol_glibc.out teststrtol.out
diff --git a/test/stdlib/qsort.c b/test/stdlib/qsort.c
new file mode 100644
index 000000000..50464979e
--- /dev/null
+++ b/test/stdlib/qsort.c
@@ -0,0 +1,46 @@
+#include <stdio.h>
+#include <dirent.h>
+#include <stdlib.h>
+
+int select_files(const struct dirent *dirbuf)
+{
+ if (dirbuf->d_name[0] == '.')
+ return 0;
+ else
+ return 1;
+}
+
+
+int main(void)
+{
+ struct dirent **array;
+ struct dirent *dirbuf;
+
+ int i, numdir;
+
+ chdir("/");
+ numdir = scandir(".", &array, select_files, NULL);
+ printf("\nGot %d entries from scandir().\n", numdir);
+ for (i = 0; i < numdir; ++i) {
+ dirbuf = array[i];
+ printf("[%d] %s\n", i, dirbuf->d_name);
+ free(array[i]);
+ }
+ free(array);
+ numdir = scandir(".", &array, select_files, alphasort);
+ printf("\nGot %d entries from scandir() using alphasort().\n", numdir);
+ for (i = 0; i < numdir; ++i) {
+ dirbuf = array[i];
+ printf("[%d] %s\n", i, dirbuf->d_name);
+ }
+ printf("\nCalling qsort()\n", numdir);
+ qsort(array, numdir, sizeof(struct dirent *), alphasort);
+ for (i = 0; i < numdir; ++i) {
+ dirbuf = array[i];
+ printf("[%d] %s\n", i, dirbuf->d_name);
+ free(array[i]);
+ }
+ free(array);
+ return(0);
+}
+