Consistently have the namespace closing comment
[folly.git] / folly / test / TestUtils.h
1 /*
2  * Copyright 2017 Facebook, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #pragma once
18
19 #include <chrono>
20
21 #include <folly/Range.h>
22 #include <folly/portability/GTest.h>
23
24 // We use this to indicate that tests have failed because of timing
25 // or dependencies that may be flakey. Internally this is used by
26 // our test runner to retry the test. To gtest this will look like
27 // a normal test failure; there is only an effect if the test framework
28 // interprets the message.
29 #define SKIP() GTEST_FATAL_FAILURE_("Test skipped by client")
30
31 namespace folly {
32 namespace test {
33
34 template <typename T1, typename T2>
35 ::testing::AssertionResult
36 AreWithinSecs(T1 val1, T2 val2, std::chrono::seconds acceptableDeltaSecs) {
37   auto deltaSecs =
38       std::chrono::duration_cast<std::chrono::seconds>(val1 - val2);
39   if (deltaSecs <= acceptableDeltaSecs &&
40       deltaSecs >= -1 * acceptableDeltaSecs) {
41     return ::testing::AssertionSuccess();
42   } else {
43     return ::testing::AssertionFailure()
44         << val1.count() << " and " << val2.count() << " are not within "
45         << acceptableDeltaSecs.count() << " secs of each other";
46   }
47 }
48 } // namespace test
49
50 // Define a PrintTo() function for StringPiece, so that gtest checks
51 // will print it as a string.  Without this gtest identifies StringPiece as a
52 // container type, and therefore tries printing its elements individually,
53 // despite the fact that there is an ostream operator<<() defined for
54 // StringPiece.
55 inline void PrintTo(StringPiece sp, ::std::ostream* os) {
56   // gtest's PrintToString() function will quote the string and escape internal
57   // quotes and non-printable characters, the same way gtest does for the
58   // standard string types.
59   *os << ::testing::PrintToString(sp.str());
60 }
61 } // namespace folly