/* * Copyright 2013-present Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * @author: Marcelo Juchem */ #include #include #include #include using namespace std; using namespace folly; FOLLY_CREATE_HAS_MEMBER_FN_TRAITS(has_test, test); struct Foo { int test(); int test() const; string test(const string&) const; }; struct Bar { int test(); double test(int, long); long test(int) const; }; struct Gaz { void test(); void test() const; void test() /* nolint */ volatile; void test() const /* nolint */ volatile; }; struct NoCV { void test(); }; struct Const { void test() const; }; struct Volatile { void test() /* nolint */ volatile; }; struct CV { void test() const /* nolint */ volatile; }; bool log_value(const char* what, bool result) { LOG(INFO) << what << ": " << boolalpha << result; return result; } #define LOG_VALUE(x) log_value(#x, x) TEST(HasMemberFnTraits, DirectMembers) { EXPECT_TRUE(LOG_VALUE((has_test::value))); EXPECT_TRUE(LOG_VALUE((has_test::value))); EXPECT_FALSE(LOG_VALUE((has_test::value))); EXPECT_TRUE(LOG_VALUE((has_test::value))); EXPECT_FALSE(LOG_VALUE((has_test::value))); EXPECT_FALSE(LOG_VALUE((has_test::value))); EXPECT_TRUE(LOG_VALUE((has_test::value))); EXPECT_FALSE(LOG_VALUE((has_test::value))); EXPECT_TRUE(LOG_VALUE((has_test::value))); EXPECT_FALSE(LOG_VALUE((has_test::value))); EXPECT_TRUE(LOG_VALUE((has_test::value))); EXPECT_FALSE(LOG_VALUE((has_test::value))); EXPECT_TRUE(LOG_VALUE((has_test::value))); EXPECT_TRUE(LOG_VALUE((has_test::value))); EXPECT_TRUE(LOG_VALUE((has_test::value))); EXPECT_TRUE( LOG_VALUE((has_test::value))); EXPECT_TRUE( LOG_VALUE((has_test::value))); EXPECT_TRUE(LOG_VALUE((has_test::value))); EXPECT_FALSE(LOG_VALUE((has_test::value))); EXPECT_FALSE( LOG_VALUE((has_test::value))); EXPECT_FALSE( LOG_VALUE((has_test::value))); EXPECT_FALSE( LOG_VALUE((has_test::value))); EXPECT_FALSE(LOG_VALUE((has_test::value))); EXPECT_TRUE(LOG_VALUE((has_test::value))); EXPECT_FALSE( LOG_VALUE((has_test::value))); EXPECT_FALSE( LOG_VALUE((has_test::value))); EXPECT_FALSE( LOG_VALUE((has_test::value))); EXPECT_FALSE(LOG_VALUE((has_test::value))); EXPECT_FALSE(LOG_VALUE((has_test::value))); EXPECT_TRUE( LOG_VALUE((has_test::value))); EXPECT_FALSE(LOG_VALUE( (has_test::value))); EXPECT_FALSE(LOG_VALUE( (has_test::value))); EXPECT_FALSE(LOG_VALUE((has_test::value))); EXPECT_FALSE(LOG_VALUE((has_test::value))); EXPECT_FALSE(LOG_VALUE((has_test::value))); EXPECT_TRUE( LOG_VALUE((has_test::value))); EXPECT_TRUE( LOG_VALUE((has_test::value))); } int main(int argc, char* argv[]) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }