stest.c revision fbc2792b20276f7fa14c44f7b235ca448b383b50
1#include <stdio.h> 2#include <stdlib.h> 3#include <assert.h> 4 5#include "../smalloc.h" 6#include "../flist.h" 7 8FILE *f_err; 9 10#define MAGIC1 0xa9b1c8d2 11#define MAGIC2 0xf0a1e9b3 12 13#define LOOPS 32 14 15struct elem { 16 unsigned int magic1; 17 struct flist_head list; 18 unsigned int magic2; 19}; 20 21FLIST_HEAD(list); 22 23static int do_rand_allocs(void) 24{ 25 unsigned int size, nr, rounds = 0; 26 unsigned long total; 27 struct elem *e; 28 29 while (rounds++ < LOOPS) { 30#ifdef STEST_SEED 31 srand(MAGIC1); 32#endif 33 nr = total = 0; 34 while (total < 128*1024*1024UL) { 35 size = 8 * sizeof(struct elem) + (int) (999.0 * (rand() / (RAND_MAX + 1.0))); 36 e = smalloc(size); 37 if (!e) { 38 printf("fail at %lu, size %u\n", total, size); 39 break; 40 } 41 e->magic1 = MAGIC1; 42 e->magic2 = MAGIC2; 43 total += size; 44 flist_add_tail(&e->list, &list); 45 nr++; 46 } 47 48 printf("Got items: %u\n", nr); 49 50 while (!flist_empty(&list)) { 51 e = flist_entry(list.next, struct elem, list); 52 assert(e->magic1 == MAGIC1); 53 assert(e->magic2 == MAGIC2); 54 flist_del(&e->list); 55 sfree(e); 56 } 57 } 58 59 return 0; 60} 61 62static int do_specific_alloc(unsigned long size) 63{ 64 void *ptr; 65 66 ptr = smalloc(size); 67 sfree(ptr); 68 return 0; 69} 70 71int main(int argc, char *argv[]) 72{ 73 f_err = stderr; 74 75 sinit(); 76 77 do_rand_allocs(); 78 79 /* smalloc bug, commit 271067a6 */ 80 do_specific_alloc(671386584); 81 82 scleanup(); 83 return 0; 84} 85