summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--testpar/t_posix_compliant.c114
1 files changed, 69 insertions, 45 deletions
diff --git a/testpar/t_posix_compliant.c b/testpar/t_posix_compliant.c
index c9b32d4..a4b8a86 100644
--- a/testpar/t_posix_compliant.c
+++ b/testpar/t_posix_compliant.c
@@ -57,6 +57,7 @@
static char* testfile = NULL;
static int err_flag = 0;
static int max_err_print = 5;
+int nmismatches = 0; /* warnings encountered */
/* globals needed for getopt
* Although they *should* be defined in unistd.h */
@@ -435,6 +436,7 @@ static int allwrite_allread_interlaced(int numprocs, int rank, int write_size)
}
}
+ nmismatches += counter;
mpio_result = MPI_File_close(&fh);
CHECK_SUCCESS(mpio_result);
@@ -556,6 +558,7 @@ static int allwrite_allread_overlap(int numprocs, int rank, int write_size)
}
}
+ nmismatches += counter;
mpio_result = MPI_File_close(&fh);
CHECK_SUCCESS(mpio_result);
HDfree(writebuf);
@@ -677,6 +680,62 @@ static int onewrite_allread_interlaced(int numprocs, int rank, int write_size)
}
+static int find_writesize(int rank, int numprocs, int size)
+{
+ /* Largest number in the file */
+ int tmp = (size-1)*numprocs;
+ int x = 0;
+ int write_size = 0;
+
+ /* Find largest multiple not greater than tmp */
+ while(x <= tmp)
+ {
+ if( (rank == 0) || (rank == 1) )
+ x+=2;
+ else
+ x += (rank+1);
+
+ write_size++;
+ }
+
+ return write_size;
+}
+
+static void vrfy_elements(int* a, int* b, int size, int rank)
+{
+ int i, counter = 0;
+
+ for(i=0; i<size; i++)
+ {
+ if(a[i] != b[i])
+ {
+ if( (rank == 0) && (counter == 0))
+ printf("\n");
+ if(counter++ < max_err_print)
+ fprintf(stderr, "Arrays do not match! Prcoess %d, element %d: [%d, %d]\n", rank, i, a[i], b[i]);
+ else if(counter++ == max_err_print+1)
+ fprintf(stderr, "Printed %d errors. Omitting the rest\n", max_err_print);
+ err_flag = -1;
+ }
+ }
+ nmismatches += counter;
+ fflush(stderr);
+ fflush(stdout);
+}
+
+/* print an explanation message by MAIN (0) process.
+ */
+header_msg(void)
+{
+ printf(
+"Purpose:\n"
+"This tests if the file system is posix compliant when POSIX and MPI IO APIs\n"
+"are used. This is for information only and always exits with 0 even when\n"
+"non-compliance errors are encounter. This is to prevent this test from\n"
+"aborting the remaining parallel HDF5 tests unnecessarily.\n\n"
+ );
+}
+
int main(int argc, char* argv[])
{
@@ -692,6 +751,8 @@ int main(int argc, char* argv[])
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+ if (rank == 0)
+ header_msg();
while((opt = getopt(argc, argv, optstring)) != -1)
{
switch(opt)
@@ -749,7 +810,9 @@ int main(int argc, char* argv[])
testfile = strdup(TESTFNAME);
}
}
- printf("Proc %d: testfile=%s\n", rank, testfile);
+ printf("Process %d: testfile=%s\n", rank, testfile);
+ fflush(stdout);
+ MPI_Barrier(MPI_COMM_WORLD);
if(write_size == 0)
{
@@ -847,52 +910,13 @@ int main(int argc, char* argv[])
done:
if (testfile)
HDfree(testfile);
+ if (rank == 0){
+ printf("\nSummary:\n");
+ fflush(stdout);
+ }
MPI_Barrier(MPI_COMM_WORLD);
+ printf("Process %d: encountered %d mismatches.\n", rank, nmismatches);
MPI_Finalize();
return 0;
}
-
-
-
-static int find_writesize(int rank, int numprocs, int size)
-{
- /* Largest number in the file */
- int tmp = (size-1)*numprocs;
- int x = 0;
- int write_size = 0;
-
- /* Find largest multiple not greater than tmp */
- while(x <= tmp)
- {
- if( (rank == 0) || (rank == 1) )
- x+=2;
- else
- x += (rank+1);
-
- write_size++;
- }
-
- return write_size;
-}
-
-static void vrfy_elements(int* a, int* b, int size, int rank)
-{
- int i, counter = 0;
-
- for(i=0; i<size; i++)
- {
- if(a[i] != b[i])
- {
- if( (rank == 0) && (counter == 0))
- printf("\n");
- if(counter++ < max_err_print)
- fprintf(stderr, "Arrays do not match! Prcoess %d, element %d: [%d, %d]\n", rank, i, a[i], b[i]);
- else if(counter++ == max_err_print+1)
- fprintf(stderr, "Printed %d errors. Omitting the rest\n", max_err_print);
- err_flag = -1;
- }
- }
- fflush(stderr);
- fflush(stdout);
-}