39 #ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
40 #define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
46 #include <sys/types.h>
49 #endif // GTEST_OS_LINUX
51 #if GTEST_HAS_EXCEPTIONS
65 #include <type_traits>
82 #define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar)
83 #define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo##bar
94 #define GTEST_STRINGIFY_HELPER_(name, ...) #name
95 #define GTEST_STRINGIFY_(...) GTEST_STRINGIFY_HELPER_(__VA_ARGS__, )
105 class AssertionResult;
109 class TestPartResult;
112 template <
typename T>
137 template <
typename T,
147 #if GTEST_HAS_EXCEPTIONS
158 class
GTEST_API_ GoogleTestFailureException : public ::std::runtime_error {
160 explicit GoogleTestFailureException(
const TestPartResult& failure);
165 #endif // GTEST_HAS_EXCEPTIONS
167 namespace edit_distance {
175 const std::vector<size_t>& left,
const std::vector<size_t>& right);
179 const std::vector<std::string>& left,
180 const std::vector<std::string>& right);
184 const std::vector<std::string>& right,
205 const char* actual_expression,
206 const std::string& expected_value,
207 const std::string& actual_value,
212 const AssertionResult& assertion_result,
const char* expression_text,
213 const char* actual_predicate_value,
const char* expected_predicate_value);
244 template <
typename RawType>
258 std::numeric_limits<RawType>::digits - 1;
383 return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1);
402 template <
typename T>
411 template <
typename T>
417 template <
typename T>
453 template <
class TestClass>
459 #ifdef GTEST_OS_WINDOWS
465 GTEST_API_ AssertionResult IsHRESULTSuccess(
const char* expr,
467 GTEST_API_ AssertionResult IsHRESULTFailure(
const char* expr,
470 #endif // GTEST_OS_WINDOWS
478 :
file(std::move(a_file)),
line(a_line) {}
492 return a == def ?
nullptr :
a;
495 template <
typename T>
503 typename std::conditional<sizeof(T) != 0, ::testing::Test, void>::type;
507 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
514 <<
"Test can not provide both SetUpTestSuite and SetUpTestCase, please "
515 "make sure there is only one present at "
516 << filename <<
":" << line_num;
518 return test_case_fp !=
nullptr ? test_case_fp : test_suite_fp;
522 return &T::SetUpTestSuite;
528 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
535 <<
"Test can not provide both TearDownTestSuite and TearDownTestCase,"
536 " please make sure there is only one present at"
537 << filename <<
":" << line_num;
539 return test_case_fp !=
nullptr ? test_case_fp : test_suite_fp;
543 return &T::TearDownTestSuite;
567 std::string test_suite_name,
const char* name,
const char* type_param,
568 const char* value_param, CodeLocation code_location,
583 TypedTestSuitePState() : registered_(
false) {}
588 bool AddTestName(
const char* file,
int line,
const char* case_name,
589 const char* test_name) {
592 "%s Test %s must be defined before "
593 "REGISTER_TYPED_TEST_SUITE_P(%s, ...).\n",
598 registered_tests_.emplace(test_name,
CodeLocation(file, line));
602 bool TestExists(
const std::string& test_name)
const {
603 return registered_tests_.count(test_name) > 0;
606 const CodeLocation& GetCodeLocation(
const std::string& test_name)
const {
607 RegisteredTestsMap::const_iterator it = registered_tests_.find(test_name);
615 const char* VerifyRegisteredTestNames(
const char* test_suite_name,
616 const char* file,
int line,
617 const char* registered_tests);
620 typedef ::std::map<std::string, CodeLocation, std::less<>> RegisteredTestsMap;
623 RegisteredTestsMap registered_tests_;
627 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
629 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_
635 inline const
char* SkipComma(const
char* str) {
636 const char* comma = strchr(str,
',');
637 if (comma ==
nullptr) {
648 const char* comma = strchr(str,
',');
649 return comma ==
nullptr ? str : std::string(str, comma);
654 void SplitString(const ::std::string& str,
char delimiter,
655 ::std::vector<::std::string>* dest);
660 template <
typename T>
666 template <
typename Prov
ided = DefaultNameGenerator>
671 template <
typename NameGenerator>
674 template <
typename NameGenerator,
typename Types>
676 result->push_back(NameGenerator::template GetName<typename Types::Head>(i));
677 GenerateNamesRecursively<NameGenerator>(
typename Types::Tail(), result,
681 template <
typename NameGenerator,
typename Types>
683 std::vector<std::string> result;
684 GenerateNamesRecursively<NameGenerator>(
Types(), &result, 0);
695 template <GTEST_TEMPLATE_ Fixture,
class TestSel,
typename Types>
703 const char* case_name,
const char* test_names,
int index,
704 const std::vector<std::string>& type_names =
705 GenerateNames<DefaultNameGenerator, Types>()) {
708 typedef typename GTEST_BIND_(TestSel, Type) TestClass;
713 (std::string(prefix) + (prefix[0] ==
'\0' ?
"" :
"/") + case_name +
714 "/" + type_names[static_cast<size_t>(index)]),
716 GetTypeName<Type>().c_str(),
718 code_location, GetTypeId<FixtureClass>(),
720 code_location.
file.c_str(), code_location.
line),
722 code_location.
file.c_str(), code_location.
line),
727 Register(prefix, std::move(code_location), case_name, test_names,
728 index + 1, type_names);
733 template <GTEST_TEMPLATE_ Fixture,
class TestSel>
737 const char* ,
const char* ,
739 const std::vector<std::string>& =
740 std::vector<std::string>() ) {
746 CodeLocation code_location);
748 const char* case_name);
754 template <GTEST_TEMPLATE_ Fixture,
typename Tests,
typename Types>
758 const TypedTestSuitePState* state,
const char* case_name,
759 const char* test_names,
760 const std::vector<std::string>& type_names =
761 GenerateNames<DefaultNameGenerator, Types>()) {
763 std::string test_name =
765 if (!state->TestExists(test_name)) {
766 fprintf(stderr,
"Failed to get code location for test %s.%s at %s.",
767 case_name, test_name.c_str(),
773 const CodeLocation& test_location = state->GetCodeLocation(test_name);
775 typedef typename Tests::Head Head;
779 prefix, test_location, case_name, test_names, 0, type_names);
784 std::move(code_location),
786 SkipComma(test_names),
792 template <GTEST_TEMPLATE_ Fixture,
typename Types>
796 const TypedTestSuitePState* ,
797 const char* ,
const char* ,
798 const std::vector<std::string>& =
799 std::vector<std::string>() ) {
830 operator bool()
const {
return true; }
840 explicit operator bool()
const {
return true; }
851 static const uint32_t kMaxRange = 1u << 31;
853 explicit Random(uint32_t seed) : state_(seed) {}
855 void Reseed(uint32_t seed) { state_ = seed; }
859 uint32_t Generate(uint32_t range);
868 #define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \
869 typename std::remove_const<typename std::remove_reference<T>::type>::type
874 template <
typename T>
877 template <
typename C>
879 std::string, decltype(std::declval<const C>().DebugString())>::type;
883 template <
typename C>
885 std::string, decltype(std::declval<const C>().ShortDebugString())>::type;
897 #ifdef GTEST_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
898 template <
typename T>
928 class Iterator = decltype(::std::declval<const C&>().begin()),
929 class = decltype(::std::declval<const C&>().end()),
930 class = decltype(++::std::declval<Iterator&>()),
931 class = decltype(*::std::declval<Iterator>()),
932 class =
typename C::const_iterator>
947 template <
typename T>
950 template <
typename U>
951 static char test(
typename U::hasher*,
typename U::reverse_iterator*);
952 template <
typename U>
953 static int test(
typename U::hasher*, ...);
954 template <
typename U>
955 static char test(...);
958 static const bool value =
sizeof(test<T>(
nullptr,
nullptr)) ==
sizeof(int);
961 template <
typename T>
964 template <
typename C,
965 bool =
sizeof(IsContainerTest<C>(0)) ==
sizeof(
IsContainer)>
968 template <
typename C>
975 template <
typename C>
977 using value_type = decltype(*std::declval<typename C::const_iterator>());
979 std::is_same<
typename std::remove_const<
980 typename std::remove_reference<value_type>::type>
::type,
990 template <
typename C>
999 template <
typename T,
typename U>
1000 bool ArrayEq(
const T* lhs,
size_t size,
const U* rhs);
1003 template <
typename T,
typename U>
1009 template <
typename T,
typename U,
size_t N>
1017 template <
typename T,
typename U>
1018 bool ArrayEq(
const T* lhs,
size_t size,
const U* rhs) {
1019 for (
size_t i = 0;
i != size;
i++) {
1027 template <
typename Iter,
typename Element>
1029 for (Iter it = begin; it != end; ++it) {
1039 template <
typename T,
typename U>
1040 void CopyArray(
const T* from,
size_t size, U* to);
1043 template <
typename T,
typename U>
1049 template <
typename T,
typename U,
size_t N>
1057 template <
typename T,
typename U>
1059 for (
size_t i = 0;
i != size;
i++) {
1079 template <
typename Element>
1117 "Type must not be a reference");
1121 Element*
const copy =
new Element[a_size];
1129 void InitRef(
const Element* array,
size_t a_size) {
1147 template <
size_t... I>
1153 template <
typename R>
1157 template <
size_t N,
typename...
T>
1160 static_cast<T (*)()
>(
nullptr)...));
1165 template <
typename...
T>
1168 template <
typename Derived,
size_t I>
1171 template <
typename...
T,
size_t I>
1175 template <
typename Arg>
1177 :
value(std::forward<Arg>(t)) {}
1181 template <
typename Derived,
typename Idx>
1184 template <
size_t... Idx,
typename...
T>
1189 template <
typename... Args>
1192 std::forward<Args>(args))... {}
1204 template <
typename F>
1205 auto Apply(
F&& f) -> decltype(std::forward<F>(f)(this->Get<Idx>()...)) {
1206 return std::forward<F>(
f)(Get<Idx>()...);
1209 template <
typename F>
1210 auto Apply(
F&& f) const -> decltype(std::forward<
F>(f)(this->Get<Idx>()...)) {
1211 return std::forward<F>(
f)(Get<Idx>()...);
1224 template <
typename...
T>
1226 :
private FlatTupleBase<FlatTuple<T...>,
1227 std::make_index_sequence<sizeof...(T)>> {
1234 template <
typename... Args>
1239 using FlatTuple::FlatTupleBase::Get;
1245 "INSTANTIATE_TEST_CASE_P is deprecated, please use "
1246 "INSTANTIATE_TEST_SUITE_P")
1247 constexpr
bool InstantiateTestCase_P_IsDeprecated() {
return true; }
1250 "TYPED_TEST_CASE_P is deprecated, please use "
1251 "TYPED_TEST_SUITE_P")
1252 constexpr
bool TypedTestCase_P_IsDeprecated() {
return true; }
1255 "TYPED_TEST_CASE is deprecated, please use "
1257 constexpr
bool TypedTestCaseIsDeprecated() {
return true; }
1260 "REGISTER_TYPED_TEST_CASE_P is deprecated, please use "
1261 "REGISTER_TYPED_TEST_SUITE_P")
1262 constexpr
bool RegisterTypedTestCase_P_IsDeprecated() {
return true; }
1265 "INSTANTIATE_TYPED_TEST_CASE_P is deprecated, please use "
1266 "INSTANTIATE_TYPED_TEST_SUITE_P")
1267 constexpr
bool InstantiateTypedTestCase_P_IsDeprecated() {
return true; }
1277 #pragma clang diagnostic push
1278 #pragma clang diagnostic ignored "-Wmismatched-tags"
1280 template <
typename... Ts>
1281 struct tuple_size<testing::internal::FlatTuple<Ts...>>
1282 : std::integral_constant<size_t, sizeof...(Ts)> {};
1284 #pragma clang diagnostic pop
1288 #define GTEST_MESSAGE_AT_(file, line, message, result_type) \
1289 ::testing::internal::AssertHelper(result_type, file, line, message) = \
1290 ::testing::Message()
1292 #define GTEST_MESSAGE_(message, result_type) \
1293 GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type)
1295 #define GTEST_FATAL_FAILURE_(message) \
1296 return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure)
1298 #define GTEST_NONFATAL_FAILURE_(message) \
1299 GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure)
1301 #define GTEST_SUCCESS_(message) \
1302 GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess)
1304 #define GTEST_SKIP_(message) \
1305 return GTEST_MESSAGE_(message, ::testing::TestPartResult::kSkip)
1312 #define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \
1313 if (::testing::internal::AlwaysTrue()) { \
1316 static_assert(true, "") // User must have a semicolon after expansion.
1318 #if GTEST_HAS_EXCEPTIONS
1321 namespace internal {
1325 const char* what()
const noexcept {
1326 return "this exception should never be thrown";
1335 #define GTEST_EXCEPTION_TYPE_(e) ::testing::internal::GetTypeName(typeid(e))
1337 #else // GTEST_HAS_RTTI
1339 #define GTEST_EXCEPTION_TYPE_(e) \
1340 std::string { "an std::exception-derived error" }
1342 #endif // GTEST_HAS_RTTI
1344 #define GTEST_TEST_THROW_CATCH_STD_EXCEPTION_(statement, expected_exception) \
1345 catch (typename std::conditional< \
1346 std::is_same<typename std::remove_cv<typename std::remove_reference< \
1347 expected_exception>::type>::type, \
1348 std::exception>::value, \
1349 const ::testing::internal::NeverThrown&, const std::exception&>::type \
1351 gtest_msg.value = "Expected: " #statement \
1352 " throws an exception of type " #expected_exception \
1353 ".\n Actual: it throws "; \
1354 gtest_msg.value += GTEST_EXCEPTION_TYPE_(e); \
1355 gtest_msg.value += " with description \""; \
1356 gtest_msg.value += e.what(); \
1357 gtest_msg.value += "\"."; \
1358 goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \
1361 #else // GTEST_HAS_EXCEPTIONS
1363 #define GTEST_TEST_THROW_CATCH_STD_EXCEPTION_(statement, expected_exception)
1365 #endif // GTEST_HAS_EXCEPTIONS
1367 #define GTEST_TEST_THROW_(statement, expected_exception, fail) \
1368 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
1369 if (::testing::internal::TrueWithString gtest_msg{}) { \
1370 bool gtest_caught_expected = false; \
1372 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
1373 } catch (expected_exception const&) { \
1374 gtest_caught_expected = true; \
1376 GTEST_TEST_THROW_CATCH_STD_EXCEPTION_(statement, expected_exception) \
1378 gtest_msg.value = "Expected: " #statement \
1379 " throws an exception of type " #expected_exception \
1380 ".\n Actual: it throws a different type."; \
1381 goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \
1383 if (!gtest_caught_expected) { \
1384 gtest_msg.value = "Expected: " #statement \
1385 " throws an exception of type " #expected_exception \
1386 ".\n Actual: it throws nothing."; \
1387 goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \
1390 GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__) \
1391 : fail(gtest_msg.value.c_str())
1393 #if GTEST_HAS_EXCEPTIONS
1395 #define GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_() \
1396 catch (std::exception const& e) { \
1397 gtest_msg.value = "it throws "; \
1398 gtest_msg.value += GTEST_EXCEPTION_TYPE_(e); \
1399 gtest_msg.value += " with description \""; \
1400 gtest_msg.value += e.what(); \
1401 gtest_msg.value += "\"."; \
1402 goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \
1405 #else // GTEST_HAS_EXCEPTIONS
1407 #define GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_()
1409 #endif // GTEST_HAS_EXCEPTIONS
1411 #define GTEST_TEST_NO_THROW_(statement, fail) \
1412 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
1413 if (::testing::internal::TrueWithString gtest_msg{}) { \
1415 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
1417 GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_() \
1419 gtest_msg.value = "it throws."; \
1420 goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \
1423 GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__) \
1424 : fail(("Expected: " #statement " doesn't throw an exception.\n" \
1429 #define GTEST_TEST_ANY_THROW_(statement, fail) \
1430 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
1431 if (::testing::internal::AlwaysTrue()) { \
1432 bool gtest_caught_any = false; \
1434 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
1436 gtest_caught_any = true; \
1438 if (!gtest_caught_any) { \
1439 goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \
1442 GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__) \
1443 : fail("Expected: " #statement \
1444 " throws an exception.\n" \
1445 " Actual: it doesn't.")
1450 #define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \
1451 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
1452 if (const ::testing::AssertionResult gtest_ar_ = \
1453 ::testing::AssertionResult(expression)) \
1456 fail(::testing::internal::GetBoolAssertionFailureMessage( \
1457 gtest_ar_, text, #actual, #expected) \
1460 #define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \
1461 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
1462 if (::testing::internal::AlwaysTrue()) { \
1463 const ::testing::internal::HasNewFatalFailureHelper \
1464 gtest_fatal_failure_checker; \
1465 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
1466 if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \
1467 goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \
1470 GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__) \
1471 : fail("Expected: " #statement \
1472 " doesn't generate new fatal " \
1473 "failures in the current thread.\n" \
1474 " Actual: it does.")
1477 #define GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \
1478 test_suite_name##_##test_name##_Test
1481 #define GTEST_TEST_(test_suite_name, test_name, parent_class, parent_id) \
1482 static_assert(sizeof(GTEST_STRINGIFY_(test_suite_name)) > 1, \
1483 "test_suite_name must not be empty"); \
1484 static_assert(sizeof(GTEST_STRINGIFY_(test_name)) > 1, \
1485 "test_name must not be empty"); \
1486 class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \
1487 : public parent_class { \
1489 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() = default; \
1490 ~GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() override = default; \
1491 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \
1492 (const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) &) = delete; \
1493 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) & operator=( \
1494 const GTEST_TEST_CLASS_NAME_(test_suite_name, \
1495 test_name) &) = delete; \
1496 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \
1497 (GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) &&) noexcept = delete; \
1498 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) & operator=( \
1499 GTEST_TEST_CLASS_NAME_(test_suite_name, \
1500 test_name) &&) noexcept = delete; \
1503 void TestBody() override; \
1504 GTEST_INTERNAL_ATTRIBUTE_MAYBE_UNUSED static ::testing::TestInfo* const \
1508 ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_suite_name, \
1509 test_name)::test_info_ = \
1510 ::testing::internal::MakeAndRegisterTestInfo( \
1511 #test_suite_name, #test_name, nullptr, nullptr, \
1512 ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id), \
1513 ::testing::internal::SuiteApiResolver< \
1514 parent_class>::GetSetUpCaseOrSuite(__FILE__, __LINE__), \
1515 ::testing::internal::SuiteApiResolver< \
1516 parent_class>::GetTearDownCaseOrSuite(__FILE__, __LINE__), \
1517 new ::testing::internal::TestFactoryImpl<GTEST_TEST_CLASS_NAME_( \
1518 test_suite_name, test_name)>); \
1519 void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody()
1521 #endif // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
GTEST_INTERNAL_DEPRECATED("INSTANTIATE_TEST_CASE_P is deprecated, please use ""INSTANTIATE_TEST_SUITE_P") const expr bool InstantiateTestCase_P_IsDeprecated()
bool operator==(const NativeArray &rhs) const
static SetUpTearDownSuiteFuncType GetTearDownCaseOrSuite(const char *filename, int line_num)
static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits &sam1, const Bits &sam2)
static void SetUpTestCase()
Bits exponent_bits() const
ElemFromList< I, T...>::type & Get()
static RawType Infinity()
GTEST_API_ std::vector< EditType > CalculateOptimalEdits(const std::vector< size_t > &left, const std::vector< size_t > &right)
IsContainer IsContainerTest(int)
TestFactoryBase & operator=(const TestFactoryBase &)=delete
static RawType ReinterpretBits(const Bits bits)
::std::string PrintToString(const T &value)
#define GTEST_BIND_(TmplSel, T)
decltype(CheckDebugString< T >(nullptr)) HasDebugStringType
virtual Test * CreateTest()=0
typename std::conditional< sizeof(T)!=0,::testing::Test, void >::type Test
const Element * const_iterator
std::index_sequence< Idx...> Indices
FlatTuple(FlatTupleConstructTag tag, Args &&...args)
void InitRef(const Element *array, size_t a_size)
void(NativeArray::* clone_)(const Element *, size_t)
FloatingPoint(const RawType &x)
static const size_t kExponentBitCount
GTEST_API_ void RegisterTypeParameterizedTestSuiteInstantiation(const char *case_name)
NativeArray(const Element *array, size_t count, RelationToSourceReference)
auto Apply(F &&f) const -> decltype(std::forward< F >(f)(this->Get< Idx >()...))
void GenerateNamesRecursively(internal::None, std::vector< std::string > *, int)
static char test(typename U::hasher *, typename U::reverse_iterator *)
const_iterator begin() const
GTEST_API_ bool SkipPrefix(const char *prefix, const char **pstr)
TrueWithString(const std::string &str)
internal::ProxyTypeList< Ts...> Types
void(*)( TearDownTestSuiteFunc)
std::string GetPrefixUntilComma(const char *str)
decltype(ElemFromListImpl< std::make_index_sequence< N >>::Apply(static_cast< T(*)()>(nullptr)...)) type
std::string StreamableToString(const T &streamable)
auto Apply(F &&f) -> decltype(std::forward< F >(f)(this->Get< Idx >()...))
bool ArrayEq(const T *lhs, size_t size, const U *rhs)
GTEST_API_::std::string FormatFileLocation(const char *file, int line)
void(*)( SetUpTearDownSuiteFuncType)
static auto CheckDebugString(C *) -> typename std::is_same< std::string, decltype(std::declval< const C >().DebugString())>::type
void SplitString(const ::std::string &str, char delimiter,::std::vector<::std::string > *dest)
static std::string GetName(int i)
GTEST_API_ std::string GetCurrentOsStackTraceExceptTop(int skip_count)
auto Apply(F &&f, Tuple &&args) -> decltype(ApplyImpl(std::forward< F >(f), std::forward< Tuple >(args), std::make_index_sequence< std::tuple_size< typename std::remove_reference< Tuple >::type >::value >()))
GTEST_API_ TypeId GetTestTypeId()
FlatTupleBase(FlatTupleConstructTag, Args &&...args)
FloatingPoint< float > Float
FloatingPoint< double > Double
#define GTEST_CHECK_(condition)
Test * CreateTest() override
const ElemFromList< I, T...>::type & Get() const
typename ElemFromList< I, T...>::type value_type
static void TearDownTestSuite()
static constexpr bool value
GTEST_API_ bool AlwaysTrue()
bool AlmostEquals(const FloatingPoint &rhs) const
NativeArray(const Element *array, size_t count, RelationToSourceCopy)
NativeArray(const NativeArray &rhs)
GTEST_DISABLE_MSC_WARNINGS_POP_() inline const char *SkipComma(const char *str)
SetUpTearDownSuiteFuncType GetNotDefaultOrNull(SetUpTearDownSuiteFuncType a, SetUpTearDownSuiteFuncType def)
static bool Register(const char *, const CodeLocation &, const TypedTestSuitePState *, const char *, const char *, const std::vector< std::string > &=std::vector< std::string >())
decltype(CheckShortDebugString< T >(nullptr)) HasShortDebugStringType
FlatTupleElemBase(FlatTupleConstructTag, Arg &&t)
static Bits SignAndMagnitudeToBiased(const Bits &sam)
CodeLocation(std::string a_file, int a_line)
GTEST_API_ const char kStackTraceMarker[]
GTEST_API_ std::string AppendUserMessage(const std::string >est_msg, const Message &user_msg)
GTEST_API_ TestInfo * MakeAndRegisterTestInfo(std::string test_suite_name, const char *name, const char *type_param, const char *value_param, CodeLocation code_location, TypeId fixture_class_id, SetUpTestSuiteFunc set_up_tc, TearDownTestSuiteFunc tear_down_tc, TestFactoryBase *factory)
Bits fraction_bits() const
TrueWithString(const char *str)
GTEST_API_ AssertionResult EqFailure(const char *expected_expression, const char *actual_expression, const std::string &expected_value, const std::string &actual_value, bool ignoring_case)
static bool Register(const char *prefix, CodeLocation code_location, const TypedTestSuitePState *state, const char *case_name, const char *test_names, const std::vector< std::string > &type_names=GenerateNames< DefaultNameGenerator, Types >())
const Bits & bits() const
TypedTestSuitePState TypedTestCasePState
GTEST_API_ std::string GetBoolAssertionFailureMessage(const AssertionResult &assertion_result, const char *expression_text, const char *actual_predicate_value, const char *expected_predicate_value)
GTEST_API_ std::string CreateUnifiedDiff(const std::vector< std::string > &left, const std::vector< std::string > &right, size_t context=2)
static SetUpTearDownSuiteFuncType GetSetUpCaseOrSuite(const char *filename, int line_num)
static const size_t kFractionBitCount
TypeWithSize< sizeof(RawType)>::UInt Bits
static bool Register(const char *, CodeLocation, const char *, const char *, int, const std::vector< std::string > &=std::vector< std::string >())
static bool Register(const char *prefix, CodeLocation code_location, const char *case_name, const char *test_names, int index, const std::vector< std::string > &type_names=GenerateNames< DefaultNameGenerator, Types >())
static auto CheckShortDebugString(C *) -> typename std::is_same< std::string, decltype(std::declval< const C >().ShortDebugString())>::type
const_iterator end() const
GTEST_API_ void RegisterTypeParameterizedTestSuite(const char *test_suite_name, CodeLocation code_location)
typename FlatTupleBase< FlatTuple< T...>, std::make_index_sequence< sizeof...(T)>>::Indices Indices
GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251) class GTEST_API_ TypedTestSuitePState
void InitCopy(const Element *array, size_t a_size)
std::is_same< typename std::remove_const< typename std::remove_reference< value_type >::type >::type, C > type
virtual ~TestFactoryBase()=default
ConstCharPtr(const char *str)
void CopyArray(const T *from, size_t size, U *to)
static void SetUpTestSuite()
static const Bits kFractionBitMask
void Reseed(uint32_t seed)
void(*)( SetUpTestSuiteFunc)
Iter ArrayAwareFind(Iter begin, Iter end, const Element &elem)
std::vector< std::string > GenerateNames()
decltype(*std::declval< typename C::const_iterator >()) value_type
static const Bits kSignBitMask
static const size_t kBitCount
ADvari & copy(const IndepADvar &x)
std::string StripTrailingSpaces(std::string str)
static void TearDownTestCase()
static const Bits kExponentBitMask
static const uint32_t kMaxUlps