void cmpif2readtype_( MPI_Fint *ftype, MPI_Fint *fkey, MPI_Aint *expected, MPI_Fint *errs, const char *msg, int msglen ) { void *attrval; int flag, result; MPI_Datatype dtype = MPI_Type_f2c( *ftype ); char lmsg[MAX_ATTRTEST_MSG]; if (msglen > sizeof(lmsg)- 1) { fprintf( stderr, "Message too long for buffer (%d)\n", msglen ); MPI_Abort( MPI_COMM_WORLD, 1 ); } MPI_Type_get_attr( dtype, *fkey, &attrval, &flag ); if (!flag) { *errs = *errs + 1; strncpy( lmsg, msg, msglen ); lmsg[msglen] = 0; printf( " Error: flag false for Type_get_attr (set in F2): %s\n", lmsg ); return; } ccompareaint2void_( expected, attrval, &result ); if (!result) { *errs = *errs + 1; strncpy( lmsg, msg, msglen ); lmsg[msglen] = 0; printf( " Error: (set in F2/Type) expected %ld but saw %ld: %s\n", (long)*expected, (long)*(MPI_Aint*)attrval, lmsg ); return; } return; }
JNIEXPORT jobject JNICALL Java_mpi_Datatype_getAttr( JNIEnv *env, jobject jthis, jlong type, jint keyval) { int flag; void *val; int rc = MPI_Type_get_attr((MPI_Datatype)type, keyval, &val, &flag); if(ompi_java_exceptionCheck(env, rc) || !flag) return NULL; return ompi_java_attrGet(env, val); }
int cmpi2readtype( MPI_Datatype dtype, int key, void *expected, const char *msg ) { void *attrval; int flag; MPI_Type_get_attr( dtype, key, &attrval, &flag ); if (!flag) { printf( " Error: flag false for Type_get_attr: %s\n", msg ); return 1; } if (attrval != expected) { printf( " Error: expected %p but saw %p: %s\n", expected, attrval, msg ); return 1; } return 0; }
int checkNoAttrs( MPI_Datatype type, int n, int key[] ) { int errs = 0; int i, flag, *val_p; for (i=0; i<n; i++) { MPI_Type_get_attr( type, key[i], &val_p, &flag ); if (flag) { errs++; fprintf( stderr, "Attribute for key %d set but should be deleted\n", i ); } } return errs; }
int checkAttrs( MPI_Datatype type, int n, int key[], int attrval[] ) { int errs = 0; int i, flag, *val_p; for (i=0; i<n; i++) { MPI_Type_get_attr( type, key[i], &val_p, &flag ); if (!flag) { errs++; fprintf( stderr, "Attribute for key %d not set\n", i ); } else if (val_p != &attrval[i]) { errs++; fprintf( stderr, "Attribute value for key %d not correct\n", i ); } } return errs; }