Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add one more test
authorAugustin Degomme <adegomme@users.noreply.github.com>
Fri, 17 Nov 2023 21:44:47 +0000 (22:44 +0100)
committerAugustin Degomme <adegomme@users.noreply.github.com>
Fri, 17 Nov 2023 21:44:47 +0000 (22:44 +0100)
teshsuite/smpi/mpich3-test/pt2pt/CMakeLists.txt
teshsuite/smpi/mpich3-test/pt2pt/pssend.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/pt2pt/testlist

index 1c20021..3844964 100644 (file)
@@ -6,7 +6,7 @@ if(enable_smpi AND enable_testsuite_smpi_MPICH3)
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
   foreach(file anyall bottom eagerdt huge_anysrc huge_dupcomm huge_ssend huge_underflow inactivereq isendself isendrecv isendrecv_replace isendirecv isendselfprobe issendselfcancel large_tag multi_psend_derived cancelanysrc pingping probenull
-          dtype_send greq1 probe-unexp rqstatus sendall sendflood sendrecv1 sendrecv2 sendrecv3 waitany-null waittestnull many_isend manylmt recv_any sendself scancel scancel2 rcancel bsend1 bsend2 bsend3 bsend4 bsend5 bsendalign bsendfrag bsendpending rqfreeb)
+          dtype_send greq1 probe-unexp rqstatus sendall sendflood sendrecv1 sendrecv2 sendrecv3 waitany-null waittestnull many_isend manylmt recv_any sendself scancel scancel2 rcancel bsend1 bsend2 bsend3 bsend4 bsend5 bsendalign bsendfrag bsendpending rqfreeb pssend)
     # not compiled files: big_count_status mprobe
     # cancelrecv  icsend large_message pscancel     scancel_unmatch
     add_executable(${file} EXCLUDE_FROM_ALL ${file}.c)
@@ -31,7 +31,8 @@ foreach(file anyall bottom eagerdt huge_anysrc huge_dupcomm huge_ssend huge_unde
          isendself isendirecv isendselfprobe issendselfcancel large_tag multi_psend_derived pingping probenull
           probe-unexp sendall sendflood sendrecv1 sendrecv2 sendrecv3 waitany-null waittestnull
           big_count_status bsend1 bsend2 bsend3 bsend4 bsend5 bsendalign bsendfrag bsendpending
-          cancelrecv cancelanysrc dtype_send greq1 icsend large_message pscancel rcancel rqfreeb rqstatus scancel2 scancel sendself many_isend manylmt mprobe recv_any scancel_unmatch
+          cancelrecv cancelanysrc dtype_send greq1 icsend large_message pscancel pssend
+         rcancel rqfreeb rqstatus scancel2 scancel sendself many_isend manylmt mprobe recv_any scancel_unmatch
 )
   set(examples_src  ${examples_src} ${CMAKE_CURRENT_SOURCE_DIR}/${file}.c)
 endforeach()
diff --git a/teshsuite/smpi/mpich3-test/pt2pt/pssend.c b/teshsuite/smpi/mpich3-test/pt2pt/pssend.c
new file mode 100644 (file)
index 0000000..c936224
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) by Argonne National Laboratory
+ *     See COPYRIGHT in top-level directory
+ */
+
+/*
+ * This program checks the semantics of persistent synchronous send
+ */
+#include "mpi.h"
+#include "mpitest.h"
+
+int main(int argc, char *argv[])
+{
+    int errs = 0;
+    int size, rank;
+    MPI_Request req;
+    int flag;
+
+    MTest_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &size);
+
+    if (size < 2) {
+        fprintf(stderr, "Launch with two processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    if (rank == 0) {
+        MPI_Ssend_init(NULL, 0, MPI_INT, 1, 0, MPI_COMM_WORLD, &req);
+        MPI_Start(&req);
+
+        /* ssend cannot be complete at this point */
+        MPI_Test(&req, &flag, MPI_STATUS_IGNORE);
+        if (flag != 0) {
+            errs++;
+            fprintf(stderr, "ERROR: synchronous send completed before matching recv was posted\n");
+        }
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    if (rank == 0) {
+        MPI_Wait(&req, MPI_STATUS_IGNORE);
+        MPI_Request_free(&req);
+    } else if (rank == 1) {
+        MPI_Recv(NULL, 0, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+    }
+
+    MTest_Finalize(errs);
+
+    return 0;
+}
index 0b79f5e..b9f8d4f 100644 (file)
@@ -35,6 +35,7 @@ scancel 2 xfail=ticket287
 scancel2 2
 #Needs MPI_Buffer_attach
 #pscancel 2 xfail=ticket287
+pssend 2
 rcancel 2
 #cancelrecv 2 xfail=ticket287
 isendselfprobe 1