|
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 |
}
|