Zoltan2
Loading...
Searching...
No Matches
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
58using Teuchos::RCP;
59using Teuchos::Comm;
60using Teuchos::reduceAll;
61
62#define TEST_FAIL_AND_THROW(comm, ok, s){ \
63int gval, lval=( (ok) ? 0 : 1); \
64reduceAll<int,int>(comm, Teuchos::REDUCE_SUM, 1, &lval, &gval);\
65if (gval){ \
66 throw std::runtime_error(std::string(s)); \
67} \
68}
69
70#define TEST_FAIL_AND_EXIT(comm, ok, s, code){ \
71int gval, lval=( (ok) ? 0 : 1); \
72reduceAll<int,int>(comm, Teuchos::REDUCE_SUM, 1, &lval, &gval);\
73if (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){ \
84int gval, lval=( (ok) ? 0 : 1); \
85reduceAll<int,int>(comm, Teuchos::REDUCE_SUM, 1, &lval, &gval);\
86if (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){ \
97int gval, lval=( (ok) ? 0 : 1); \
98reduceAll<int,int>(comm, Teuchos::REDUCE_SUM, 1, &lval, &gval);\
99if (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
109int 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
116void 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
int globalFail(const Comm< int > &comm, int fail)
void printFailureCode(const Comm< int > &comm, int fail)
static const std::string fail