X-Git-Url: http://www.sigaev.ru/git/gitweb.cgi?a=blobdiff_plain;f=memtest.c;h=e5bf0884e41dc6477bfe02f698621af529ddbef4;hb=d3539aea94a979d4725ef4504ae7a118a99496ad;hp=83097e313bb11b7051ba03be41f72ed0ec764721;hpb=ba7e1d079124ac7e5685a0cf918229d1a9a26735;p=tedtools.git diff --git a/memtest.c b/memtest.c index 83097e3..e5bf088 100644 --- a/memtest.c +++ b/memtest.c @@ -41,29 +41,39 @@ static void usage() { puts( "Usage:\n" - "memtest [-c COUNT [-m]]\n" + "memtest [-c COUNT [-t [-D]] [-s MAXSIZE] [-C COUNTCOUNT]]\n" ); exit(1); } + extern char *optarg; extern int opterr; int main(int argn, char *argv[]) { MemoryContext *base, *child; - int i; - int count=0, iscntx=0; + int i, SZ=32; + int count=0, iscntx=0, flags=0, COUNT=1; opentlog(TL_OPEN_STDERR,TL_DEBUG, NULL); opterr=0; - while((i=getopt(argn,argv,"c:hm")) != EOF) { + while((i=getopt(argn,argv,"s:Dc:htC:")) != EOF) { switch(i) { + case 's': + SZ=atoi(optarg); + break; + case 'C': + COUNT=atoi(optarg); + break; case 'c': count=atoi(optarg); break; - case 'm': + case 'D': + flags=MC_DEBUG; + break; + case 't': iscntx=1; break; case 'h': @@ -77,8 +87,8 @@ main(int argn, char *argv[]) { char *ptr, *ptr1; /* test correctness */ - base = allocMemoryContext(NULL, MC_DEBUG); - child = allocMemoryContext(base, MC_DEBUG); + base = allocMemoryContext(NULL, flags); + child = allocMemoryContext(base, flags); ptr = mcalloc(base, 30); for(i=0;i<26;i++) @@ -87,41 +97,41 @@ main(int argn, char *argv[]) { ptr1 = mcstrdup(base, ptr); strupper(ptr1); - printf("lc:%s uc:%s free:%d\n", ptr, ptr1, base->chunk->freesize); + printf("lc:%s uc:%s free:%d\n", ptr, ptr1, (int)base->chunk->freesize); mcfree(ptr1); - printf("lc:%s free:%d\n", ptr, base->chunk->freesize); + printf("lc:%s free:%d\n", ptr, (int)base->chunk->freesize); ptr1 = mcstrdup(base, ptr); mcfree(ptr); strupper(ptr1); - printf("uc:%s free:%d\n", ptr1, base->chunk->freesize); + printf("uc:%s free:%d\n", ptr1, (int)base->chunk->freesize); ptr= mcstrdup(base, ptr1); strlower(ptr); ptr1 =mcrealloc(ptr1, 60); strcat(ptr1, ptr); - printf("mixed:%s free:%d\n", ptr1, base->chunk->freesize); + printf("mixed:%s free:%d\n", ptr1, (int)base->chunk->freesize); ptr = mcrealloc(ptr1, 59); tassert( ptr==ptr1 ); - printf("mixed:%s free:%d\n", ptr, base->chunk->freesize); + printf("mixed:%s free:%d\n", ptr, (int)base->chunk->freesize); ptr = mcrealloc(ptr1, 120); tassert( ptr==ptr1 ); - printf("mixed:%s free:%d\n", ptr, base->chunk->freesize); + printf("mixed:%s free:%d\n", ptr, (int)base->chunk->freesize); - ptr = mcalloc(base, CNTXCHUNK); - strcpy(ptr, ptr1); - printf("mixed:%s free:%d freenew:%d\n", ptr1, base->chunk->freesize, base->chunk->next->freesize); + ptr1 = mcalloc(base, CNTXCHUNK); + strcpy(ptr1, ptr); + printf("mixed:%s free:%d freenew:%d\n", ptr1, (int)base->chunk->freesize, (int)base->chunk->next->freesize); - ptr= mcstrdup(child, ptr1); - printf("mixed:%s free:%d freechild:%d\n", ptr1, base->chunk->freesize, child->chunk->freesize); + ptr1= mcstrdup(child, ptr); + printf("mixed:%s free:%d freechild:%d\n", ptr1, (int)base->chunk->freesize, (int)child->chunk->freesize); freeMemoryContext(child); - printf("Child: %d\n", (int)(base->child)); + printf("Child: IS %sNULL\n", (base->child == NULL) ? "" : "NOT "); - child = allocMemoryContext(base, MC_DEBUG); + child = allocMemoryContext(base, flags); freeMemoryContext(base); } else { struct timeval begin; @@ -130,57 +140,72 @@ main(int argn, char *argv[]) { srandom(1); if ( iscntx ) { gettimeofday(&begin, NULL); - base = allocMemoryContext(NULL, MC_DEBUG); + while(COUNT-- > 0) { + base = allocMemoryContext(NULL, flags); for(i=0;i 0) { + allptr=all=malloc(sizeof(char*)*count*2); + if ( !all ) + tlog(TL_CRIT|TL_EXIT,"No memory"); for(i=0;i