shithub: asif

ref: eb37a4241e5ea1da1c4a7e4614f44888fdbe1511
dir: /test/pheap.dec.c/

View raw version
#include <u.h>
#include <libc.h>
#include "asif.h"
debuglevel = Logtrace;
enum{
	Nnodes = 10000,
};

void main(void) {
	Pairheap *queue, *a, **t, **p;
	int fd, i;
	double v;

	t = emalloc(Nnodes * sizeof *t);
	if((fd = create("res", OWRITE, 0644)) < 0)
		sysfatal("create: %r");
	queue = nil;
	srand(time(nil));
	for(p=t; p<t+Nnodes; p++){
		v = frand() * 1e6;
		*p = pushqueue(v, nil, &queue);
		if(frand() < 0.5){
			a = t[nrand(p-t)];
			decreasekey(a, a->n-frand()*1e2, &queue);
		}
	}
	for(p=t; p<t+Nnodes; p++)
		fprint(fd, "%.2f\n", (*p)->n);
	close(fd);
	while((a = popqueue(&queue)) != nil)
		print("%.2f\n", a->n);
	exits(nil);
}