diff options
Diffstat (limited to 'tests/dlmalloc_test.c')
-rw-r--r-- | tests/dlmalloc_test.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/dlmalloc_test.c b/tests/dlmalloc_test.c new file mode 100644 index 00000000..6fbc45ab --- /dev/null +++ b/tests/dlmalloc_test.c @@ -0,0 +1,41 @@ +// Emscripten tests + +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> + +int main(int ac, char **av) { + int NUM = ac > 1 ? atoi(av[1]) : 0; + int REPS = ac > 2 ? atoi(av[2]) : 0; + int c1 = 0, c2 = 0; + for (int x = 0; x < REPS; x++) { + char* allocations[NUM]; + for (int i = 0; i < NUM/2; i++) { + allocations[i] = (char*)malloc((11*i)%1024 + x); + assert(allocations[i]); + if (i > 10 && i%4 == 1 && allocations[i-10]) { + free(allocations[i-10]); + allocations[i-10] = NULL; + } + } + for (int i = NUM/2; i < NUM; i++) { + allocations[i] = (char*)malloc(1024*(i+1)); + assert(allocations[i]); + if (i > 10 && i%4 != 1 && allocations[i-10]) { + free(allocations[i-10]); + allocations[i-10] = NULL; + } + } + char* first = allocations[0]; + for (int i = 0; i < NUM; i++) { + if (allocations[i]) { + free(allocations[i]); + } + } + char *last = (char*)malloc(512); // should be identical, as we free'd it all + char *newer = (char*)malloc(512); // should be different + c1 += first == last; + c2 += first == newer; + } + printf("*%d,%d*\n", c1, c2); +} |