#include "gc.h"

struct List_t
{
	gcpointer(List_t) next;
	int val;
};

typedef gcpointer(List_t) LLL;

#define MAX (1024 * 1024)

LLL buildLLL(int sz)
{
	int i;
	LLL ll0, lll, llc;

	ll0 = gcmalloc();
	ll0->val = 0;
	lll = ll0;

	for (i = 1; i < sz; i++)
	{
		llc = gcmalloc();
		llc->val = i;
		lll->next = llc;
		lll = llc;
	}

	return ll0;
}

void testLLL(LLL lll)
{
	unsigned char *counted;

	counted = (unsigned char *) calloc(MAX, sizeof(unsigned char));
	while (lll)
	{
		counted[lll->val]++;
		if (counted[lll->val] > 1)
		{
			fprintf(stderr, "ERROR! Encountered %d twice!\n", lll->val);
			exit(1);
		}
		lll = lll->next;
	}

	return;
}

int main(void)
{
	LLL mylll;

	mylll = buildLLL(MAX);

	testLLL(mylll);

	return 0;
}
