#include #include #include #include #include #ifndef __PROGTEST__ /* Ukazkova funkce main testujici zakladni funkcionalitu rozhrani */ /* Je zaclenena do bloku podmineneho prekladu, tuto cast zdrojoveho kodu */ /* Progtest preskakuje. */ #include "dvoraj19.cpp" void vypis(void*Start) { int ii=1; polozka *pol; pol=(polozka*)Start; do { printf("\nPolozka: %d; Start: %d; Velikost: %d; Stav: %d",ii,(int)pol+int(sizeof(polozka)),(pol->velikost),(pol->stav) ); ii=ii+1; pol=pol->nasledujici; }while(pol!=NULL); } int main ( int argc, char * argv [] ) { time_t start,end; time (&start); printf("\n\nTEST1\n"); void * p0, *p1, *p2, *p3; //int SumFree, MaxFree; int PendingBlk, PendingSize; static char MemPool[1048576]; printf("Zacetek pameti:%d\n\n",MemPool+sizeof(polozka)); HeapInit ( MemPool, sizeof ( MemPool ) ); p0 = HeapAlloc ( 512000 ); // ok if(p0==NULL)printf("CHYBA"); memset ( p0, 0, 512000 ); // pouzivame alokovany blok p1 = HeapAlloc ( 511000 ); // ok if(p1==NULL)printf("CHYBA"); memset ( p1, 1, 511000 ); p2 = HeapAlloc ( 26000 ); if(p2!=NULL)printf("\nCHYBA\n"); // NULL HeapDone ( &PendingBlk, &PendingSize ); // 2, 1023000 printf("\n\nBloku: %d, pameti celkem %d",PendingBlk, PendingSize); p3=NULL; //---------------------------------------------------- printf("\n\n\n\nTEST2\n"); HeapInit ( MemPool, sizeof ( MemPool ) ); p0 = HeapAlloc ( 500000 ); // ok if(p0==NULL)printf("CHYBA"); memset ( p0, 2, 500000 ); p1 = HeapAlloc ( 500000 ); // ok if(p1==NULL)printf("CHYBA"); memset ( p1, 3, 500000 ); p2 = HeapAlloc ( 5000 ); // ok if(p2==NULL)printf("CHYBA"); memset ( p2, 4, 5000 ); if(HeapFree ( p1 )!=1)printf("CHYBA"); if(HeapFree ( p2 )!=1)printf("CHYBA"); if(HeapFree ( p0 )!=1)printf("CHYBA"); HeapDone ( &PendingBlk, &PendingSize ); // 0, 0 printf("\n\nBloku: %d, pameti celkem %d",PendingBlk, PendingSize); // --------------------------------------------------------- printf("\n\n\n\nTEST3\n"); HeapInit ( MemPool, sizeof ( MemPool ) ); p0 = HeapAlloc ( 500000 ); // ok if(p0==NULL)printf("CHYBA"); memset ( p0, 5, 500000 ); p1 = HeapAlloc ( 500000 ); // ok if(p1==NULL)printf("CHYBA"); memset ( p1, 6, 500000 ); p2 = HeapAlloc ( 40000 ); // ok if(p2==NULL)printf("CHYBA"); memset ( p2, 7, 40000 ); //vypis(MemPool); if(HeapFree ( p1 ) !=1) printf("\nCHYBA\n"); // ret: 1 //vypis(MemPool); p3 = HeapAlloc ( 512000 ); // NULL, pamet vycerpana if(p3!=NULL)printf("CHYBA"); if(HeapFree ( p2 ) !=1) printf("\nCHYBA\n"); // ret: 1 //vypis(MemPool); if(HeapFree ( p0 ) !=1) printf("\nCHYBA\n"); // ret: 1 p1 = HeapAlloc ( 900000 ); // ok, po uvolneni a sliti bloku memset ( p1, 8, 900000 ); if(HeapFree ( p1 ) !=1) printf("\nCHYBA\n"); // ret: 1 HeapDone ( &PendingBlk, &PendingSize ); // 0, 0 printf("\n\nBloku: %d, pameti celkem %d",PendingBlk, PendingSize); //--------------------------------------------------------- printf("\n\n\n\nTEST4\n"); HeapInit ( MemPool, sizeof ( MemPool ) ); p0 = HeapAlloc ( 500000 ); // ok if(p0==NULL)printf("CHYBA"); memset ( p0, 9, 500000 ); p1 = HeapAlloc ( 170000 ); // ok if(p1==NULL)printf("CHYBA"); memset ( p1, 10, 170000 ); p2 = HeapAlloc ( 170000 ); // ok if(p2==NULL)printf("CHYBA"); memset ( p2, 11, 170000 ); p3 = HeapAlloc ( 170000 ); // ok if(p3==NULL)printf("CHYBA"); memset ( p3, 12, 170000 ); if( HeapFree ( p1 ) !=1) printf("\nCHYBA\n"); // ret: 1 if( HeapFree ( p3 ) !=1) printf("\nCHYBA\n"); // ret: 1 if( HeapFree ( p2 ) !=1) printf("\nCHYBA\n"); // ret: 1 p1 = HeapAlloc ( 300000 ); // ok, uvolnene bloky se spojily if(p1==NULL)printf("CHYBA"); memset ( p1, 13, 300000 ); if( HeapFree ( p0 ) !=1) printf("\nCHYBA\n"); // ret: 1 if( HeapFree ( p1 ) !=1) printf("\nCHYBA\n"); // ret: 1 HeapDone ( &PendingBlk, &PendingSize ); // 0, 0 printf("\n\nBloku: %d, pameti celkem %d\n",PendingBlk, PendingSize); //return 1; printf("\n\nMUJ TEST:\n"); int a=0;int b=0; HeapInit ( MemPool, sizeof ( MemPool ) ); void* pole[100000]; int nahod; for(int i=0;i<100000;i++)pole[i]=NULL; for(int i=0;i<20000;i++) { nahod= rand() % 100000; pole[nahod]=HeapAlloc(100); if(pole[nahod]!=NULL)memset ( pole[nahod], 1, 100 ); nahod= rand() % 100000; HeapFree(pole[nahod]); } HeapDone ( &a, &b ); // 0, 0 printf("\n\nBloku: %d, pameti celkem %d\n",a, b); time (&end); float dif = difftime (end,start); printf ("Doba trvani: %0.10f\n", dif ); return ( 0 ); } #endif /* __PROGTEST__ */