X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/43af7aead466095c362d1cd34d2ddd51ae4f3ce0..6bc530ceb7c793d5ae3a7227f3cf41777d7e7b25:/testsuite/xbt/heap_bench.c diff --git a/testsuite/xbt/heap_bench.c b/testsuite/xbt/heap_bench.c index 10f173a899..ca64029dc3 100644 --- a/testsuite/xbt/heap_bench.c +++ b/testsuite/xbt/heap_bench.c @@ -1,37 +1,41 @@ +/* $Id$ */ + /* A few tests for the xbt_heap module */ -/* Authors: Arnaud Legrand */ +/* Copyright (c) 2004 Arnaud Legrand. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it - under the terms of the license (GNU LGPL) which comes with this package. */ + * under the terms of the license (GNU LGPL) which comes with this package. */ + + #ifdef __BORLANDC__ + #pragma hdrstop + #endif #include #include -#include -#include "xbt_heap.h" -#define MAX_TEST 1000000 +#include "xbt/heap.h" +#include "gras/virtu.h" /* time manipulation in bench */ -/* Pour le bench */ -long us_time(void); -long us_time(void) -{ - struct timeval start; - gettimeofday(&start, NULL); +#define MAX_TEST 1000000 - return (start.tv_sec * 1000000 + start.tv_usec); -} +#ifdef __BORLANDC__ +int _XBT_CALL compare_double(const void *a, const void *b); +#else +int compare_double(const void *a, const void *b); +#endif -int compare_xbt_heap_float_t(const void *a, const void *b); void test_heap_validity(int size); void test_heap_mean_operation(int size); +void test_reset_heap(xbt_heap_t heap,int size); + -int compare_xbt_heap_float_t(const void *a, const void *b) +int compare_double(const void *a, const void *b) { - xbt_heap_float_t pa, pb; + double pa, pb; - pa = *((xbt_heap_float_t *) a); - pb = *((xbt_heap_float_t *) b); + pa = *((double *) a); + pb = *((double *) b); if (pa > pb) return 1; @@ -43,7 +47,7 @@ int compare_xbt_heap_float_t(const void *a, const void *b) void test_heap_validity(int size) { xbt_heap_t heap = xbt_heap_new(size, NULL); - xbt_heap_float_t *tab = calloc(size, sizeof(xbt_heap_float_t)); + double *tab = calloc(size, sizeof(double)); int i; for (i = 0; i < size; i++) { @@ -51,10 +55,10 @@ void test_heap_validity(int size) xbt_heap_push(heap, NULL, tab[i]); } - qsort(tab, size, sizeof(xbt_heap_float_t), compare_xbt_heap_float_t); + qsort(tab, size, sizeof(double), compare_double); for (i = 0; i < size; i++) { - /* printf(XBT_HEAP_FLOAT_T " ", xbt_heap_maxkey(heap)); */ + /* printf("%lg" " ", xbt_heap_maxkey(heap)); */ if (xbt_heap_maxkey(heap) != tab[i]) { fprintf(stderr, "Problem !\n"); exit(1); @@ -69,29 +73,49 @@ void test_heap_validity(int size) void test_heap_mean_operation(int size) { xbt_heap_t heap = xbt_heap_new(size, NULL); - xbt_heap_float_t val; - long date = 0; + double val; + double date = 0; int i, j; - date = us_time(); + date = gras_os_time() * 1000000; for (i = 0; i < size; i++) xbt_heap_push(heap, NULL, (10.0 * rand() / (RAND_MAX + 1.0))); - date = us_time() - date; - printf("Creation time %d size heap : %g\n", size, 0.0 + date); + date = gras_os_time() * 1000000 - date; + printf("Creation time %d size heap : %g\n", size, date); - date = us_time(); + date = gras_os_time() * 1000000; for (j = 0; j < MAX_TEST; j++) { + + if(!(j%size) && j) + test_reset_heap(heap,size); + val = xbt_heap_maxkey(heap); xbt_heap_pop(heap); xbt_heap_push(heap, NULL, 3.0 * val); } - date = us_time() - date; + date = gras_os_time() * 1000000 - date; printf("Mean access time for a %d size heap : %g\n", size, date * 1.0 / (MAX_TEST + 0.0)); xbt_heap_free(heap); } +void test_reset_heap(xbt_heap_t heap,int size) +{ + int i; + xbt_heap_free(heap); + heap = xbt_heap_new(size, NULL); + + for (i = 0; i < size; i++){ + xbt_heap_push(heap, NULL, (10.0 * rand() / (RAND_MAX + 1.0))); + } + +} + +#ifdef __BORLANDC__ +#pragma argsused +#endif + int main(int argc, char **argv) { int size;