Blame src/functional/search_insque.c

Szabolcs Nagy 54f9b9
#ifndef _XOPEN_SOURCE
Szabolcs Nagy 54f9b9
#define _XOPEN_SOURCE 700
Szabolcs Nagy 54f9b9
#endif
Szabolcs Nagy 132e38
#include <stdlib.h>
Szabolcs Nagy 132e38
#include <search.h>
Szabolcs Nagy 132e38
#include "test.h"
Szabolcs Nagy 132e38
Szabolcs Nagy 132e38
struct q {
Szabolcs Nagy 132e38
	struct q *n;
Szabolcs Nagy 132e38
	struct q *p;
Szabolcs Nagy 132e38
	int i;
Szabolcs Nagy 132e38
};
Szabolcs Nagy 132e38
Szabolcs Nagy 132e38
static struct q *new(int i)
Szabolcs Nagy 132e38
{
Szabolcs Nagy 132e38
	struct q *q = malloc(sizeof *q);
Szabolcs Nagy 132e38
	q->i = i;
Szabolcs Nagy 132e38
	return q;
Szabolcs Nagy 132e38
}
Szabolcs Nagy 132e38
Szabolcs Nagy 132e38
int main()
Szabolcs Nagy 132e38
{
Szabolcs Nagy 132e38
	struct q *q = new(0);
Szabolcs Nagy 132e38
	struct q *p;
Szabolcs Nagy 132e38
	int i;
Szabolcs Nagy 132e38
Szabolcs Nagy 132e38
	insque(q, 0);
Szabolcs Nagy 132e38
	for (i = 1; i < 10; i++) {
Szabolcs Nagy 132e38
		insque(new(i), q);
Szabolcs Nagy 132e38
		q = q->n;
Szabolcs Nagy 132e38
	}
Szabolcs Nagy 132e38
	p = q;
Szabolcs Nagy 132e38
	while (q) {
Szabolcs Nagy 132e38
		if (q->i != --i)
Szabolcs Nagy 132e38
			t_error("walking queue: got %d, wanted %d\n", q->i, i);
Szabolcs Nagy 132e38
		q = q->p;
Szabolcs Nagy 132e38
	}
Szabolcs Nagy 132e38
	remque(p->p);
Szabolcs Nagy 132e38
	if (p->p->i != p->i-2)
Szabolcs Nagy 132e38
		t_error("remque: got %d, wanted %d\n", p->p->i, p->i-2);
Szabolcs Nagy 132e38
	if (p->p->n->i != p->i)
Szabolcs Nagy 132e38
		t_error("remque: got %d, wanted %d\n", p->p->n->i, p->i);
Szabolcs Nagy 132e38
	return t_status;
Szabolcs Nagy 132e38
}