2017
[folly.git] / folly / test / function_benchmark / test_functions.cpp
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 #include <folly/test/function_benchmark/test_functions.h>
18
19 /*
20  * These functions are defined in a separate file so that
21  * gcc won't be able to inline them.
22  */
23
24
25 class Exception : public std::exception {
26  public:
27   explicit Exception(const std::string& value) : value_(value) {}
28   ~Exception(void) noexcept override {}
29
30   const char* what(void) const noexcept override { return value_.c_str(); }
31
32  private:
33   std::string value_;
34 };
35
36 void doNothing() {
37 }
38
39 [[noreturn]]
40 void throwException() {
41   throw Exception("this is a test");
42 }
43
44 std::exception_ptr returnExceptionPtr() {
45   Exception ex("this is a test");
46   return std::make_exception_ptr(ex);
47 }
48
49 void exceptionPtrReturnParam(std::exception_ptr* excReturn) {
50   if (excReturn) {
51     Exception ex("this is a test");
52     *excReturn = std::make_exception_ptr(ex);
53   }
54 }
55
56 std::string returnString() {
57   return "this is a test";
58 }
59
60 std::string returnStringNoExcept() noexcept {
61   return "this is a test";
62 }
63
64 int returnCode(int value) {
65   return value;
66 }
67
68 int returnCodeNoExcept(int value) noexcept {
69   return value;
70 }
71
72 void TestClass::doNothing() {
73 }
74
75 VirtualClass::~VirtualClass() {
76 }
77
78 void VirtualClass::doNothing() {
79 };
80
81 LargeClass::LargeClass() {
82   // Suppress unused field warning
83   data[0] = 42;
84 }
85
86 void LargeClass::operator()() const {}
87
88 void invoke(std::function<void()> f) {
89   f();
90 }
91
92 void invoke(folly::Function<void()> f) {
93   f();
94 }