summaryrefslogtreecommitdiff
path: root/fib-1.1/use.c
diff options
context:
space:
mode:
Diffstat (limited to 'fib-1.1/use.c')
-rw-r--r--fib-1.1/use.c126
1 files changed, 126 insertions, 0 deletions
diff --git a/fib-1.1/use.c b/fib-1.1/use.c
new file mode 100644
index 00000000..e8db3279
--- /dev/null
+++ b/fib-1.1/use.c
@@ -0,0 +1,126 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+#include "fib.h"
+
+#define TESTCASE 1
+
+#define COUNT 100000
+#define DIF 1000
+#define MAXEXT 10
+#define VERBOSE 1
+
+int cmp(void *, void *);
+
+int
+cmp(void *x, void *y)
+{
+ int a, b;
+ a = (int)x;
+ b = (int)y;
+
+ if (a < b)
+ return -1;
+ if (a == b)
+ return 0;
+ return 1;
+}
+
+int
+main(void)
+{
+#if !TESTCASE
+ struct fibheap_el *w;
+#else
+ int e, j, k;
+#endif
+ struct fibheap *a;
+ int i, x;
+
+ a = fh_makeheap();
+ fh_setcmp(a, cmp);
+
+ srandom(time(NULL));
+#if TESTCASE
+#if VERBOSE
+ printf("inserting: ");
+#endif
+ e = 0;
+ for (i = 0; i < COUNT; i++) {
+#if VERBOSE
+ if (i)
+ printf(", ");
+#endif
+ fh_insert(a, (void *)(x = random()/10));
+#if VERBOSE
+ printf("%d", x);
+#endif
+ if (i - e > DIF) {
+ k = random() % MAXEXT;
+ for (j = 0; j < k; j++, e++)
+ printf("throwing: %d\n", (int)fh_extractmin(a));
+ }
+ }
+
+#if VERBOSE
+ printf("\nremaining: %d\n", COUNT - e);
+ printf("extracting: ");
+#endif
+ for (i = 0; i < COUNT - e; i++) {
+#if VERBOSE
+ if (i)
+ printf(", ");
+ printf("%d", (int)fh_extractmin(a));
+#else
+ fh_extractmin(a);
+#endif
+ }
+#if VERBOSE
+ printf("\n");
+#endif
+ if ((int)fh_extractmin(a) == 0)
+ printf("heap empty!\n");
+ else {
+ printf("heap not empty! ERROR!\n");
+ exit(1);
+ }
+#else
+ w = fh_insert(a, (void *)6);
+ printf("adding: %d\n", 6);
+ fh_insert(a, (void *)9);
+ printf("adding: %d\n", 9);
+ fh_insert(a, (void *)1);
+ printf("adding: %d\n", 1);
+ for(i = 0; i < 5; i++) {
+ x = random()/10000;
+ printf("adding: %d\n", x);
+ fh_insert(a, (void *)x);
+ }
+ fh_insert(a, (void *)4);
+ printf("adding: %d\n", 4);
+ fh_insert(a, (void *)8);
+ printf("adding: %d\n", 8);
+ printf("first: %d\n", (int)fh_extractmin(a));
+ printf("deleting: %d\n", (int)fh_delete(a, w));
+ printf("first: %d\n", (int)fh_extractmin(a));
+ printf("first: %d\n", (int)fh_extractmin(a));
+ printf("first: %d\n", (int)fh_extractmin(a));
+ printf("first: %d\n", (int)fh_extractmin(a));
+ printf("first: %d\n", (int)fh_extractmin(a));
+ for(i = 0; i < 5; i++) {
+ x = random()/10000;
+ printf("adding: %d\n", x);
+ fh_insert(a, (void *)x);
+ }
+ printf("first: %d\n", (int)fh_extractmin(a));
+ printf("first: %d\n", (int)fh_extractmin(a));
+ printf("first: %d\n", (int)fh_extractmin(a));
+ printf("first: %d\n", (int)fh_extractmin(a));
+ printf("first: %d\n", (int)fh_extractmin(a));
+#endif
+
+ fh_deleteheap(a);
+
+ return 0;
+}