Zoltan2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ErrorHandlingForTests.hpp
Go to the documentation of this file.
1 // @HEADER
2 //
3 // ***********************************************************************
4 //
5 // Zoltan2: A package of combinatorial algorithms for scientific computing
6 // Copyright 2012 Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact Karen Devine (kddevin@sandia.gov)
39 // Erik Boman (egboman@sandia.gov)
40 // Siva Rajamanickam (srajama@sandia.gov)
41 //
42 // ***********************************************************************
43 //
44 // @HEADER
45 
46 #ifndef ERRORHANDLINGFORTESTS_HPP
47 #define ERRORHANDLINGFORTESTS_HPP
48 
49 #include <Zoltan2_config.h>
50 #include <iostream>
51 #include <string>
52 #include <exception>
53 
54 #include <Teuchos_RCP.hpp>
55 #include <Teuchos_Comm.hpp>
56 #include <Teuchos_CommHelpers.hpp>
57 
58 using Teuchos::RCP;
59 using Teuchos::Comm;
60 using Teuchos::reduceAll;
61 
62 #define TEST_FAIL_AND_THROW(comm, ok, s){ \
63 int gval, lval=( (ok) ? 0 : 1); \
64 reduceAll<int,int>(comm, Teuchos::REDUCE_SUM, 1, &lval, &gval);\
65 if (gval){ \
66  throw std::runtime_error(std::string(s)); \
67 } \
68 }
69 
70 #define TEST_FAIL_AND_EXIT(comm, ok, s, code){ \
71 int gval, lval=( (ok) ? 0 : 1); \
72 reduceAll<int,int>(comm, Teuchos::REDUCE_SUM, 1, &lval, &gval);\
73 if (gval){ \
74  if ((comm).getRank() == 0){\
75  std::cerr << "Error: " << s << std::endl;\
76  std::cout << "Error: " << s << std::endl;\
77  std::cout << "FAIL" << std::endl;\
78  } \
79  exit(code);\
80 } \
81 }
82 
83 #define TEST_FAIL_AND_RETURN(comm, ok, s){ \
84 int gval, lval=( (ok) ? 0 : 1); \
85 reduceAll<int,int>(comm, Teuchos::REDUCE_SUM, 1, &lval, &gval);\
86 if (gval){ \
87  if ((comm).getRank() == 0){\
88  std::cerr << "Error: " << s << std::endl;\
89  std::cout << "Error: " << s << std::endl;\
90  std::cout << "FAIL" << std::endl;\
91  } \
92  return; \
93 } \
94 }
95 
96 #define TEST_FAIL_AND_RETURN_VALUE(comm, ok, s, rc){ \
97 int gval, lval=( (ok) ? 0 : 1); \
98 reduceAll<int,int>(comm, Teuchos::REDUCE_SUM, 1, &lval, &gval);\
99 if (gval){ \
100  if ((comm).getRank() == 0){\
101  std::cerr << "Error: " << s << std::endl;\
102  std::cout << "Error: " << s << std::endl;\
103  std::cout << "FAIL" << std::endl;\
104  } \
105  return (rc); \
106 } \
107 }
108 
109 int globalFail(const Comm<int> &comm, int fail)
110 {
111  int gfail=0;
112  reduceAll<int,int>(comm, Teuchos::REDUCE_SUM, 1, &fail, &gfail);
113  return gfail;
114 }
115 
116 void printFailureCode(const Comm<int> &comm, int fail)
117 {
118  int rank = comm.getRank();
119  int nprocs = comm.getSize();
120  comm.barrier();
121  for (int p=0; p < nprocs; p++){
122  if (p == rank)
123  std::cout << rank << ": " << fail << std::endl;
124  comm.barrier();
125  }
126  comm.barrier();
127  if (rank==0) std::cout << "FAIL" << std::endl;
128  exit(1);
129 }
130 
131 #endif
void printFailureCode(const Comm< int > &comm, int fail)
static const std::string fail
int globalFail(const Comm< int > &comm, int fail)