Add bench for sort functions.

This commit is contained in:
Patrick Pelissier committed 2017-03-26 20:37:55 +02:00
1 parent 2a5829bb23
commit d67cc326b7
6 files changed
+105 -1

No files matched your search

+5
View File
@@ -12,6 +12,7 @@ bench-mlib:
@./bench-mlib.exe 3 @./bench-mlib.exe 3
@./bench-mlib.exe 4 @./bench-mlib.exe 4
@./bench-mlib.exe 6 @./bench-mlib.exe 6
@./bench-mlib.exe 7
bench-stl: bench-stl:
$(CXX) $(CFLAGS) $(CPPFLAGS) bench-stl.cpp -o bench-stl.exe $(CXX) $(CFLAGS) $(CPPFLAGS) bench-stl.cpp -o bench-stl.exe
@@ -21,6 +22,7 @@ bench-stl:
@./bench-stl.exe 4 @./bench-stl.exe 4
@./bench-stl.exe 5 @./bench-stl.exe 5
@./bench-stl.exe 6 @./bench-stl.exe 6
@./bench-stl.exe 7
bench-qt: bench-qt:
$(CXX) $(CFLAGS) $(CPPFLAGS) -fPIC $$(pkg-config --libs --cflags Qt5Core) bench-qt.cpp -o bench-qt.exe $(CXX) $(CFLAGS) $(CPPFLAGS) -fPIC $$(pkg-config --libs --cflags Qt5Core) bench-qt.cpp -o bench-qt.exe
@@ -30,6 +32,7 @@ bench-qt:
@./bench-qt.exe 4 @./bench-qt.exe 4
@./bench-qt.exe 5 @./bench-qt.exe 5
@./bench-qt.exe 6 @./bench-qt.exe 6
@./bench-qt.exe 7
bench-klib: bench-klib:
$(CC) $(CFLAGS) $(CPPFLAGS) $${KLIB_CPPFLAGS} bench-klib.c -o bench-klib.exe $(CC) $(CFLAGS) $(CPPFLAGS) $${KLIB_CPPFLAGS} bench-klib.c -o bench-klib.exe
@@ -38,6 +41,7 @@ bench-klib:
@./bench-klib.exe 3 @./bench-klib.exe 3
@./bench-klib.exe 4 @./bench-klib.exe 4
@./bench-klib.exe 6 @./bench-klib.exe 6
@./bench-klib.exe 7
bench-glib: bench-glib:
$(CC) $(CFLAGS) $(CPPFLAGS) $$(pkg-config --libs --cflags glib-2.0) bench-glib.c -o bench-glib.exe $(CC) $(CFLAGS) $(CPPFLAGS) $$(pkg-config --libs --cflags glib-2.0) bench-glib.c -o bench-glib.exe
@@ -46,6 +50,7 @@ bench-glib:
@./bench-glib.exe 3 @./bench-glib.exe 3
@./bench-glib.exe 4 @./bench-glib.exe 4
@./bench-glib.exe 6 @./bench-glib.exe 6
@./bench-glib.exe 7
clean: clean:
rm -f *.o bench-*.exe *~ rm -f *.o bench-*.exe *~
+24 -1
View File
@@ -200,6 +200,28 @@ test_dict_big(unsigned long n)
/********************************************************************************************/ /********************************************************************************************/
static gint cmp_float(gconstpointer a,
gconstpointer b)
{
const float *pa = a, *pb = b;
return (*pa < *pb) ? -1 : (*pa > *pb);
}
static void test_sort(size_t n)
{
rand_init();
GArray *a1 = g_array_new (FALSE, FALSE, sizeof (float));
for(size_t i = 0; i < n; i++) {
float v = rand_get();
g_array_append_val(a1, v );
}
g_array_sort(a1, cmp_float);
g_result = g_array_index (a1, float, 0);
g_array_free(a1, FALSE);
}
/********************************************************************************************/
int main(int argc, const char *argv[]) int main(int argc, const char *argv[])
{ {
int n = (argc > 1) ? atoi(argv[1]) : 0; int n = (argc > 1) ? atoi(argv[1]) : 0;
@@ -213,5 +235,6 @@ int main(int argc, const char *argv[])
test_function("Dict time", 1000000, test_dict); test_function("Dict time", 1000000, test_dict);
if (n == 6) if (n == 6)
test_function("DictB time", 1000000, test_dict_big); test_function("DictB time", 1000000, test_dict_big);
if (n == 7)
test_function("Sort time", 10000000, test_sort);
} }
+24
View File
@@ -11,6 +11,7 @@
#include "klist.h" #include "klist.h"
#include "kbtree.h" #include "kbtree.h"
#include "khash.h" #include "khash.h"
#include "ksort.h"
unsigned long g_result; unsigned long g_result;
@@ -197,6 +198,27 @@ test_dict_big(unsigned long n)
kh_destroy(iub, dict); kh_destroy(iub, dict);
} }
/********************************************************************************************/
// NOTE: Needed for compiling
static double drand48(void) { return rand_get(); }
KSORT_INIT_GENERIC(float)
static void test_sort(size_t n)
{
rand_init();
kvec_t(float) a1;
kv_init(a1);
for(size_t i = 0; i < n; i++) {
kv_push(float, a1, rand_get() );
}
// NOTE: Is-it the right way to do? Seems very low level!
ks_introsort_float(n, & kv_A(a1, 0));
g_result = kv_A(a1, 0);
kv_destroy(a1);
}
/********************************************************************************************/ /********************************************************************************************/
int main(int argc, const char *argv[]) int main(int argc, const char *argv[])
@@ -212,5 +234,7 @@ int main(int argc, const char *argv[])
test_function("Dict time", 1000000, test_dict); test_function("Dict time", 1000000, test_dict);
if (n == 6) if (n == 6)
test_function("DictB time", 1000000, test_dict_big); test_function("DictB time", 1000000, test_dict_big);
if (n == 7)
test_function("Sort time", 10000000, test_sort);
} }
+20
View File
@@ -11,6 +11,7 @@
#include "m-list.h" #include "m-list.h"
#include "m-rbtree.h" #include "m-rbtree.h"
#include "m-dict.h" #include "m-dict.h"
#include "m-algo.h"
unsigned long g_result; unsigned long g_result;
@@ -173,6 +174,23 @@ test_dict_big(unsigned long n)
/********************************************************************************************/ /********************************************************************************************/
ARRAY_DEF(float, float)
ALGO_DEF(afloat, ARRAY_OPLIST(float))
static void test_sort(size_t n)
{
rand_init();
M_LET(a1, ARRAY_OPLIST(float)) {
for(size_t i = 0; i < n; i++) {
array_float_push_back(a1, rand_get() );
}
afloat_sort(a1);
g_result = *array_float_get(a1, 0);
}
}
/********************************************************************************************/
int main(int argc, const char *argv[]) int main(int argc, const char *argv[])
{ {
int n = (argc > 1) ? atoi(argv[1]) : 0; int n = (argc > 1) ? atoi(argv[1]) : 0;
@@ -186,5 +204,7 @@ int main(int argc, const char *argv[])
test_function("Dict time", 1000000, test_dict); test_function("Dict time", 1000000, test_dict);
if (n == 6) if (n == 6)
test_function("DictB time", 1000000, test_dict_big); test_function("DictB time", 1000000, test_dict_big);
if (n == 7)
test_function("Sort time", 10000000, test_sort);
} }
+16
View File
@@ -5,6 +5,7 @@
#include <QSet> #include <QSet>
#include <QMap> #include <QMap>
#include <QHash> #include <QHash>
#include <QtAlgorithms>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
@@ -188,6 +189,19 @@ test_dict_big(unsigned long n)
/********************************************************************************************/ /********************************************************************************************/
static void test_sort(size_t n)
{
rand_init();
QVector<float> a1;
for(size_t i = 0; i < n; i++) {
a1.push_back(rand_get() );
}
qSort(a1.begin(), a1.end());
g_result = a1[0];
}
/********************************************************************************************/
int main(int argc, const char *argv[]) int main(int argc, const char *argv[])
{ {
int n = (argc > 1) ? atoi(argv[1]) : 0; int n = (argc > 1) ? atoi(argv[1]) : 0;
@@ -203,4 +217,6 @@ int main(int argc, const char *argv[])
test_function("Dict(u)time", 1000000, test_dict2); test_function("Dict(u)time", 1000000, test_dict2);
if (n == 6) if (n == 6)
test_function("DictB time", 1000000, test_dict_big); test_function("DictB time", 1000000, test_dict_big);
if (n == 7)
test_function("Sort time", 10000000, test_sort);
} }
+16
View File
@@ -4,6 +4,7 @@
#include <map> #include <map>
#include <set> #include <set>
#include <unordered_map> #include <unordered_map>
#include <algorithm>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
@@ -191,6 +192,19 @@ test_dict_big(unsigned long n)
/********************************************************************************************/ /********************************************************************************************/
static void test_sort(size_t n)
{
rand_init();
vector<float> a1;
for(size_t i = 0; i < n; i++) {
a1.push_back(rand_get() );
}
sort(a1.begin(), a1.end());
g_result = a1[0];
}
/********************************************************************************************/
int main(int argc, const char *argv[]) int main(int argc, const char *argv[])
{ {
int n = (argc > 1) ? atoi(argv[1]) : 0; int n = (argc > 1) ? atoi(argv[1]) : 0;
@@ -206,4 +220,6 @@ int main(int argc, const char *argv[])
test_function("Dict(u)time", 1000000, test_dict2); test_function("Dict(u)time", 1000000, test_dict2);
if (n == 6) if (n == 6)
test_function("DictB time", 1000000, test_dict_big); test_function("DictB time", 1000000, test_dict_big);
if (n == 7)
test_function("Sort time", 10000000, test_sort);
} }