X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6e35cd8b5aa71d80be9cd34a6b77dd7951a18e16..8bd25d18b5b13783fe7fa8e1c7b3961f2bf5e0dc:/teshsuite/smpi/mpich3-test/attr/attrdelete.c?ds=sidebyside diff --git a/teshsuite/smpi/mpich3-test/attr/attrdelete.c b/teshsuite/smpi/mpich3-test/attr/attrdelete.c new file mode 100644 index 0000000000..05f03e973b --- /dev/null +++ b/teshsuite/smpi/mpich3-test/attr/attrdelete.c @@ -0,0 +1,56 @@ +/* + * Copyright (C) by Argonne National Laboratory + * See COPYRIGHT in top-level directory + */ + +/* + Having attr delete function to delete another attribute. + */ +#include "mpi.h" +#include "mpitest.h" +#include + +int key1, key2, key3; + +int test_communicator(MPI_Comm comm); + +int main(int argc, char **argv) +{ + int errs; + MTest_Init(&argc, &argv); + errs = test_communicator(MPI_COMM_WORLD); + MTest_Finalize(errs); + return MTestReturnValue(errs); +} + +static int key2_delete_fn(MPI_Comm comm, int keyval, void *attribute_val, void *extra_state) +{ + MPI_Comm_delete_attr(comm, key1); + MPI_Comm_delete_attr(comm, key3); + return MPI_SUCCESS; +} + +int test_communicator(MPI_Comm comm) +{ + int errs = 0; + int rank, size; + + MPI_Comm_rank(comm, &rank); + MPI_Comm_size(comm, &size); + + MPI_Comm_create_keyval(MPI_NULL_COPY_FN, MPI_NULL_DELETE_FN, &key1, NULL); + MPI_Comm_create_keyval(MPI_NULL_COPY_FN, key2_delete_fn, &key2, NULL); + MPI_Comm_create_keyval(MPI_NULL_COPY_FN, MPI_NULL_DELETE_FN, &key3, NULL); + + MPI_Comm_set_attr(comm, key1, (void *) (MPI_Aint) rank); + MPI_Comm_set_attr(comm, key2, (void *) (MPI_Aint) (rank + 100)); + MPI_Comm_set_attr(comm, key3, (void *) (MPI_Aint) (rank + 200)); + + MPI_Comm_delete_attr(comm, key2); + + MPI_Comm_free_keyval(&key1); + MPI_Comm_free_keyval(&key2); + MPI_Comm_free_keyval(&key3); + + return errs; +}