|  | #include "test-tool.h" | 
|  | #include "cache.h" | 
|  | #include "prio-queue.h" | 
|  |  | 
|  | static int intcmp(const void *va, const void *vb, void *data) | 
|  | { | 
|  | const int *a = va, *b = vb; | 
|  | return *a - *b; | 
|  | } | 
|  |  | 
|  | static void show(int *v) | 
|  | { | 
|  | if (!v) | 
|  | printf("NULL\n"); | 
|  | else | 
|  | printf("%d\n", *v); | 
|  | free(v); | 
|  | } | 
|  |  | 
|  | int cmd__prio_queue(int argc, const char **argv) | 
|  | { | 
|  | struct prio_queue pq = { intcmp }; | 
|  |  | 
|  | while (*++argv) { | 
|  | if (!strcmp(*argv, "get")) { | 
|  | void *peek = prio_queue_peek(&pq); | 
|  | void *get = prio_queue_get(&pq); | 
|  | if (peek != get) | 
|  | BUG("peek and get results do not match"); | 
|  | show(get); | 
|  | } else if (!strcmp(*argv, "dump")) { | 
|  | void *peek; | 
|  | void *get; | 
|  | while ((peek = prio_queue_peek(&pq))) { | 
|  | get = prio_queue_get(&pq); | 
|  | if (peek != get) | 
|  | BUG("peek and get results do not match"); | 
|  | show(get); | 
|  | } | 
|  | } else if (!strcmp(*argv, "stack")) { | 
|  | pq.compare = NULL; | 
|  | } else { | 
|  | int *v = xmalloc(sizeof(*v)); | 
|  | *v = atoi(*argv); | 
|  | prio_queue_put(&pq, v); | 
|  | } | 
|  | } | 
|  |  | 
|  | return 0; | 
|  | } |