Blame test/mpi/mpi_t/cvarwrite.c

Packit 0848f5
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
Packit 0848f5
/*
Packit 0848f5
 *  (C) 2014 by Argonne National Laboratory.
Packit 0848f5
 *      See COPYRIGHT in top-level directory.
Packit 0848f5
 */
Packit 0848f5
#include "mpi.h"
Packit 0848f5
#include <stdio.h>
Packit 0848f5
#include <stdlib.h>
Packit 0848f5
#include <string.h>
Packit 0848f5
#include "mpitest.h"
Packit 0848f5
#include "mpitestconf.h"
Packit 0848f5
Packit 0848f5
#define MAX_STR_CVAR_LEN 512
Packit 0848f5
#define MAX_VAR_NAME_LEN 128
Packit 0848f5
Packit 0848f5
int main(int argc, char *argv[])
Packit 0848f5
{
Packit 0848f5
    int i;
Packit 0848f5
    int required, provided;
Packit 0848f5
    int num_cvar;
Packit 0848f5
    char name[MAX_VAR_NAME_LEN];
Packit 0848f5
    int namelen, verbosity, datatype, desclen, binding, scope, count;
Packit 0848f5
    MPI_T_enum enumtype = MPI_T_ENUM_NULL;
Packit 0848f5
    int iin, iout, iold;
Packit 0848f5
    unsigned uin, uout, uold;
Packit 0848f5
    unsigned long ulin, ulout, ulold;
Packit 0848f5
    unsigned long long ullin, ullout, ullold;
Packit 0848f5
    char cin[MAX_STR_CVAR_LEN], cout[MAX_STR_CVAR_LEN], cold[MAX_STR_CVAR_LEN];
Packit 0848f5
    MPI_T_cvar_handle chandle;
Packit 0848f5
    int errs = 0;
Packit 0848f5
Packit 0848f5
    required = MPI_THREAD_SINGLE;
Packit 0848f5
    namelen = sizeof(name);
Packit 0848f5
Packit 0848f5
    MTest_Init(&argc, &argv);
Packit 0848f5
    MPI_T_init_thread(required, &provided);
Packit 0848f5
Packit 0848f5
    MPI_T_cvar_get_num(&num_cvar);
Packit 0848f5
    MTestPrintfMsg(10, "Total %d MPI control variables\n", num_cvar);
Packit 0848f5
Packit 0848f5
    for (i = 0; i < num_cvar; i++) {
Packit 0848f5
        MPI_T_cvar_get_info(i, name, &namelen, &verbosity, &datatype, &enumtype,
Packit 0848f5
                            NULL /* desc is intentionly ignored to test NULL input */ , &desclen,
Packit 0848f5
                            &binding, &scope);
Packit 0848f5
        if (binding != MPI_T_BIND_NO_OBJECT)
Packit 0848f5
            continue;
Packit 0848f5
Packit 0848f5
        MPI_T_cvar_handle_alloc(i, NULL, &chandle, &count);
Packit 0848f5
        if (count == 1 || (datatype == MPI_CHAR && count < sizeof(cin))) {
Packit 0848f5
            if (MPI_INT == datatype) {
Packit 0848f5
                iin = 123;
Packit 0848f5
                iout = 456;
Packit 0848f5
                MPI_T_cvar_read(chandle, &iold);        /* Read the old value */
Packit 0848f5
                MPI_T_cvar_write(chandle, &iin);        /* Write an arbitrary value */
Packit 0848f5
                MPI_T_cvar_read(chandle, &iout);        /* Read the value again */
Packit 0848f5
                MPI_T_cvar_write(chandle, &iold);       /* Restore the old value */
Packit 0848f5
                if (iin != iout)
Packit 0848f5
                    errs++;
Packit 0848f5
            }
Packit 0848f5
            else if (MPI_UNSIGNED == datatype) {
Packit 0848f5
                uin = 133;
Packit 0848f5
                uout = 986;
Packit 0848f5
                MPI_T_cvar_read(chandle, &uold);
Packit 0848f5
                MPI_T_cvar_write(chandle, &uin);
Packit 0848f5
                MPI_T_cvar_read(chandle, &uout);
Packit 0848f5
                MPI_T_cvar_write(chandle, &uold);
Packit 0848f5
                if (uin != uout)
Packit 0848f5
                    errs++;
Packit 0848f5
            }
Packit 0848f5
            else if (MPI_UNSIGNED_LONG == datatype) {
Packit 0848f5
                ulin = 1830;
Packit 0848f5
                ulout = 2014;
Packit 0848f5
                MPI_T_cvar_read(chandle, &ulold);
Packit 0848f5
                MPI_T_cvar_write(chandle, &ulin);
Packit 0848f5
                MPI_T_cvar_read(chandle, &ulout);
Packit 0848f5
                MPI_T_cvar_write(chandle, &ulold);
Packit 0848f5
                if (ulin != ulout)
Packit 0848f5
                    errs++;
Packit 0848f5
            }
Packit 0848f5
            else if (MPI_UNSIGNED_LONG_LONG == datatype) {
Packit 0848f5
                ullin = 11930;
Packit 0848f5
                ullout = 52014;
Packit 0848f5
                MPI_T_cvar_read(chandle, &ullold);
Packit 0848f5
                MPI_T_cvar_write(chandle, &ullin);
Packit 0848f5
                MPI_T_cvar_read(chandle, &ullout);
Packit 0848f5
                MPI_T_cvar_write(chandle, &ullold);
Packit 0848f5
                if (ullin != ullout)
Packit 0848f5
                    errs++;
Packit 0848f5
            }
Packit 0848f5
            else if (MPI_CHAR == datatype) {
Packit 0848f5
                strcpy(cin, "GARBAGE MPI_CHAR CVAR VALUE");
Packit 0848f5
                strcpy(cout, "TEMPORARY MPI_CHAR CVAR VALUE");
Packit 0848f5
                MPI_T_cvar_read(chandle, cold);
Packit 0848f5
                MPI_T_cvar_write(chandle, cin);
Packit 0848f5
                MPI_T_cvar_read(chandle, cout);
Packit 0848f5
                MPI_T_cvar_write(chandle, cold);
Packit 0848f5
                /* printf("%s = %s\n", name, cold); */
Packit 0848f5
                if (strcmp(cin, cout))
Packit 0848f5
                    errs++;
Packit 0848f5
            }
Packit 0848f5
        }
Packit 0848f5
Packit 0848f5
        MPI_T_cvar_handle_free(&chandle);
Packit 0848f5
    }
Packit 0848f5
Packit 0848f5
    MPI_T_finalize();
Packit 0848f5
    MTest_Finalize(errs);
Packit 0848f5
    MPI_Finalize();
Packit 0848f5
    return 0;
Packit 0848f5
}