#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#include "../smalloc.h"
#include "../flist.h"

FILE *f_err;

#define MAGIC1	0xa9b1c8d2
#define MAGIC2	0xf0a1e9b3

#define LOOPS	32

struct elem {
	unsigned int magic1;
	struct flist_head list;
	unsigned int magic2;
};

FLIST_HEAD(list);

static int do_rand_allocs(void)
{
	unsigned int size, nr, rounds = 0;
	unsigned long total;
	struct elem *e;

	while (rounds++ < LOOPS) {
#ifdef STEST_SEED
		srand(MAGIC1);
#endif
		nr = total = 0;
		while (total < 128*1024*1024UL) {
			size = 8 * sizeof(struct elem) + (int) (999.0 * (rand() / (RAND_MAX + 1.0)));
			e = smalloc(size);
			if (!e) {
				printf("fail at %lu, size %u\n", total, size);
				break;
			}
			e->magic1 = MAGIC1;
			e->magic2 = MAGIC2;
			total += size;
			flist_add_tail(&e->list, &list);
			nr++;
		}

		printf("Got items: %u\n", nr);

		while (!flist_empty(&list)) {
			e = flist_entry(list.next, struct elem, list);
			assert(e->magic1 == MAGIC1);
			assert(e->magic2 == MAGIC2);
			flist_del(&e->list);
			sfree(e);
		}
	}

	return 0;
}

static int do_specific_alloc(unsigned long size)
{
	void *ptr;

	ptr = smalloc(size);
	sfree(ptr);
	return 0;
}

int main(int argc, char *argv[])
{
	f_err = stderr;

	sinit();

	do_rand_allocs();

	/* smalloc bug, commit 271067a6 */
	do_specific_alloc(671386584);

	scleanup();
	return 0;
}
