93 lines · 1.4 KB · C
RawDownload
#include <u.h>#include <libc.h>#include <draw.h> #include "alg.h" #define tassert(x) do{if(x){}else{werrstr("assert: %s", "x"); return 1;}}while(0) typedef int(*tfun)(void); static inticmp(void *a, void *b){	int ia, ib;	ia = (int)a;	ib = (int)b;	return ia < ib ? -1 : ia > ib;} inttestpriq(void){	Priq *p; 	p = priqnew(0);	tassert(p != nil); 	priqpush(p, (void*)1, icmp);	priqpush(p, (void*)2, icmp);	priqpush(p, (void*)3, icmp); 	tassert(priqtop(p) == (void*)1);	tassert(priqpop(p, icmp) == (void*)1);	tassert(priqpop(p, icmp) == (void*)2);	tassert(priqpop(p, icmp) == (void*)3); 	priqfree(p);	return 0;} inttestshuffle(void){	int arr[] = {1, 3, 5, 7, 9, 11, 13, 17};	Point pt[] = {{0,0}, {1, 1}, {2, 2}, {3, 3}};	long i, sz; 	fmtinstall('P', Pfmt);		sz = sizeof(arr)/sizeof(arr[0]); 	print("\n");	for(i=0;i<sz;i++)		print("%d ", arr[i]);	print("\n");	shuffle(arr, sz, sizeof(arr[0]));	for(i=0;i<sz;i++)		print("%d ", arr[i]);	print("\n"); 	sz = sizeof(pt)/sizeof(pt[0]);	for(i=0;i<sz;i++)		print("%P ", pt[i]);	print("\n");	shuffle(pt, sz, sizeof(pt[0]));	for(i=0;i<sz;i++)		print("%P ", pt[i]);	print("\n");	return 0;} struct {	char *n;	tfun f;} tfuns[] = {	{"priq", testpriq},	{"shuffle", testshuffle},	{nil, nil},}; voidmain(void){	int i;	for(i = 0; tfuns[i].f != nil; i++){		fprint(2, "%s: ", tfuns[i].n);		if(tfuns[i].f() != 0)			sysfatal("failed: %r");		else			fprint(2, "ok\n");	}	exits(nil);}