// Copyright 2016 The Emscripten Authors.  All rights reserved.
// Emscripten is available under two separate licenses, the MIT license and the
// University of Illinois/NCSA Open Source License.  Both these licenses can be
// found in the LICENSE file.

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

int totalAllocated = 0;
int totalFreed = 0;

extern "C"
{

extern void* emscripten_builtin_malloc(size_t bytes);
extern void emscripten_builtin_free(void* mem);

void * __attribute__((noinline)) malloc(size_t size)
{
	++totalAllocated;
	void *ptr = emscripten_builtin_malloc(size);
	printf("Allocated %u bytes, got %p. %d pointers allocated total.\n", size, ptr, totalAllocated);
	return ptr;
}

void __attribute__((noinline)) free(void *ptr)
{
	++totalFreed;
	emscripten_builtin_free(ptr);
	printf("Freed ptr %p, %d pointers freed total.\n", ptr, totalFreed);
}

}

void *out;

int main()
{
	for(int i = 0; i < 20; ++i)
	{
		void *ptr = malloc(1024 * 1024);
		out = ptr; // make it look used
		free(ptr);
	}
	assert(totalAllocated == 20);
	printf("OK.\n");
}
