--- /dev/null
+#include <stdlib.h>
+#include <search.h>
+#include "test.h"
+
+struct q {
+ struct q *n;
+ struct q *p;
+ int i;
+};
+
+static struct q *new(int i)
+{
+ struct q *q = malloc(sizeof *q);
+ q->i = i;
+ return q;
+}
+
+int main()
+{
+ struct q *q = new(0);
+ struct q *p;
+ int i;
+
+ insque(q, 0);
+ for (i = 1; i < 10; i++) {
+ insque(new(i), q);
+ q = q->n;
+ }
+ p = q;
+ while (q) {
+ if (q->i != --i)
+ t_error("walking queue: got %d, wanted %d\n", q->i, i);
+ q = q->p;
+ }
+ remque(p->p);
+ if (p->p->i != p->i-2)
+ t_error("remque: got %d, wanted %d\n", p->p->i, p->i-2);
+ if (p->p->n->i != p->i)
+ t_error("remque: got %d, wanted %d\n", p->p->n->i, p->i);
+ return t_status;
+}