Teuchos Package Browser (Single Doxygen Collection)  Version of the Day
LinearSolverSetupFailure.cpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Teuchos: Common Tools Package
5 // Copyright (2004) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38 //
39 // ***********************************************************************
40 // @HEADER
41 
44 #include <type_traits>
45 
46 namespace { // (anonymous)
47 
48  void throws_LSSF () {
49  throw Trilinos::LinearSolverSetupFailure ("Not an std::runtime_error");
50  }
51 
52  void does_not_throw () {
53  }
54 
55  void throws_runtime_error () {
56  throw std::runtime_error ("Not a LinearSolverSetupFailure");
57  }
58 
59  void catches_LSSF_0 (bool& success, Teuchos::FancyOStream& out) {
60  out << "Test that LinearSolverSetupFailure has a what() method that "
61  "returns something convertible to std::string, and test that the "
62  "resulting message is as expected" << std::endl;
63  Teuchos::OSTab tab1 (out);
64  bool threw = false;
65  try {
66  throws_LSSF ();
67  }
69  threw = true;
70  const std::string msg (e.what ());
71  TEST_ASSERT( msg == "Not an std::runtime_error" );
72  }
73  TEST_ASSERT( threw );
74  }
75 
76  void catches_LSSF_1 (bool& success, Teuchos::FancyOStream& out) {
77  out << "Test that LinearSolverSetupFailure is a subclass of "
78  "std::runtime_error" << std::endl;
79  Teuchos::OSTab tab1 (out);
80 
81  bool first_threw = false;
82  try {
83  throws_LSSF ();
84  }
85  catch (std::runtime_error& e) {
86  first_threw = true;
87  const std::string msg (e.what ());
88  TEST_ASSERT(msg == "Not an std::runtime_error");
89  }
90  TEST_ASSERT( first_threw );
91  static_assert (std::has_virtual_destructor<Trilinos::LinearSolverSetupFailure>::value,
92  "LinearSolverSetupFailure does not have a virtual destructor. "
93  "This is bad for memory safety, because LinearSolverSetupFailure "
94  "inherits from a class with virtual methods.");
95 
96  bool second_threw = false;
97  try {
98  throws_runtime_error ();
99  }
100  catch (std::runtime_error& e) {
101  second_threw = true;
102  const std::string msg (e.what ());
103  TEST_ASSERT(msg == "Not a LinearSolverSetupFailure");
104  }
105  TEST_ASSERT( second_threw );
106  }
107 
108  TEUCHOS_UNIT_TEST( LinearSolverSetupFailure, Test0 )
109  {
110  using std::endl;
111 
112  out << "LinearSolverSetupFailure Test0" << endl;
113  Teuchos::OSTab tab1 (out);
114  TEST_NOTHROW( does_not_throw () ); // sanity-check TEST_NOTHROW macro itself
115  TEST_NOTHROW( catches_LSSF_0 (success, out) );
116  TEST_NOTHROW( catches_LSSF_1 (success, out) );
117  }
118 } // (anonymous)
#define TEST_ASSERT(v1)
Assert the given statement is true.
#define TEST_NOTHROW(code)
Asserr that the statement &#39;code&#39; does not thrown any excpetions.
Declaration and definition of Trilinos::LinearSolverSetupFailure exception class. ...
#define TEUCHOS_UNIT_TEST(TEST_GROUP, TEST_NAME)
Macro for defining a (non-templated) unit test.
Tabbing class for helping to create formated, indented output for a basic_FancyOStream object...
std::ostream subclass that performs the magic of indenting data sent to an std::ostream object among ...
Unit testing support.
Exception reporting failure in setting up a linear solver.