Skip to content
Snippets Groups Projects
test_GainBucketGetMaxVal.c 2.45 KiB
#include "GainBucket.h"

int main(int argc, char **argv) {

    void CheckBuckets(struct gainbucket GB, long n, long bs);

    long n, bs, i, j, offset, VtxNr, val;
    struct gainbucket GB ;

    printf("Test GainBucketGetMaxVal(+VertexNr): ");
    n= 100 ; /* number of buckets */
    bs = 5; /* bucket size */
    offset = n/2 ;

    /* Insert vertices in increasing order of gain value */
    GB.NrBuckets =0 ;
    GB.Root = NULL ;
    for (j=0; j<bs; j++)
        for (i=0; i<n; i++)
            BucketInsert(&GB, i-offset, j*n + i) ;

    CheckBuckets(GB, n, bs) ;

    for (i=0; i<n; i++) {
        /* Empty one bucket */
        for (j=0; j<bs; j++) {
            VtxNr = GainBucketGetMaxValVertexNr(&GB) ;
            if ( VtxNr != n-1-i + (bs-1-j) *n ) {
                 printf("Error\n") ;
                 exit(1);
            }

            val = GainBucketGetMaxVal(&GB) ;
            if ( val != n-1-i - offset ) { 
                 printf("Error\n") ; 
                 exit(1);
            }

            VtxNr = BucketDeleteMax(&GB) ;
            if ( VtxNr != n-1-i + (bs-1-j) *n ) {
                 printf("Error\n") ;
                 exit(1);
            }

        }
    }

    
    if (GB.Root != NULL || GB.NrBuckets != 0){
        printf("Error\n") ;
        exit(1);    
    }

    printf("OK\n") ;
    exit(0);

} /* end main */
  
void CheckBuckets(struct gainbucket GB, long n, long bs) {
    long nrentries = 0, i, j, offset ;
    struct bucket *pB ;
    struct bucketentry *pE ;
 
    /* printf("Number of Buckets: %ld \n", GB.NrBuckets) ; */
    if (GB.NrBuckets != n){
        printf("Error\n") ;
        exit(1);
    }

    pB = GB.Root ;

    offset = n/2 ; 
    i = 0;
    while ( pB != NULL ) {
        j = 0;
        pE = pB->entry ;
        while ( pE != NULL ) {
            /* printf("B[% ld] vntnr: %ld \n", (pE->bucket)->value,
                                                pE->vtxnr) ;  */
            if ( (pE->bucket)->value != n-1-i  - offset ||
                 pE->vtxnr != n-1-i + (bs-1-j) *n ) {
                 printf("Error\n") ;
                 exit(1);
            }
 
            nrentries++ ;
            j++ ;
            pE = pE->next ;
        }
        pB = pB->next ;
        if (j!= bs){  
            printf("Error\n") ;
            exit(1); 
        }
        i++ ;
    }
 
    /* printf("TotalNrEntries: %ld\n", nrentries) ; */
    if (nrentries != n*bs){
        printf("Error\n") ; 
        exit(1);
    } 

} /* end CheckBuckets */