Skip to content
Snippets Groups Projects
test_FindProcLowestSum.c 1.46 KiB
Newer Older
#include <stdlib.h>
#include <stdio.h>

#include "DistributeVecOrigEq.h"

struct opts Options ;

extern int FindProcLowestSum(long *procstart, int *procindex, long j, int npj,
                       long *SumsU, long *SumsV);

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

    long i, l, *procstart, *SumsU, *SumsV ;
    int P, npi, q, q0, q1, *procindex ;

    printf("Test FindProcLowestSum: ");
    P = 23 ;   /* number of non-empty processors */
    l= P*P*P ;
    npi = 2;

    procstart = (long *) malloc((l+1)* sizeof(long)) ;
    procindex = (int *) malloc(2*l* sizeof(int)) ;
    SumsU = (long *) malloc(P* sizeof(long)) ;
    SumsV = (long *) malloc(P* sizeof(long)) ;

    if ( procstart == NULL || procindex == NULL ||
         SumsU == NULL || SumsV == NULL ){
        printf("Error\n") ;
        exit(1);
    }

    /* Fill rows of communication matrix, each with two processors */
    for (i=0; i<l; i++)
        procstart[i] = 2*i;
    procstart[l] = 2*l ;
    for (i=0; i<l; i++){
        procindex[2*i] = i%P ;
        procindex[2*i+1] = (i+1)%P ;
    }

    /* Initialise sums */
    for (q=0; q<P; q++){  
        SumsU[q] = q;
        SumsV[q] = q;
    }

    /* Check result values */
    for (i=0; i<l; i++){ 
        q = FindProcLowestSum(procstart, procindex, i, npi, SumsU, SumsV ) ;
        q0 = i%P ;
        q1 = (i+1)%P ;

        if(q != MIN(q0,q1) ){
            printf("Error\n") ;
            exit(1);
        }
    }

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

} /* end main */