AMPI: Add fsglobals (filesystem) and pipglobals (Process-in-Process) privatization...
[charm.git] / tests / ampi / privatization / test.C
1 // Global Variable Privatization Test - Framework
2
3 #include <stdio.h>
4 #include "mpi.h"
5 #include "test.h"
6
7
8 static int print_test_result(int rank, int my_wth, const char * name, bool result)
9 {
10   printf(result_indent "[%d](%d) %s %s\n", rank, my_wth, name, result ? "passed" : "failed");
11   return result ? 0 : 1;
12 }
13
14 void test_privatization(int & failed, int & rank, int & my_wth, int & global)
15 {
16   MPI_Barrier(MPI_COMM_WORLD);
17
18   global = 0;
19
20   MPI_Barrier(MPI_COMM_WORLD);
21
22   if (rank == 0)
23     global = 1;
24
25   MPI_Barrier(MPI_COMM_WORLD);
26
27   failed += print_test_result(rank, my_wth, "single write test", global == (rank == 0 ? 1 : 0));
28
29   MPI_Barrier(MPI_COMM_WORLD);
30
31   global = 0;
32
33   MPI_Barrier(MPI_COMM_WORLD);
34
35   global = rank;
36
37   MPI_Barrier(MPI_COMM_WORLD);
38
39   failed += print_test_result(rank, my_wth, "many write test", global == rank);
40
41   MPI_Barrier(MPI_COMM_WORLD);
42 }
43
44
45 void privatization_test_framework(void)
46 {
47   int rank;            /* process id */
48   int p;               /* number of processes */
49   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
50   MPI_Comm_size(MPI_COMM_WORLD, &p);
51
52   int my_wth, flag;
53   MPI_Comm_get_attr(MPI_COMM_WORLD, AMPI_MY_WTH, &my_wth, &flag);
54
55
56   int failed_before = 0;
57   perform_test_batch(failed_before, rank, my_wth);
58
59 #if defined test_migration
60   if (rank == 0) printf("Requesting migration.\n");
61   AMPI_Migrate(AMPI_INFO_LB_SYNC);
62 #endif
63
64   int failed_after = 0;
65   perform_test_batch(failed_after, rank, my_wth);
66
67   if (failed_before != failed_after) printf("[%d](%d) Migration caused a test inconsistency.\n", rank, my_wth);
68
69   int failed = failed_before + failed_after;
70   int total_failures = 0;
71   MPI_Reduce(&failed, &total_failures, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
72
73   if (rank == 0)
74   {
75     if (total_failures > 0)
76       printf("%d tests failed.\n", total_failures);
77     else
78       printf("All tests passed.\n");
79   }
80
81
82   if (total_failures > 0)
83     MPI_Abort(MPI_COMM_WORLD, 1);
84 }