Adds writer test case for RCU
[folly.git] / folly / io / async / test / Util.h
1 /*
2  * Copyright 2014-present 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 <folly/io/async/test/TimeUtil.h>
20 #include <folly/portability/GTest.h>
21 #include <folly/test/TestUtils.h>
22
23 /**
24  * Check how long a timeout took to fire.
25  *
26  * This method verifies:
27  * - that the timeout did not fire too early (never less than expectedMS)
28  * - that the timeout fired within a reasonable period of the expected
29  *   duration.  It must fire within the specified tolerance, excluding time
30  *   that this process spent waiting to be scheduled.
31  *
32  * @param start                 A TimePoint object set just before the timeout
33  *                              was scheduled.
34  * @param end                   A TimePoint object set when the timeout fired.
35  * @param expectedMS            The timeout duration, in milliseconds
36  * @param tolerance             The tolerance, in milliseconds.
37  */
38 #define T_CHECK_TIMEOUT(start, end, expectedMS, ...)     \
39   if (!::folly::checkTimeout((start), (end),             \
40                              (expectedMS), false,        \
41                              ##__VA_ARGS__)) {           \
42     SKIP() << "T_CHECK_TIMEOUT lapsed";                  \
43   }
44
45 /**
46  * Verify that an event took less than a specified amount of time.
47  *
48  * This is similar to T_CHECK_TIMEOUT, but does not fail if the event took less
49  * than the allowed time.
50  */
51 #define T_CHECK_TIME_LT(start, end, expectedMS, ...)     \
52   if (!::folly::checkTimeout((start), (end),             \
53                              (expectedMS), true,         \
54                              ##__VA_ARGS__)) {           \
55     SKIP() << "T_CHECK_TIMEOUT_LT lapsed";               \
56   }