/home/arjun/llvm-project/llvm/utils/unittest/googletest/include/gtest/gtest_pred_impl.h
| Line | Count | Source (jump to first uncovered line) | 
| 1 |  | // Copyright 2006, Google Inc. | 
| 2 |  | // All rights reserved. | 
| 3 |  | // | 
| 4 |  | // Redistribution and use in source and binary forms, with or without | 
| 5 |  | // modification, are permitted provided that the following conditions are | 
| 6 |  | // met: | 
| 7 |  | // | 
| 8 |  | //     * Redistributions of source code must retain the above copyright | 
| 9 |  | // notice, this list of conditions and the following disclaimer. | 
| 10 |  | //     * Redistributions in binary form must reproduce the above | 
| 11 |  | // copyright notice, this list of conditions and the following disclaimer | 
| 12 |  | // in the documentation and/or other materials provided with the | 
| 13 |  | // distribution. | 
| 14 |  | //     * Neither the name of Google Inc. nor the names of its | 
| 15 |  | // contributors may be used to endorse or promote products derived from | 
| 16 |  | // this software without specific prior written permission. | 
| 17 |  | // | 
| 18 |  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
| 19 |  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
| 20 |  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
| 21 |  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 
| 22 |  | // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
| 23 |  | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 
| 24 |  | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
| 25 |  | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
| 26 |  | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
| 27 |  | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
| 28 |  | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
| 29 |  |  | 
| 30 |  | // This file is AUTOMATICALLY GENERATED on 10/31/2011 by command | 
| 31 |  | // 'gen_gtest_pred_impl.py 5'.  DO NOT EDIT BY HAND! | 
| 32 |  | // | 
| 33 |  | // Implements a family of generic predicate assertion macros. | 
| 34 |  |  | 
| 35 |  | #ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ | 
| 36 |  | #define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ | 
| 37 |  |  | 
| 38 |  | // Makes sure this header is not included before gtest.h. | 
| 39 |  | #ifndef GTEST_INCLUDE_GTEST_GTEST_H_ | 
| 40 |  | # error Do not include gtest_pred_impl.h directly.  Include gtest.h instead. | 
| 41 |  | #endif  // GTEST_INCLUDE_GTEST_GTEST_H_ | 
| 42 |  |  | 
| 43 |  | // This header implements a family of generic predicate assertion | 
| 44 |  | // macros: | 
| 45 |  | // | 
| 46 |  | //   ASSERT_PRED_FORMAT1(pred_format, v1) | 
| 47 |  | //   ASSERT_PRED_FORMAT2(pred_format, v1, v2) | 
| 48 |  | //   ... | 
| 49 |  | // | 
| 50 |  | // where pred_format is a function or functor that takes n (in the | 
| 51 |  | // case of ASSERT_PRED_FORMATn) values and their source expression | 
| 52 |  | // text, and returns a testing::AssertionResult.  See the definition | 
| 53 |  | // of ASSERT_EQ in gtest.h for an example. | 
| 54 |  | // | 
| 55 |  | // If you don't care about formatting, you can use the more | 
| 56 |  | // restrictive version: | 
| 57 |  | // | 
| 58 |  | //   ASSERT_PRED1(pred, v1) | 
| 59 |  | //   ASSERT_PRED2(pred, v1, v2) | 
| 60 |  | //   ... | 
| 61 |  | // | 
| 62 |  | // where pred is an n-ary function or functor that returns bool, | 
| 63 |  | // and the values v1, v2, ..., must support the << operator for | 
| 64 |  | // streaming to std::ostream. | 
| 65 |  | // | 
| 66 |  | // We also define the EXPECT_* variations. | 
| 67 |  | // | 
| 68 |  | // For now we only support predicates whose arity is at most 5. | 
| 69 |  | // Please email googletestframework@googlegroups.com if you need | 
| 70 |  | // support for higher arities. | 
| 71 |  |  | 
| 72 |  | // GTEST_ASSERT_ is the basic statement to which all of the assertions | 
| 73 |  | // in this file reduce.  Don't use this in your code. | 
| 74 |  |  | 
| 75 |  | #define GTEST_ASSERT_(expression, on_failure) \ | 
| 76 | 153 |   GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ | 
| 77 | 153 |   if (const ::testing::AssertionResult gtest_ar = (expression)) \ | 
| 78 | 153 |     ; \ | 
| 79 | 153 |   else \ | 
| 80 | 153 |     on_failure(gtest_ar.failure_message()) | 
| 81 |  |  | 
| 82 |  |  | 
| 83 |  | // Helper function for implementing {EXPECT|ASSERT}_PRED1.  Don't use | 
| 84 |  | // this in your code. | 
| 85 |  | template <typename Pred, | 
| 86 |  |           typename T1> | 
| 87 |  | AssertionResult AssertPred1Helper(const char* pred_text, | 
| 88 |  |                                   const char* e1, | 
| 89 |  |                                   Pred pred, | 
| 90 |  |                                   const T1& v1) { | 
| 91 |  |   if (pred(v1)) return AssertionSuccess(); | 
| 92 |  |  | 
| 93 |  |   return AssertionFailure() << pred_text << "(" | 
| 94 |  |                             << e1 << ") evaluates to false, where" | 
| 95 |  |                             << "\n" << e1 << " evaluates to " << v1; | 
| 96 |  | } | 
| 97 |  |  | 
| 98 |  | // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1. | 
| 99 |  | // Don't use this in your code. | 
| 100 |  | #define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\ | 
| 101 |  |   GTEST_ASSERT_(pred_format(#v1, v1), \ | 
| 102 |  |                 on_failure) | 
| 103 |  |  | 
| 104 |  | // Internal macro for implementing {EXPECT|ASSERT}_PRED1.  Don't use | 
| 105 |  | // this in your code. | 
| 106 |  | #define GTEST_PRED1_(pred, v1, on_failure)\ | 
| 107 |  |   GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \ | 
| 108 |  |                                              #v1, \ | 
| 109 |  |                                              pred, \ | 
| 110 |  |                                              v1), on_failure) | 
| 111 |  |  | 
| 112 |  | // Unary predicate assertion macros. | 
| 113 |  | #define EXPECT_PRED_FORMAT1(pred_format, v1) \ | 
| 114 |  |   GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_) | 
| 115 |  | #define EXPECT_PRED1(pred, v1) \ | 
| 116 |  |   GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_) | 
| 117 |  | #define ASSERT_PRED_FORMAT1(pred_format, v1) \ | 
| 118 |  |   GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_) | 
| 119 |  | #define ASSERT_PRED1(pred, v1) \ | 
| 120 |  |   GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_) | 
| 121 |  |  | 
| 122 |  |  | 
| 123 |  |  | 
| 124 |  | // Helper function for implementing {EXPECT|ASSERT}_PRED2.  Don't use | 
| 125 |  | // this in your code. | 
| 126 |  | template <typename Pred, | 
| 127 |  |           typename T1, | 
| 128 |  |           typename T2> | 
| 129 |  | AssertionResult AssertPred2Helper(const char* pred_text, | 
| 130 |  |                                   const char* e1, | 
| 131 |  |                                   const char* e2, | 
| 132 |  |                                   Pred pred, | 
| 133 |  |                                   const T1& v1, | 
| 134 |  |                                   const T2& v2) { | 
| 135 |  |   if (pred(v1, v2)) return AssertionSuccess(); | 
| 136 |  |  | 
| 137 |  |   return AssertionFailure() << pred_text << "(" | 
| 138 |  |                             << e1 << ", " | 
| 139 |  |                             << e2 << ") evaluates to false, where" | 
| 140 |  |                             << "\n" << e1 << " evaluates to " << v1 | 
| 141 |  |                             << "\n" << e2 << " evaluates to " << v2; | 
| 142 |  | } | 
| 143 |  |  | 
| 144 |  | // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2. | 
| 145 |  | // Don't use this in your code. | 
| 146 |  | #define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\ | 
| 147 | 28 |   GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \ | 
| 148 | 28 |                 on_failure) | 
| 149 |  |  | 
| 150 |  | // Internal macro for implementing {EXPECT|ASSERT}_PRED2.  Don't use | 
| 151 |  | // this in your code. | 
| 152 |  | #define GTEST_PRED2_(pred, v1, v2, on_failure)\ | 
| 153 |  |   GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \ | 
| 154 |  |                                              #v1, \ | 
| 155 |  |                                              #v2, \ | 
| 156 |  |                                              pred, \ | 
| 157 |  |                                              v1, \ | 
| 158 |  |                                              v2), on_failure) | 
| 159 |  |  | 
| 160 |  | // Binary predicate assertion macros. | 
| 161 |  | #define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \ | 
| 162 | 28 |   GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_) | 
| 163 |  | #define EXPECT_PRED2(pred, v1, v2) \ | 
| 164 |  |   GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_) | 
| 165 |  | #define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \ | 
| 166 |  |   GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_) | 
| 167 |  | #define ASSERT_PRED2(pred, v1, v2) \ | 
| 168 |  |   GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_) | 
| 169 |  |  | 
| 170 |  |  | 
| 171 |  |  | 
| 172 |  | // Helper function for implementing {EXPECT|ASSERT}_PRED3.  Don't use | 
| 173 |  | // this in your code. | 
| 174 |  | template <typename Pred, | 
| 175 |  |           typename T1, | 
| 176 |  |           typename T2, | 
| 177 |  |           typename T3> | 
| 178 |  | AssertionResult AssertPred3Helper(const char* pred_text, | 
| 179 |  |                                   const char* e1, | 
| 180 |  |                                   const char* e2, | 
| 181 |  |                                   const char* e3, | 
| 182 |  |                                   Pred pred, | 
| 183 |  |                                   const T1& v1, | 
| 184 |  |                                   const T2& v2, | 
| 185 |  |                                   const T3& v3) { | 
| 186 |  |   if (pred(v1, v2, v3)) return AssertionSuccess(); | 
| 187 |  |  | 
| 188 |  |   return AssertionFailure() << pred_text << "(" | 
| 189 |  |                             << e1 << ", " | 
| 190 |  |                             << e2 << ", " | 
| 191 |  |                             << e3 << ") evaluates to false, where" | 
| 192 |  |                             << "\n" << e1 << " evaluates to " << v1 | 
| 193 |  |                             << "\n" << e2 << " evaluates to " << v2 | 
| 194 |  |                             << "\n" << e3 << " evaluates to " << v3; | 
| 195 |  | } | 
| 196 |  |  | 
| 197 |  | // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3. | 
| 198 |  | // Don't use this in your code. | 
| 199 |  | #define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\ | 
| 200 | 0 |   GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), \ | 
| 201 | 0 |                 on_failure) | 
| 202 |  |  | 
| 203 |  | // Internal macro for implementing {EXPECT|ASSERT}_PRED3.  Don't use | 
| 204 |  | // this in your code. | 
| 205 |  | #define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\ | 
| 206 |  |   GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \ | 
| 207 |  |                                              #v1, \ | 
| 208 |  |                                              #v2, \ | 
| 209 |  |                                              #v3, \ | 
| 210 |  |                                              pred, \ | 
| 211 |  |                                              v1, \ | 
| 212 |  |                                              v2, \ | 
| 213 |  |                                              v3), on_failure) | 
| 214 |  |  | 
| 215 |  | // Ternary predicate assertion macros. | 
| 216 |  | #define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \ | 
| 217 | 0 |   GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_) | 
| 218 |  | #define EXPECT_PRED3(pred, v1, v2, v3) \ | 
| 219 |  |   GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_) | 
| 220 |  | #define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \ | 
| 221 |  |   GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_) | 
| 222 |  | #define ASSERT_PRED3(pred, v1, v2, v3) \ | 
| 223 |  |   GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_) | 
| 224 |  |  | 
| 225 |  |  | 
| 226 |  |  | 
| 227 |  | // Helper function for implementing {EXPECT|ASSERT}_PRED4.  Don't use | 
| 228 |  | // this in your code. | 
| 229 |  | template <typename Pred, | 
| 230 |  |           typename T1, | 
| 231 |  |           typename T2, | 
| 232 |  |           typename T3, | 
| 233 |  |           typename T4> | 
| 234 |  | AssertionResult AssertPred4Helper(const char* pred_text, | 
| 235 |  |                                   const char* e1, | 
| 236 |  |                                   const char* e2, | 
| 237 |  |                                   const char* e3, | 
| 238 |  |                                   const char* e4, | 
| 239 |  |                                   Pred pred, | 
| 240 |  |                                   const T1& v1, | 
| 241 |  |                                   const T2& v2, | 
| 242 |  |                                   const T3& v3, | 
| 243 |  |                                   const T4& v4) { | 
| 244 |  |   if (pred(v1, v2, v3, v4)) return AssertionSuccess(); | 
| 245 |  |  | 
| 246 |  |   return AssertionFailure() << pred_text << "(" | 
| 247 |  |                             << e1 << ", " | 
| 248 |  |                             << e2 << ", " | 
| 249 |  |                             << e3 << ", " | 
| 250 |  |                             << e4 << ") evaluates to false, where" | 
| 251 |  |                             << "\n" << e1 << " evaluates to " << v1 | 
| 252 |  |                             << "\n" << e2 << " evaluates to " << v2 | 
| 253 |  |                             << "\n" << e3 << " evaluates to " << v3 | 
| 254 |  |                             << "\n" << e4 << " evaluates to " << v4; | 
| 255 |  | } | 
| 256 |  |  | 
| 257 |  | // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4. | 
| 258 |  | // Don't use this in your code. | 
| 259 |  | #define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\ | 
| 260 |  |   GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), \ | 
| 261 |  |                 on_failure) | 
| 262 |  |  | 
| 263 |  | // Internal macro for implementing {EXPECT|ASSERT}_PRED4.  Don't use | 
| 264 |  | // this in your code. | 
| 265 |  | #define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\ | 
| 266 |  |   GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \ | 
| 267 |  |                                              #v1, \ | 
| 268 |  |                                              #v2, \ | 
| 269 |  |                                              #v3, \ | 
| 270 |  |                                              #v4, \ | 
| 271 |  |                                              pred, \ | 
| 272 |  |                                              v1, \ | 
| 273 |  |                                              v2, \ | 
| 274 |  |                                              v3, \ | 
| 275 |  |                                              v4), on_failure) | 
| 276 |  |  | 
| 277 |  | // 4-ary predicate assertion macros. | 
| 278 |  | #define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ | 
| 279 |  |   GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) | 
| 280 |  | #define EXPECT_PRED4(pred, v1, v2, v3, v4) \ | 
| 281 |  |   GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) | 
| 282 |  | #define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ | 
| 283 |  |   GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) | 
| 284 |  | #define ASSERT_PRED4(pred, v1, v2, v3, v4) \ | 
| 285 |  |   GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) | 
| 286 |  |  | 
| 287 |  |  | 
| 288 |  |  | 
| 289 |  | // Helper function for implementing {EXPECT|ASSERT}_PRED5.  Don't use | 
| 290 |  | // this in your code. | 
| 291 |  | template <typename Pred, | 
| 292 |  |           typename T1, | 
| 293 |  |           typename T2, | 
| 294 |  |           typename T3, | 
| 295 |  |           typename T4, | 
| 296 |  |           typename T5> | 
| 297 |  | AssertionResult AssertPred5Helper(const char* pred_text, | 
| 298 |  |                                   const char* e1, | 
| 299 |  |                                   const char* e2, | 
| 300 |  |                                   const char* e3, | 
| 301 |  |                                   const char* e4, | 
| 302 |  |                                   const char* e5, | 
| 303 |  |                                   Pred pred, | 
| 304 |  |                                   const T1& v1, | 
| 305 |  |                                   const T2& v2, | 
| 306 |  |                                   const T3& v3, | 
| 307 |  |                                   const T4& v4, | 
| 308 |  |                                   const T5& v5) { | 
| 309 |  |   if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); | 
| 310 |  |  | 
| 311 |  |   return AssertionFailure() << pred_text << "(" | 
| 312 |  |                             << e1 << ", " | 
| 313 |  |                             << e2 << ", " | 
| 314 |  |                             << e3 << ", " | 
| 315 |  |                             << e4 << ", " | 
| 316 |  |                             << e5 << ") evaluates to false, where" | 
| 317 |  |                             << "\n" << e1 << " evaluates to " << v1 | 
| 318 |  |                             << "\n" << e2 << " evaluates to " << v2 | 
| 319 |  |                             << "\n" << e3 << " evaluates to " << v3 | 
| 320 |  |                             << "\n" << e4 << " evaluates to " << v4 | 
| 321 |  |                             << "\n" << e5 << " evaluates to " << v5; | 
| 322 |  | } | 
| 323 |  |  | 
| 324 |  | // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5. | 
| 325 |  | // Don't use this in your code. | 
| 326 |  | #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ | 
| 327 |  |   GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \ | 
| 328 |  |                 on_failure) | 
| 329 |  |  | 
| 330 |  | // Internal macro for implementing {EXPECT|ASSERT}_PRED5.  Don't use | 
| 331 |  | // this in your code. | 
| 332 |  | #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ | 
| 333 |  |   GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \ | 
| 334 |  |                                              #v1, \ | 
| 335 |  |                                              #v2, \ | 
| 336 |  |                                              #v3, \ | 
| 337 |  |                                              #v4, \ | 
| 338 |  |                                              #v5, \ | 
| 339 |  |                                              pred, \ | 
| 340 |  |                                              v1, \ | 
| 341 |  |                                              v2, \ | 
| 342 |  |                                              v3, \ | 
| 343 |  |                                              v4, \ | 
| 344 |  |                                              v5), on_failure) | 
| 345 |  |  | 
| 346 |  | // 5-ary predicate assertion macros. | 
| 347 |  | #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ | 
| 348 |  |   GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) | 
| 349 |  | #define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \ | 
| 350 |  |   GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) | 
| 351 |  | #define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ | 
| 352 |  |   GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) | 
| 353 |  | #define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \ | 
| 354 |  |   GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) | 
| 355 |  |  | 
| 356 |  |  | 
| 357 |  |  | 
| 358 |  | #endif  // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ |