diff options
author | Lennart Poettering <lennart@poettering.net> | 2004-12-25 18:45:50 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2004-12-25 18:45:50 +0000 |
commit | 4de18a7015ed77eac277bee669d4c8d9dae60b89 (patch) | |
tree | b02ff8e829c4de83257a7843e9b19ac2d69f078b /prioq-test.c | |
parent | c77f4231ed850b90b9b6f337727e19b63418426f (diff) |
add prioq abstract data type
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@5 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
Diffstat (limited to 'prioq-test.c')
-rw-r--r-- | prioq-test.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/prioq-test.c b/prioq-test.c new file mode 100644 index 0000000..56cfbc1 --- /dev/null +++ b/prioq-test.c @@ -0,0 +1,55 @@ +#include <time.h> +#include <stdlib.h> +#include <stdio.h> + +#include "prioq.h" + +static gint compare(gpointer a, gpointer b) { + gint i = GPOINTER_TO_INT(a), j = GPOINTER_TO_INT(b); + + return i < j ? -1 : (i > j ? 1 : 0); +} + +static void rec(flxPrioQueueNode *n) { + if (!n) + return; + + if (n->parent) { + int a = GPOINTER_TO_INT(n->parent->data), b = GPOINTER_TO_INT(n->data); + if (a > b) { + printf("%i <= %i: NO\n", a, b); + abort(); + } + } + + rec(n->left); + rec(n->right); +} + +int main(int argc, char *argv[]) { + flxPrioQueue *q; + gint i, prev; + + q = flx_prio_queue_new(compare); + + srand(time(NULL)); + + flx_prio_queue_put(q, GINT_TO_POINTER(255)); + flx_prio_queue_put(q, GINT_TO_POINTER(255)); + + for (i = 0; i < 10000; i++) + flx_prio_queue_put(q, GINT_TO_POINTER(random() & 0xFFFF)); + + prev = 0; + while (q->root) { + gint v = GPOINTER_TO_INT(q->root->data); + rec(q->root); + printf("%i\n", v); + flx_prio_queue_remove(q, q->root); + g_assert(v >= prev); + prev = v; + } + + flx_prio_queue_free(q); + return 0; +} |