1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
/*
* Copyright (C) by Argonne National Laboratory
* See COPYRIGHT in top-level directory
*/
#include <stdio.h>
#include "mpi.h"
#include "mpitest.h"
/*
* Test for detecting that a Keyval created for one MPI Object cannot be used
* to set an attribute on a different type of object
*/
int main(int argc, char *argv[])
{
int comm_keyval, win_keyval, type_keyval;
int comm_aval;
int err, errs = 0;
int buf, flag;
MPI_Win win;
void *rval;
MPI_Datatype dtype;
MTest_Init(&argc, &argv);
MPI_Comm_create_keyval(MPI_COMM_NULL_COPY_FN, MPI_COMM_NULL_DELETE_FN, &comm_keyval, 0);
MPI_Win_create_keyval(MPI_WIN_NULL_COPY_FN, MPI_WIN_NULL_DELETE_FN, &win_keyval, 0);
MPI_Type_create_keyval(MPI_TYPE_NULL_COPY_FN, MPI_TYPE_NULL_DELETE_FN, &type_keyval, 0);
MPI_Type_contiguous(4, MPI_DOUBLE, &dtype);
MPI_Win_create(&buf, sizeof(int), sizeof(int), MPI_INFO_NULL, MPI_COMM_WORLD, &win);
MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
err = MPI_Comm_set_attr(MPI_COMM_WORLD, win_keyval, &comm_aval);
if (err == MPI_SUCCESS) {
errs++;
fprintf(stderr, "Comm_set_attr accepted win keyval\n");
}
err = MPI_Comm_set_attr(MPI_COMM_WORLD, type_keyval, &comm_aval);
if (err == MPI_SUCCESS) {
errs++;
fprintf(stderr, "Comm_set_attr accepted type keyval\n");
}
err = MPI_Type_set_attr(dtype, win_keyval, &comm_aval);
if (err == MPI_SUCCESS) {
errs++;
fprintf(stderr, "Type_set_attr accepted win keyval\n");
}
err = MPI_Type_set_attr(dtype, comm_keyval, &comm_aval);
if (err == MPI_SUCCESS) {
errs++;
fprintf(stderr, "Comm_set_attr accepted type keyval\n");
}
err = MPI_Win_set_attr(win, comm_keyval, &comm_aval);
if (err == MPI_SUCCESS) {
errs++;
fprintf(stderr, "Win_set_attr accepted comm keyval\n");
}
err = MPI_Win_set_attr(win, type_keyval, &comm_aval);
if (err == MPI_SUCCESS) {
errs++;
fprintf(stderr, "Win_set_attr accepted type keyval\n");
}
err = MPI_Comm_get_attr(MPI_COMM_WORLD, win_keyval, &rval, &flag);
if (err == MPI_SUCCESS) {
errs++;
fprintf(stderr, "Comm_get_attr accepted win keyval\n");
}
err = MPI_Comm_get_attr(MPI_COMM_WORLD, type_keyval, &rval, &flag);
if (err == MPI_SUCCESS) {
errs++;
fprintf(stderr, "Comm_get_attr accepted type keyval\n");
}
err = MPI_Comm_free_keyval(&win_keyval);
if (err == MPI_SUCCESS) {
errs++;
fprintf(stderr, "Comm_free_keyval accepted win keyval\n");
}
err = MPI_Comm_free_keyval(&type_keyval);
if (err == MPI_SUCCESS) {
errs++;
fprintf(stderr, "Comm_free_keyval accepted type keyval\n");
}
if (win_keyval != MPI_KEYVAL_INVALID) {
err = MPI_Type_free_keyval(&win_keyval);
if (err == MPI_SUCCESS) {
errs++;
fprintf(stderr, "Type_free_keyval accepted win keyval\n");
}
}
err = MPI_Type_free_keyval(&comm_keyval);
if (err == MPI_SUCCESS) {
errs++;
fprintf(stderr, "Type_free_keyval accepted comm keyval\n");
}
if (type_keyval != MPI_KEYVAL_INVALID) {
err = MPI_Win_free_keyval(&type_keyval);
if (err == MPI_SUCCESS) {
errs++;
fprintf(stderr, "Win_free_keyval accepted type keyval\n");
}
}
if (comm_keyval != MPI_KEYVAL_INVALID) {
err = MPI_Win_free_keyval(&comm_keyval);
if (err == MPI_SUCCESS) {
errs++;
fprintf(stderr, "Win_free_keyval accepted comm keyval\n");
}
}
/* Now, free for real */
if (comm_keyval != MPI_KEYVAL_INVALID) {
err = MPI_Comm_free_keyval(&comm_keyval);
if (err != MPI_SUCCESS) {
errs++;
fprintf(stderr, "Could not free comm keyval\n");
}
}
if (type_keyval != MPI_KEYVAL_INVALID) {
err = MPI_Type_free_keyval(&type_keyval);
if (err != MPI_SUCCESS) {
errs++;
fprintf(stderr, "Could not free type keyval\n");
}
}
if (win_keyval != MPI_KEYVAL_INVALID) {
err = MPI_Win_free_keyval(&win_keyval);
if (err != MPI_SUCCESS) {
errs++;
fprintf(stderr, "Could not free win keyval\n");
}
}
MPI_Win_free(&win);
MPI_Type_free(&dtype);
MTest_Finalize(errs);
return MTestReturnValue(errs);
}
|