mirror of
https://github.com/google/googletest.git
synced 2025-01-01 23:07:58 +08:00
commit
a325ad2db5
@ -46,9 +46,10 @@
|
||||
#include "gmock/internal/gmock-internal-utils.h"
|
||||
#include "gmock/internal/gmock-port.h"
|
||||
|
||||
#if GTEST_HAS_STD_TYPE_TRAITS_ // Defined by gtest-port.h via gmock-port.h.
|
||||
#if GTEST_LANG_CXX11 // Defined by gtest-port.h via gmock-port.h.
|
||||
#include <functional>
|
||||
#include <type_traits>
|
||||
#endif
|
||||
#endif // GTEST_LANG_CXX11
|
||||
|
||||
namespace testing {
|
||||
|
||||
@ -96,7 +97,7 @@ struct BuiltInDefaultValueGetter<T, false> {
|
||||
template <typename T>
|
||||
class BuiltInDefaultValue {
|
||||
public:
|
||||
#if GTEST_HAS_STD_TYPE_TRAITS_
|
||||
#if GTEST_LANG_CXX11
|
||||
// This function returns true iff type T has a built-in default value.
|
||||
static bool Exists() {
|
||||
return ::std::is_default_constructible<T>::value;
|
||||
@ -107,7 +108,7 @@ class BuiltInDefaultValue {
|
||||
T, ::std::is_default_constructible<T>::value>::Get();
|
||||
}
|
||||
|
||||
#else // GTEST_HAS_STD_TYPE_TRAITS_
|
||||
#else // GTEST_LANG_CXX11
|
||||
// This function returns true iff type T has a built-in default value.
|
||||
static bool Exists() {
|
||||
return false;
|
||||
@ -117,7 +118,7 @@ class BuiltInDefaultValue {
|
||||
return BuiltInDefaultValueGetter<T, false>::Get();
|
||||
}
|
||||
|
||||
#endif // GTEST_HAS_STD_TYPE_TRAITS_
|
||||
#endif // GTEST_LANG_CXX11
|
||||
};
|
||||
|
||||
// This partial specialization says that we use the same built-in
|
||||
|
@ -218,7 +218,7 @@ class MyNonDefaultConstructible {
|
||||
int value_;
|
||||
};
|
||||
|
||||
#if GTEST_HAS_STD_TYPE_TRAITS_
|
||||
#if GTEST_LANG_CXX11
|
||||
|
||||
TEST(BuiltInDefaultValueTest, ExistsForDefaultConstructibleType) {
|
||||
EXPECT_TRUE(BuiltInDefaultValue<MyDefaultConstructible>::Exists());
|
||||
@ -228,7 +228,7 @@ TEST(BuiltInDefaultValueTest, IsDefaultConstructedForDefaultConstructibleType) {
|
||||
EXPECT_EQ(42, BuiltInDefaultValue<MyDefaultConstructible>::Get().value());
|
||||
}
|
||||
|
||||
#endif // GTEST_HAS_STD_TYPE_TRAITS_
|
||||
#endif // GTEST_LANG_CXX11
|
||||
|
||||
TEST(BuiltInDefaultValueTest, DoesNotExistForNonDefaultConstructibleType) {
|
||||
EXPECT_FALSE(BuiltInDefaultValue<MyNonDefaultConstructible>::Exists());
|
||||
|
@ -363,14 +363,14 @@
|
||||
#if GTEST_STDLIB_CXX11
|
||||
# define GTEST_HAS_STD_BEGIN_AND_END_ 1
|
||||
# define GTEST_HAS_STD_FORWARD_LIST_ 1
|
||||
# if !defined(_MSC_VER) || (_MSC_FULL_VER >= 190023824) // works only with VS2015U2 and better
|
||||
# if !defined(_MSC_VER) || (_MSC_FULL_VER >= 190023824)
|
||||
// works only with VS2015U2 and better
|
||||
# define GTEST_HAS_STD_FUNCTION_ 1
|
||||
# endif
|
||||
# define GTEST_HAS_STD_INITIALIZER_LIST_ 1
|
||||
# define GTEST_HAS_STD_MOVE_ 1
|
||||
# define GTEST_HAS_STD_SHARED_PTR_ 1
|
||||
# define GTEST_HAS_STD_TYPE_TRAITS_ 1
|
||||
# define GTEST_HAS_STD_UNIQUE_PTR_ 1
|
||||
# define GTEST_HAS_STD_SHARED_PTR_ 1
|
||||
# define GTEST_HAS_UNORDERED_MAP_ 1
|
||||
# define GTEST_HAS_UNORDERED_SET_ 1
|
||||
#endif
|
||||
@ -982,13 +982,13 @@ using ::std::tuple_size;
|
||||
# endif
|
||||
#elif __GNUC__ >= 4 || defined(__clang__)
|
||||
# define GTEST_API_ __attribute__((visibility ("default")))
|
||||
#endif // _MSC_VER
|
||||
#endif // _MSC_VER
|
||||
|
||||
#endif // GTEST_API_
|
||||
#endif // GTEST_API_
|
||||
|
||||
#ifndef GTEST_API_
|
||||
# define GTEST_API_
|
||||
#endif // GTEST_API_
|
||||
#endif // GTEST_API_
|
||||
|
||||
#ifndef GTEST_DEFAULT_DEATH_TEST_STYLE
|
||||
# define GTEST_DEFAULT_DEATH_TEST_STYLE "fast"
|
||||
|
@ -50,18 +50,13 @@
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
// hash_map and hash_set are available under Visual C++, or on Linux.
|
||||
#if GTEST_HAS_UNORDERED_MAP_
|
||||
# include <unordered_map> // NOLINT
|
||||
#elif GTEST_HAS_HASH_MAP_
|
||||
# include <hash_map> // NOLINT
|
||||
#endif // GTEST_HAS_HASH_MAP_
|
||||
#endif // GTEST_HAS_UNORDERED_MAP_
|
||||
|
||||
#if GTEST_HAS_UNORDERED_SET_
|
||||
# include <unordered_set> // NOLINT
|
||||
#elif GTEST_HAS_HASH_SET_
|
||||
# include <hash_set> // NOLINT
|
||||
#endif // GTEST_HAS_HASH_SET_
|
||||
#endif // GTEST_HAS_UNORDERED_SET_
|
||||
|
||||
#if GTEST_HAS_STD_FORWARD_LIST_
|
||||
# include <forward_list> // NOLINT
|
||||
@ -240,50 +235,6 @@ using ::testing::internal::UniversalTersePrint;
|
||||
using ::testing::internal::UniversalTersePrintTupleFieldsToStrings;
|
||||
#endif
|
||||
|
||||
|
||||
// The hash_* classes are not part of the C++ standard. STLport
|
||||
// defines them in namespace std. MSVC defines them in ::stdext. GCC
|
||||
// defines them in ::.
|
||||
#if GTEST_HAS_UNORDERED_MAP_
|
||||
|
||||
#define GTEST_HAS_HASH_MAP_ 1
|
||||
template <class Key, class T>
|
||||
using hash_map = ::std::unordered_map<Key, T>;
|
||||
template <class Key, class T>
|
||||
using hash_multimap = ::std::unordered_multimap<Key, T>;
|
||||
|
||||
#elif GTEST_HAS_HASH_MAP_
|
||||
|
||||
#ifdef _STLP_HASH_MAP // We got <hash_map> from STLport.
|
||||
using ::std::hash_map;
|
||||
using ::std::hash_multimap;
|
||||
#elif _MSC_VER
|
||||
using ::stdext::hash_map;
|
||||
using ::stdext::hash_multimap;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#if GTEST_HAS_UNORDERED_SET_
|
||||
|
||||
#define GTEST_HAS_HASH_SET_ 1
|
||||
template <class Key>
|
||||
using hash_set = ::std::unordered_set<Key>;
|
||||
template <class Key>
|
||||
using hash_multiset = ::std::unordered_multiset<Key>;
|
||||
|
||||
#elif GTEST_HAS_HASH_SET_
|
||||
|
||||
#ifdef _STLP_HASH_MAP // We got <hash_map> from STLport.
|
||||
using ::std::hash_map;
|
||||
using ::std::hash_multimap;
|
||||
#elif _MSC_VER
|
||||
using ::stdext::hash_map;
|
||||
using ::stdext::hash_multimap;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
// Prints a value to a string using the universal value printer. This
|
||||
// is a helper for testing UniversalPrinter<T>::Print() for various types.
|
||||
template <typename T>
|
||||
@ -868,16 +819,16 @@ TEST(PrintStlContainerTest, NonEmptyDeque) {
|
||||
EXPECT_EQ("{ 1, 3 }", Print(non_empty));
|
||||
}
|
||||
|
||||
#if GTEST_HAS_HASH_MAP_
|
||||
#if GTEST_HAS_UNORDERED_MAP_
|
||||
|
||||
TEST(PrintStlContainerTest, OneElementHashMap) {
|
||||
hash_map<int, char> map1;
|
||||
::std::unordered_map<int, char> map1;
|
||||
map1[1] = 'a';
|
||||
EXPECT_EQ("{ (1, 'a' (97, 0x61)) }", Print(map1));
|
||||
}
|
||||
|
||||
TEST(PrintStlContainerTest, HashMultiMap) {
|
||||
hash_multimap<int, bool> map1;
|
||||
::std::unordered_multimap<int, bool> map1;
|
||||
map1.insert(make_pair(5, true));
|
||||
map1.insert(make_pair(5, false));
|
||||
|
||||
@ -888,12 +839,12 @@ TEST(PrintStlContainerTest, HashMultiMap) {
|
||||
<< " where Print(map1) returns \"" << result << "\".";
|
||||
}
|
||||
|
||||
#endif // GTEST_HAS_HASH_MAP_
|
||||
#endif // GTEST_HAS_UNORDERED_MAP_
|
||||
|
||||
#if GTEST_HAS_HASH_SET_
|
||||
#if GTEST_HAS_UNORDERED_SET_
|
||||
|
||||
TEST(PrintStlContainerTest, HashSet) {
|
||||
hash_set<int> set1;
|
||||
::std::unordered_set<int> set1;
|
||||
set1.insert(1);
|
||||
EXPECT_EQ("{ 1 }", Print(set1));
|
||||
}
|
||||
@ -901,7 +852,7 @@ TEST(PrintStlContainerTest, HashSet) {
|
||||
TEST(PrintStlContainerTest, HashMultiSet) {
|
||||
const int kSize = 5;
|
||||
int a[kSize] = { 1, 1, 2, 5, 1 };
|
||||
hash_multiset<int> set1(a, a + kSize);
|
||||
::std::unordered_multiset<int> set1(a, a + kSize);
|
||||
|
||||
// Elements of hash_multiset can be printed in any order.
|
||||
const std::string result = Print(set1);
|
||||
@ -927,7 +878,7 @@ TEST(PrintStlContainerTest, HashMultiSet) {
|
||||
EXPECT_TRUE(std::equal(a, a + kSize, numbers.begin()));
|
||||
}
|
||||
|
||||
#endif // GTEST_HAS_HASH_SET_
|
||||
#endif // GTEST_HAS_UNORDERED_SET_
|
||||
|
||||
TEST(PrintStlContainerTest, List) {
|
||||
const std::string a[] = {"hello", "world"};
|
||||
|
Loading…
x
Reference in New Issue
Block a user