b7b1d1603fde63ce3770491139dbc7158de716ed
[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 (rank == 0) printf("Requesting migration.\n");
60   AMPI_Migrate(AMPI_INFO_LB_SYNC);
61
62   int failed_after = 0;
63   perform_test_batch(failed_after, rank, my_wth);
64
65   if (failed_before != failed_after) printf("[%d](%d) Migration caused a test inconsistency.\n", rank, my_wth);
66
67   int failed = failed_before + failed_after;
68   int total_failures = 0;
69   MPI_Reduce(&failed, &total_failures, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
70
71   if (rank == 0)
72   {
73     if (total_failures > 0)
74       printf("%d tests failed.\n", total_failures);
75     else
76       printf("All tests passed.\n");
77   }
78
79
80   if (total_failures > 0)
81     MPI_Abort(MPI_COMM_WORLD, 1);
82 }