7da5df99cbc2397193a8a990c8fc71c8b24dfac0
[folly.git] / folly / test / function_benchmark / test_functions.cpp
1 /*
2  * Copyright 2016 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 void throwException() {
40   throw Exception("this is a test");
41 }
42
43 std::exception_ptr returnExceptionPtr() {
44   Exception ex("this is a test");
45   return std::make_exception_ptr(ex);
46 }
47
48 void exceptionPtrReturnParam(std::exception_ptr* excReturn) {
49   if (excReturn) {
50     Exception ex("this is a test");
51     *excReturn = std::make_exception_ptr(ex);
52   }
53 }
54
55 std::string returnString() {
56   return "this is a test";
57 }
58
59 std::string returnStringNoExcept() noexcept {
60   return "this is a test";
61 }
62
63 int returnCode(int value) {
64   return value;
65 }
66
67 int returnCodeNoExcept(int value) noexcept {
68   return value;
69 }
70
71 void TestClass::doNothing() {
72 }
73
74 VirtualClass::~VirtualClass() {
75 }
76
77 void VirtualClass::doNothing() {
78 };
79
80 LargeClass::LargeClass() {
81   // Suppress unused field warning
82   data[0] = 42;
83 }
84
85 void LargeClass::operator()() const {}
86
87 void invoke(std::function<void()> f) {
88   f();
89 }
90
91 void invoke(folly::Function<void()> f) {
92   f();
93 }