Bytecoin RPC Wallet
This commit is contained in:
parent
89271f54f3
commit
ad291f5285
757 changed files with 144862 additions and 19703 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,3 +1,4 @@
|
||||||
.DS_Store
|
.DS_Store
|
||||||
/build
|
/build
|
||||||
/tags
|
/tags
|
||||||
|
.idea
|
||||||
|
|
|
@ -4,12 +4,18 @@ set(VERSION "0.1")
|
||||||
# $Format:Packaged from commit %H%nset(COMMIT %h)%nset(REFS "%d")$
|
# $Format:Packaged from commit %H%nset(COMMIT %h)%nset(REFS "%d")$
|
||||||
|
|
||||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||||
set(CMAKE_CONFIGURATION_TYPES "Debug;Release")
|
set(CMAKE_CONFIGURATION_TYPES Debug RelWithDebInfo Release CACHE TYPE INTERNAL)
|
||||||
enable_testing()
|
set(CMAKE_SKIP_INSTALL_RULES ON)
|
||||||
|
set(CMAKE_SKIP_PACKAGE_ALL_DEPENDENCY ON)
|
||||||
|
set(CMAKE_SUPPRESS_REGENERATION ON)
|
||||||
|
#enable_testing()
|
||||||
|
|
||||||
|
project(Bytecoin)
|
||||||
|
|
||||||
include_directories(include src contrib/epee/include external "${CMAKE_BINARY_DIR}/version")
|
include_directories(include src contrib/epee/include external "${CMAKE_BINARY_DIR}/version")
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
include_directories(SYSTEM /usr/include/malloc)
|
include_directories(SYSTEM /usr/include/malloc)
|
||||||
|
enable_language(ASM)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
|
@ -20,26 +26,30 @@ else()
|
||||||
include_directories(src/Platform/Linux)
|
include_directories(src/Platform/Linux)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
set(STATIC ${MSVC} CACHE BOOL "Link libraries statically")
|
set(STATIC ${MSVC} CACHE BOOL "Link libraries statically")
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
add_definitions("/bigobj /MP /W3 /GS- /D_CRT_SECURE_NO_WARNINGS /wd4996 /wd4345 /D_WIN32_WINNT=0x0600 /DWIN32_LEAN_AND_MEAN /DGTEST_HAS_TR1_TUPLE=0 /D_VARIADIC_MAX=8 /D__SSE4_1__")
|
add_definitions("/bigobj /MP /W3 /GS- /D_CRT_SECURE_NO_WARNINGS /wd4996 /wd4345 /D_WIN32_WINNT=0x0600 /DWIN32_LEAN_AND_MEAN /DGTEST_HAS_TR1_TUPLE=0 /D_VARIADIC_MAX=8 /D__SSE4_1__")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:10485760")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:10485760")
|
||||||
if(STATIC)
|
if(STATIC)
|
||||||
foreach(VAR CMAKE_C_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
foreach(VAR CMAKE_C_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELEASE)
|
||||||
string(REPLACE "/MD" "/MT" ${VAR} "${${VAR}}")
|
string(REPLACE "/MD" "/MT" ${VAR} "${${VAR}}")
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
include_directories(SYSTEM src/platform/msc)
|
include_directories(SYSTEM src/platform/msc)
|
||||||
else()
|
else()
|
||||||
|
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||||
|
# This option has no effect in glibc version less than 2.20.
|
||||||
|
# Since glibc 2.20 _BSD_SOURCE is deprecated, this macro is recomended instead
|
||||||
|
add_definitions("-D_DEFAULT_SOURCE -D_GNU_SOURCE")
|
||||||
|
endif()
|
||||||
set(ARCH native CACHE STRING "CPU to build for: -march value or default")
|
set(ARCH native CACHE STRING "CPU to build for: -march value or default")
|
||||||
if("${ARCH}" STREQUAL "default")
|
if("${ARCH}" STREQUAL "default")
|
||||||
set(ARCH_FLAG "")
|
set(ARCH_FLAG "")
|
||||||
else()
|
else()
|
||||||
set(ARCH_FLAG "-march=${ARCH}")
|
set(ARCH_FLAG "-march=${ARCH}")
|
||||||
endif()
|
endif()
|
||||||
set(WARNINGS "-Wall -Wextra -Wpointer-arith -Wundef -Wvla -Wwrite-strings -Werror -Wno-error=extra -Wno-error=deprecated-declarations -Wno-error=sign-compare -Wno-error=strict-aliasing -Wno-error=type-limits -Wno-unused-parameter -Wno-error=unused-variable -Wno-error=undef -Wno-error=uninitialized -Wno-error=unused-result")
|
set(WARNINGS "-Wall -Wextra -Wpointer-arith -Wundef -Wvla -Wwrite-strings -Werror -Wno-error=extra -Wno-error=unused-function -Wno-error=deprecated-declarations -Wno-error=sign-compare -Wno-error=strict-aliasing -Wno-error=type-limits -Wno-unused-parameter -Wno-error=unused-variable -Wno-error=undef -Wno-error=uninitialized -Wno-error=unused-result")
|
||||||
if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||||
set(WARNINGS "${WARNINGS} -Wno-error=mismatched-tags -Wno-error=null-conversion -Wno-overloaded-shift-op-parentheses -Wno-error=shift-count-overflow -Wno-error=tautological-constant-out-of-range-compare -Wno-error=unused-private-field -Wno-error=unneeded-internal-declaration -Wno-error=unused-function")
|
set(WARNINGS "${WARNINGS} -Wno-error=mismatched-tags -Wno-error=null-conversion -Wno-overloaded-shift-op-parentheses -Wno-error=shift-count-overflow -Wno-error=tautological-constant-out-of-range-compare -Wno-error=unused-private-field -Wno-error=unneeded-internal-declaration -Wno-error=unused-function")
|
||||||
else()
|
else()
|
||||||
|
@ -54,8 +64,11 @@ else()
|
||||||
endif()
|
endif()
|
||||||
set(C_WARNINGS "-Waggregate-return -Wnested-externs -Wold-style-definition -Wstrict-prototypes")
|
set(C_WARNINGS "-Waggregate-return -Wnested-externs -Wold-style-definition -Wstrict-prototypes")
|
||||||
set(CXX_WARNINGS "-Wno-reorder -Wno-missing-field-initializers")
|
set(CXX_WARNINGS "-Wno-reorder -Wno-missing-field-initializers")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11 -D_GNU_SOURCE ${MINGW_FLAG} ${WARNINGS} ${C_WARNINGS} ${ARCH_FLAG} -maes")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11 ${MINGW_FLAG} ${WARNINGS} ${C_WARNINGS} ${ARCH_FLAG} -maes")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -D_GNU_SOURCE ${MINGW_FLAG} ${WARNINGS} ${CXX_WARNINGS} ${ARCH_FLAG} -maes")
|
if(NOT APPLE)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
|
||||||
|
endif()
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ${MINGW_FLAG} ${WARNINGS} ${CXX_WARNINGS} ${ARCH_FLAG} -maes")
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGTEST_HAS_TR1_TUPLE=0")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGTEST_HAS_TR1_TUPLE=0")
|
||||||
endif()
|
endif()
|
||||||
|
@ -67,6 +80,12 @@ else()
|
||||||
set(RELEASE_FLAGS "-Ofast -DNDEBUG -Wno-unused-variable")
|
set(RELEASE_FLAGS "-Ofast -DNDEBUG -Wno-unused-variable")
|
||||||
if(NOT APPLE)
|
if(NOT APPLE)
|
||||||
# There is a clang bug that does not allow to compile code that uses AES-NI intrinsics if -flto is enabled
|
# There is a clang bug that does not allow to compile code that uses AES-NI intrinsics if -flto is enabled
|
||||||
|
if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND ${CMAKE_SYSTEM_NAME} STREQUAL "Linux"
|
||||||
|
AND ${CMAKE_BUILD_TYPE} STREQUAL "Release" AND ((CMAKE_C_COMPILER_VERSION VERSION_GREATER 4.9) OR (CMAKE_C_COMPILER_VERSION VERSION_EQUAL 4.9)))
|
||||||
|
# On linux, to build in lto mode, check that ld.gold linker is used: 'update-alternatives --install /usr/bin/ld ld /usr/bin/ld.gold HIGHEST_PRIORITY'
|
||||||
|
set(CMAKE_AR gcc-ar)
|
||||||
|
set(CMAKE_RANLIB gcc-ranlib)
|
||||||
|
endif()
|
||||||
set(RELEASE_FLAGS "${RELEASE_FLAGS} -flto")
|
set(RELEASE_FLAGS "${RELEASE_FLAGS} -flto")
|
||||||
endif()
|
endif()
|
||||||
#if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT MINGW)
|
#if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT MINGW)
|
||||||
|
@ -85,10 +104,7 @@ if(STATIC)
|
||||||
set(Boost_USE_STATIC_LIBS ON)
|
set(Boost_USE_STATIC_LIBS ON)
|
||||||
set(Boost_USE_STATIC_RUNTIME ON)
|
set(Boost_USE_STATIC_RUNTIME ON)
|
||||||
endif()
|
endif()
|
||||||
find_package(Boost 1.53 REQUIRED COMPONENTS system filesystem thread date_time chrono regex serialization program_options coroutine context)
|
find_package(Boost 1.55 REQUIRED COMPONENTS system filesystem thread date_time chrono regex serialization program_options)
|
||||||
if((${Boost_MAJOR_VERSION} EQUAL 1) AND (${Boost_MINOR_VERSION} EQUAL 54))
|
|
||||||
message(SEND_ERROR "Boost version 1.54 is unsupported, more details are available here http://goo.gl/RrCFmA")
|
|
||||||
endif()
|
|
||||||
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
|
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
|
||||||
if(MINGW)
|
if(MINGW)
|
||||||
set(Boost_LIBRARIES "${Boost_LIBRARIES};ws2_32;mswsock")
|
set(Boost_LIBRARIES "${Boost_LIBRARIES};ws2_32;mswsock")
|
||||||
|
|
4
README
4
README
|
@ -18,7 +18,7 @@ Test suite: run `make test-release' to run tests in addition to building. Runnin
|
||||||
Building with Clang: it may be possible to use Clang instead of GCC, but this may not work everywhere. To build, run `export CC=clang CXX=clang++' before running `make'.
|
Building with Clang: it may be possible to use Clang instead of GCC, but this may not work everywhere. To build, run `export CC=clang CXX=clang++' before running `make'.
|
||||||
|
|
||||||
On Windows:
|
On Windows:
|
||||||
Dependencies: MSVC 2012 or later, CMake 2.8.6 or later, and Boost 1.55. You may download them from:
|
Dependencies: MSVC 2013 or later, CMake 2.8.6 or later, and Boost 1.55. You may download them from:
|
||||||
http://www.microsoft.com/
|
http://www.microsoft.com/
|
||||||
http://www.cmake.org/
|
http://www.cmake.org/
|
||||||
http://www.boost.org/
|
http://www.boost.org/
|
||||||
|
@ -26,7 +26,7 @@ http://www.boost.org/
|
||||||
To build, change to a directory where this file is located, and run this commands:
|
To build, change to a directory where this file is located, and run this commands:
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
cmake -G "Visual Studio 11 Win64" ..
|
cmake -G "Visual Studio 12 Win64" ..
|
||||||
|
|
||||||
And then do Build.
|
And then do Build.
|
||||||
Good luck!
|
Good luck!
|
|
@ -1,3 +1,10 @@
|
||||||
|
Release notes 1.0.4
|
||||||
|
|
||||||
|
- Bytecoin RPC Wallet
|
||||||
|
- New multithreading library
|
||||||
|
- Improved console logging
|
||||||
|
- Further optimizations
|
||||||
|
|
||||||
Release notes 1.0.3
|
Release notes 1.0.3
|
||||||
|
|
||||||
- Multisignature API
|
- Multisignature API
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#include <boost/algorithm/string/classification.hpp>
|
#include <boost/algorithm/string/classification.hpp>
|
||||||
#include <boost/algorithm/string/split.hpp>
|
#include <boost/algorithm/string/split.hpp>
|
||||||
|
|
||||||
|
#include "include_base_utils.h"
|
||||||
#include "string_tools.h"
|
#include "string_tools.h"
|
||||||
|
|
||||||
namespace epee
|
namespace epee
|
||||||
|
|
|
@ -757,6 +757,7 @@ POP_WARNINGS
|
||||||
boost::asio::ip::tcp::endpoint remote_endpoint(*iterator);
|
boost::asio::ip::tcp::endpoint remote_endpoint(*iterator);
|
||||||
|
|
||||||
sock_.open(remote_endpoint.protocol());
|
sock_.open(remote_endpoint.protocol());
|
||||||
|
|
||||||
if(bind_ip != "0.0.0.0" && bind_ip != "0" && bind_ip != "" )
|
if(bind_ip != "0.0.0.0" && bind_ip != "0" && bind_ip != "" )
|
||||||
{
|
{
|
||||||
boost::asio::ip::tcp::endpoint local_endpoint(boost::asio::ip::address::from_string(adr.c_str()), 0);
|
boost::asio::ip::tcp::endpoint local_endpoint(boost::asio::ip::address::from_string(adr.c_str()), 0);
|
||||||
|
|
7
external/CMakeLists.txt
vendored
7
external/CMakeLists.txt
vendored
|
@ -1,9 +1,12 @@
|
||||||
set(UPNPC_BUILD_STATIC ON CACHE BOOL "Build static library")
|
set(UPNPC_BUILD_STATIC ON CACHE BOOL "Build static library")
|
||||||
set(UPNPC_BUILD_SHARED OFF CACHE BOOL "Build shared library")
|
set(UPNPC_BUILD_SHARED OFF CACHE BOOL "Build shared library")
|
||||||
set(UPNPC_BUILD_TESTS OFF CACHE BOOL "Build test executables")
|
set(UPNPC_BUILD_TESTS OFF CACHE BOOL "Build test executables")
|
||||||
add_subdirectory(miniupnpc)
|
|
||||||
|
|
||||||
set_property(TARGET upnpc-static PROPERTY FOLDER "external")
|
add_subdirectory(miniupnpc)
|
||||||
|
add_subdirectory(gtest)
|
||||||
|
|
||||||
|
set_property(TARGET upnpc-static gtest gtest_main PROPERTY FOLDER "external")
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
set_property(TARGET upnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -wd4244 -wd4267")
|
set_property(TARGET upnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -wd4244 -wd4267")
|
||||||
elseif(NOT MSVC)
|
elseif(NOT MSVC)
|
||||||
|
|
157
external/gtest/CHANGES
vendored
Normal file
157
external/gtest/CHANGES
vendored
Normal file
|
@ -0,0 +1,157 @@
|
||||||
|
Changes for 1.7.0:
|
||||||
|
|
||||||
|
* New feature: death tests are supported on OpenBSD and in iOS
|
||||||
|
simulator now.
|
||||||
|
* New feature: Google Test now implements a protocol to allow
|
||||||
|
a test runner to detect that a test program has exited
|
||||||
|
prematurely and report it as a failure (before it would be
|
||||||
|
falsely reported as a success if the exit code is 0).
|
||||||
|
* New feature: Test::RecordProperty() can now be used outside of the
|
||||||
|
lifespan of a test method, in which case it will be attributed to
|
||||||
|
the current test case or the test program in the XML report.
|
||||||
|
* New feature (potentially breaking): --gtest_list_tests now prints
|
||||||
|
the type parameters and value parameters for each test.
|
||||||
|
* Improvement: char pointers and char arrays are now escaped properly
|
||||||
|
in failure messages.
|
||||||
|
* Improvement: failure summary in XML reports now includes file and
|
||||||
|
line information.
|
||||||
|
* Improvement: the <testsuites> XML element now has a timestamp attribute.
|
||||||
|
* Improvement: When --gtest_filter is specified, XML report now doesn't
|
||||||
|
contain information about tests that are filtered out.
|
||||||
|
* Fixed the bug where long --gtest_filter flag values are truncated in
|
||||||
|
death tests.
|
||||||
|
* Potentially breaking change: RUN_ALL_TESTS() is now implemented as a
|
||||||
|
function instead of a macro in order to work better with Clang.
|
||||||
|
* Compatibility fixes with C++ 11 and various platforms.
|
||||||
|
* Bug/warning fixes.
|
||||||
|
|
||||||
|
Changes for 1.6.0:
|
||||||
|
|
||||||
|
* New feature: ADD_FAILURE_AT() for reporting a test failure at the
|
||||||
|
given source location -- useful for writing testing utilities.
|
||||||
|
* New feature: the universal value printer is moved from Google Mock
|
||||||
|
to Google Test.
|
||||||
|
* New feature: type parameters and value parameters are reported in
|
||||||
|
the XML report now.
|
||||||
|
* A gtest_disable_pthreads CMake option.
|
||||||
|
* Colored output works in GNU Screen sessions now.
|
||||||
|
* Parameters of value-parameterized tests are now printed in the
|
||||||
|
textual output.
|
||||||
|
* Failures from ad hoc test assertions run before RUN_ALL_TESTS() are
|
||||||
|
now correctly reported.
|
||||||
|
* Arguments of ASSERT_XY and EXPECT_XY no longer need to support << to
|
||||||
|
ostream.
|
||||||
|
* More complete handling of exceptions.
|
||||||
|
* GTEST_ASSERT_XY can be used instead of ASSERT_XY in case the latter
|
||||||
|
name is already used by another library.
|
||||||
|
* --gtest_catch_exceptions is now true by default, allowing a test
|
||||||
|
program to continue after an exception is thrown.
|
||||||
|
* Value-parameterized test fixtures can now derive from Test and
|
||||||
|
WithParamInterface<T> separately, easing conversion of legacy tests.
|
||||||
|
* Death test messages are clearly marked to make them more
|
||||||
|
distinguishable from other messages.
|
||||||
|
* Compatibility fixes for Android, Google Native Client, MinGW, HP UX,
|
||||||
|
PowerPC, Lucid autotools, libCStd, Sun C++, Borland C++ Builder (Code Gear),
|
||||||
|
IBM XL C++ (Visual Age C++), and C++0x.
|
||||||
|
* Bug fixes and implementation clean-ups.
|
||||||
|
* Potentially incompatible changes: disables the harmful 'make install'
|
||||||
|
command in autotools.
|
||||||
|
|
||||||
|
Changes for 1.5.0:
|
||||||
|
|
||||||
|
* New feature: assertions can be safely called in multiple threads
|
||||||
|
where the pthreads library is available.
|
||||||
|
* New feature: predicates used inside EXPECT_TRUE() and friends
|
||||||
|
can now generate custom failure messages.
|
||||||
|
* New feature: Google Test can now be compiled as a DLL.
|
||||||
|
* New feature: fused source files are included.
|
||||||
|
* New feature: prints help when encountering unrecognized Google Test flags.
|
||||||
|
* Experimental feature: CMake build script (requires CMake 2.6.4+).
|
||||||
|
* Experimental feature: the Pump script for meta programming.
|
||||||
|
* double values streamed to an assertion are printed with enough precision
|
||||||
|
to differentiate any two different values.
|
||||||
|
* Google Test now works on Solaris and AIX.
|
||||||
|
* Build and test script improvements.
|
||||||
|
* Bug fixes and implementation clean-ups.
|
||||||
|
|
||||||
|
Potentially breaking changes:
|
||||||
|
|
||||||
|
* Stopped supporting VC++ 7.1 with exceptions disabled.
|
||||||
|
* Dropped support for 'make install'.
|
||||||
|
|
||||||
|
Changes for 1.4.0:
|
||||||
|
|
||||||
|
* New feature: the event listener API
|
||||||
|
* New feature: test shuffling
|
||||||
|
* New feature: the XML report format is closer to junitreport and can
|
||||||
|
be parsed by Hudson now.
|
||||||
|
* New feature: when a test runs under Visual Studio, its failures are
|
||||||
|
integrated in the IDE.
|
||||||
|
* New feature: /MD(d) versions of VC++ projects.
|
||||||
|
* New feature: elapsed time for the tests is printed by default.
|
||||||
|
* New feature: comes with a TR1 tuple implementation such that Boost
|
||||||
|
is no longer needed for Combine().
|
||||||
|
* New feature: EXPECT_DEATH_IF_SUPPORTED macro and friends.
|
||||||
|
* New feature: the Xcode project can now produce static gtest
|
||||||
|
libraries in addition to a framework.
|
||||||
|
* Compatibility fixes for Solaris, Cygwin, minGW, Windows Mobile,
|
||||||
|
Symbian, gcc, and C++Builder.
|
||||||
|
* Bug fixes and implementation clean-ups.
|
||||||
|
|
||||||
|
Changes for 1.3.0:
|
||||||
|
|
||||||
|
* New feature: death tests on Windows, Cygwin, and Mac.
|
||||||
|
* New feature: ability to use Google Test assertions in other testing
|
||||||
|
frameworks.
|
||||||
|
* New feature: ability to run disabled test via
|
||||||
|
--gtest_also_run_disabled_tests.
|
||||||
|
* New feature: the --help flag for printing the usage.
|
||||||
|
* New feature: access to Google Test flag values in user code.
|
||||||
|
* New feature: a script that packs Google Test into one .h and one
|
||||||
|
.cc file for easy deployment.
|
||||||
|
* New feature: support for distributing test functions to multiple
|
||||||
|
machines (requires support from the test runner).
|
||||||
|
* Bug fixes and implementation clean-ups.
|
||||||
|
|
||||||
|
Changes for 1.2.1:
|
||||||
|
|
||||||
|
* Compatibility fixes for Linux IA-64 and IBM z/OS.
|
||||||
|
* Added support for using Boost and other TR1 implementations.
|
||||||
|
* Changes to the build scripts to support upcoming release of Google C++
|
||||||
|
Mocking Framework.
|
||||||
|
* Added Makefile to the distribution package.
|
||||||
|
* Improved build instructions in README.
|
||||||
|
|
||||||
|
Changes for 1.2.0:
|
||||||
|
|
||||||
|
* New feature: value-parameterized tests.
|
||||||
|
* New feature: the ASSERT/EXPECT_(NON)FATAL_FAILURE(_ON_ALL_THREADS)
|
||||||
|
macros.
|
||||||
|
* Changed the XML report format to match JUnit/Ant's.
|
||||||
|
* Added tests to the Xcode project.
|
||||||
|
* Added scons/SConscript for building with SCons.
|
||||||
|
* Added src/gtest-all.cc for building Google Test from a single file.
|
||||||
|
* Fixed compatibility with Solaris and z/OS.
|
||||||
|
* Enabled running Python tests on systems with python 2.3 installed,
|
||||||
|
e.g. Mac OS X 10.4.
|
||||||
|
* Bug fixes.
|
||||||
|
|
||||||
|
Changes for 1.1.0:
|
||||||
|
|
||||||
|
* New feature: type-parameterized tests.
|
||||||
|
* New feature: exception assertions.
|
||||||
|
* New feature: printing elapsed time of tests.
|
||||||
|
* Improved the robustness of death tests.
|
||||||
|
* Added an Xcode project and samples.
|
||||||
|
* Adjusted the output format on Windows to be understandable by Visual Studio.
|
||||||
|
* Minor bug fixes.
|
||||||
|
|
||||||
|
Changes for 1.0.1:
|
||||||
|
|
||||||
|
* Added project files for Visual Studio 7.1.
|
||||||
|
* Fixed issues with compiling on Mac OS X.
|
||||||
|
* Fixed issues with compiling on Cygwin.
|
||||||
|
|
||||||
|
Changes for 1.0.0:
|
||||||
|
|
||||||
|
* Initial Open Source release of Google Test
|
|
@ -77,7 +77,7 @@ target_link_libraries(gtest_main gtest)
|
||||||
#
|
#
|
||||||
# They are not built by default. To build them, set the
|
# They are not built by default. To build them, set the
|
||||||
# gtest_build_samples option to ON. You can do it by running ccmake
|
# gtest_build_samples option to ON. You can do it by running ccmake
|
||||||
# or specifying the -Dbuild_gtest_samples=ON flag when running cmake.
|
# or specifying the -Dgtest_build_samples=ON flag when running cmake.
|
||||||
|
|
||||||
if (gtest_build_samples)
|
if (gtest_build_samples)
|
||||||
cxx_executable(sample1_unittest samples gtest_main samples/sample1.cc)
|
cxx_executable(sample1_unittest samples gtest_main samples/sample1.cc)
|
||||||
|
@ -124,6 +124,8 @@ if (gtest_build_tests)
|
||||||
test/gtest-param-test2_test.cc)
|
test/gtest-param-test2_test.cc)
|
||||||
cxx_test(gtest-port_test gtest_main)
|
cxx_test(gtest-port_test gtest_main)
|
||||||
cxx_test(gtest_pred_impl_unittest gtest_main)
|
cxx_test(gtest_pred_impl_unittest gtest_main)
|
||||||
|
cxx_test(gtest_premature_exit_test gtest
|
||||||
|
test/gtest_premature_exit_test.cc)
|
||||||
cxx_test(gtest-printers_test gtest_main)
|
cxx_test(gtest-printers_test gtest_main)
|
||||||
cxx_test(gtest_prod_test gtest_main
|
cxx_test(gtest_prod_test gtest_main
|
||||||
test/production.cc)
|
test/production.cc)
|
||||||
|
@ -140,10 +142,13 @@ if (gtest_build_tests)
|
||||||
############################################################
|
############################################################
|
||||||
# C++ tests built with non-standard compiler flags.
|
# C++ tests built with non-standard compiler flags.
|
||||||
|
|
||||||
cxx_library(gtest_no_exception "${cxx_no_exception}"
|
# MSVC 7.1 does not support STL with exceptions disabled.
|
||||||
src/gtest-all.cc)
|
if (NOT MSVC OR MSVC_VERSION GREATER 1310)
|
||||||
cxx_library(gtest_main_no_exception "${cxx_no_exception}"
|
cxx_library(gtest_no_exception "${cxx_no_exception}"
|
||||||
src/gtest-all.cc src/gtest_main.cc)
|
src/gtest-all.cc)
|
||||||
|
cxx_library(gtest_main_no_exception "${cxx_no_exception}"
|
||||||
|
src/gtest-all.cc src/gtest_main.cc)
|
||||||
|
endif()
|
||||||
cxx_library(gtest_main_no_rtti "${cxx_no_rtti}"
|
cxx_library(gtest_main_no_rtti "${cxx_no_rtti}"
|
||||||
src/gtest-all.cc src/gtest_main.cc)
|
src/gtest-all.cc src/gtest_main.cc)
|
||||||
|
|
||||||
|
@ -189,11 +194,15 @@ if (gtest_build_tests)
|
||||||
cxx_executable(gtest_break_on_failure_unittest_ test gtest)
|
cxx_executable(gtest_break_on_failure_unittest_ test gtest)
|
||||||
py_test(gtest_break_on_failure_unittest)
|
py_test(gtest_break_on_failure_unittest)
|
||||||
|
|
||||||
cxx_executable_with_flags(
|
# MSVC 7.1 does not support STL with exceptions disabled.
|
||||||
gtest_catch_exceptions_no_ex_test_
|
if (NOT MSVC OR MSVC_VERSION GREATER 1310)
|
||||||
"${cxx_no_exception}"
|
cxx_executable_with_flags(
|
||||||
gtest_main_no_exception
|
gtest_catch_exceptions_no_ex_test_
|
||||||
test/gtest_catch_exceptions_test_.cc)
|
"${cxx_no_exception}"
|
||||||
|
gtest_main_no_exception
|
||||||
|
test/gtest_catch_exceptions_test_.cc)
|
||||||
|
endif()
|
||||||
|
|
||||||
cxx_executable_with_flags(
|
cxx_executable_with_flags(
|
||||||
gtest_catch_exceptions_ex_test_
|
gtest_catch_exceptions_ex_test_
|
||||||
"${cxx_exception}"
|
"${cxx_exception}"
|
||||||
|
@ -222,11 +231,14 @@ if (gtest_build_tests)
|
||||||
cxx_executable(gtest_shuffle_test_ test gtest)
|
cxx_executable(gtest_shuffle_test_ test gtest)
|
||||||
py_test(gtest_shuffle_test)
|
py_test(gtest_shuffle_test)
|
||||||
|
|
||||||
cxx_executable(gtest_throw_on_failure_test_ test gtest_no_exception)
|
# MSVC 7.1 does not support STL with exceptions disabled.
|
||||||
set_target_properties(gtest_throw_on_failure_test_
|
if (NOT MSVC OR MSVC_VERSION GREATER 1310)
|
||||||
PROPERTIES
|
cxx_executable(gtest_throw_on_failure_test_ test gtest_no_exception)
|
||||||
COMPILE_FLAGS "${cxx_no_exception}")
|
set_target_properties(gtest_throw_on_failure_test_
|
||||||
py_test(gtest_throw_on_failure_test)
|
PROPERTIES
|
||||||
|
COMPILE_FLAGS "${cxx_no_exception}")
|
||||||
|
py_test(gtest_throw_on_failure_test)
|
||||||
|
endif()
|
||||||
|
|
||||||
cxx_executable(gtest_uninitialized_test_ test gtest)
|
cxx_executable(gtest_uninitialized_test_ test gtest)
|
||||||
py_test(gtest_uninitialized_test)
|
py_test(gtest_uninitialized_test)
|
37
external/gtest/CONTRIBUTORS
vendored
Normal file
37
external/gtest/CONTRIBUTORS
vendored
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# This file contains a list of people who've made non-trivial
|
||||||
|
# contribution to the Google C++ Testing Framework project. People
|
||||||
|
# who commit code to the project are encouraged to add their names
|
||||||
|
# here. Please keep the list sorted by first names.
|
||||||
|
|
||||||
|
Ajay Joshi <jaj@google.com>
|
||||||
|
Balázs Dán <balazs.dan@gmail.com>
|
||||||
|
Bharat Mediratta <bharat@menalto.com>
|
||||||
|
Chandler Carruth <chandlerc@google.com>
|
||||||
|
Chris Prince <cprince@google.com>
|
||||||
|
Chris Taylor <taylorc@google.com>
|
||||||
|
Dan Egnor <egnor@google.com>
|
||||||
|
Eric Roman <eroman@chromium.org>
|
||||||
|
Hady Zalek <hady.zalek@gmail.com>
|
||||||
|
Jeffrey Yasskin <jyasskin@google.com>
|
||||||
|
Jói Sigurðsson <joi@google.com>
|
||||||
|
Keir Mierle <mierle@gmail.com>
|
||||||
|
Keith Ray <keith.ray@gmail.com>
|
||||||
|
Kenton Varda <kenton@google.com>
|
||||||
|
Manuel Klimek <klimek@google.com>
|
||||||
|
Markus Heule <markus.heule@gmail.com>
|
||||||
|
Mika Raento <mikie@iki.fi>
|
||||||
|
Miklós Fazekas <mfazekas@szemafor.com>
|
||||||
|
Pasi Valminen <pasi.valminen@gmail.com>
|
||||||
|
Patrick Hanna <phanna@google.com>
|
||||||
|
Patrick Riley <pfr@google.com>
|
||||||
|
Peter Kaminski <piotrk@google.com>
|
||||||
|
Preston Jackson <preston.a.jackson@gmail.com>
|
||||||
|
Rainer Klaffenboeck <rainer.klaffenboeck@dynatrace.com>
|
||||||
|
Russ Cox <rsc@google.com>
|
||||||
|
Russ Rufer <russ@pentad.com>
|
||||||
|
Sean Mcafee <eefacm@gmail.com>
|
||||||
|
Sigurður Ásgeirsson <siggi@google.com>
|
||||||
|
Tracy Bialik <tracy@pentad.com>
|
||||||
|
Vadim Berman <vadimb@google.com>
|
||||||
|
Vlad Losev <vladl@google.com>
|
||||||
|
Zhanyong Wan <wan@google.com>
|
28
external/gtest/LICENSE
vendored
Normal file
28
external/gtest/LICENSE
vendored
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
Copyright 2008, Google Inc.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the following disclaimer
|
||||||
|
in the documentation and/or other materials provided with the
|
||||||
|
distribution.
|
||||||
|
* Neither the name of Google Inc. nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
306
external/gtest/Makefile.am
vendored
Normal file
306
external/gtest/Makefile.am
vendored
Normal file
|
@ -0,0 +1,306 @@
|
||||||
|
# Automake file
|
||||||
|
|
||||||
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
|
|
||||||
|
# Nonstandard package files for distribution
|
||||||
|
EXTRA_DIST = \
|
||||||
|
CHANGES \
|
||||||
|
CONTRIBUTORS \
|
||||||
|
LICENSE \
|
||||||
|
include/gtest/gtest-param-test.h.pump \
|
||||||
|
include/gtest/internal/gtest-param-util-generated.h.pump \
|
||||||
|
include/gtest/internal/gtest-tuple.h.pump \
|
||||||
|
include/gtest/internal/gtest-type-util.h.pump \
|
||||||
|
make/Makefile \
|
||||||
|
scripts/fuse_gtest_files.py \
|
||||||
|
scripts/gen_gtest_pred_impl.py \
|
||||||
|
scripts/pump.py \
|
||||||
|
scripts/test/Makefile
|
||||||
|
|
||||||
|
# gtest source files that we don't compile directly. They are
|
||||||
|
# #included by gtest-all.cc.
|
||||||
|
GTEST_SRC = \
|
||||||
|
src/gtest-death-test.cc \
|
||||||
|
src/gtest-filepath.cc \
|
||||||
|
src/gtest-internal-inl.h \
|
||||||
|
src/gtest-port.cc \
|
||||||
|
src/gtest-printers.cc \
|
||||||
|
src/gtest-test-part.cc \
|
||||||
|
src/gtest-typed-test.cc \
|
||||||
|
src/gtest.cc
|
||||||
|
|
||||||
|
EXTRA_DIST += $(GTEST_SRC)
|
||||||
|
|
||||||
|
# Sample files that we don't compile.
|
||||||
|
EXTRA_DIST += \
|
||||||
|
samples/prime_tables.h \
|
||||||
|
samples/sample2_unittest.cc \
|
||||||
|
samples/sample3_unittest.cc \
|
||||||
|
samples/sample4_unittest.cc \
|
||||||
|
samples/sample5_unittest.cc \
|
||||||
|
samples/sample6_unittest.cc \
|
||||||
|
samples/sample7_unittest.cc \
|
||||||
|
samples/sample8_unittest.cc \
|
||||||
|
samples/sample9_unittest.cc
|
||||||
|
|
||||||
|
# C++ test files that we don't compile directly.
|
||||||
|
EXTRA_DIST += \
|
||||||
|
test/gtest-death-test_ex_test.cc \
|
||||||
|
test/gtest-death-test_test.cc \
|
||||||
|
test/gtest-filepath_test.cc \
|
||||||
|
test/gtest-linked_ptr_test.cc \
|
||||||
|
test/gtest-listener_test.cc \
|
||||||
|
test/gtest-message_test.cc \
|
||||||
|
test/gtest-options_test.cc \
|
||||||
|
test/gtest-param-test2_test.cc \
|
||||||
|
test/gtest-param-test2_test.cc \
|
||||||
|
test/gtest-param-test_test.cc \
|
||||||
|
test/gtest-param-test_test.cc \
|
||||||
|
test/gtest-param-test_test.h \
|
||||||
|
test/gtest-port_test.cc \
|
||||||
|
test/gtest_premature_exit_test.cc \
|
||||||
|
test/gtest-printers_test.cc \
|
||||||
|
test/gtest-test-part_test.cc \
|
||||||
|
test/gtest-tuple_test.cc \
|
||||||
|
test/gtest-typed-test2_test.cc \
|
||||||
|
test/gtest-typed-test_test.cc \
|
||||||
|
test/gtest-typed-test_test.h \
|
||||||
|
test/gtest-unittest-api_test.cc \
|
||||||
|
test/gtest_break_on_failure_unittest_.cc \
|
||||||
|
test/gtest_catch_exceptions_test_.cc \
|
||||||
|
test/gtest_color_test_.cc \
|
||||||
|
test/gtest_env_var_test_.cc \
|
||||||
|
test/gtest_environment_test.cc \
|
||||||
|
test/gtest_filter_unittest_.cc \
|
||||||
|
test/gtest_help_test_.cc \
|
||||||
|
test/gtest_list_tests_unittest_.cc \
|
||||||
|
test/gtest_main_unittest.cc \
|
||||||
|
test/gtest_no_test_unittest.cc \
|
||||||
|
test/gtest_output_test_.cc \
|
||||||
|
test/gtest_pred_impl_unittest.cc \
|
||||||
|
test/gtest_prod_test.cc \
|
||||||
|
test/gtest_repeat_test.cc \
|
||||||
|
test/gtest_shuffle_test_.cc \
|
||||||
|
test/gtest_sole_header_test.cc \
|
||||||
|
test/gtest_stress_test.cc \
|
||||||
|
test/gtest_throw_on_failure_ex_test.cc \
|
||||||
|
test/gtest_throw_on_failure_test_.cc \
|
||||||
|
test/gtest_uninitialized_test_.cc \
|
||||||
|
test/gtest_unittest.cc \
|
||||||
|
test/gtest_unittest.cc \
|
||||||
|
test/gtest_xml_outfile1_test_.cc \
|
||||||
|
test/gtest_xml_outfile2_test_.cc \
|
||||||
|
test/gtest_xml_output_unittest_.cc \
|
||||||
|
test/production.cc \
|
||||||
|
test/production.h
|
||||||
|
|
||||||
|
# Python tests that we don't run.
|
||||||
|
EXTRA_DIST += \
|
||||||
|
test/gtest_break_on_failure_unittest.py \
|
||||||
|
test/gtest_catch_exceptions_test.py \
|
||||||
|
test/gtest_color_test.py \
|
||||||
|
test/gtest_env_var_test.py \
|
||||||
|
test/gtest_filter_unittest.py \
|
||||||
|
test/gtest_help_test.py \
|
||||||
|
test/gtest_list_tests_unittest.py \
|
||||||
|
test/gtest_output_test.py \
|
||||||
|
test/gtest_output_test_golden_lin.txt \
|
||||||
|
test/gtest_shuffle_test.py \
|
||||||
|
test/gtest_test_utils.py \
|
||||||
|
test/gtest_throw_on_failure_test.py \
|
||||||
|
test/gtest_uninitialized_test.py \
|
||||||
|
test/gtest_xml_outfiles_test.py \
|
||||||
|
test/gtest_xml_output_unittest.py \
|
||||||
|
test/gtest_xml_test_utils.py
|
||||||
|
|
||||||
|
# CMake script
|
||||||
|
EXTRA_DIST += \
|
||||||
|
CMakeLists.txt \
|
||||||
|
cmake/internal_utils.cmake
|
||||||
|
|
||||||
|
# MSVC project files
|
||||||
|
EXTRA_DIST += \
|
||||||
|
msvc/gtest-md.sln \
|
||||||
|
msvc/gtest-md.vcproj \
|
||||||
|
msvc/gtest.sln \
|
||||||
|
msvc/gtest.vcproj \
|
||||||
|
msvc/gtest_main-md.vcproj \
|
||||||
|
msvc/gtest_main.vcproj \
|
||||||
|
msvc/gtest_prod_test-md.vcproj \
|
||||||
|
msvc/gtest_prod_test.vcproj \
|
||||||
|
msvc/gtest_unittest-md.vcproj \
|
||||||
|
msvc/gtest_unittest.vcproj
|
||||||
|
|
||||||
|
# xcode project files
|
||||||
|
EXTRA_DIST += \
|
||||||
|
xcode/Config/DebugProject.xcconfig \
|
||||||
|
xcode/Config/FrameworkTarget.xcconfig \
|
||||||
|
xcode/Config/General.xcconfig \
|
||||||
|
xcode/Config/ReleaseProject.xcconfig \
|
||||||
|
xcode/Config/StaticLibraryTarget.xcconfig \
|
||||||
|
xcode/Config/TestTarget.xcconfig \
|
||||||
|
xcode/Resources/Info.plist \
|
||||||
|
xcode/Scripts/runtests.sh \
|
||||||
|
xcode/Scripts/versiongenerate.py \
|
||||||
|
xcode/gtest.xcodeproj/project.pbxproj
|
||||||
|
|
||||||
|
# xcode sample files
|
||||||
|
EXTRA_DIST += \
|
||||||
|
xcode/Samples/FrameworkSample/Info.plist \
|
||||||
|
xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj \
|
||||||
|
xcode/Samples/FrameworkSample/runtests.sh \
|
||||||
|
xcode/Samples/FrameworkSample/widget.cc \
|
||||||
|
xcode/Samples/FrameworkSample/widget.h \
|
||||||
|
xcode/Samples/FrameworkSample/widget_test.cc
|
||||||
|
|
||||||
|
# C++Builder project files
|
||||||
|
EXTRA_DIST += \
|
||||||
|
codegear/gtest.cbproj \
|
||||||
|
codegear/gtest.groupproj \
|
||||||
|
codegear/gtest_all.cc \
|
||||||
|
codegear/gtest_link.cc \
|
||||||
|
codegear/gtest_main.cbproj \
|
||||||
|
codegear/gtest_unittest.cbproj
|
||||||
|
|
||||||
|
# Distribute and install M4 macro
|
||||||
|
m4datadir = $(datadir)/aclocal
|
||||||
|
m4data_DATA = m4/gtest.m4
|
||||||
|
EXTRA_DIST += $(m4data_DATA)
|
||||||
|
|
||||||
|
# We define the global AM_CPPFLAGS as everything we compile includes from these
|
||||||
|
# directories.
|
||||||
|
AM_CPPFLAGS = -I$(srcdir) -I$(srcdir)/include
|
||||||
|
|
||||||
|
# Modifies compiler and linker flags for pthreads compatibility.
|
||||||
|
if HAVE_PTHREADS
|
||||||
|
AM_CXXFLAGS = @PTHREAD_CFLAGS@ -DGTEST_HAS_PTHREAD=1
|
||||||
|
AM_LIBS = @PTHREAD_LIBS@
|
||||||
|
else
|
||||||
|
AM_CXXFLAGS = -DGTEST_HAS_PTHREAD=0
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Build rules for libraries.
|
||||||
|
lib_LTLIBRARIES = lib/libgtest.la lib/libgtest_main.la
|
||||||
|
|
||||||
|
lib_libgtest_la_SOURCES = src/gtest-all.cc
|
||||||
|
|
||||||
|
pkginclude_HEADERS = \
|
||||||
|
include/gtest/gtest-death-test.h \
|
||||||
|
include/gtest/gtest-message.h \
|
||||||
|
include/gtest/gtest-param-test.h \
|
||||||
|
include/gtest/gtest-printers.h \
|
||||||
|
include/gtest/gtest-spi.h \
|
||||||
|
include/gtest/gtest-test-part.h \
|
||||||
|
include/gtest/gtest-typed-test.h \
|
||||||
|
include/gtest/gtest.h \
|
||||||
|
include/gtest/gtest_pred_impl.h \
|
||||||
|
include/gtest/gtest_prod.h
|
||||||
|
|
||||||
|
pkginclude_internaldir = $(pkgincludedir)/internal
|
||||||
|
pkginclude_internal_HEADERS = \
|
||||||
|
include/gtest/internal/gtest-death-test-internal.h \
|
||||||
|
include/gtest/internal/gtest-filepath.h \
|
||||||
|
include/gtest/internal/gtest-internal.h \
|
||||||
|
include/gtest/internal/gtest-linked_ptr.h \
|
||||||
|
include/gtest/internal/gtest-param-util-generated.h \
|
||||||
|
include/gtest/internal/gtest-param-util.h \
|
||||||
|
include/gtest/internal/gtest-port.h \
|
||||||
|
include/gtest/internal/gtest-string.h \
|
||||||
|
include/gtest/internal/gtest-tuple.h \
|
||||||
|
include/gtest/internal/gtest-type-util.h
|
||||||
|
|
||||||
|
lib_libgtest_main_la_SOURCES = src/gtest_main.cc
|
||||||
|
lib_libgtest_main_la_LIBADD = lib/libgtest.la
|
||||||
|
|
||||||
|
# Bulid rules for samples and tests. Automake's naming for some of
|
||||||
|
# these variables isn't terribly obvious, so this is a brief
|
||||||
|
# reference:
|
||||||
|
#
|
||||||
|
# TESTS -- Programs run automatically by "make check"
|
||||||
|
# check_PROGRAMS -- Programs built by "make check" but not necessarily run
|
||||||
|
|
||||||
|
noinst_LTLIBRARIES = samples/libsamples.la
|
||||||
|
|
||||||
|
samples_libsamples_la_SOURCES = \
|
||||||
|
samples/sample1.cc \
|
||||||
|
samples/sample1.h \
|
||||||
|
samples/sample2.cc \
|
||||||
|
samples/sample2.h \
|
||||||
|
samples/sample3-inl.h \
|
||||||
|
samples/sample4.cc \
|
||||||
|
samples/sample4.h
|
||||||
|
|
||||||
|
TESTS=
|
||||||
|
TESTS_ENVIRONMENT = GTEST_SOURCE_DIR="$(srcdir)/test" \
|
||||||
|
GTEST_BUILD_DIR="$(top_builddir)/test"
|
||||||
|
check_PROGRAMS=
|
||||||
|
|
||||||
|
# A simple sample on using gtest.
|
||||||
|
TESTS += samples/sample1_unittest
|
||||||
|
check_PROGRAMS += samples/sample1_unittest
|
||||||
|
samples_sample1_unittest_SOURCES = samples/sample1_unittest.cc
|
||||||
|
samples_sample1_unittest_LDADD = lib/libgtest_main.la \
|
||||||
|
lib/libgtest.la \
|
||||||
|
samples/libsamples.la
|
||||||
|
|
||||||
|
# Another sample. It also verifies that libgtest works.
|
||||||
|
TESTS += samples/sample10_unittest
|
||||||
|
check_PROGRAMS += samples/sample10_unittest
|
||||||
|
samples_sample10_unittest_SOURCES = samples/sample10_unittest.cc
|
||||||
|
samples_sample10_unittest_LDADD = lib/libgtest.la
|
||||||
|
|
||||||
|
# This tests most constructs of gtest and verifies that libgtest_main
|
||||||
|
# and libgtest work.
|
||||||
|
TESTS += test/gtest_all_test
|
||||||
|
check_PROGRAMS += test/gtest_all_test
|
||||||
|
test_gtest_all_test_SOURCES = test/gtest_all_test.cc
|
||||||
|
test_gtest_all_test_LDADD = lib/libgtest_main.la \
|
||||||
|
lib/libgtest.la
|
||||||
|
|
||||||
|
# Tests that fused gtest files compile and work.
|
||||||
|
FUSED_GTEST_SRC = \
|
||||||
|
fused-src/gtest/gtest-all.cc \
|
||||||
|
fused-src/gtest/gtest.h \
|
||||||
|
fused-src/gtest/gtest_main.cc
|
||||||
|
|
||||||
|
if HAVE_PYTHON
|
||||||
|
TESTS += test/fused_gtest_test
|
||||||
|
check_PROGRAMS += test/fused_gtest_test
|
||||||
|
test_fused_gtest_test_SOURCES = $(FUSED_GTEST_SRC) \
|
||||||
|
samples/sample1.cc samples/sample1_unittest.cc
|
||||||
|
test_fused_gtest_test_CPPFLAGS = -I"$(srcdir)/fused-src"
|
||||||
|
|
||||||
|
# Build rules for putting fused Google Test files into the distribution
|
||||||
|
# package. The user can also create those files by manually running
|
||||||
|
# scripts/fuse_gtest_files.py.
|
||||||
|
$(test_fused_gtest_test_SOURCES): fused-gtest
|
||||||
|
|
||||||
|
fused-gtest: $(pkginclude_HEADERS) $(pkginclude_internal_HEADERS) \
|
||||||
|
$(GTEST_SRC) src/gtest-all.cc src/gtest_main.cc \
|
||||||
|
scripts/fuse_gtest_files.py
|
||||||
|
mkdir -p "$(srcdir)/fused-src"
|
||||||
|
chmod -R u+w "$(srcdir)/fused-src"
|
||||||
|
rm -f "$(srcdir)/fused-src/gtest/gtest-all.cc"
|
||||||
|
rm -f "$(srcdir)/fused-src/gtest/gtest.h"
|
||||||
|
"$(srcdir)/scripts/fuse_gtest_files.py" "$(srcdir)/fused-src"
|
||||||
|
cp -f "$(srcdir)/src/gtest_main.cc" "$(srcdir)/fused-src/gtest/"
|
||||||
|
|
||||||
|
maintainer-clean-local:
|
||||||
|
rm -rf "$(srcdir)/fused-src"
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Death tests may produce core dumps in the build directory. In case
|
||||||
|
# this happens, clean them to keep distcleancheck happy.
|
||||||
|
CLEANFILES = core
|
||||||
|
|
||||||
|
# Disables 'make install' as installing a compiled version of Google
|
||||||
|
# Test can lead to undefined behavior due to violation of the
|
||||||
|
# One-Definition Rule.
|
||||||
|
|
||||||
|
install-exec-local:
|
||||||
|
echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system."
|
||||||
|
false
|
||||||
|
|
||||||
|
install-data-local:
|
||||||
|
echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system."
|
||||||
|
false
|
1360
external/gtest/Makefile.in
vendored
Normal file
1360
external/gtest/Makefile.in
vendored
Normal file
File diff suppressed because it is too large
Load diff
435
external/gtest/README
vendored
Normal file
435
external/gtest/README
vendored
Normal file
|
@ -0,0 +1,435 @@
|
||||||
|
Google C++ Testing Framework
|
||||||
|
============================
|
||||||
|
|
||||||
|
http://code.google.com/p/googletest/
|
||||||
|
|
||||||
|
Overview
|
||||||
|
--------
|
||||||
|
|
||||||
|
Google's framework for writing C++ tests on a variety of platforms
|
||||||
|
(Linux, Mac OS X, Windows, Windows CE, Symbian, etc). Based on the
|
||||||
|
xUnit architecture. Supports automatic test discovery, a rich set of
|
||||||
|
assertions, user-defined assertions, death tests, fatal and non-fatal
|
||||||
|
failures, various options for running the tests, and XML test report
|
||||||
|
generation.
|
||||||
|
|
||||||
|
Please see the project page above for more information as well as the
|
||||||
|
mailing list for questions, discussions, and development. There is
|
||||||
|
also an IRC channel on OFTC (irc.oftc.net) #gtest available. Please
|
||||||
|
join us!
|
||||||
|
|
||||||
|
Requirements for End Users
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
Google Test is designed to have fairly minimal requirements to build
|
||||||
|
and use with your projects, but there are some. Currently, we support
|
||||||
|
Linux, Windows, Mac OS X, and Cygwin. We will also make our best
|
||||||
|
effort to support other platforms (e.g. Solaris, AIX, and z/OS).
|
||||||
|
However, since core members of the Google Test project have no access
|
||||||
|
to these platforms, Google Test may have outstanding issues there. If
|
||||||
|
you notice any problems on your platform, please notify
|
||||||
|
googletestframework@googlegroups.com. Patches for fixing them are
|
||||||
|
even more welcome!
|
||||||
|
|
||||||
|
### Linux Requirements ###
|
||||||
|
|
||||||
|
These are the base requirements to build and use Google Test from a source
|
||||||
|
package (as described below):
|
||||||
|
* GNU-compatible Make or gmake
|
||||||
|
* POSIX-standard shell
|
||||||
|
* POSIX(-2) Regular Expressions (regex.h)
|
||||||
|
* A C++98-standard-compliant compiler
|
||||||
|
|
||||||
|
### Windows Requirements ###
|
||||||
|
|
||||||
|
* Microsoft Visual C++ 7.1 or newer
|
||||||
|
|
||||||
|
### Cygwin Requirements ###
|
||||||
|
|
||||||
|
* Cygwin 1.5.25-14 or newer
|
||||||
|
|
||||||
|
### Mac OS X Requirements ###
|
||||||
|
|
||||||
|
* Mac OS X 10.4 Tiger or newer
|
||||||
|
* Developer Tools Installed
|
||||||
|
|
||||||
|
Also, you'll need CMake 2.6.4 or higher if you want to build the
|
||||||
|
samples using the provided CMake script, regardless of the platform.
|
||||||
|
|
||||||
|
Requirements for Contributors
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
We welcome patches. If you plan to contribute a patch, you need to
|
||||||
|
build Google Test and its own tests from an SVN checkout (described
|
||||||
|
below), which has further requirements:
|
||||||
|
|
||||||
|
* Python version 2.3 or newer (for running some of the tests and
|
||||||
|
re-generating certain source files from templates)
|
||||||
|
* CMake 2.6.4 or newer
|
||||||
|
|
||||||
|
Getting the Source
|
||||||
|
------------------
|
||||||
|
|
||||||
|
There are two primary ways of getting Google Test's source code: you
|
||||||
|
can download a stable source release in your preferred archive format,
|
||||||
|
or directly check out the source from our Subversion (SVN) repositary.
|
||||||
|
The SVN checkout requires a few extra steps and some extra software
|
||||||
|
packages on your system, but lets you track the latest development and
|
||||||
|
make patches much more easily, so we highly encourage it.
|
||||||
|
|
||||||
|
### Source Package ###
|
||||||
|
|
||||||
|
Google Test is released in versioned source packages which can be
|
||||||
|
downloaded from the download page [1]. Several different archive
|
||||||
|
formats are provided, but the only difference is the tools used to
|
||||||
|
manipulate them, and the size of the resulting file. Download
|
||||||
|
whichever you are most comfortable with.
|
||||||
|
|
||||||
|
[1] http://code.google.com/p/googletest/downloads/list
|
||||||
|
|
||||||
|
Once the package is downloaded, expand it using whichever tools you
|
||||||
|
prefer for that type. This will result in a new directory with the
|
||||||
|
name "gtest-X.Y.Z" which contains all of the source code. Here are
|
||||||
|
some examples on Linux:
|
||||||
|
|
||||||
|
tar -xvzf gtest-X.Y.Z.tar.gz
|
||||||
|
tar -xvjf gtest-X.Y.Z.tar.bz2
|
||||||
|
unzip gtest-X.Y.Z.zip
|
||||||
|
|
||||||
|
### SVN Checkout ###
|
||||||
|
|
||||||
|
To check out the main branch (also known as the "trunk") of Google
|
||||||
|
Test, run the following Subversion command:
|
||||||
|
|
||||||
|
svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn
|
||||||
|
|
||||||
|
Setting up the Build
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
To build Google Test and your tests that use it, you need to tell your
|
||||||
|
build system where to find its headers and source files. The exact
|
||||||
|
way to do it depends on which build system you use, and is usually
|
||||||
|
straightforward.
|
||||||
|
|
||||||
|
### Generic Build Instructions ###
|
||||||
|
|
||||||
|
Suppose you put Google Test in directory ${GTEST_DIR}. To build it,
|
||||||
|
create a library build target (or a project as called by Visual Studio
|
||||||
|
and Xcode) to compile
|
||||||
|
|
||||||
|
${GTEST_DIR}/src/gtest-all.cc
|
||||||
|
|
||||||
|
with ${GTEST_DIR}/include in the system header search path and ${GTEST_DIR}
|
||||||
|
in the normal header search path. Assuming a Linux-like system and gcc,
|
||||||
|
something like the following will do:
|
||||||
|
|
||||||
|
g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
|
||||||
|
-pthread -c ${GTEST_DIR}/src/gtest-all.cc
|
||||||
|
ar -rv libgtest.a gtest-all.o
|
||||||
|
|
||||||
|
(We need -pthread as Google Test uses threads.)
|
||||||
|
|
||||||
|
Next, you should compile your test source file with
|
||||||
|
${GTEST_DIR}/include in the system header search path, and link it
|
||||||
|
with gtest and any other necessary libraries:
|
||||||
|
|
||||||
|
g++ -isystem ${GTEST_DIR}/include -pthread path/to/your_test.cc libgtest.a \
|
||||||
|
-o your_test
|
||||||
|
|
||||||
|
As an example, the make/ directory contains a Makefile that you can
|
||||||
|
use to build Google Test on systems where GNU make is available
|
||||||
|
(e.g. Linux, Mac OS X, and Cygwin). It doesn't try to build Google
|
||||||
|
Test's own tests. Instead, it just builds the Google Test library and
|
||||||
|
a sample test. You can use it as a starting point for your own build
|
||||||
|
script.
|
||||||
|
|
||||||
|
If the default settings are correct for your environment, the
|
||||||
|
following commands should succeed:
|
||||||
|
|
||||||
|
cd ${GTEST_DIR}/make
|
||||||
|
make
|
||||||
|
./sample1_unittest
|
||||||
|
|
||||||
|
If you see errors, try to tweak the contents of make/Makefile to make
|
||||||
|
them go away. There are instructions in make/Makefile on how to do
|
||||||
|
it.
|
||||||
|
|
||||||
|
### Using CMake ###
|
||||||
|
|
||||||
|
Google Test comes with a CMake build script (CMakeLists.txt) that can
|
||||||
|
be used on a wide range of platforms ("C" stands for cross-platofrm.).
|
||||||
|
If you don't have CMake installed already, you can download it for
|
||||||
|
free from http://www.cmake.org/.
|
||||||
|
|
||||||
|
CMake works by generating native makefiles or build projects that can
|
||||||
|
be used in the compiler environment of your choice. The typical
|
||||||
|
workflow starts with:
|
||||||
|
|
||||||
|
mkdir mybuild # Create a directory to hold the build output.
|
||||||
|
cd mybuild
|
||||||
|
cmake ${GTEST_DIR} # Generate native build scripts.
|
||||||
|
|
||||||
|
If you want to build Google Test's samples, you should replace the
|
||||||
|
last command with
|
||||||
|
|
||||||
|
cmake -Dgtest_build_samples=ON ${GTEST_DIR}
|
||||||
|
|
||||||
|
If you are on a *nix system, you should now see a Makefile in the
|
||||||
|
current directory. Just type 'make' to build gtest.
|
||||||
|
|
||||||
|
If you use Windows and have Vistual Studio installed, a gtest.sln file
|
||||||
|
and several .vcproj files will be created. You can then build them
|
||||||
|
using Visual Studio.
|
||||||
|
|
||||||
|
On Mac OS X with Xcode installed, a .xcodeproj file will be generated.
|
||||||
|
|
||||||
|
### Legacy Build Scripts ###
|
||||||
|
|
||||||
|
Before settling on CMake, we have been providing hand-maintained build
|
||||||
|
projects/scripts for Visual Studio, Xcode, and Autotools. While we
|
||||||
|
continue to provide them for convenience, they are not actively
|
||||||
|
maintained any more. We highly recommend that you follow the
|
||||||
|
instructions in the previous two sections to integrate Google Test
|
||||||
|
with your existing build system.
|
||||||
|
|
||||||
|
If you still need to use the legacy build scripts, here's how:
|
||||||
|
|
||||||
|
The msvc\ folder contains two solutions with Visual C++ projects.
|
||||||
|
Open the gtest.sln or gtest-md.sln file using Visual Studio, and you
|
||||||
|
are ready to build Google Test the same way you build any Visual
|
||||||
|
Studio project. Files that have names ending with -md use DLL
|
||||||
|
versions of Microsoft runtime libraries (the /MD or the /MDd compiler
|
||||||
|
option). Files without that suffix use static versions of the runtime
|
||||||
|
libraries (the /MT or the /MTd option). Please note that one must use
|
||||||
|
the same option to compile both gtest and the test code. If you use
|
||||||
|
Visual Studio 2005 or above, we recommend the -md version as /MD is
|
||||||
|
the default for new projects in these versions of Visual Studio.
|
||||||
|
|
||||||
|
On Mac OS X, open the gtest.xcodeproj in the xcode/ folder using
|
||||||
|
Xcode. Build the "gtest" target. The universal binary framework will
|
||||||
|
end up in your selected build directory (selected in the Xcode
|
||||||
|
"Preferences..." -> "Building" pane and defaults to xcode/build).
|
||||||
|
Alternatively, at the command line, enter:
|
||||||
|
|
||||||
|
xcodebuild
|
||||||
|
|
||||||
|
This will build the "Release" configuration of gtest.framework in your
|
||||||
|
default build location. See the "xcodebuild" man page for more
|
||||||
|
information about building different configurations and building in
|
||||||
|
different locations.
|
||||||
|
|
||||||
|
If you wish to use the Google Test Xcode project with Xcode 4.x and
|
||||||
|
above, you need to either:
|
||||||
|
* update the SDK configuration options in xcode/Config/General.xconfig.
|
||||||
|
Comment options SDKROOT, MACOS_DEPLOYMENT_TARGET, and GCC_VERSION. If
|
||||||
|
you choose this route you lose the ability to target earlier versions
|
||||||
|
of MacOS X.
|
||||||
|
* Install an SDK for an earlier version. This doesn't appear to be
|
||||||
|
supported by Apple, but has been reported to work
|
||||||
|
(http://stackoverflow.com/questions/5378518).
|
||||||
|
|
||||||
|
Tweaking Google Test
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Google Test can be used in diverse environments. The default
|
||||||
|
configuration may not work (or may not work well) out of the box in
|
||||||
|
some environments. However, you can easily tweak Google Test by
|
||||||
|
defining control macros on the compiler command line. Generally,
|
||||||
|
these macros are named like GTEST_XYZ and you define them to either 1
|
||||||
|
or 0 to enable or disable a certain feature.
|
||||||
|
|
||||||
|
We list the most frequently used macros below. For a complete list,
|
||||||
|
see file include/gtest/internal/gtest-port.h.
|
||||||
|
|
||||||
|
### Choosing a TR1 Tuple Library ###
|
||||||
|
|
||||||
|
Some Google Test features require the C++ Technical Report 1 (TR1)
|
||||||
|
tuple library, which is not yet available with all compilers. The
|
||||||
|
good news is that Google Test implements a subset of TR1 tuple that's
|
||||||
|
enough for its own need, and will automatically use this when the
|
||||||
|
compiler doesn't provide TR1 tuple.
|
||||||
|
|
||||||
|
Usually you don't need to care about which tuple library Google Test
|
||||||
|
uses. However, if your project already uses TR1 tuple, you need to
|
||||||
|
tell Google Test to use the same TR1 tuple library the rest of your
|
||||||
|
project uses, or the two tuple implementations will clash. To do
|
||||||
|
that, add
|
||||||
|
|
||||||
|
-DGTEST_USE_OWN_TR1_TUPLE=0
|
||||||
|
|
||||||
|
to the compiler flags while compiling Google Test and your tests. If
|
||||||
|
you want to force Google Test to use its own tuple library, just add
|
||||||
|
|
||||||
|
-DGTEST_USE_OWN_TR1_TUPLE=1
|
||||||
|
|
||||||
|
to the compiler flags instead.
|
||||||
|
|
||||||
|
If you don't want Google Test to use tuple at all, add
|
||||||
|
|
||||||
|
-DGTEST_HAS_TR1_TUPLE=0
|
||||||
|
|
||||||
|
and all features using tuple will be disabled.
|
||||||
|
|
||||||
|
### Multi-threaded Tests ###
|
||||||
|
|
||||||
|
Google Test is thread-safe where the pthread library is available.
|
||||||
|
After #include "gtest/gtest.h", you can check the GTEST_IS_THREADSAFE
|
||||||
|
macro to see whether this is the case (yes if the macro is #defined to
|
||||||
|
1, no if it's undefined.).
|
||||||
|
|
||||||
|
If Google Test doesn't correctly detect whether pthread is available
|
||||||
|
in your environment, you can force it with
|
||||||
|
|
||||||
|
-DGTEST_HAS_PTHREAD=1
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
-DGTEST_HAS_PTHREAD=0
|
||||||
|
|
||||||
|
When Google Test uses pthread, you may need to add flags to your
|
||||||
|
compiler and/or linker to select the pthread library, or you'll get
|
||||||
|
link errors. If you use the CMake script or the deprecated Autotools
|
||||||
|
script, this is taken care of for you. If you use your own build
|
||||||
|
script, you'll need to read your compiler and linker's manual to
|
||||||
|
figure out what flags to add.
|
||||||
|
|
||||||
|
### As a Shared Library (DLL) ###
|
||||||
|
|
||||||
|
Google Test is compact, so most users can build and link it as a
|
||||||
|
static library for the simplicity. You can choose to use Google Test
|
||||||
|
as a shared library (known as a DLL on Windows) if you prefer.
|
||||||
|
|
||||||
|
To compile *gtest* as a shared library, add
|
||||||
|
|
||||||
|
-DGTEST_CREATE_SHARED_LIBRARY=1
|
||||||
|
|
||||||
|
to the compiler flags. You'll also need to tell the linker to produce
|
||||||
|
a shared library instead - consult your linker's manual for how to do
|
||||||
|
it.
|
||||||
|
|
||||||
|
To compile your *tests* that use the gtest shared library, add
|
||||||
|
|
||||||
|
-DGTEST_LINKED_AS_SHARED_LIBRARY=1
|
||||||
|
|
||||||
|
to the compiler flags.
|
||||||
|
|
||||||
|
Note: while the above steps aren't technically necessary today when
|
||||||
|
using some compilers (e.g. GCC), they may become necessary in the
|
||||||
|
future, if we decide to improve the speed of loading the library (see
|
||||||
|
http://gcc.gnu.org/wiki/Visibility for details). Therefore you are
|
||||||
|
recommended to always add the above flags when using Google Test as a
|
||||||
|
shared library. Otherwise a future release of Google Test may break
|
||||||
|
your build script.
|
||||||
|
|
||||||
|
### Avoiding Macro Name Clashes ###
|
||||||
|
|
||||||
|
In C++, macros don't obey namespaces. Therefore two libraries that
|
||||||
|
both define a macro of the same name will clash if you #include both
|
||||||
|
definitions. In case a Google Test macro clashes with another
|
||||||
|
library, you can force Google Test to rename its macro to avoid the
|
||||||
|
conflict.
|
||||||
|
|
||||||
|
Specifically, if both Google Test and some other code define macro
|
||||||
|
FOO, you can add
|
||||||
|
|
||||||
|
-DGTEST_DONT_DEFINE_FOO=1
|
||||||
|
|
||||||
|
to the compiler flags to tell Google Test to change the macro's name
|
||||||
|
from FOO to GTEST_FOO. Currently FOO can be FAIL, SUCCEED, or TEST.
|
||||||
|
For example, with -DGTEST_DONT_DEFINE_TEST=1, you'll need to write
|
||||||
|
|
||||||
|
GTEST_TEST(SomeTest, DoesThis) { ... }
|
||||||
|
|
||||||
|
instead of
|
||||||
|
|
||||||
|
TEST(SomeTest, DoesThis) { ... }
|
||||||
|
|
||||||
|
in order to define a test.
|
||||||
|
|
||||||
|
Upgrating from an Earlier Version
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
We strive to keep Google Test releases backward compatible.
|
||||||
|
Sometimes, though, we have to make some breaking changes for the
|
||||||
|
users' long-term benefits. This section describes what you'll need to
|
||||||
|
do if you are upgrading from an earlier version of Google Test.
|
||||||
|
|
||||||
|
### Upgrading from 1.3.0 or Earlier ###
|
||||||
|
|
||||||
|
You may need to explicitly enable or disable Google Test's own TR1
|
||||||
|
tuple library. See the instructions in section "Choosing a TR1 Tuple
|
||||||
|
Library".
|
||||||
|
|
||||||
|
### Upgrading from 1.4.0 or Earlier ###
|
||||||
|
|
||||||
|
The Autotools build script (configure + make) is no longer officially
|
||||||
|
supportted. You are encouraged to migrate to your own build system or
|
||||||
|
use CMake. If you still need to use Autotools, you can find
|
||||||
|
instructions in the README file from Google Test 1.4.0.
|
||||||
|
|
||||||
|
On platforms where the pthread library is available, Google Test uses
|
||||||
|
it in order to be thread-safe. See the "Multi-threaded Tests" section
|
||||||
|
for what this means to your build script.
|
||||||
|
|
||||||
|
If you use Microsoft Visual C++ 7.1 with exceptions disabled, Google
|
||||||
|
Test will no longer compile. This should affect very few people, as a
|
||||||
|
large portion of STL (including <string>) doesn't compile in this mode
|
||||||
|
anyway. We decided to stop supporting it in order to greatly simplify
|
||||||
|
Google Test's implementation.
|
||||||
|
|
||||||
|
Developing Google Test
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
This section discusses how to make your own changes to Google Test.
|
||||||
|
|
||||||
|
### Testing Google Test Itself ###
|
||||||
|
|
||||||
|
To make sure your changes work as intended and don't break existing
|
||||||
|
functionality, you'll want to compile and run Google Test's own tests.
|
||||||
|
For that you can use CMake:
|
||||||
|
|
||||||
|
mkdir mybuild
|
||||||
|
cd mybuild
|
||||||
|
cmake -Dgtest_build_tests=ON ${GTEST_DIR}
|
||||||
|
|
||||||
|
Make sure you have Python installed, as some of Google Test's tests
|
||||||
|
are written in Python. If the cmake command complains about not being
|
||||||
|
able to find Python ("Could NOT find PythonInterp (missing:
|
||||||
|
PYTHON_EXECUTABLE)"), try telling it explicitly where your Python
|
||||||
|
executable can be found:
|
||||||
|
|
||||||
|
cmake -DPYTHON_EXECUTABLE=path/to/python -Dgtest_build_tests=ON ${GTEST_DIR}
|
||||||
|
|
||||||
|
Next, you can build Google Test and all of its own tests. On *nix,
|
||||||
|
this is usually done by 'make'. To run the tests, do
|
||||||
|
|
||||||
|
make test
|
||||||
|
|
||||||
|
All tests should pass.
|
||||||
|
|
||||||
|
### Regenerating Source Files ###
|
||||||
|
|
||||||
|
Some of Google Test's source files are generated from templates (not
|
||||||
|
in the C++ sense) using a script. A template file is named FOO.pump,
|
||||||
|
where FOO is the name of the file it will generate. For example, the
|
||||||
|
file include/gtest/internal/gtest-type-util.h.pump is used to generate
|
||||||
|
gtest-type-util.h in the same directory.
|
||||||
|
|
||||||
|
Normally you don't need to worry about regenerating the source files,
|
||||||
|
unless you need to modify them. In that case, you should modify the
|
||||||
|
corresponding .pump files instead and run the pump.py Python script to
|
||||||
|
regenerate them. You can find pump.py in the scripts/ directory.
|
||||||
|
Read the Pump manual [2] for how to use it.
|
||||||
|
|
||||||
|
[2] http://code.google.com/p/googletest/wiki/PumpManual
|
||||||
|
|
||||||
|
### Contributing a Patch ###
|
||||||
|
|
||||||
|
We welcome patches. Please read the Google Test developer's guide [3]
|
||||||
|
for how you can contribute. In particular, make sure you have signed
|
||||||
|
the Contributor License Agreement, or we won't be able to accept the
|
||||||
|
patch.
|
||||||
|
|
||||||
|
[3] http://code.google.com/p/googletest/wiki/GoogleTestDevGuide
|
||||||
|
|
||||||
|
Happy testing!
|
1198
external/gtest/aclocal.m4
vendored
Normal file
1198
external/gtest/aclocal.m4
vendored
Normal file
File diff suppressed because it is too large
Load diff
1530
external/gtest/build-aux/config.guess
vendored
Normal file
1530
external/gtest/build-aux/config.guess
vendored
Normal file
File diff suppressed because it is too large
Load diff
69
external/gtest/build-aux/config.h.in
vendored
Normal file
69
external/gtest/build-aux/config.h.in
vendored
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
/* build-aux/config.h.in. Generated from configure.ac by autoheader. */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||||
|
#undef HAVE_DLFCN_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
|
#undef HAVE_INTTYPES_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
|
#undef HAVE_MEMORY_H
|
||||||
|
|
||||||
|
/* Define if you have POSIX threads libraries and header files. */
|
||||||
|
#undef HAVE_PTHREAD
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
|
#undef HAVE_STDINT_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
|
#undef HAVE_STDLIB_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <strings.h> header file. */
|
||||||
|
#undef HAVE_STRINGS_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <string.h> header file. */
|
||||||
|
#undef HAVE_STRING_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
|
#undef HAVE_SYS_STAT_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
#undef HAVE_SYS_TYPES_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
|
#undef HAVE_UNISTD_H
|
||||||
|
|
||||||
|
/* Define to the sub-directory in which libtool stores uninstalled libraries.
|
||||||
|
*/
|
||||||
|
#undef LT_OBJDIR
|
||||||
|
|
||||||
|
/* Name of package */
|
||||||
|
#undef PACKAGE
|
||||||
|
|
||||||
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
|
#undef PACKAGE_BUGREPORT
|
||||||
|
|
||||||
|
/* Define to the full name of this package. */
|
||||||
|
#undef PACKAGE_NAME
|
||||||
|
|
||||||
|
/* Define to the full name and version of this package. */
|
||||||
|
#undef PACKAGE_STRING
|
||||||
|
|
||||||
|
/* Define to the one symbol short name of this package. */
|
||||||
|
#undef PACKAGE_TARNAME
|
||||||
|
|
||||||
|
/* Define to the home page for this package. */
|
||||||
|
#undef PACKAGE_URL
|
||||||
|
|
||||||
|
/* Define to the version of this package. */
|
||||||
|
#undef PACKAGE_VERSION
|
||||||
|
|
||||||
|
/* Define to necessary symbol if this constant uses a non-standard name on
|
||||||
|
your system. */
|
||||||
|
#undef PTHREAD_CREATE_JOINABLE
|
||||||
|
|
||||||
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
|
#undef STDC_HEADERS
|
||||||
|
|
||||||
|
/* Version number of package */
|
||||||
|
#undef VERSION
|
1773
external/gtest/build-aux/config.sub
vendored
Normal file
1773
external/gtest/build-aux/config.sub
vendored
Normal file
File diff suppressed because it is too large
Load diff
688
external/gtest/build-aux/depcomp
vendored
Normal file
688
external/gtest/build-aux/depcomp
vendored
Normal file
|
@ -0,0 +1,688 @@
|
||||||
|
#! /bin/sh
|
||||||
|
# depcomp - compile a program generating dependencies as side-effects
|
||||||
|
|
||||||
|
scriptversion=2011-12-04.11; # UTC
|
||||||
|
|
||||||
|
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
|
||||||
|
# 2011 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# As a special exception to the GNU General Public License, if you
|
||||||
|
# distribute this file as part of a program that contains a
|
||||||
|
# configuration script generated by Autoconf, you may include it under
|
||||||
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
|
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
'')
|
||||||
|
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||||
|
exit 1;
|
||||||
|
;;
|
||||||
|
-h | --h*)
|
||||||
|
cat <<\EOF
|
||||||
|
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
||||||
|
|
||||||
|
Run PROGRAMS ARGS to compile a file, generating dependencies
|
||||||
|
as side-effects.
|
||||||
|
|
||||||
|
Environment variables:
|
||||||
|
depmode Dependency tracking mode.
|
||||||
|
source Source file read by `PROGRAMS ARGS'.
|
||||||
|
object Object file output by `PROGRAMS ARGS'.
|
||||||
|
DEPDIR directory where to store dependencies.
|
||||||
|
depfile Dependency file to output.
|
||||||
|
tmpdepfile Temporary file to use when outputting dependencies.
|
||||||
|
libtool Whether libtool is used (yes/no).
|
||||||
|
|
||||||
|
Report bugs to <bug-automake@gnu.org>.
|
||||||
|
EOF
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
-v | --v*)
|
||||||
|
echo "depcomp $scriptversion"
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||||
|
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
||||||
|
depfile=${depfile-`echo "$object" |
|
||||||
|
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
||||||
|
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||||
|
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
|
||||||
|
# Some modes work just like other modes, but use different flags. We
|
||||||
|
# parameterize here, but still list the modes in the big case below,
|
||||||
|
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
||||||
|
# here, because this file can only contain one case statement.
|
||||||
|
if test "$depmode" = hp; then
|
||||||
|
# HP compiler uses -M and no extra arg.
|
||||||
|
gccflag=-M
|
||||||
|
depmode=gcc
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$depmode" = dashXmstdout; then
|
||||||
|
# This is just like dashmstdout with a different argument.
|
||||||
|
dashmflag=-xM
|
||||||
|
depmode=dashmstdout
|
||||||
|
fi
|
||||||
|
|
||||||
|
cygpath_u="cygpath -u -f -"
|
||||||
|
if test "$depmode" = msvcmsys; then
|
||||||
|
# This is just like msvisualcpp but w/o cygpath translation.
|
||||||
|
# Just convert the backslash-escaped backslashes to single forward
|
||||||
|
# slashes to satisfy depend.m4
|
||||||
|
cygpath_u='sed s,\\\\,/,g'
|
||||||
|
depmode=msvisualcpp
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$depmode" = msvc7msys; then
|
||||||
|
# This is just like msvc7 but w/o cygpath translation.
|
||||||
|
# Just convert the backslash-escaped backslashes to single forward
|
||||||
|
# slashes to satisfy depend.m4
|
||||||
|
cygpath_u='sed s,\\\\,/,g'
|
||||||
|
depmode=msvc7
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$depmode" in
|
||||||
|
gcc3)
|
||||||
|
## gcc 3 implements dependency tracking that does exactly what
|
||||||
|
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
||||||
|
## it if -MD -MP comes after the -MF stuff. Hmm.
|
||||||
|
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
|
||||||
|
## the command line argument order; so add the flags where they
|
||||||
|
## appear in depend2.am. Note that the slowdown incurred here
|
||||||
|
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
case $arg in
|
||||||
|
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
|
||||||
|
*) set fnord "$@" "$arg" ;;
|
||||||
|
esac
|
||||||
|
shift # fnord
|
||||||
|
shift # $arg
|
||||||
|
done
|
||||||
|
"$@"
|
||||||
|
stat=$?
|
||||||
|
if test $stat -eq 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
mv "$tmpdepfile" "$depfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
gcc)
|
||||||
|
## There are various ways to get dependency output from gcc. Here's
|
||||||
|
## why we pick this rather obscure method:
|
||||||
|
## - Don't want to use -MD because we'd like the dependencies to end
|
||||||
|
## up in a subdir. Having to rename by hand is ugly.
|
||||||
|
## (We might end up doing this anyway to support other compilers.)
|
||||||
|
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
||||||
|
## -MM, not -M (despite what the docs say).
|
||||||
|
## - Using -M directly means running the compiler twice (even worse
|
||||||
|
## than renaming).
|
||||||
|
if test -z "$gccflag"; then
|
||||||
|
gccflag=-MD,
|
||||||
|
fi
|
||||||
|
"$@" -Wp,"$gccflag$tmpdepfile"
|
||||||
|
stat=$?
|
||||||
|
if test $stat -eq 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
rm -f "$depfile"
|
||||||
|
echo "$object : \\" > "$depfile"
|
||||||
|
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
|
||||||
|
## The second -e expression handles DOS-style file names with drive letters.
|
||||||
|
sed -e 's/^[^:]*: / /' \
|
||||||
|
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||||
|
## This next piece of magic avoids the `deleted header file' problem.
|
||||||
|
## The problem is that when a header file which appears in a .P file
|
||||||
|
## is deleted, the dependency causes make to die (because there is
|
||||||
|
## typically no way to rebuild the header). We avoid this by adding
|
||||||
|
## dummy dependencies for each header file. Too bad gcc doesn't do
|
||||||
|
## this for us directly.
|
||||||
|
tr ' ' '
|
||||||
|
' < "$tmpdepfile" |
|
||||||
|
## Some versions of gcc put a space before the `:'. On the theory
|
||||||
|
## that the space means something, we add a space to the output as
|
||||||
|
## well. hp depmode also adds that space, but also prefixes the VPATH
|
||||||
|
## to the object. Take care to not repeat it in the output.
|
||||||
|
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||||
|
## correctly. Breaking it into two sed invocations is a workaround.
|
||||||
|
sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
|
||||||
|
| sed -e 's/$/ :/' >> "$depfile"
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
hp)
|
||||||
|
# This case exists only to let depend.m4 do its work. It works by
|
||||||
|
# looking at the text of this script. This case will never be run,
|
||||||
|
# since it is checked for above.
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
sgi)
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
"$@" "-Wp,-MDupdate,$tmpdepfile"
|
||||||
|
else
|
||||||
|
"$@" -MDupdate "$tmpdepfile"
|
||||||
|
fi
|
||||||
|
stat=$?
|
||||||
|
if test $stat -eq 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
rm -f "$depfile"
|
||||||
|
|
||||||
|
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
||||||
|
echo "$object : \\" > "$depfile"
|
||||||
|
|
||||||
|
# Clip off the initial element (the dependent). Don't try to be
|
||||||
|
# clever and replace this with sed code, as IRIX sed won't handle
|
||||||
|
# lines with more than a fixed number of characters (4096 in
|
||||||
|
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
||||||
|
# the IRIX cc adds comments like `#:fec' to the end of the
|
||||||
|
# dependency line.
|
||||||
|
tr ' ' '
|
||||||
|
' < "$tmpdepfile" \
|
||||||
|
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
|
||||||
|
tr '
|
||||||
|
' ' ' >> "$depfile"
|
||||||
|
echo >> "$depfile"
|
||||||
|
|
||||||
|
# The second pass generates a dummy entry for each header file.
|
||||||
|
tr ' ' '
|
||||||
|
' < "$tmpdepfile" \
|
||||||
|
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
||||||
|
>> "$depfile"
|
||||||
|
else
|
||||||
|
# The sourcefile does not contain any dependencies, so just
|
||||||
|
# store a dummy comment line, to avoid errors with the Makefile
|
||||||
|
# "include basename.Plo" scheme.
|
||||||
|
echo "#dummy" > "$depfile"
|
||||||
|
fi
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
aix)
|
||||||
|
# The C for AIX Compiler uses -M and outputs the dependencies
|
||||||
|
# in a .u file. In older versions, this file always lives in the
|
||||||
|
# current directory. Also, the AIX compiler puts `$object:' at the
|
||||||
|
# start of each line; $object doesn't have directory information.
|
||||||
|
# Version 6 uses the directory in both cases.
|
||||||
|
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||||
|
test "x$dir" = "x$object" && dir=
|
||||||
|
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
tmpdepfile1=$dir$base.u
|
||||||
|
tmpdepfile2=$base.u
|
||||||
|
tmpdepfile3=$dir.libs/$base.u
|
||||||
|
"$@" -Wc,-M
|
||||||
|
else
|
||||||
|
tmpdepfile1=$dir$base.u
|
||||||
|
tmpdepfile2=$dir$base.u
|
||||||
|
tmpdepfile3=$dir$base.u
|
||||||
|
"$@" -M
|
||||||
|
fi
|
||||||
|
stat=$?
|
||||||
|
|
||||||
|
if test $stat -eq 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
|
||||||
|
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||||
|
do
|
||||||
|
test -f "$tmpdepfile" && break
|
||||||
|
done
|
||||||
|
if test -f "$tmpdepfile"; then
|
||||||
|
# Each line is of the form `foo.o: dependent.h'.
|
||||||
|
# Do two passes, one to just change these to
|
||||||
|
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||||
|
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||||
|
# That's a tab and a space in the [].
|
||||||
|
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||||
|
else
|
||||||
|
# The sourcefile does not contain any dependencies, so just
|
||||||
|
# store a dummy comment line, to avoid errors with the Makefile
|
||||||
|
# "include basename.Plo" scheme.
|
||||||
|
echo "#dummy" > "$depfile"
|
||||||
|
fi
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
icc)
|
||||||
|
# Intel's C compiler understands `-MD -MF file'. However on
|
||||||
|
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
|
||||||
|
# ICC 7.0 will fill foo.d with something like
|
||||||
|
# foo.o: sub/foo.c
|
||||||
|
# foo.o: sub/foo.h
|
||||||
|
# which is wrong. We want:
|
||||||
|
# sub/foo.o: sub/foo.c
|
||||||
|
# sub/foo.o: sub/foo.h
|
||||||
|
# sub/foo.c:
|
||||||
|
# sub/foo.h:
|
||||||
|
# ICC 7.1 will output
|
||||||
|
# foo.o: sub/foo.c sub/foo.h
|
||||||
|
# and will wrap long lines using \ :
|
||||||
|
# foo.o: sub/foo.c ... \
|
||||||
|
# sub/foo.h ... \
|
||||||
|
# ...
|
||||||
|
|
||||||
|
"$@" -MD -MF "$tmpdepfile"
|
||||||
|
stat=$?
|
||||||
|
if test $stat -eq 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
rm -f "$depfile"
|
||||||
|
# Each line is of the form `foo.o: dependent.h',
|
||||||
|
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
||||||
|
# Do two passes, one to just change these to
|
||||||
|
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||||
|
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
||||||
|
# Some versions of the HPUX 10.20 sed can't process this invocation
|
||||||
|
# correctly. Breaking it into two sed invocations is a workaround.
|
||||||
|
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
|
||||||
|
sed -e 's/$/ :/' >> "$depfile"
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
hp2)
|
||||||
|
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
|
||||||
|
# compilers, which have integrated preprocessors. The correct option
|
||||||
|
# to use with these is +Maked; it writes dependencies to a file named
|
||||||
|
# 'foo.d', which lands next to the object file, wherever that
|
||||||
|
# happens to be.
|
||||||
|
# Much of this is similar to the tru64 case; see comments there.
|
||||||
|
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||||
|
test "x$dir" = "x$object" && dir=
|
||||||
|
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
tmpdepfile1=$dir$base.d
|
||||||
|
tmpdepfile2=$dir.libs/$base.d
|
||||||
|
"$@" -Wc,+Maked
|
||||||
|
else
|
||||||
|
tmpdepfile1=$dir$base.d
|
||||||
|
tmpdepfile2=$dir$base.d
|
||||||
|
"$@" +Maked
|
||||||
|
fi
|
||||||
|
stat=$?
|
||||||
|
if test $stat -eq 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile1" "$tmpdepfile2"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
|
||||||
|
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
|
||||||
|
do
|
||||||
|
test -f "$tmpdepfile" && break
|
||||||
|
done
|
||||||
|
if test -f "$tmpdepfile"; then
|
||||||
|
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
|
||||||
|
# Add `dependent.h:' lines.
|
||||||
|
sed -ne '2,${
|
||||||
|
s/^ *//
|
||||||
|
s/ \\*$//
|
||||||
|
s/$/:/
|
||||||
|
p
|
||||||
|
}' "$tmpdepfile" >> "$depfile"
|
||||||
|
else
|
||||||
|
echo "#dummy" > "$depfile"
|
||||||
|
fi
|
||||||
|
rm -f "$tmpdepfile" "$tmpdepfile2"
|
||||||
|
;;
|
||||||
|
|
||||||
|
tru64)
|
||||||
|
# The Tru64 compiler uses -MD to generate dependencies as a side
|
||||||
|
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
|
||||||
|
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
||||||
|
# dependencies in `foo.d' instead, so we check for that too.
|
||||||
|
# Subdirectories are respected.
|
||||||
|
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||||
|
test "x$dir" = "x$object" && dir=
|
||||||
|
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||||
|
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
# With Tru64 cc, shared objects can also be used to make a
|
||||||
|
# static library. This mechanism is used in libtool 1.4 series to
|
||||||
|
# handle both shared and static libraries in a single compilation.
|
||||||
|
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
|
||||||
|
#
|
||||||
|
# With libtool 1.5 this exception was removed, and libtool now
|
||||||
|
# generates 2 separate objects for the 2 libraries. These two
|
||||||
|
# compilations output dependencies in $dir.libs/$base.o.d and
|
||||||
|
# in $dir$base.o.d. We have to check for both files, because
|
||||||
|
# one of the two compilations can be disabled. We should prefer
|
||||||
|
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
|
||||||
|
# automatically cleaned when .libs/ is deleted, while ignoring
|
||||||
|
# the former would cause a distcleancheck panic.
|
||||||
|
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
|
||||||
|
tmpdepfile2=$dir$base.o.d # libtool 1.5
|
||||||
|
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
|
||||||
|
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
|
||||||
|
"$@" -Wc,-MD
|
||||||
|
else
|
||||||
|
tmpdepfile1=$dir$base.o.d
|
||||||
|
tmpdepfile2=$dir$base.d
|
||||||
|
tmpdepfile3=$dir$base.d
|
||||||
|
tmpdepfile4=$dir$base.d
|
||||||
|
"$@" -MD
|
||||||
|
fi
|
||||||
|
|
||||||
|
stat=$?
|
||||||
|
if test $stat -eq 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
|
||||||
|
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||||
|
do
|
||||||
|
test -f "$tmpdepfile" && break
|
||||||
|
done
|
||||||
|
if test -f "$tmpdepfile"; then
|
||||||
|
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||||
|
# That's a tab and a space in the [].
|
||||||
|
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||||
|
else
|
||||||
|
echo "#dummy" > "$depfile"
|
||||||
|
fi
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
msvc7)
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
showIncludes=-Wc,-showIncludes
|
||||||
|
else
|
||||||
|
showIncludes=-showIncludes
|
||||||
|
fi
|
||||||
|
"$@" $showIncludes > "$tmpdepfile"
|
||||||
|
stat=$?
|
||||||
|
grep -v '^Note: including file: ' "$tmpdepfile"
|
||||||
|
if test "$stat" = 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
rm -f "$depfile"
|
||||||
|
echo "$object : \\" > "$depfile"
|
||||||
|
# The first sed program below extracts the file names and escapes
|
||||||
|
# backslashes for cygpath. The second sed program outputs the file
|
||||||
|
# name when reading, but also accumulates all include files in the
|
||||||
|
# hold buffer in order to output them again at the end. This only
|
||||||
|
# works with sed implementations that can handle large buffers.
|
||||||
|
sed < "$tmpdepfile" -n '
|
||||||
|
/^Note: including file: *\(.*\)/ {
|
||||||
|
s//\1/
|
||||||
|
s/\\/\\\\/g
|
||||||
|
p
|
||||||
|
}' | $cygpath_u | sort -u | sed -n '
|
||||||
|
s/ /\\ /g
|
||||||
|
s/\(.*\)/ \1 \\/p
|
||||||
|
s/.\(.*\) \\/\1:/
|
||||||
|
H
|
||||||
|
$ {
|
||||||
|
s/.*/ /
|
||||||
|
G
|
||||||
|
p
|
||||||
|
}' >> "$depfile"
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
msvc7msys)
|
||||||
|
# This case exists only to let depend.m4 do its work. It works by
|
||||||
|
# looking at the text of this script. This case will never be run,
|
||||||
|
# since it is checked for above.
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
#nosideeffect)
|
||||||
|
# This comment above is used by automake to tell side-effect
|
||||||
|
# dependency tracking mechanisms from slower ones.
|
||||||
|
|
||||||
|
dashmstdout)
|
||||||
|
# Important note: in order to support this mode, a compiler *must*
|
||||||
|
# always write the preprocessed file to stdout, regardless of -o.
|
||||||
|
"$@" || exit $?
|
||||||
|
|
||||||
|
# Remove the call to Libtool.
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
while test "X$1" != 'X--mode=compile'; do
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remove `-o $object'.
|
||||||
|
IFS=" "
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
case $arg in
|
||||||
|
-o)
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
$object)
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set fnord "$@" "$arg"
|
||||||
|
shift # fnord
|
||||||
|
shift # $arg
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
test -z "$dashmflag" && dashmflag=-M
|
||||||
|
# Require at least two characters before searching for `:'
|
||||||
|
# in the target name. This is to cope with DOS-style filenames:
|
||||||
|
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
|
||||||
|
"$@" $dashmflag |
|
||||||
|
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
|
||||||
|
rm -f "$depfile"
|
||||||
|
cat < "$tmpdepfile" > "$depfile"
|
||||||
|
tr ' ' '
|
||||||
|
' < "$tmpdepfile" | \
|
||||||
|
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||||
|
## correctly. Breaking it into two sed invocations is a workaround.
|
||||||
|
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
dashXmstdout)
|
||||||
|
# This case only exists to satisfy depend.m4. It is never actually
|
||||||
|
# run, as this mode is specially recognized in the preamble.
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
makedepend)
|
||||||
|
"$@" || exit $?
|
||||||
|
# Remove any Libtool call
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
while test "X$1" != 'X--mode=compile'; do
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
# X makedepend
|
||||||
|
shift
|
||||||
|
cleared=no eat=no
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
case $cleared in
|
||||||
|
no)
|
||||||
|
set ""; shift
|
||||||
|
cleared=yes ;;
|
||||||
|
esac
|
||||||
|
if test $eat = yes; then
|
||||||
|
eat=no
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
case "$arg" in
|
||||||
|
-D*|-I*)
|
||||||
|
set fnord "$@" "$arg"; shift ;;
|
||||||
|
# Strip any option that makedepend may not understand. Remove
|
||||||
|
# the object too, otherwise makedepend will parse it as a source file.
|
||||||
|
-arch)
|
||||||
|
eat=yes ;;
|
||||||
|
-*|$object)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set fnord "$@" "$arg"; shift ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
obj_suffix=`echo "$object" | sed 's/^.*\././'`
|
||||||
|
touch "$tmpdepfile"
|
||||||
|
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
||||||
|
rm -f "$depfile"
|
||||||
|
# makedepend may prepend the VPATH from the source file name to the object.
|
||||||
|
# No need to regex-escape $object, excess matching of '.' is harmless.
|
||||||
|
sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
|
||||||
|
sed '1,2d' "$tmpdepfile" | tr ' ' '
|
||||||
|
' | \
|
||||||
|
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||||
|
## correctly. Breaking it into two sed invocations is a workaround.
|
||||||
|
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||||
|
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
||||||
|
;;
|
||||||
|
|
||||||
|
cpp)
|
||||||
|
# Important note: in order to support this mode, a compiler *must*
|
||||||
|
# always write the preprocessed file to stdout.
|
||||||
|
"$@" || exit $?
|
||||||
|
|
||||||
|
# Remove the call to Libtool.
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
while test "X$1" != 'X--mode=compile'; do
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remove `-o $object'.
|
||||||
|
IFS=" "
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
case $arg in
|
||||||
|
-o)
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
$object)
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set fnord "$@" "$arg"
|
||||||
|
shift # fnord
|
||||||
|
shift # $arg
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
"$@" -E |
|
||||||
|
sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||||
|
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
|
||||||
|
sed '$ s: \\$::' > "$tmpdepfile"
|
||||||
|
rm -f "$depfile"
|
||||||
|
echo "$object : \\" > "$depfile"
|
||||||
|
cat < "$tmpdepfile" >> "$depfile"
|
||||||
|
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
msvisualcpp)
|
||||||
|
# Important note: in order to support this mode, a compiler *must*
|
||||||
|
# always write the preprocessed file to stdout.
|
||||||
|
"$@" || exit $?
|
||||||
|
|
||||||
|
# Remove the call to Libtool.
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
while test "X$1" != 'X--mode=compile'; do
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
IFS=" "
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
case "$arg" in
|
||||||
|
-o)
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
$object)
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
||||||
|
set fnord "$@"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set fnord "$@" "$arg"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
"$@" -E 2>/dev/null |
|
||||||
|
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
|
||||||
|
rm -f "$depfile"
|
||||||
|
echo "$object : \\" > "$depfile"
|
||||||
|
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
|
||||||
|
echo " " >> "$depfile"
|
||||||
|
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
msvcmsys)
|
||||||
|
# This case exists only to let depend.m4 do its work. It works by
|
||||||
|
# looking at the text of this script. This case will never be run,
|
||||||
|
# since it is checked for above.
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
none)
|
||||||
|
exec "$@"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Unknown depmode $depmode" 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
# Local Variables:
|
||||||
|
# mode: shell-script
|
||||||
|
# sh-indentation: 2
|
||||||
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-time-zone: "UTC"
|
||||||
|
# time-stamp-end: "; # UTC"
|
||||||
|
# End:
|
527
external/gtest/build-aux/install-sh
vendored
Normal file
527
external/gtest/build-aux/install-sh
vendored
Normal file
|
@ -0,0 +1,527 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# install - install a program, script, or datafile
|
||||||
|
|
||||||
|
scriptversion=2011-01-19.21; # UTC
|
||||||
|
|
||||||
|
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||||
|
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||||
|
# following copyright and license.
|
||||||
|
#
|
||||||
|
# Copyright (C) 1994 X Consortium
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
# of this software and associated documentation files (the "Software"), to
|
||||||
|
# deal in the Software without restriction, including without limitation the
|
||||||
|
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
# sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
# furnished to do so, subject to the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included in
|
||||||
|
# all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||||
|
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
#
|
||||||
|
# Except as contained in this notice, the name of the X Consortium shall not
|
||||||
|
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||||
|
# ings in this Software without prior written authorization from the X Consor-
|
||||||
|
# tium.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# FSF changes to this file are in the public domain.
|
||||||
|
#
|
||||||
|
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||||
|
# `make' implicit rules from creating a file called install from it
|
||||||
|
# when there is no Makefile.
|
||||||
|
#
|
||||||
|
# This script is compatible with the BSD install script, but was written
|
||||||
|
# from scratch.
|
||||||
|
|
||||||
|
nl='
|
||||||
|
'
|
||||||
|
IFS=" "" $nl"
|
||||||
|
|
||||||
|
# set DOITPROG to echo to test this script
|
||||||
|
|
||||||
|
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||||
|
doit=${DOITPROG-}
|
||||||
|
if test -z "$doit"; then
|
||||||
|
doit_exec=exec
|
||||||
|
else
|
||||||
|
doit_exec=$doit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Put in absolute file names if you don't have them in your path;
|
||||||
|
# or use environment vars.
|
||||||
|
|
||||||
|
chgrpprog=${CHGRPPROG-chgrp}
|
||||||
|
chmodprog=${CHMODPROG-chmod}
|
||||||
|
chownprog=${CHOWNPROG-chown}
|
||||||
|
cmpprog=${CMPPROG-cmp}
|
||||||
|
cpprog=${CPPROG-cp}
|
||||||
|
mkdirprog=${MKDIRPROG-mkdir}
|
||||||
|
mvprog=${MVPROG-mv}
|
||||||
|
rmprog=${RMPROG-rm}
|
||||||
|
stripprog=${STRIPPROG-strip}
|
||||||
|
|
||||||
|
posix_glob='?'
|
||||||
|
initialize_posix_glob='
|
||||||
|
test "$posix_glob" != "?" || {
|
||||||
|
if (set -f) 2>/dev/null; then
|
||||||
|
posix_glob=
|
||||||
|
else
|
||||||
|
posix_glob=:
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
'
|
||||||
|
|
||||||
|
posix_mkdir=
|
||||||
|
|
||||||
|
# Desired mode of installed file.
|
||||||
|
mode=0755
|
||||||
|
|
||||||
|
chgrpcmd=
|
||||||
|
chmodcmd=$chmodprog
|
||||||
|
chowncmd=
|
||||||
|
mvcmd=$mvprog
|
||||||
|
rmcmd="$rmprog -f"
|
||||||
|
stripcmd=
|
||||||
|
|
||||||
|
src=
|
||||||
|
dst=
|
||||||
|
dir_arg=
|
||||||
|
dst_arg=
|
||||||
|
|
||||||
|
copy_on_change=false
|
||||||
|
no_target_directory=
|
||||||
|
|
||||||
|
usage="\
|
||||||
|
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||||
|
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||||
|
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||||
|
or: $0 [OPTION]... -d DIRECTORIES...
|
||||||
|
|
||||||
|
In the 1st form, copy SRCFILE to DSTFILE.
|
||||||
|
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||||
|
In the 4th, create DIRECTORIES.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--help display this help and exit.
|
||||||
|
--version display version info and exit.
|
||||||
|
|
||||||
|
-c (ignored)
|
||||||
|
-C install only if different (preserve the last data modification time)
|
||||||
|
-d create directories instead of installing files.
|
||||||
|
-g GROUP $chgrpprog installed files to GROUP.
|
||||||
|
-m MODE $chmodprog installed files to MODE.
|
||||||
|
-o USER $chownprog installed files to USER.
|
||||||
|
-s $stripprog installed files.
|
||||||
|
-t DIRECTORY install into DIRECTORY.
|
||||||
|
-T report an error if DSTFILE is a directory.
|
||||||
|
|
||||||
|
Environment variables override the default commands:
|
||||||
|
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
||||||
|
RMPROG STRIPPROG
|
||||||
|
"
|
||||||
|
|
||||||
|
while test $# -ne 0; do
|
||||||
|
case $1 in
|
||||||
|
-c) ;;
|
||||||
|
|
||||||
|
-C) copy_on_change=true;;
|
||||||
|
|
||||||
|
-d) dir_arg=true;;
|
||||||
|
|
||||||
|
-g) chgrpcmd="$chgrpprog $2"
|
||||||
|
shift;;
|
||||||
|
|
||||||
|
--help) echo "$usage"; exit $?;;
|
||||||
|
|
||||||
|
-m) mode=$2
|
||||||
|
case $mode in
|
||||||
|
*' '* | *' '* | *'
|
||||||
|
'* | *'*'* | *'?'* | *'['*)
|
||||||
|
echo "$0: invalid mode: $mode" >&2
|
||||||
|
exit 1;;
|
||||||
|
esac
|
||||||
|
shift;;
|
||||||
|
|
||||||
|
-o) chowncmd="$chownprog $2"
|
||||||
|
shift;;
|
||||||
|
|
||||||
|
-s) stripcmd=$stripprog;;
|
||||||
|
|
||||||
|
-t) dst_arg=$2
|
||||||
|
# Protect names problematic for `test' and other utilities.
|
||||||
|
case $dst_arg in
|
||||||
|
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||||
|
esac
|
||||||
|
shift;;
|
||||||
|
|
||||||
|
-T) no_target_directory=true;;
|
||||||
|
|
||||||
|
--version) echo "$0 $scriptversion"; exit $?;;
|
||||||
|
|
||||||
|
--) shift
|
||||||
|
break;;
|
||||||
|
|
||||||
|
-*) echo "$0: invalid option: $1" >&2
|
||||||
|
exit 1;;
|
||||||
|
|
||||||
|
*) break;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
|
||||||
|
# When -d is used, all remaining arguments are directories to create.
|
||||||
|
# When -t is used, the destination is already specified.
|
||||||
|
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
if test -n "$dst_arg"; then
|
||||||
|
# $@ is not empty: it contains at least $arg.
|
||||||
|
set fnord "$@" "$dst_arg"
|
||||||
|
shift # fnord
|
||||||
|
fi
|
||||||
|
shift # arg
|
||||||
|
dst_arg=$arg
|
||||||
|
# Protect names problematic for `test' and other utilities.
|
||||||
|
case $dst_arg in
|
||||||
|
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test $# -eq 0; then
|
||||||
|
if test -z "$dir_arg"; then
|
||||||
|
echo "$0: no input file specified." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# It's OK to call `install-sh -d' without argument.
|
||||||
|
# This can happen when creating conditional directories.
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z "$dir_arg"; then
|
||||||
|
do_exit='(exit $ret); exit $ret'
|
||||||
|
trap "ret=129; $do_exit" 1
|
||||||
|
trap "ret=130; $do_exit" 2
|
||||||
|
trap "ret=141; $do_exit" 13
|
||||||
|
trap "ret=143; $do_exit" 15
|
||||||
|
|
||||||
|
# Set umask so as not to create temps with too-generous modes.
|
||||||
|
# However, 'strip' requires both read and write access to temps.
|
||||||
|
case $mode in
|
||||||
|
# Optimize common cases.
|
||||||
|
*644) cp_umask=133;;
|
||||||
|
*755) cp_umask=22;;
|
||||||
|
|
||||||
|
*[0-7])
|
||||||
|
if test -z "$stripcmd"; then
|
||||||
|
u_plus_rw=
|
||||||
|
else
|
||||||
|
u_plus_rw='% 200'
|
||||||
|
fi
|
||||||
|
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
||||||
|
*)
|
||||||
|
if test -z "$stripcmd"; then
|
||||||
|
u_plus_rw=
|
||||||
|
else
|
||||||
|
u_plus_rw=,u+rw
|
||||||
|
fi
|
||||||
|
cp_umask=$mode$u_plus_rw;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
for src
|
||||||
|
do
|
||||||
|
# Protect names problematic for `test' and other utilities.
|
||||||
|
case $src in
|
||||||
|
-* | [=\(\)!]) src=./$src;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if test -n "$dir_arg"; then
|
||||||
|
dst=$src
|
||||||
|
dstdir=$dst
|
||||||
|
test -d "$dstdir"
|
||||||
|
dstdir_status=$?
|
||||||
|
else
|
||||||
|
|
||||||
|
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||||
|
# might cause directories to be created, which would be especially bad
|
||||||
|
# if $src (and thus $dsttmp) contains '*'.
|
||||||
|
if test ! -f "$src" && test ! -d "$src"; then
|
||||||
|
echo "$0: $src does not exist." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z "$dst_arg"; then
|
||||||
|
echo "$0: no destination specified." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
dst=$dst_arg
|
||||||
|
|
||||||
|
# If destination is a directory, append the input filename; won't work
|
||||||
|
# if double slashes aren't ignored.
|
||||||
|
if test -d "$dst"; then
|
||||||
|
if test -n "$no_target_directory"; then
|
||||||
|
echo "$0: $dst_arg: Is a directory" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
dstdir=$dst
|
||||||
|
dst=$dstdir/`basename "$src"`
|
||||||
|
dstdir_status=0
|
||||||
|
else
|
||||||
|
# Prefer dirname, but fall back on a substitute if dirname fails.
|
||||||
|
dstdir=`
|
||||||
|
(dirname "$dst") 2>/dev/null ||
|
||||||
|
expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||||
|
X"$dst" : 'X\(//\)[^/]' \| \
|
||||||
|
X"$dst" : 'X\(//\)$' \| \
|
||||||
|
X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
|
||||||
|
echo X"$dst" |
|
||||||
|
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\(\/\/\)[^/].*/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\(\/\/\)$/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\(\/\).*/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
s/.*/./; q'
|
||||||
|
`
|
||||||
|
|
||||||
|
test -d "$dstdir"
|
||||||
|
dstdir_status=$?
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
obsolete_mkdir_used=false
|
||||||
|
|
||||||
|
if test $dstdir_status != 0; then
|
||||||
|
case $posix_mkdir in
|
||||||
|
'')
|
||||||
|
# Create intermediate dirs using mode 755 as modified by the umask.
|
||||||
|
# This is like FreeBSD 'install' as of 1997-10-28.
|
||||||
|
umask=`umask`
|
||||||
|
case $stripcmd.$umask in
|
||||||
|
# Optimize common cases.
|
||||||
|
*[2367][2367]) mkdir_umask=$umask;;
|
||||||
|
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
|
||||||
|
|
||||||
|
*[0-7])
|
||||||
|
mkdir_umask=`expr $umask + 22 \
|
||||||
|
- $umask % 100 % 40 + $umask % 20 \
|
||||||
|
- $umask % 10 % 4 + $umask % 2
|
||||||
|
`;;
|
||||||
|
*) mkdir_umask=$umask,go-w;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# With -d, create the new directory with the user-specified mode.
|
||||||
|
# Otherwise, rely on $mkdir_umask.
|
||||||
|
if test -n "$dir_arg"; then
|
||||||
|
mkdir_mode=-m$mode
|
||||||
|
else
|
||||||
|
mkdir_mode=
|
||||||
|
fi
|
||||||
|
|
||||||
|
posix_mkdir=false
|
||||||
|
case $umask in
|
||||||
|
*[123567][0-7][0-7])
|
||||||
|
# POSIX mkdir -p sets u+wx bits regardless of umask, which
|
||||||
|
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||||
|
trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
|
||||||
|
|
||||||
|
if (umask $mkdir_umask &&
|
||||||
|
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
if test -z "$dir_arg" || {
|
||||||
|
# Check for POSIX incompatibilities with -m.
|
||||||
|
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||||
|
# other-writeable bit of parent directory when it shouldn't.
|
||||||
|
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||||
|
ls_ld_tmpdir=`ls -ld "$tmpdir"`
|
||||||
|
case $ls_ld_tmpdir in
|
||||||
|
d????-?r-*) different_mode=700;;
|
||||||
|
d????-?--*) different_mode=755;;
|
||||||
|
*) false;;
|
||||||
|
esac &&
|
||||||
|
$mkdirprog -m$different_mode -p -- "$tmpdir" && {
|
||||||
|
ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
|
||||||
|
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
then posix_mkdir=:
|
||||||
|
fi
|
||||||
|
rmdir "$tmpdir/d" "$tmpdir"
|
||||||
|
else
|
||||||
|
# Remove any dirs left behind by ancient mkdir implementations.
|
||||||
|
rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
|
||||||
|
fi
|
||||||
|
trap '' 0;;
|
||||||
|
esac;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if
|
||||||
|
$posix_mkdir && (
|
||||||
|
umask $mkdir_umask &&
|
||||||
|
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
||||||
|
)
|
||||||
|
then :
|
||||||
|
else
|
||||||
|
|
||||||
|
# The umask is ridiculous, or mkdir does not conform to POSIX,
|
||||||
|
# or it failed possibly due to a race condition. Create the
|
||||||
|
# directory the slow way, step by step, checking for races as we go.
|
||||||
|
|
||||||
|
case $dstdir in
|
||||||
|
/*) prefix='/';;
|
||||||
|
[-=\(\)!]*) prefix='./';;
|
||||||
|
*) prefix='';;
|
||||||
|
esac
|
||||||
|
|
||||||
|
eval "$initialize_posix_glob"
|
||||||
|
|
||||||
|
oIFS=$IFS
|
||||||
|
IFS=/
|
||||||
|
$posix_glob set -f
|
||||||
|
set fnord $dstdir
|
||||||
|
shift
|
||||||
|
$posix_glob set +f
|
||||||
|
IFS=$oIFS
|
||||||
|
|
||||||
|
prefixes=
|
||||||
|
|
||||||
|
for d
|
||||||
|
do
|
||||||
|
test X"$d" = X && continue
|
||||||
|
|
||||||
|
prefix=$prefix$d
|
||||||
|
if test -d "$prefix"; then
|
||||||
|
prefixes=
|
||||||
|
else
|
||||||
|
if $posix_mkdir; then
|
||||||
|
(umask=$mkdir_umask &&
|
||||||
|
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||||
|
# Don't fail if two instances are running concurrently.
|
||||||
|
test -d "$prefix" || exit 1
|
||||||
|
else
|
||||||
|
case $prefix in
|
||||||
|
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
||||||
|
*) qprefix=$prefix;;
|
||||||
|
esac
|
||||||
|
prefixes="$prefixes '$qprefix'"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
prefix=$prefix/
|
||||||
|
done
|
||||||
|
|
||||||
|
if test -n "$prefixes"; then
|
||||||
|
# Don't fail if two instances are running concurrently.
|
||||||
|
(umask $mkdir_umask &&
|
||||||
|
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
||||||
|
test -d "$dstdir" || exit 1
|
||||||
|
obsolete_mkdir_used=true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -n "$dir_arg"; then
|
||||||
|
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
|
||||||
|
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
|
||||||
|
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
|
||||||
|
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
|
||||||
|
else
|
||||||
|
|
||||||
|
# Make a couple of temp file names in the proper directory.
|
||||||
|
dsttmp=$dstdir/_inst.$$_
|
||||||
|
rmtmp=$dstdir/_rm.$$_
|
||||||
|
|
||||||
|
# Trap to clean up those temp files at exit.
|
||||||
|
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||||
|
|
||||||
|
# Copy the file name to the temp name.
|
||||||
|
(umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
|
||||||
|
|
||||||
|
# and set any options; do chmod last to preserve setuid bits.
|
||||||
|
#
|
||||||
|
# If any of these fail, we abort the whole thing. If we want to
|
||||||
|
# ignore errors from any of these, just make sure not to ignore
|
||||||
|
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||||
|
#
|
||||||
|
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
|
||||||
|
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
|
||||||
|
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
|
||||||
|
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
|
||||||
|
|
||||||
|
# If -C, don't bother to copy if it wouldn't change the file.
|
||||||
|
if $copy_on_change &&
|
||||||
|
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
|
||||||
|
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
|
||||||
|
|
||||||
|
eval "$initialize_posix_glob" &&
|
||||||
|
$posix_glob set -f &&
|
||||||
|
set X $old && old=:$2:$4:$5:$6 &&
|
||||||
|
set X $new && new=:$2:$4:$5:$6 &&
|
||||||
|
$posix_glob set +f &&
|
||||||
|
|
||||||
|
test "$old" = "$new" &&
|
||||||
|
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
rm -f "$dsttmp"
|
||||||
|
else
|
||||||
|
# Rename the file to the real destination.
|
||||||
|
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
||||||
|
|
||||||
|
# The rename failed, perhaps because mv can't rename something else
|
||||||
|
# to itself, or perhaps because mv is so ancient that it does not
|
||||||
|
# support -f.
|
||||||
|
{
|
||||||
|
# Now remove or move aside any old file at destination location.
|
||||||
|
# We try this two ways since rm can't unlink itself on some
|
||||||
|
# systems and the destination file might be busy for other
|
||||||
|
# reasons. In this case, the final cleanup might fail but the new
|
||||||
|
# file should still install successfully.
|
||||||
|
{
|
||||||
|
test ! -f "$dst" ||
|
||||||
|
$doit $rmcmd -f "$dst" 2>/dev/null ||
|
||||||
|
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
||||||
|
{ $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
|
||||||
|
} ||
|
||||||
|
{ echo "$0: cannot unlink or rename $dst" >&2
|
||||||
|
(exit 1); exit 1
|
||||||
|
}
|
||||||
|
} &&
|
||||||
|
|
||||||
|
# Now rename the file to the real destination.
|
||||||
|
$doit $mvcmd "$dsttmp" "$dst"
|
||||||
|
}
|
||||||
|
fi || exit 1
|
||||||
|
|
||||||
|
trap '' 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Local variables:
|
||||||
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-time-zone: "UTC"
|
||||||
|
# time-stamp-end: "; # UTC"
|
||||||
|
# End:
|
9661
external/gtest/build-aux/ltmain.sh
vendored
Normal file
9661
external/gtest/build-aux/ltmain.sh
vendored
Normal file
File diff suppressed because it is too large
Load diff
331
external/gtest/build-aux/missing
vendored
Normal file
331
external/gtest/build-aux/missing
vendored
Normal file
|
@ -0,0 +1,331 @@
|
||||||
|
#! /bin/sh
|
||||||
|
# Common stub for a few missing GNU programs while installing.
|
||||||
|
|
||||||
|
scriptversion=2012-01-06.13; # UTC
|
||||||
|
|
||||||
|
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
|
||||||
|
# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
|
||||||
|
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||||
|
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# As a special exception to the GNU General Public License, if you
|
||||||
|
# distribute this file as part of a program that contains a
|
||||||
|
# configuration script generated by Autoconf, you may include it under
|
||||||
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
|
if test $# -eq 0; then
|
||||||
|
echo 1>&2 "Try \`$0 --help' for more information"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
run=:
|
||||||
|
sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
|
||||||
|
sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
|
||||||
|
|
||||||
|
# In the cases where this matters, `missing' is being run in the
|
||||||
|
# srcdir already.
|
||||||
|
if test -f configure.ac; then
|
||||||
|
configure_ac=configure.ac
|
||||||
|
else
|
||||||
|
configure_ac=configure.in
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg="missing on your system"
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
--run)
|
||||||
|
# Try to run requested program, and just exit if it succeeds.
|
||||||
|
run=
|
||||||
|
shift
|
||||||
|
"$@" && exit 0
|
||||||
|
# Exit code 63 means version mismatch. This often happens
|
||||||
|
# when the user try to use an ancient version of a tool on
|
||||||
|
# a file that requires a minimum version. In this case we
|
||||||
|
# we should proceed has if the program had been absent, or
|
||||||
|
# if --run hadn't been passed.
|
||||||
|
if test $? = 63; then
|
||||||
|
run=:
|
||||||
|
msg="probably too old"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
-h|--h|--he|--hel|--help)
|
||||||
|
echo "\
|
||||||
|
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||||
|
|
||||||
|
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
|
||||||
|
error status if there is no known handling for PROGRAM.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-h, --help display this help and exit
|
||||||
|
-v, --version output version information and exit
|
||||||
|
--run try to run the given command, and emulate it if it fails
|
||||||
|
|
||||||
|
Supported PROGRAM values:
|
||||||
|
aclocal touch file \`aclocal.m4'
|
||||||
|
autoconf touch file \`configure'
|
||||||
|
autoheader touch file \`config.h.in'
|
||||||
|
autom4te touch the output file, or create a stub one
|
||||||
|
automake touch all \`Makefile.in' files
|
||||||
|
bison create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||||
|
flex create \`lex.yy.c', if possible, from existing .c
|
||||||
|
help2man touch the output file
|
||||||
|
lex create \`lex.yy.c', if possible, from existing .c
|
||||||
|
makeinfo touch the output file
|
||||||
|
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||||
|
|
||||||
|
Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
|
||||||
|
\`g' are ignored when checking the name.
|
||||||
|
|
||||||
|
Send bug reports to <bug-automake@gnu.org>."
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
|
||||||
|
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||||
|
echo "missing $scriptversion (GNU Automake)"
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
|
||||||
|
-*)
|
||||||
|
echo 1>&2 "$0: Unknown \`$1' option"
|
||||||
|
echo 1>&2 "Try \`$0 --help' for more information"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
|
||||||
|
# normalize program name to check for.
|
||||||
|
program=`echo "$1" | sed '
|
||||||
|
s/^gnu-//; t
|
||||||
|
s/^gnu//; t
|
||||||
|
s/^g//; t'`
|
||||||
|
|
||||||
|
# Now exit if we have it, but it failed. Also exit now if we
|
||||||
|
# don't have it and --version was passed (most likely to detect
|
||||||
|
# the program). This is about non-GNU programs, so use $1 not
|
||||||
|
# $program.
|
||||||
|
case $1 in
|
||||||
|
lex*|yacc*)
|
||||||
|
# Not GNU programs, they don't have --version.
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||||
|
# We have it, but it failed.
|
||||||
|
exit 1
|
||||||
|
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||||
|
# Could not run --version or --help. This is probably someone
|
||||||
|
# running `$TOOL --version' or `$TOOL --help' to check whether
|
||||||
|
# $TOOL exists and not knowing $TOOL uses missing.
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# If it does not exist, or fails to run (possibly an outdated version),
|
||||||
|
# try to emulate it.
|
||||||
|
case $program in
|
||||||
|
aclocal*)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
|
||||||
|
to install the \`Automake' and \`Perl' packages. Grab them from
|
||||||
|
any GNU archive site."
|
||||||
|
touch aclocal.m4
|
||||||
|
;;
|
||||||
|
|
||||||
|
autoconf*)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified \`${configure_ac}'. You might want to install the
|
||||||
|
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
|
||||||
|
archive site."
|
||||||
|
touch configure
|
||||||
|
;;
|
||||||
|
|
||||||
|
autoheader*)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified \`acconfig.h' or \`${configure_ac}'. You might want
|
||||||
|
to install the \`Autoconf' and \`GNU m4' packages. Grab them
|
||||||
|
from any GNU archive site."
|
||||||
|
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
|
||||||
|
test -z "$files" && files="config.h"
|
||||||
|
touch_files=
|
||||||
|
for f in $files; do
|
||||||
|
case $f in
|
||||||
|
*:*) touch_files="$touch_files "`echo "$f" |
|
||||||
|
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
|
||||||
|
*) touch_files="$touch_files $f.in";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
touch $touch_files
|
||||||
|
;;
|
||||||
|
|
||||||
|
automake*)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
|
||||||
|
You might want to install the \`Automake' and \`Perl' packages.
|
||||||
|
Grab them from any GNU archive site."
|
||||||
|
find . -type f -name Makefile.am -print |
|
||||||
|
sed 's/\.am$/.in/' |
|
||||||
|
while read f; do touch "$f"; done
|
||||||
|
;;
|
||||||
|
|
||||||
|
autom4te*)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is needed, but is $msg.
|
||||||
|
You might have modified some files without having the
|
||||||
|
proper tools for further handling them.
|
||||||
|
You can get \`$1' as part of \`Autoconf' from any GNU
|
||||||
|
archive site."
|
||||||
|
|
||||||
|
file=`echo "$*" | sed -n "$sed_output"`
|
||||||
|
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||||
|
if test -f "$file"; then
|
||||||
|
touch $file
|
||||||
|
else
|
||||||
|
test -z "$file" || exec >$file
|
||||||
|
echo "#! /bin/sh"
|
||||||
|
echo "# Created by GNU Automake missing as a replacement of"
|
||||||
|
echo "# $ $@"
|
||||||
|
echo "exit 0"
|
||||||
|
chmod +x $file
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
bison*|yacc*)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' $msg. You should only need it if
|
||||||
|
you modified a \`.y' file. You may need the \`Bison' package
|
||||||
|
in order for those modifications to take effect. You can get
|
||||||
|
\`Bison' from any GNU archive site."
|
||||||
|
rm -f y.tab.c y.tab.h
|
||||||
|
if test $# -ne 1; then
|
||||||
|
eval LASTARG=\${$#}
|
||||||
|
case $LASTARG in
|
||||||
|
*.y)
|
||||||
|
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
|
||||||
|
if test -f "$SRCFILE"; then
|
||||||
|
cp "$SRCFILE" y.tab.c
|
||||||
|
fi
|
||||||
|
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
|
||||||
|
if test -f "$SRCFILE"; then
|
||||||
|
cp "$SRCFILE" y.tab.h
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
if test ! -f y.tab.h; then
|
||||||
|
echo >y.tab.h
|
||||||
|
fi
|
||||||
|
if test ! -f y.tab.c; then
|
||||||
|
echo 'main() { return 0; }' >y.tab.c
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
lex*|flex*)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified a \`.l' file. You may need the \`Flex' package
|
||||||
|
in order for those modifications to take effect. You can get
|
||||||
|
\`Flex' from any GNU archive site."
|
||||||
|
rm -f lex.yy.c
|
||||||
|
if test $# -ne 1; then
|
||||||
|
eval LASTARG=\${$#}
|
||||||
|
case $LASTARG in
|
||||||
|
*.l)
|
||||||
|
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
|
||||||
|
if test -f "$SRCFILE"; then
|
||||||
|
cp "$SRCFILE" lex.yy.c
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
if test ! -f lex.yy.c; then
|
||||||
|
echo 'main() { return 0; }' >lex.yy.c
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
help2man*)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified a dependency of a manual page. You may need the
|
||||||
|
\`Help2man' package in order for those modifications to take
|
||||||
|
effect. You can get \`Help2man' from any GNU archive site."
|
||||||
|
|
||||||
|
file=`echo "$*" | sed -n "$sed_output"`
|
||||||
|
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||||
|
if test -f "$file"; then
|
||||||
|
touch $file
|
||||||
|
else
|
||||||
|
test -z "$file" || exec >$file
|
||||||
|
echo ".ab help2man is required to generate this page"
|
||||||
|
exit $?
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
makeinfo*)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified a \`.texi' or \`.texinfo' file, or any other file
|
||||||
|
indirectly affecting the aspect of the manual. The spurious
|
||||||
|
call might also be the consequence of using a buggy \`make' (AIX,
|
||||||
|
DU, IRIX). You might want to install the \`Texinfo' package or
|
||||||
|
the \`GNU make' package. Grab either from any GNU archive site."
|
||||||
|
# The file to touch is that specified with -o ...
|
||||||
|
file=`echo "$*" | sed -n "$sed_output"`
|
||||||
|
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||||
|
if test -z "$file"; then
|
||||||
|
# ... or it is the one specified with @setfilename ...
|
||||||
|
infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
|
||||||
|
file=`sed -n '
|
||||||
|
/^@setfilename/{
|
||||||
|
s/.* \([^ ]*\) *$/\1/
|
||||||
|
p
|
||||||
|
q
|
||||||
|
}' $infile`
|
||||||
|
# ... or it is derived from the source name (dir/f.texi becomes f.info)
|
||||||
|
test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
|
||||||
|
fi
|
||||||
|
# If the file does not exist, the user really needs makeinfo;
|
||||||
|
# let's fail without touching anything.
|
||||||
|
test -f $file || exit 1
|
||||||
|
touch $file
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is needed, and is $msg.
|
||||||
|
You might have modified some files without having the
|
||||||
|
proper tools for further handling them. Check the \`README' file,
|
||||||
|
it often tells you about the needed prerequisites for installing
|
||||||
|
this package. You may also peek at any GNU archive site, in case
|
||||||
|
some other package would contain this missing \`$1' program."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
# Local variables:
|
||||||
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-time-zone: "UTC"
|
||||||
|
# time-stamp-end: "; # UTC"
|
||||||
|
# End:
|
|
@ -56,6 +56,16 @@ macro(config_compiler_and_linker)
|
||||||
# Newlines inside flags variables break CMake's NMake generator.
|
# Newlines inside flags variables break CMake's NMake generator.
|
||||||
# TODO(vladl@google.com): Add -RTCs and -RTCu to debug builds.
|
# TODO(vladl@google.com): Add -RTCs and -RTCu to debug builds.
|
||||||
set(cxx_base_flags "-GS -W4 -WX -wd4127 -wd4251 -wd4275 -nologo -J -Zi")
|
set(cxx_base_flags "-GS -W4 -WX -wd4127 -wd4251 -wd4275 -nologo -J -Zi")
|
||||||
|
if (MSVC_VERSION LESS 1400)
|
||||||
|
# Suppress spurious warnings MSVC 7.1 sometimes issues.
|
||||||
|
# Forcing value to bool.
|
||||||
|
set(cxx_base_flags "${cxx_base_flags} -wd4800")
|
||||||
|
# Copy constructor and assignment operator could not be generated.
|
||||||
|
set(cxx_base_flags "${cxx_base_flags} -wd4511 -wd4512")
|
||||||
|
# Compatibility warnings not applicable to Google Test.
|
||||||
|
# Resolved overload was found by argument-dependent lookup.
|
||||||
|
set(cxx_base_flags "${cxx_base_flags} -wd4675")
|
||||||
|
endif()
|
||||||
set(cxx_base_flags "${cxx_base_flags} -D_UNICODE -DUNICODE -DWIN32 -D_WIN32")
|
set(cxx_base_flags "${cxx_base_flags} -D_UNICODE -DUNICODE -DWIN32 -D_WIN32")
|
||||||
set(cxx_base_flags "${cxx_base_flags} -DSTRICT -DWIN32_LEAN_AND_MEAN")
|
set(cxx_base_flags "${cxx_base_flags} -DSTRICT -DWIN32_LEAN_AND_MEAN")
|
||||||
set(cxx_exception_flags "-EHsc -D_HAS_EXCEPTIONS=1")
|
set(cxx_exception_flags "-EHsc -D_HAS_EXCEPTIONS=1")
|
||||||
|
@ -69,7 +79,8 @@ macro(config_compiler_and_linker)
|
||||||
# whether RTTI is enabled. Therefore we define GTEST_HAS_RTTI
|
# whether RTTI is enabled. Therefore we define GTEST_HAS_RTTI
|
||||||
# explicitly.
|
# explicitly.
|
||||||
set(cxx_no_rtti_flags "-fno-rtti -DGTEST_HAS_RTTI=0")
|
set(cxx_no_rtti_flags "-fno-rtti -DGTEST_HAS_RTTI=0")
|
||||||
set(cxx_strict_flags "-Wextra")
|
set(cxx_strict_flags
|
||||||
|
"-Wextra -Wno-unused-parameter -Wno-missing-field-initializers")
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
|
||||||
set(cxx_exception_flags "-features=except")
|
set(cxx_exception_flags "-features=except")
|
||||||
# Sun Pro doesn't provide macros to indicate whether exceptions and
|
# Sun Pro doesn't provide macros to indicate whether exceptions and
|
138
external/gtest/codegear/gtest.cbproj
vendored
Normal file
138
external/gtest/codegear/gtest.cbproj
vendored
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ProjectGuid>{bca37a72-5b07-46cf-b44e-89f8e06451a2}</ProjectGuid>
|
||||||
|
<Config Condition="'$(Config)'==''">Release</Config>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
|
||||||
|
<Base>true</Base>
|
||||||
|
<Cfg_1>true</Cfg_1>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
|
||||||
|
<Base>true</Base>
|
||||||
|
<Cfg_2>true</Cfg_2>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Base)'!=''">
|
||||||
|
<BCC_OptimizeForSpeed>true</BCC_OptimizeForSpeed>
|
||||||
|
<OutputExt>lib</OutputExt>
|
||||||
|
<DCC_CBuilderOutput>JPHNE</DCC_CBuilderOutput>
|
||||||
|
<Defines>NO_STRICT</Defines>
|
||||||
|
<DynamicRTL>true</DynamicRTL>
|
||||||
|
<UsePackages>true</UsePackages>
|
||||||
|
<ProjectType>CppStaticLibrary</ProjectType>
|
||||||
|
<BCC_CPPCompileAlways>true</BCC_CPPCompileAlways>
|
||||||
|
<PackageImports>rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;dclZipForged11.bpi;vclZipForged11.bpi;GR32_BDS2006.bpi;GR32_DSGN_BDS2006.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi;CExceptionExpert11.bpi</PackageImports>
|
||||||
|
<BCC_wpar>false</BCC_wpar>
|
||||||
|
<IncludePath>$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</IncludePath>
|
||||||
|
<AllPackageLibs>rtl.lib;vcl.lib</AllPackageLibs>
|
||||||
|
<TLIB_PageSize>32</TLIB_PageSize>
|
||||||
|
<ILINK_LibraryPath>$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk</ILINK_LibraryPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||||
|
<BCC_OptimizeForSpeed>false</BCC_OptimizeForSpeed>
|
||||||
|
<DCC_Optimize>false</DCC_Optimize>
|
||||||
|
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
|
||||||
|
<Defines>_DEBUG;$(Defines)</Defines>
|
||||||
|
<ILINK_FullDebugInfo>true</ILINK_FullDebugInfo>
|
||||||
|
<BCC_InlineFunctionExpansion>false</BCC_InlineFunctionExpansion>
|
||||||
|
<ILINK_DisableIncrementalLinking>true</ILINK_DisableIncrementalLinking>
|
||||||
|
<BCC_UseRegisterVariables>None</BCC_UseRegisterVariables>
|
||||||
|
<DCC_Define>DEBUG</DCC_Define>
|
||||||
|
<BCC_DebugLineNumbers>true</BCC_DebugLineNumbers>
|
||||||
|
<IntermediateOutputDir>Debug</IntermediateOutputDir>
|
||||||
|
<TASM_DisplaySourceLines>true</TASM_DisplaySourceLines>
|
||||||
|
<BCC_StackFrames>true</BCC_StackFrames>
|
||||||
|
<BCC_DisableOptimizations>true</BCC_DisableOptimizations>
|
||||||
|
<ILINK_LibraryPath>$(BDS)\lib\debug;$(ILINK_LibraryPath)</ILINK_LibraryPath>
|
||||||
|
<TASM_Debugging>Full</TASM_Debugging>
|
||||||
|
<BCC_SourceDebuggingOn>true</BCC_SourceDebuggingOn>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||||
|
<Defines>NDEBUG;$(Defines)</Defines>
|
||||||
|
<IntermediateOutputDir>Release</IntermediateOutputDir>
|
||||||
|
<ILINK_LibraryPath>$(BDS)\lib\release;$(ILINK_LibraryPath)</ILINK_LibraryPath>
|
||||||
|
<TASM_Debugging>None</TASM_Debugging>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ProjectExtensions>
|
||||||
|
<Borland.Personality>CPlusPlusBuilder.Personality</Borland.Personality>
|
||||||
|
<Borland.ProjectType>CppStaticLibrary</Borland.ProjectType>
|
||||||
|
<BorlandProject>
|
||||||
|
<BorlandProject><CPlusPlusBuilder.Personality><VersionInfo><VersionInfo Name="IncludeVerInfo">False</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">1033</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName"></VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName"></VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Debugging><Debugging Name="DebugSourceDirs"></Debugging></Debugging><Parameters><Parameters Name="RunParams"></Parameters><Parameters Name="Launcher"></Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="DebugCWD"></Parameters><Parameters Name="HostApplication"></Parameters><Parameters Name="RemoteHost"></Parameters><Parameters Name="RemotePath"></Parameters><Parameters Name="RemoteParams"></Parameters><Parameters Name="RemoteLauncher"></Parameters><Parameters Name="UseRemoteLauncher">False</Parameters><Parameters Name="RemoteCWD"></Parameters><Parameters Name="RemoteDebug">False</Parameters><Parameters Name="Debug Symbols Search Path"></Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Excluded_Packages>
|
||||||
|
|
||||||
|
|
||||||
|
<Excluded_Packages Name="$(BDS)\bin\bcboffice2k100.bpl">CodeGear C++Builder Office 2000 Servers Package</Excluded_Packages>
|
||||||
|
<Excluded_Packages Name="$(BDS)\bin\bcbofficexp100.bpl">CodeGear C++Builder Office XP Servers Package</Excluded_Packages>
|
||||||
|
</Excluded_Packages><Linker><Linker Name="LibPrefix"></Linker><Linker Name="LibSuffix"></Linker><Linker Name="LibVersion"></Linker></Linker><ProjectProperties><ProjectProperties Name="AutoShowDeps">False</ProjectProperties><ProjectProperties Name="ManagePaths">True</ProjectProperties><ProjectProperties Name="VerifyPackages">True</ProjectProperties></ProjectProperties><HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Count">3</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item0">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item1">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item2">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\src;..\include</HistoryLists_hlIncludePath></HistoryLists_hlIncludePath><HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Count">1</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item0">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk</HistoryLists_hlILINK_LibraryPath></HistoryLists_hlILINK_LibraryPath><HistoryLists_hlDefines><HistoryLists_hlDefines Name="Count">1</HistoryLists_hlDefines><HistoryLists_hlDefines Name="Item0">NO_STRICT</HistoryLists_hlDefines></HistoryLists_hlDefines><HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Count">1</HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Item0">32</HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Item1">16</HistoryLists_hlTLIB_PageSize></HistoryLists_hlTLIB_PageSize></CPlusPlusBuilder.Personality></BorlandProject></BorlandProject>
|
||||||
|
</ProjectExtensions>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Borland.Cpp.Targets" />
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\include\gtest\gtest-death-test.h">
|
||||||
|
<BuildOrder>3</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\gtest-message.h">
|
||||||
|
<BuildOrder>4</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\gtest-param-test.h">
|
||||||
|
<BuildOrder>5</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\gtest-spi.h">
|
||||||
|
<BuildOrder>6</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\gtest-test-part.h">
|
||||||
|
<BuildOrder>7</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\gtest-typed-test.h">
|
||||||
|
<BuildOrder>8</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\gtest.h">
|
||||||
|
<BuildOrder>0</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\gtest_pred_impl.h">
|
||||||
|
<BuildOrder>1</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\gtest_prod.h">
|
||||||
|
<BuildOrder>2</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\internal\gtest-death-test-internal.h">
|
||||||
|
<BuildOrder>9</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\internal\gtest-filepath.h">
|
||||||
|
<BuildOrder>10</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\internal\gtest-internal.h">
|
||||||
|
<BuildOrder>11</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\internal\gtest-linked_ptr.h">
|
||||||
|
<BuildOrder>12</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\internal\gtest-param-util-generated.h">
|
||||||
|
<BuildOrder>14</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\internal\gtest-param-util.h">
|
||||||
|
<BuildOrder>13</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\internal\gtest-port.h">
|
||||||
|
<BuildOrder>15</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\internal\gtest-string.h">
|
||||||
|
<BuildOrder>16</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<None Include="..\include\gtest\internal\gtest-type-util.h">
|
||||||
|
<BuildOrder>17</BuildOrder>
|
||||||
|
</None>
|
||||||
|
<CppCompile Include="gtest_all.cc">
|
||||||
|
<BuildOrder>18</BuildOrder>
|
||||||
|
</CppCompile>
|
||||||
|
<BuildConfiguration Include="Debug">
|
||||||
|
<Key>Cfg_1</Key>
|
||||||
|
</BuildConfiguration>
|
||||||
|
<BuildConfiguration Include="Release">
|
||||||
|
<Key>Cfg_2</Key>
|
||||||
|
</BuildConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
54
external/gtest/codegear/gtest.groupproj
vendored
Normal file
54
external/gtest/codegear/gtest.groupproj
vendored
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ProjectGuid>{c1d923e0-6cba-4332-9b6f-3420acbf5091}</ProjectGuid>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
<ItemGroup>
|
||||||
|
<Projects Include="gtest.cbproj" />
|
||||||
|
<Projects Include="gtest_main.cbproj" />
|
||||||
|
<Projects Include="gtest_unittest.cbproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ProjectExtensions>
|
||||||
|
<Borland.Personality>Default.Personality</Borland.Personality>
|
||||||
|
<Borland.ProjectType />
|
||||||
|
<BorlandProject>
|
||||||
|
<BorlandProject xmlns=""><Default.Personality></Default.Personality></BorlandProject></BorlandProject>
|
||||||
|
</ProjectExtensions>
|
||||||
|
<Target Name="gtest">
|
||||||
|
<MSBuild Projects="gtest.cbproj" Targets="" />
|
||||||
|
</Target>
|
||||||
|
<Target Name="gtest:Clean">
|
||||||
|
<MSBuild Projects="gtest.cbproj" Targets="Clean" />
|
||||||
|
</Target>
|
||||||
|
<Target Name="gtest:Make">
|
||||||
|
<MSBuild Projects="gtest.cbproj" Targets="Make" />
|
||||||
|
</Target>
|
||||||
|
<Target Name="gtest_main">
|
||||||
|
<MSBuild Projects="gtest_main.cbproj" Targets="" />
|
||||||
|
</Target>
|
||||||
|
<Target Name="gtest_main:Clean">
|
||||||
|
<MSBuild Projects="gtest_main.cbproj" Targets="Clean" />
|
||||||
|
</Target>
|
||||||
|
<Target Name="gtest_main:Make">
|
||||||
|
<MSBuild Projects="gtest_main.cbproj" Targets="Make" />
|
||||||
|
</Target>
|
||||||
|
<Target Name="gtest_unittest">
|
||||||
|
<MSBuild Projects="gtest_unittest.cbproj" Targets="" />
|
||||||
|
</Target>
|
||||||
|
<Target Name="gtest_unittest:Clean">
|
||||||
|
<MSBuild Projects="gtest_unittest.cbproj" Targets="Clean" />
|
||||||
|
</Target>
|
||||||
|
<Target Name="gtest_unittest:Make">
|
||||||
|
<MSBuild Projects="gtest_unittest.cbproj" Targets="Make" />
|
||||||
|
</Target>
|
||||||
|
<Target Name="Build">
|
||||||
|
<CallTarget Targets="gtest;gtest_main;gtest_unittest" />
|
||||||
|
</Target>
|
||||||
|
<Target Name="Clean">
|
||||||
|
<CallTarget Targets="gtest:Clean;gtest_main:Clean;gtest_unittest:Clean" />
|
||||||
|
</Target>
|
||||||
|
<Target Name="Make">
|
||||||
|
<CallTarget Targets="gtest:Make;gtest_main:Make;gtest_unittest:Make" />
|
||||||
|
</Target>
|
||||||
|
<Import Condition="Exists('$(MSBuildBinPath)\Borland.Group.Targets')" Project="$(MSBuildBinPath)\Borland.Group.Targets" />
|
||||||
|
</Project>
|
38
external/gtest/codegear/gtest_all.cc
vendored
Normal file
38
external/gtest/codegear/gtest_all.cc
vendored
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
// Copyright 2009, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
// Author: Josh Kelley (joshkel@gmail.com)
|
||||||
|
//
|
||||||
|
// Google C++ Testing Framework (Google Test)
|
||||||
|
//
|
||||||
|
// C++Builder's IDE cannot build a static library from files with hyphens
|
||||||
|
// in their name. See http://qc.codegear.com/wc/qcmain.aspx?d=70977 .
|
||||||
|
// This file serves as a workaround.
|
||||||
|
|
||||||
|
#include "src/gtest-all.cc"
|
40
external/gtest/codegear/gtest_link.cc
vendored
Normal file
40
external/gtest/codegear/gtest_link.cc
vendored
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
// Copyright 2009, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
// Author: Josh Kelley (joshkel@gmail.com)
|
||||||
|
//
|
||||||
|
// Google C++ Testing Framework (Google Test)
|
||||||
|
//
|
||||||
|
// Links gtest.lib and gtest_main.lib into the current project in C++Builder.
|
||||||
|
// This means that these libraries can't be renamed, but it's the only way to
|
||||||
|
// ensure that Debug versus Release test builds are linked against the
|
||||||
|
// appropriate Debug or Release build of the libraries.
|
||||||
|
|
||||||
|
#pragma link "gtest.lib"
|
||||||
|
#pragma link "gtest_main.lib"
|
82
external/gtest/codegear/gtest_main.cbproj
vendored
Normal file
82
external/gtest/codegear/gtest_main.cbproj
vendored
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ProjectGuid>{bca37a72-5b07-46cf-b44e-89f8e06451a2}</ProjectGuid>
|
||||||
|
<Config Condition="'$(Config)'==''">Release</Config>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
|
||||||
|
<Base>true</Base>
|
||||||
|
<Cfg_1>true</Cfg_1>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
|
||||||
|
<Base>true</Base>
|
||||||
|
<Cfg_2>true</Cfg_2>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Base)'!=''">
|
||||||
|
<BCC_OptimizeForSpeed>true</BCC_OptimizeForSpeed>
|
||||||
|
<OutputExt>lib</OutputExt>
|
||||||
|
<DCC_CBuilderOutput>JPHNE</DCC_CBuilderOutput>
|
||||||
|
<Defines>NO_STRICT</Defines>
|
||||||
|
<DynamicRTL>true</DynamicRTL>
|
||||||
|
<UsePackages>true</UsePackages>
|
||||||
|
<ProjectType>CppStaticLibrary</ProjectType>
|
||||||
|
<BCC_CPPCompileAlways>true</BCC_CPPCompileAlways>
|
||||||
|
<PackageImports>rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;dclZipForged11.bpi;vclZipForged11.bpi;GR32_BDS2006.bpi;GR32_DSGN_BDS2006.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi;CExceptionExpert11.bpi</PackageImports>
|
||||||
|
<BCC_wpar>false</BCC_wpar>
|
||||||
|
<IncludePath>$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</IncludePath>
|
||||||
|
<AllPackageLibs>rtl.lib;vcl.lib</AllPackageLibs>
|
||||||
|
<TLIB_PageSize>32</TLIB_PageSize>
|
||||||
|
<ILINK_LibraryPath>$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk</ILINK_LibraryPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||||
|
<BCC_OptimizeForSpeed>false</BCC_OptimizeForSpeed>
|
||||||
|
<DCC_Optimize>false</DCC_Optimize>
|
||||||
|
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
|
||||||
|
<Defines>_DEBUG;$(Defines)</Defines>
|
||||||
|
<ILINK_FullDebugInfo>true</ILINK_FullDebugInfo>
|
||||||
|
<BCC_InlineFunctionExpansion>false</BCC_InlineFunctionExpansion>
|
||||||
|
<ILINK_DisableIncrementalLinking>true</ILINK_DisableIncrementalLinking>
|
||||||
|
<BCC_UseRegisterVariables>None</BCC_UseRegisterVariables>
|
||||||
|
<DCC_Define>DEBUG</DCC_Define>
|
||||||
|
<BCC_DebugLineNumbers>true</BCC_DebugLineNumbers>
|
||||||
|
<IntermediateOutputDir>Debug</IntermediateOutputDir>
|
||||||
|
<TASM_DisplaySourceLines>true</TASM_DisplaySourceLines>
|
||||||
|
<BCC_StackFrames>true</BCC_StackFrames>
|
||||||
|
<BCC_DisableOptimizations>true</BCC_DisableOptimizations>
|
||||||
|
<ILINK_LibraryPath>$(BDS)\lib\debug;$(ILINK_LibraryPath)</ILINK_LibraryPath>
|
||||||
|
<TASM_Debugging>Full</TASM_Debugging>
|
||||||
|
<BCC_SourceDebuggingOn>true</BCC_SourceDebuggingOn>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||||
|
<Defines>NDEBUG;$(Defines)</Defines>
|
||||||
|
<IntermediateOutputDir>Release</IntermediateOutputDir>
|
||||||
|
<ILINK_LibraryPath>$(BDS)\lib\release;$(ILINK_LibraryPath)</ILINK_LibraryPath>
|
||||||
|
<TASM_Debugging>None</TASM_Debugging>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ProjectExtensions>
|
||||||
|
<Borland.Personality>CPlusPlusBuilder.Personality</Borland.Personality>
|
||||||
|
<Borland.ProjectType>CppStaticLibrary</Borland.ProjectType>
|
||||||
|
<BorlandProject>
|
||||||
|
<BorlandProject><CPlusPlusBuilder.Personality><VersionInfo><VersionInfo Name="IncludeVerInfo">False</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">1033</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName"></VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName"></VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Debugging><Debugging Name="DebugSourceDirs"></Debugging></Debugging><Parameters><Parameters Name="RunParams"></Parameters><Parameters Name="Launcher"></Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="DebugCWD"></Parameters><Parameters Name="HostApplication"></Parameters><Parameters Name="RemoteHost"></Parameters><Parameters Name="RemotePath"></Parameters><Parameters Name="RemoteParams"></Parameters><Parameters Name="RemoteLauncher"></Parameters><Parameters Name="UseRemoteLauncher">False</Parameters><Parameters Name="RemoteCWD"></Parameters><Parameters Name="RemoteDebug">False</Parameters><Parameters Name="Debug Symbols Search Path"></Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Excluded_Packages>
|
||||||
|
<Excluded_Packages Name="$(BDS)\bin\bcboffice2k100.bpl">CodeGear C++Builder Office 2000 Servers Package</Excluded_Packages>
|
||||||
|
<Excluded_Packages Name="$(BDS)\bin\bcbofficexp100.bpl">CodeGear C++Builder Office XP Servers Package</Excluded_Packages>
|
||||||
|
</Excluded_Packages><Linker><Linker Name="LibPrefix"></Linker><Linker Name="LibSuffix"></Linker><Linker Name="LibVersion"></Linker></Linker><ProjectProperties><ProjectProperties Name="AutoShowDeps">False</ProjectProperties><ProjectProperties Name="ManagePaths">True</ProjectProperties><ProjectProperties Name="VerifyPackages">True</ProjectProperties></ProjectProperties><HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Count">3</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item0">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item1">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item2">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\src;..\include</HistoryLists_hlIncludePath></HistoryLists_hlIncludePath><HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Count">1</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item0">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk</HistoryLists_hlILINK_LibraryPath></HistoryLists_hlILINK_LibraryPath><HistoryLists_hlDefines><HistoryLists_hlDefines Name="Count">1</HistoryLists_hlDefines><HistoryLists_hlDefines Name="Item0">NO_STRICT</HistoryLists_hlDefines></HistoryLists_hlDefines><HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Count">1</HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Item0">32</HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Item1">16</HistoryLists_hlTLIB_PageSize></HistoryLists_hlTLIB_PageSize></CPlusPlusBuilder.Personality></BorlandProject></BorlandProject>
|
||||||
|
</ProjectExtensions>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Borland.Cpp.Targets" />
|
||||||
|
<ItemGroup>
|
||||||
|
<CppCompile Include="..\src\gtest_main.cc">
|
||||||
|
<BuildOrder>0</BuildOrder>
|
||||||
|
</CppCompile>
|
||||||
|
<BuildConfiguration Include="Debug">
|
||||||
|
<Key>Cfg_1</Key>
|
||||||
|
</BuildConfiguration>
|
||||||
|
<BuildConfiguration Include="Release">
|
||||||
|
<Key>Cfg_2</Key>
|
||||||
|
</BuildConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
88
external/gtest/codegear/gtest_unittest.cbproj
vendored
Normal file
88
external/gtest/codegear/gtest_unittest.cbproj
vendored
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ProjectGuid>{eea63393-5ac5-4b9c-8909-d75fef2daa41}</ProjectGuid>
|
||||||
|
<Config Condition="'$(Config)'==''">Release</Config>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
|
||||||
|
<Base>true</Base>
|
||||||
|
<Cfg_1>true</Cfg_1>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
|
||||||
|
<Base>true</Base>
|
||||||
|
<Cfg_2>true</Cfg_2>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Base)'!=''">
|
||||||
|
<OutputExt>exe</OutputExt>
|
||||||
|
<BCC_OptimizeForSpeed>true</BCC_OptimizeForSpeed>
|
||||||
|
<Defines>NO_STRICT</Defines>
|
||||||
|
<DCC_CBuilderOutput>JPHNE</DCC_CBuilderOutput>
|
||||||
|
<DynamicRTL>true</DynamicRTL>
|
||||||
|
<ILINK_ObjectSearchPath>..\test</ILINK_ObjectSearchPath>
|
||||||
|
<UsePackages>true</UsePackages>
|
||||||
|
<ProjectType>CppConsoleApplication</ProjectType>
|
||||||
|
<NoVCL>true</NoVCL>
|
||||||
|
<BCC_CPPCompileAlways>true</BCC_CPPCompileAlways>
|
||||||
|
<PackageImports>rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi</PackageImports>
|
||||||
|
<BCC_wpar>false</BCC_wpar>
|
||||||
|
<IncludePath>$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test;..</IncludePath>
|
||||||
|
<ILINK_LibraryPath>$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test</ILINK_LibraryPath>
|
||||||
|
<Multithreaded>true</Multithreaded>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||||
|
<BCC_OptimizeForSpeed>false</BCC_OptimizeForSpeed>
|
||||||
|
<DCC_Optimize>false</DCC_Optimize>
|
||||||
|
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
|
||||||
|
<Defines>_DEBUG;$(Defines)</Defines>
|
||||||
|
<ILINK_FullDebugInfo>true</ILINK_FullDebugInfo>
|
||||||
|
<BCC_InlineFunctionExpansion>false</BCC_InlineFunctionExpansion>
|
||||||
|
<ILINK_DisableIncrementalLinking>true</ILINK_DisableIncrementalLinking>
|
||||||
|
<BCC_UseRegisterVariables>None</BCC_UseRegisterVariables>
|
||||||
|
<DCC_Define>DEBUG</DCC_Define>
|
||||||
|
<BCC_DebugLineNumbers>true</BCC_DebugLineNumbers>
|
||||||
|
<IntermediateOutputDir>Debug</IntermediateOutputDir>
|
||||||
|
<TASM_DisplaySourceLines>true</TASM_DisplaySourceLines>
|
||||||
|
<BCC_StackFrames>true</BCC_StackFrames>
|
||||||
|
<BCC_DisableOptimizations>true</BCC_DisableOptimizations>
|
||||||
|
<ILINK_LibraryPath>$(BDS)\lib\debug;$(ILINK_LibraryPath)</ILINK_LibraryPath>
|
||||||
|
<TASM_Debugging>Full</TASM_Debugging>
|
||||||
|
<BCC_SourceDebuggingOn>true</BCC_SourceDebuggingOn>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||||
|
<Defines>NDEBUG;$(Defines)</Defines>
|
||||||
|
<IntermediateOutputDir>Release</IntermediateOutputDir>
|
||||||
|
<ILINK_LibraryPath>$(BDS)\lib\release;$(ILINK_LibraryPath)</ILINK_LibraryPath>
|
||||||
|
<TASM_Debugging>None</TASM_Debugging>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ProjectExtensions>
|
||||||
|
<Borland.Personality>CPlusPlusBuilder.Personality</Borland.Personality>
|
||||||
|
<Borland.ProjectType>CppConsoleApplication</Borland.ProjectType>
|
||||||
|
<BorlandProject>
|
||||||
|
<BorlandProject><CPlusPlusBuilder.Personality><VersionInfo><VersionInfo Name="IncludeVerInfo">False</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">1033</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName"></VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName"></VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Debugging><Debugging Name="DebugSourceDirs"></Debugging></Debugging><Parameters><Parameters Name="RunParams"></Parameters><Parameters Name="Launcher"></Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="DebugCWD"></Parameters><Parameters Name="HostApplication"></Parameters><Parameters Name="RemoteHost"></Parameters><Parameters Name="RemotePath"></Parameters><Parameters Name="RemoteParams"></Parameters><Parameters Name="RemoteLauncher"></Parameters><Parameters Name="UseRemoteLauncher">False</Parameters><Parameters Name="RemoteCWD"></Parameters><Parameters Name="RemoteDebug">False</Parameters><Parameters Name="Debug Symbols Search Path"></Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Excluded_Packages>
|
||||||
|
|
||||||
|
|
||||||
|
<Excluded_Packages Name="$(BDS)\bin\bcboffice2k100.bpl">CodeGear C++Builder Office 2000 Servers Package</Excluded_Packages>
|
||||||
|
<Excluded_Packages Name="$(BDS)\bin\bcbofficexp100.bpl">CodeGear C++Builder Office XP Servers Package</Excluded_Packages>
|
||||||
|
</Excluded_Packages><Linker><Linker Name="LibPrefix"></Linker><Linker Name="LibSuffix"></Linker><Linker Name="LibVersion"></Linker></Linker><ProjectProperties><ProjectProperties Name="AutoShowDeps">False</ProjectProperties><ProjectProperties Name="ManagePaths">True</ProjectProperties><ProjectProperties Name="VerifyPackages">True</ProjectProperties></ProjectProperties><HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Count">3</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item0">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item1">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item2">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include</HistoryLists_hlIncludePath></HistoryLists_hlIncludePath><HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Count">1</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item0">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item1">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item2">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;$(OUTPUTDIR);..\test</HistoryLists_hlILINK_LibraryPath></HistoryLists_hlILINK_LibraryPath><HistoryLists_hlDefines><HistoryLists_hlDefines Name="Count">2</HistoryLists_hlDefines><HistoryLists_hlDefines Name="Item0">NO_STRICT</HistoryLists_hlDefines><HistoryLists_hlDefines Name="Item1">STRICT</HistoryLists_hlDefines></HistoryLists_hlDefines></CPlusPlusBuilder.Personality></BorlandProject></BorlandProject>
|
||||||
|
</ProjectExtensions>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Borland.Cpp.Targets" />
|
||||||
|
<ItemGroup>
|
||||||
|
<CppCompile Include="..\test\gtest_unittest.cc">
|
||||||
|
<BuildOrder>0</BuildOrder>
|
||||||
|
</CppCompile>
|
||||||
|
<CppCompile Include="gtest_link.cc">
|
||||||
|
<BuildOrder>1</BuildOrder>
|
||||||
|
</CppCompile>
|
||||||
|
<BuildConfiguration Include="Debug">
|
||||||
|
<Key>Cfg_1</Key>
|
||||||
|
</BuildConfiguration>
|
||||||
|
<BuildConfiguration Include="Release">
|
||||||
|
<Key>Cfg_2</Key>
|
||||||
|
</BuildConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
18222
external/gtest/configure
vendored
Normal file
18222
external/gtest/configure
vendored
Normal file
File diff suppressed because it is too large
Load diff
68
external/gtest/configure.ac
vendored
Normal file
68
external/gtest/configure.ac
vendored
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
m4_include(m4/acx_pthread.m4)
|
||||||
|
|
||||||
|
# At this point, the Xcode project assumes the version string will be three
|
||||||
|
# integers separated by periods and surrounded by square brackets (e.g.
|
||||||
|
# "[1.0.1]"). It also asumes that there won't be any closing parenthesis
|
||||||
|
# between "AC_INIT(" and the closing ")" including comments and strings.
|
||||||
|
AC_INIT([Google C++ Testing Framework],
|
||||||
|
[1.7.0],
|
||||||
|
[googletestframework@googlegroups.com],
|
||||||
|
[gtest])
|
||||||
|
|
||||||
|
# Provide various options to initialize the Autoconf and configure processes.
|
||||||
|
AC_PREREQ([2.59])
|
||||||
|
AC_CONFIG_SRCDIR([./LICENSE])
|
||||||
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
|
AC_CONFIG_AUX_DIR([build-aux])
|
||||||
|
AC_CONFIG_HEADERS([build-aux/config.h])
|
||||||
|
AC_CONFIG_FILES([Makefile])
|
||||||
|
AC_CONFIG_FILES([scripts/gtest-config], [chmod +x scripts/gtest-config])
|
||||||
|
|
||||||
|
# Initialize Automake with various options. We require at least v1.9, prevent
|
||||||
|
# pedantic complaints about package files, and enable various distribution
|
||||||
|
# targets.
|
||||||
|
AM_INIT_AUTOMAKE([1.9 dist-bzip2 dist-zip foreign subdir-objects])
|
||||||
|
|
||||||
|
# Check for programs used in building Google Test.
|
||||||
|
AC_PROG_CC
|
||||||
|
AC_PROG_CXX
|
||||||
|
AC_LANG([C++])
|
||||||
|
AC_PROG_LIBTOOL
|
||||||
|
|
||||||
|
# TODO(chandlerc@google.com): Currently we aren't running the Python tests
|
||||||
|
# against the interpreter detected by AM_PATH_PYTHON, and so we condition
|
||||||
|
# HAVE_PYTHON by requiring "python" to be in the PATH, and that interpreter's
|
||||||
|
# version to be >= 2.3. This will allow the scripts to use a "/usr/bin/env"
|
||||||
|
# hashbang.
|
||||||
|
PYTHON= # We *do not* allow the user to specify a python interpreter
|
||||||
|
AC_PATH_PROG([PYTHON],[python],[:])
|
||||||
|
AS_IF([test "$PYTHON" != ":"],
|
||||||
|
[AM_PYTHON_CHECK_VERSION([$PYTHON],[2.3],[:],[PYTHON=":"])])
|
||||||
|
AM_CONDITIONAL([HAVE_PYTHON],[test "$PYTHON" != ":"])
|
||||||
|
|
||||||
|
# Configure pthreads.
|
||||||
|
AC_ARG_WITH([pthreads],
|
||||||
|
[AS_HELP_STRING([--with-pthreads],
|
||||||
|
[use pthreads (default is yes)])],
|
||||||
|
[with_pthreads=$withval],
|
||||||
|
[with_pthreads=check])
|
||||||
|
|
||||||
|
have_pthreads=no
|
||||||
|
AS_IF([test "x$with_pthreads" != "xno"],
|
||||||
|
[ACX_PTHREAD(
|
||||||
|
[],
|
||||||
|
[AS_IF([test "x$with_pthreads" != "xcheck"],
|
||||||
|
[AC_MSG_FAILURE(
|
||||||
|
[--with-pthreads was specified, but unable to be used])])])
|
||||||
|
have_pthreads="$acx_pthread_ok"])
|
||||||
|
AM_CONDITIONAL([HAVE_PTHREADS],[test "x$have_pthreads" = "xyes"])
|
||||||
|
AC_SUBST(PTHREAD_CFLAGS)
|
||||||
|
AC_SUBST(PTHREAD_LIBS)
|
||||||
|
|
||||||
|
# TODO(chandlerc@google.com) Check for the necessary system headers.
|
||||||
|
|
||||||
|
# TODO(chandlerc@google.com) Check the types, structures, and other compiler
|
||||||
|
# and architecture characteristics.
|
||||||
|
|
||||||
|
# Output the generated files. No further autoconf macros may be used.
|
||||||
|
AC_OUTPUT
|
9592
external/gtest/fused-src/gtest/gtest-all.cc
vendored
Normal file
9592
external/gtest/fused-src/gtest/gtest-all.cc
vendored
Normal file
File diff suppressed because it is too large
Load diff
20061
external/gtest/fused-src/gtest/gtest.h
vendored
Normal file
20061
external/gtest/fused-src/gtest/gtest.h
vendored
Normal file
File diff suppressed because it is too large
Load diff
|
@ -27,13 +27,12 @@
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include <iostream>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "gtest/gtest.h"
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
GTEST_API_ int main(int argc, char **argv) {
|
GTEST_API_ int main(int argc, char **argv) {
|
||||||
std::cout << "Running main() from gtest_main.cc\n";
|
printf("Running main() from gtest_main.cc\n");
|
||||||
|
|
||||||
testing::InitGoogleTest(&argc, argv);
|
testing::InitGoogleTest(&argc, argv);
|
||||||
return RUN_ALL_TESTS();
|
return RUN_ALL_TESTS();
|
||||||
}
|
}
|
|
@ -51,6 +51,17 @@ GTEST_DECLARE_string_(death_test_style);
|
||||||
|
|
||||||
#if GTEST_HAS_DEATH_TEST
|
#if GTEST_HAS_DEATH_TEST
|
||||||
|
|
||||||
|
namespace internal {
|
||||||
|
|
||||||
|
// Returns a Boolean value indicating whether the caller is currently
|
||||||
|
// executing in the context of the death test child process. Tools such as
|
||||||
|
// Valgrind heap checkers may need this to modify their behavior in death
|
||||||
|
// tests. IMPORTANT: This is an internal utility. Using it may break the
|
||||||
|
// implementation of death tests. User code MUST NOT use it.
|
||||||
|
GTEST_API_ bool InDeathTestChild();
|
||||||
|
|
||||||
|
} // namespace internal
|
||||||
|
|
||||||
// The following macros are useful for writing death tests.
|
// The following macros are useful for writing death tests.
|
||||||
|
|
||||||
// Here's what happens when an ASSERT_DEATH* or EXPECT_DEATH* is
|
// Here's what happens when an ASSERT_DEATH* or EXPECT_DEATH* is
|
||||||
|
@ -75,7 +86,7 @@ GTEST_DECLARE_string_(death_test_style);
|
||||||
// for (int i = 0; i < 5; i++) {
|
// for (int i = 0; i < 5; i++) {
|
||||||
// EXPECT_DEATH(server.ProcessRequest(i),
|
// EXPECT_DEATH(server.ProcessRequest(i),
|
||||||
// "Invalid request .* in ProcessRequest()")
|
// "Invalid request .* in ProcessRequest()")
|
||||||
// << "Failed to die on request " << i);
|
// << "Failed to die on request " << i;
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// ASSERT_EXIT(server.ExitNow(), ::testing::ExitedWithCode(0), "Exiting");
|
// ASSERT_EXIT(server.ExitNow(), ::testing::ExitedWithCode(0), "Exiting");
|
||||||
|
@ -245,10 +256,10 @@ class GTEST_API_ KilledBySignal {
|
||||||
# ifdef NDEBUG
|
# ifdef NDEBUG
|
||||||
|
|
||||||
# define EXPECT_DEBUG_DEATH(statement, regex) \
|
# define EXPECT_DEBUG_DEATH(statement, regex) \
|
||||||
do { statement; } while (::testing::internal::AlwaysFalse())
|
GTEST_EXECUTE_STATEMENT_(statement, regex)
|
||||||
|
|
||||||
# define ASSERT_DEBUG_DEATH(statement, regex) \
|
# define ASSERT_DEBUG_DEATH(statement, regex) \
|
||||||
do { statement; } while (::testing::internal::AlwaysFalse())
|
GTEST_EXECUTE_STATEMENT_(statement, regex)
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
|
@ -48,8 +48,11 @@
|
||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
#include "gtest/internal/gtest-string.h"
|
#include "gtest/internal/gtest-port.h"
|
||||||
#include "gtest/internal/gtest-internal.h"
|
|
||||||
|
// Ensures that there is at least one operator<< in the global namespace.
|
||||||
|
// See Message& operator<<(...) below for why.
|
||||||
|
void operator<<(const testing::internal::Secret&, int);
|
||||||
|
|
||||||
namespace testing {
|
namespace testing {
|
||||||
|
|
||||||
|
@ -87,15 +90,7 @@ class GTEST_API_ Message {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructs an empty Message.
|
// Constructs an empty Message.
|
||||||
// We allocate the stringstream separately because otherwise each use of
|
Message();
|
||||||
// ASSERT/EXPECT in a procedure adds over 200 bytes to the procedure's
|
|
||||||
// stack frame leading to huge stack frames in some cases; gcc does not reuse
|
|
||||||
// the stack space.
|
|
||||||
Message() : ss_(new ::std::stringstream) {
|
|
||||||
// By default, we want there to be enough precision when printing
|
|
||||||
// a double to a Message.
|
|
||||||
*ss_ << std::setprecision(std::numeric_limits<double>::digits10 + 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copy constructor.
|
// Copy constructor.
|
||||||
Message(const Message& msg) : ss_(new ::std::stringstream) { // NOLINT
|
Message(const Message& msg) : ss_(new ::std::stringstream) { // NOLINT
|
||||||
|
@ -118,7 +113,22 @@ class GTEST_API_ Message {
|
||||||
// Streams a non-pointer value to this object.
|
// Streams a non-pointer value to this object.
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline Message& operator <<(const T& val) {
|
inline Message& operator <<(const T& val) {
|
||||||
::GTestStreamToHelper(ss_.get(), val);
|
// Some libraries overload << for STL containers. These
|
||||||
|
// overloads are defined in the global namespace instead of ::std.
|
||||||
|
//
|
||||||
|
// C++'s symbol lookup rule (i.e. Koenig lookup) says that these
|
||||||
|
// overloads are visible in either the std namespace or the global
|
||||||
|
// namespace, but not other namespaces, including the testing
|
||||||
|
// namespace which Google Test's Message class is in.
|
||||||
|
//
|
||||||
|
// To allow STL containers (and other types that has a << operator
|
||||||
|
// defined in the global namespace) to be used in Google Test
|
||||||
|
// assertions, testing::Message must access the custom << operator
|
||||||
|
// from the global namespace. With this using declaration,
|
||||||
|
// overloads of << defined in the global namespace and those
|
||||||
|
// visible via Koenig lookup are both exposed in this function.
|
||||||
|
using ::operator <<;
|
||||||
|
*ss_ << val;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,7 +150,7 @@ class GTEST_API_ Message {
|
||||||
if (pointer == NULL) {
|
if (pointer == NULL) {
|
||||||
*ss_ << "(null)";
|
*ss_ << "(null)";
|
||||||
} else {
|
} else {
|
||||||
::GTestStreamToHelper(ss_.get(), pointer);
|
*ss_ << pointer;
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
@ -164,12 +174,8 @@ class GTEST_API_ Message {
|
||||||
|
|
||||||
// These two overloads allow streaming a wide C string to a Message
|
// These two overloads allow streaming a wide C string to a Message
|
||||||
// using the UTF-8 encoding.
|
// using the UTF-8 encoding.
|
||||||
Message& operator <<(const wchar_t* wide_c_str) {
|
Message& operator <<(const wchar_t* wide_c_str);
|
||||||
return *this << internal::String::ShowWideCString(wide_c_str);
|
Message& operator <<(wchar_t* wide_c_str);
|
||||||
}
|
|
||||||
Message& operator <<(wchar_t* wide_c_str) {
|
|
||||||
return *this << internal::String::ShowWideCString(wide_c_str);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if GTEST_HAS_STD_WSTRING
|
#if GTEST_HAS_STD_WSTRING
|
||||||
// Converts the given wide string to a narrow string using the UTF-8
|
// Converts the given wide string to a narrow string using the UTF-8
|
||||||
|
@ -183,13 +189,11 @@ class GTEST_API_ Message {
|
||||||
Message& operator <<(const ::wstring& wstr);
|
Message& operator <<(const ::wstring& wstr);
|
||||||
#endif // GTEST_HAS_GLOBAL_WSTRING
|
#endif // GTEST_HAS_GLOBAL_WSTRING
|
||||||
|
|
||||||
// Gets the text streamed to this object so far as a String.
|
// Gets the text streamed to this object so far as an std::string.
|
||||||
// Each '\0' character in the buffer is replaced with "\\0".
|
// Each '\0' character in the buffer is replaced with "\\0".
|
||||||
//
|
//
|
||||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
|
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
|
||||||
internal::String GetString() const {
|
std::string GetString() const;
|
||||||
return internal::StringStreamToString(ss_.get());
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -199,16 +203,20 @@ class GTEST_API_ Message {
|
||||||
// decide between class template specializations for T and T*, so a
|
// decide between class template specializations for T and T*, so a
|
||||||
// tr1::type_traits-like is_pointer works, and we can overload on that.
|
// tr1::type_traits-like is_pointer works, and we can overload on that.
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline void StreamHelper(internal::true_type /*dummy*/, T* pointer) {
|
inline void StreamHelper(internal::true_type /*is_pointer*/, T* pointer) {
|
||||||
if (pointer == NULL) {
|
if (pointer == NULL) {
|
||||||
*ss_ << "(null)";
|
*ss_ << "(null)";
|
||||||
} else {
|
} else {
|
||||||
::GTestStreamToHelper(ss_.get(), pointer);
|
*ss_ << pointer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline void StreamHelper(internal::false_type /*dummy*/, const T& value) {
|
inline void StreamHelper(internal::false_type /*is_pointer*/,
|
||||||
::GTestStreamToHelper(ss_.get(), value);
|
const T& value) {
|
||||||
|
// See the comments in Message& operator <<(const T&) above for why
|
||||||
|
// we need this using statement.
|
||||||
|
using ::operator <<;
|
||||||
|
*ss_ << value;
|
||||||
}
|
}
|
||||||
#endif // GTEST_OS_SYMBIAN
|
#endif // GTEST_OS_SYMBIAN
|
||||||
|
|
||||||
|
@ -225,6 +233,18 @@ inline std::ostream& operator <<(std::ostream& os, const Message& sb) {
|
||||||
return os << sb.GetString();
|
return os << sb.GetString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace internal {
|
||||||
|
|
||||||
|
// Converts a streamable value to an std::string. A NULL pointer is
|
||||||
|
// converted to "(null)". When the input value is a ::string,
|
||||||
|
// ::std::string, ::wstring, or ::std::wstring object, each NUL
|
||||||
|
// character in it is replaced with "\\0".
|
||||||
|
template <typename T>
|
||||||
|
std::string StreamableToString(const T& streamable) {
|
||||||
|
return (Message() << streamable).GetString();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace internal
|
||||||
} // namespace testing
|
} // namespace testing
|
||||||
|
|
||||||
#endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
|
#endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
|
|
@ -1257,7 +1257,7 @@ inline internal::ParamGenerator<bool> Bool() {
|
||||||
// Boolean flags:
|
// Boolean flags:
|
||||||
//
|
//
|
||||||
// class FlagDependentTest
|
// class FlagDependentTest
|
||||||
// : public testing::TestWithParam<tuple(bool, bool)> > {
|
// : public testing::TestWithParam<tuple<bool, bool> > {
|
||||||
// virtual void SetUp() {
|
// virtual void SetUp() {
|
||||||
// // Assigns external_flag_1 and external_flag_2 values from the tuple.
|
// // Assigns external_flag_1 and external_flag_2 values from the tuple.
|
||||||
// tie(external_flag_1, external_flag_2) = GetParam();
|
// tie(external_flag_1, external_flag_2) = GetParam();
|
|
@ -414,7 +414,7 @@ inline internal::ParamGenerator<bool> Bool() {
|
||||||
// Boolean flags:
|
// Boolean flags:
|
||||||
//
|
//
|
||||||
// class FlagDependentTest
|
// class FlagDependentTest
|
||||||
// : public testing::TestWithParam<tuple(bool, bool)> > {
|
// : public testing::TestWithParam<tuple<bool, bool> > {
|
||||||
// virtual void SetUp() {
|
// virtual void SetUp() {
|
||||||
// // Assigns external_flag_1 and external_flag_2 values from the tuple.
|
// // Assigns external_flag_1 and external_flag_2 values from the tuple.
|
||||||
// tie(external_flag_1, external_flag_2) = GetParam();
|
// tie(external_flag_1, external_flag_2) = GetParam();
|
|
@ -630,9 +630,12 @@ void UniversalPrintArray(const T* begin, size_t len, ::std::ostream* os) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// This overload prints a (const) char array compactly.
|
// This overload prints a (const) char array compactly.
|
||||||
GTEST_API_ void UniversalPrintArray(const char* begin,
|
GTEST_API_ void UniversalPrintArray(
|
||||||
size_t len,
|
const char* begin, size_t len, ::std::ostream* os);
|
||||||
::std::ostream* os);
|
|
||||||
|
// This overload prints a (const) wchar_t array compactly.
|
||||||
|
GTEST_API_ void UniversalPrintArray(
|
||||||
|
const wchar_t* begin, size_t len, ::std::ostream* os);
|
||||||
|
|
||||||
// Implements printing an array type T[N].
|
// Implements printing an array type T[N].
|
||||||
template <typename T, size_t N>
|
template <typename T, size_t N>
|
||||||
|
@ -673,19 +676,72 @@ class UniversalPrinter<T&> {
|
||||||
// Prints a value tersely: for a reference type, the referenced value
|
// Prints a value tersely: for a reference type, the referenced value
|
||||||
// (but not the address) is printed; for a (const) char pointer, the
|
// (but not the address) is printed; for a (const) char pointer, the
|
||||||
// NUL-terminated string (but not the pointer) is printed.
|
// NUL-terminated string (but not the pointer) is printed.
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
class UniversalTersePrinter {
|
||||||
|
public:
|
||||||
|
static void Print(const T& value, ::std::ostream* os) {
|
||||||
|
UniversalPrint(value, os);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
template <typename T>
|
||||||
|
class UniversalTersePrinter<T&> {
|
||||||
|
public:
|
||||||
|
static void Print(const T& value, ::std::ostream* os) {
|
||||||
|
UniversalPrint(value, os);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
template <typename T, size_t N>
|
||||||
|
class UniversalTersePrinter<T[N]> {
|
||||||
|
public:
|
||||||
|
static void Print(const T (&value)[N], ::std::ostream* os) {
|
||||||
|
UniversalPrinter<T[N]>::Print(value, os);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
template <>
|
||||||
|
class UniversalTersePrinter<const char*> {
|
||||||
|
public:
|
||||||
|
static void Print(const char* str, ::std::ostream* os) {
|
||||||
|
if (str == NULL) {
|
||||||
|
*os << "NULL";
|
||||||
|
} else {
|
||||||
|
UniversalPrint(string(str), os);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
template <>
|
||||||
|
class UniversalTersePrinter<char*> {
|
||||||
|
public:
|
||||||
|
static void Print(char* str, ::std::ostream* os) {
|
||||||
|
UniversalTersePrinter<const char*>::Print(str, os);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#if GTEST_HAS_STD_WSTRING
|
||||||
|
template <>
|
||||||
|
class UniversalTersePrinter<const wchar_t*> {
|
||||||
|
public:
|
||||||
|
static void Print(const wchar_t* str, ::std::ostream* os) {
|
||||||
|
if (str == NULL) {
|
||||||
|
*os << "NULL";
|
||||||
|
} else {
|
||||||
|
UniversalPrint(::std::wstring(str), os);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template <>
|
||||||
|
class UniversalTersePrinter<wchar_t*> {
|
||||||
|
public:
|
||||||
|
static void Print(wchar_t* str, ::std::ostream* os) {
|
||||||
|
UniversalTersePrinter<const wchar_t*>::Print(str, os);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void UniversalTersePrint(const T& value, ::std::ostream* os) {
|
void UniversalTersePrint(const T& value, ::std::ostream* os) {
|
||||||
UniversalPrint(value, os);
|
UniversalTersePrinter<T>::Print(value, os);
|
||||||
}
|
|
||||||
inline void UniversalTersePrint(const char* str, ::std::ostream* os) {
|
|
||||||
if (str == NULL) {
|
|
||||||
*os << "NULL";
|
|
||||||
} else {
|
|
||||||
UniversalPrint(string(str), os);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
inline void UniversalTersePrint(char* str, ::std::ostream* os) {
|
|
||||||
UniversalTersePrint(static_cast<const char*>(str), os);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prints a value using the type inferred by the compiler. The
|
// Prints a value using the type inferred by the compiler. The
|
||||||
|
@ -694,7 +750,10 @@ inline void UniversalTersePrint(char* str, ::std::ostream* os) {
|
||||||
// NUL-terminated string.
|
// NUL-terminated string.
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void UniversalPrint(const T& value, ::std::ostream* os) {
|
void UniversalPrint(const T& value, ::std::ostream* os) {
|
||||||
UniversalPrinter<T>::Print(value, os);
|
// A workarond for the bug in VC++ 7.1 that prevents us from instantiating
|
||||||
|
// UniversalPrinter with T directly.
|
||||||
|
typedef T T1;
|
||||||
|
UniversalPrinter<T1>::Print(value, os);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if GTEST_HAS_TR1_TUPLE
|
#if GTEST_HAS_TR1_TUPLE
|
||||||
|
@ -787,7 +846,7 @@ Strings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) {
|
||||||
template <typename T>
|
template <typename T>
|
||||||
::std::string PrintToString(const T& value) {
|
::std::string PrintToString(const T& value) {
|
||||||
::std::stringstream ss;
|
::std::stringstream ss;
|
||||||
internal::UniversalTersePrint(value, &ss);
|
internal::UniversalTersePrinter<T>::Print(value, &ss);
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
|
@ -223,7 +223,7 @@ class GTEST_API_ SingleFailureChecker {
|
||||||
(substr));\
|
(substr));\
|
||||||
{\
|
{\
|
||||||
::testing::ScopedFakeTestPartResultReporter gtest_reporter(\
|
::testing::ScopedFakeTestPartResultReporter gtest_reporter(\
|
||||||
::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS,\
|
::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, \
|
||||||
>est_failures);\
|
>est_failures);\
|
||||||
if (::testing::internal::AlwaysTrue()) { statement; }\
|
if (::testing::internal::AlwaysTrue()) { statement; }\
|
||||||
}\
|
}\
|
|
@ -62,7 +62,7 @@ class GTEST_API_ TestPartResult {
|
||||||
int a_line_number,
|
int a_line_number,
|
||||||
const char* a_message)
|
const char* a_message)
|
||||||
: type_(a_type),
|
: type_(a_type),
|
||||||
file_name_(a_file_name),
|
file_name_(a_file_name == NULL ? "" : a_file_name),
|
||||||
line_number_(a_line_number),
|
line_number_(a_line_number),
|
||||||
summary_(ExtractSummary(a_message)),
|
summary_(ExtractSummary(a_message)),
|
||||||
message_(a_message) {
|
message_(a_message) {
|
||||||
|
@ -73,7 +73,9 @@ class GTEST_API_ TestPartResult {
|
||||||
|
|
||||||
// Gets the name of the source file where the test part took place, or
|
// Gets the name of the source file where the test part took place, or
|
||||||
// NULL if it's unknown.
|
// NULL if it's unknown.
|
||||||
const char* file_name() const { return file_name_.c_str(); }
|
const char* file_name() const {
|
||||||
|
return file_name_.empty() ? NULL : file_name_.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
// Gets the line in the source file where the test part took place,
|
// Gets the line in the source file where the test part took place,
|
||||||
// or -1 if it's unknown.
|
// or -1 if it's unknown.
|
||||||
|
@ -96,21 +98,22 @@ class GTEST_API_ TestPartResult {
|
||||||
|
|
||||||
// Returns true iff the test part fatally failed.
|
// Returns true iff the test part fatally failed.
|
||||||
bool fatally_failed() const { return type_ == kFatalFailure; }
|
bool fatally_failed() const { return type_ == kFatalFailure; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Type type_;
|
Type type_;
|
||||||
|
|
||||||
// Gets the summary of the failure message by omitting the stack
|
// Gets the summary of the failure message by omitting the stack
|
||||||
// trace in it.
|
// trace in it.
|
||||||
static internal::String ExtractSummary(const char* message);
|
static std::string ExtractSummary(const char* message);
|
||||||
|
|
||||||
// The name of the source file where the test part took place, or
|
// The name of the source file where the test part took place, or
|
||||||
// NULL if the source file is unknown.
|
// "" if the source file is unknown.
|
||||||
internal::String file_name_;
|
std::string file_name_;
|
||||||
// The line in the source file where the test part took place, or -1
|
// The line in the source file where the test part took place, or -1
|
||||||
// if the line number is unknown.
|
// if the line number is unknown.
|
||||||
int line_number_;
|
int line_number_;
|
||||||
internal::String summary_; // The test failure summary.
|
std::string summary_; // The test failure summary.
|
||||||
internal::String message_; // The test failure message.
|
std::string message_; // The test failure message.
|
||||||
};
|
};
|
||||||
|
|
||||||
// Prints a TestPartResult object.
|
// Prints a TestPartResult object.
|
|
@ -52,6 +52,7 @@
|
||||||
#define GTEST_INCLUDE_GTEST_GTEST_H_
|
#define GTEST_INCLUDE_GTEST_GTEST_H_
|
||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
#include <ostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "gtest/internal/gtest-internal.h"
|
#include "gtest/internal/gtest-internal.h"
|
||||||
|
@ -153,25 +154,15 @@ class ExecDeathTest;
|
||||||
class NoExecDeathTest;
|
class NoExecDeathTest;
|
||||||
class FinalSuccessChecker;
|
class FinalSuccessChecker;
|
||||||
class GTestFlagSaver;
|
class GTestFlagSaver;
|
||||||
|
class StreamingListenerTest;
|
||||||
class TestResultAccessor;
|
class TestResultAccessor;
|
||||||
class TestEventListenersAccessor;
|
class TestEventListenersAccessor;
|
||||||
class TestEventRepeater;
|
class TestEventRepeater;
|
||||||
|
class UnitTestRecordPropertyTestHelper;
|
||||||
class WindowsDeathTest;
|
class WindowsDeathTest;
|
||||||
class UnitTestImpl* GetUnitTestImpl();
|
class UnitTestImpl* GetUnitTestImpl();
|
||||||
void ReportFailureInUnknownLocation(TestPartResult::Type result_type,
|
void ReportFailureInUnknownLocation(TestPartResult::Type result_type,
|
||||||
const String& message);
|
const std::string& message);
|
||||||
|
|
||||||
// Converts a streamable value to a String. A NULL pointer is
|
|
||||||
// converted to "(null)". When the input value is a ::string,
|
|
||||||
// ::std::string, ::wstring, or ::std::wstring object, each NUL
|
|
||||||
// character in it is replaced with "\\0".
|
|
||||||
// Declared in gtest-internal.h but defined here, so that it has access
|
|
||||||
// to the definition of the Message class, required by the ARM
|
|
||||||
// compiler.
|
|
||||||
template <typename T>
|
|
||||||
String StreamableToString(const T& streamable) {
|
|
||||||
return (Message() << streamable).GetString();
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
|
|
||||||
|
@ -391,20 +382,21 @@ class GTEST_API_ Test {
|
||||||
// non-fatal) failure.
|
// non-fatal) failure.
|
||||||
static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); }
|
static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); }
|
||||||
|
|
||||||
// Logs a property for the current test. Only the last value for a given
|
// Logs a property for the current test, test case, or for the entire
|
||||||
// key is remembered.
|
// invocation of the test program when used outside of the context of a
|
||||||
// These are public static so they can be called from utility functions
|
// test case. Only the last value for a given key is remembered. These
|
||||||
// that are not members of the test fixture.
|
// are public static so they can be called from utility functions that are
|
||||||
// The arguments are const char* instead strings, as Google Test is used
|
// not members of the test fixture. Calls to RecordProperty made during
|
||||||
// on platforms where string doesn't compile.
|
// lifespan of the test (from the moment its constructor starts to the
|
||||||
//
|
// moment its destructor finishes) will be output in XML as attributes of
|
||||||
// Note that a driving consideration for these RecordProperty methods
|
// the <testcase> element. Properties recorded from fixture's
|
||||||
// was to produce xml output suited to the Greenspan charting utility,
|
// SetUpTestCase or TearDownTestCase are logged as attributes of the
|
||||||
// which at present will only chart values that fit in a 32-bit int. It
|
// corresponding <testsuite> element. Calls to RecordProperty made in the
|
||||||
// is the user's responsibility to restrict their values to 32-bit ints
|
// global context (before or after invocation of RUN_ALL_TESTS and from
|
||||||
// if they intend them to be used with Greenspan.
|
// SetUp/TearDown method of Environment objects registered with Google
|
||||||
static void RecordProperty(const char* key, const char* value);
|
// Test) will be output as attributes of the <testsuites> element.
|
||||||
static void RecordProperty(const char* key, int value);
|
static void RecordProperty(const std::string& key, const std::string& value);
|
||||||
|
static void RecordProperty(const std::string& key, int value);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Creates a Test object.
|
// Creates a Test object.
|
||||||
|
@ -473,7 +465,7 @@ class TestProperty {
|
||||||
// C'tor. TestProperty does NOT have a default constructor.
|
// C'tor. TestProperty does NOT have a default constructor.
|
||||||
// Always use this constructor (with parameters) to create a
|
// Always use this constructor (with parameters) to create a
|
||||||
// TestProperty object.
|
// TestProperty object.
|
||||||
TestProperty(const char* a_key, const char* a_value) :
|
TestProperty(const std::string& a_key, const std::string& a_value) :
|
||||||
key_(a_key), value_(a_value) {
|
key_(a_key), value_(a_value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -488,15 +480,15 @@ class TestProperty {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sets a new value, overriding the one supplied in the constructor.
|
// Sets a new value, overriding the one supplied in the constructor.
|
||||||
void SetValue(const char* new_value) {
|
void SetValue(const std::string& new_value) {
|
||||||
value_ = new_value;
|
value_ = new_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// The key supplied by the user.
|
// The key supplied by the user.
|
||||||
internal::String key_;
|
std::string key_;
|
||||||
// The value supplied by the user.
|
// The value supplied by the user.
|
||||||
internal::String value_;
|
std::string value_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// The result of a single Test. This includes a list of
|
// The result of a single Test. This includes a list of
|
||||||
|
@ -547,6 +539,7 @@ class GTEST_API_ TestResult {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class TestInfo;
|
friend class TestInfo;
|
||||||
|
friend class TestCase;
|
||||||
friend class UnitTest;
|
friend class UnitTest;
|
||||||
friend class internal::DefaultGlobalTestPartResultReporter;
|
friend class internal::DefaultGlobalTestPartResultReporter;
|
||||||
friend class internal::ExecDeathTest;
|
friend class internal::ExecDeathTest;
|
||||||
|
@ -571,13 +564,16 @@ class GTEST_API_ TestResult {
|
||||||
// a non-fatal failure if invalid (e.g., if it conflicts with reserved
|
// a non-fatal failure if invalid (e.g., if it conflicts with reserved
|
||||||
// key names). If a property is already recorded for the same key, the
|
// key names). If a property is already recorded for the same key, the
|
||||||
// value will be updated, rather than storing multiple values for the same
|
// value will be updated, rather than storing multiple values for the same
|
||||||
// key.
|
// key. xml_element specifies the element for which the property is being
|
||||||
void RecordProperty(const TestProperty& test_property);
|
// recorded and is used for validation.
|
||||||
|
void RecordProperty(const std::string& xml_element,
|
||||||
|
const TestProperty& test_property);
|
||||||
|
|
||||||
// Adds a failure if the key is a reserved attribute of Google Test
|
// Adds a failure if the key is a reserved attribute of Google Test
|
||||||
// testcase tags. Returns true if the property is valid.
|
// testcase tags. Returns true if the property is valid.
|
||||||
// TODO(russr): Validate attribute names are legal and human readable.
|
// TODO(russr): Validate attribute names are legal and human readable.
|
||||||
static bool ValidateTestProperty(const TestProperty& test_property);
|
static bool ValidateTestProperty(const std::string& xml_element,
|
||||||
|
const TestProperty& test_property);
|
||||||
|
|
||||||
// Adds a test part result to the list.
|
// Adds a test part result to the list.
|
||||||
void AddTestPartResult(const TestPartResult& test_part_result);
|
void AddTestPartResult(const TestPartResult& test_part_result);
|
||||||
|
@ -650,9 +646,9 @@ class GTEST_API_ TestInfo {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns true if this test should run, that is if the test is not disabled
|
// Returns true if this test should run, that is if the test is not
|
||||||
// (or it is disabled but the also_run_disabled_tests flag has been specified)
|
// disabled (or it is disabled but the also_run_disabled_tests flag has
|
||||||
// and its full name matches the user-specified filter.
|
// been specified) and its full name matches the user-specified filter.
|
||||||
//
|
//
|
||||||
// Google Test allows the user to filter the tests by their full names.
|
// Google Test allows the user to filter the tests by their full names.
|
||||||
// The full name of a test Bar in test case Foo is defined as
|
// The full name of a test Bar in test case Foo is defined as
|
||||||
|
@ -668,22 +664,28 @@ class GTEST_API_ TestInfo {
|
||||||
// contains the character 'A' or starts with "Foo.".
|
// contains the character 'A' or starts with "Foo.".
|
||||||
bool should_run() const { return should_run_; }
|
bool should_run() const { return should_run_; }
|
||||||
|
|
||||||
// Returns true if the test was filtered out by --gtest_filter
|
// Returns true iff this test will appear in the XML report.
|
||||||
bool filtered_out() const { return !matches_filter_; }
|
bool is_reportable() const {
|
||||||
|
// For now, the XML report includes all tests matching the filter.
|
||||||
|
// In the future, we may trim tests that are excluded because of
|
||||||
|
// sharding.
|
||||||
|
return matches_filter_;
|
||||||
|
}
|
||||||
|
|
||||||
// Returns the result of the test.
|
// Returns the result of the test.
|
||||||
const TestResult* result() const { return &result_; }
|
const TestResult* result() const { return &result_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
#if GTEST_HAS_DEATH_TEST
|
#if GTEST_HAS_DEATH_TEST
|
||||||
friend class internal::DefaultDeathTestFactory;
|
friend class internal::DefaultDeathTestFactory;
|
||||||
#endif // GTEST_HAS_DEATH_TEST
|
#endif // GTEST_HAS_DEATH_TEST
|
||||||
friend class Test;
|
friend class Test;
|
||||||
friend class TestCase;
|
friend class TestCase;
|
||||||
friend class internal::UnitTestImpl;
|
friend class internal::UnitTestImpl;
|
||||||
|
friend class internal::StreamingListenerTest;
|
||||||
friend TestInfo* internal::MakeAndRegisterTestInfo(
|
friend TestInfo* internal::MakeAndRegisterTestInfo(
|
||||||
const char* test_case_name, const char* name,
|
const char* test_case_name,
|
||||||
|
const char* name,
|
||||||
const char* type_param,
|
const char* type_param,
|
||||||
const char* value_param,
|
const char* value_param,
|
||||||
internal::TypeId fixture_class_id,
|
internal::TypeId fixture_class_id,
|
||||||
|
@ -693,9 +695,10 @@ class GTEST_API_ TestInfo {
|
||||||
|
|
||||||
// Constructs a TestInfo object. The newly constructed instance assumes
|
// Constructs a TestInfo object. The newly constructed instance assumes
|
||||||
// ownership of the factory object.
|
// ownership of the factory object.
|
||||||
TestInfo(const char* test_case_name, const char* name,
|
TestInfo(const std::string& test_case_name,
|
||||||
const char* a_type_param,
|
const std::string& name,
|
||||||
const char* a_value_param,
|
const char* a_type_param, // NULL if not a type-parameterized test
|
||||||
|
const char* a_value_param, // NULL if not a value-parameterized test
|
||||||
internal::TypeId fixture_class_id,
|
internal::TypeId fixture_class_id,
|
||||||
internal::TestFactoryBase* factory);
|
internal::TestFactoryBase* factory);
|
||||||
|
|
||||||
|
@ -775,18 +778,21 @@ class GTEST_API_ TestCase {
|
||||||
// Returns true if any test in this test case should run.
|
// Returns true if any test in this test case should run.
|
||||||
bool should_run() const { return should_run_; }
|
bool should_run() const { return should_run_; }
|
||||||
|
|
||||||
// Returns true if this test case should be skipped in the report.
|
|
||||||
bool should_skip_report() const { return should_skip_report_; }
|
|
||||||
|
|
||||||
// Gets the number of successful tests in this test case.
|
// Gets the number of successful tests in this test case.
|
||||||
int successful_test_count() const;
|
int successful_test_count() const;
|
||||||
|
|
||||||
// Gets the number of failed tests in this test case.
|
// Gets the number of failed tests in this test case.
|
||||||
int failed_test_count() const;
|
int failed_test_count() const;
|
||||||
|
|
||||||
|
// Gets the number of disabled tests that will be reported in the XML report.
|
||||||
|
int reportable_disabled_test_count() const;
|
||||||
|
|
||||||
// Gets the number of disabled tests in this test case.
|
// Gets the number of disabled tests in this test case.
|
||||||
int disabled_test_count() const;
|
int disabled_test_count() const;
|
||||||
|
|
||||||
|
// Gets the number of tests to be printed in the XML report.
|
||||||
|
int reportable_test_count() const;
|
||||||
|
|
||||||
// Get the number of tests in this test case that should run.
|
// Get the number of tests in this test case that should run.
|
||||||
int test_to_run_count() const;
|
int test_to_run_count() const;
|
||||||
|
|
||||||
|
@ -806,6 +812,10 @@ class GTEST_API_ TestCase {
|
||||||
// total_test_count() - 1. If i is not in that range, returns NULL.
|
// total_test_count() - 1. If i is not in that range, returns NULL.
|
||||||
const TestInfo* GetTestInfo(int i) const;
|
const TestInfo* GetTestInfo(int i) const;
|
||||||
|
|
||||||
|
// Returns the TestResult that holds test properties recorded during
|
||||||
|
// execution of SetUpTestCase and TearDownTestCase.
|
||||||
|
const TestResult& ad_hoc_test_result() const { return ad_hoc_test_result_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class Test;
|
friend class Test;
|
||||||
friend class internal::UnitTestImpl;
|
friend class internal::UnitTestImpl;
|
||||||
|
@ -824,7 +834,6 @@ class GTEST_API_ TestCase {
|
||||||
|
|
||||||
// Sets the should_run member.
|
// Sets the should_run member.
|
||||||
void set_should_run(bool should) { should_run_ = should; }
|
void set_should_run(bool should) { should_run_ = should; }
|
||||||
void set_should_skip_report(bool should) { should_skip_report_ = should; }
|
|
||||||
|
|
||||||
// Adds a TestInfo to this test case. Will delete the TestInfo upon
|
// Adds a TestInfo to this test case. Will delete the TestInfo upon
|
||||||
// destruction of the TestCase object.
|
// destruction of the TestCase object.
|
||||||
|
@ -859,11 +868,22 @@ class GTEST_API_ TestCase {
|
||||||
return test_info->should_run() && test_info->result()->Failed();
|
return test_info->should_run() && test_info->result()->Failed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns true iff the test is disabled and will be reported in the XML
|
||||||
|
// report.
|
||||||
|
static bool TestReportableDisabled(const TestInfo* test_info) {
|
||||||
|
return test_info->is_reportable() && test_info->is_disabled_;
|
||||||
|
}
|
||||||
|
|
||||||
// Returns true iff test is disabled.
|
// Returns true iff test is disabled.
|
||||||
static bool TestDisabled(const TestInfo* test_info) {
|
static bool TestDisabled(const TestInfo* test_info) {
|
||||||
return test_info->is_disabled_;
|
return test_info->is_disabled_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns true iff this test will appear in the XML report.
|
||||||
|
static bool TestReportable(const TestInfo* test_info) {
|
||||||
|
return test_info->is_reportable();
|
||||||
|
}
|
||||||
|
|
||||||
// Returns true if the given test should run.
|
// Returns true if the given test should run.
|
||||||
static bool ShouldRunTest(const TestInfo* test_info) {
|
static bool ShouldRunTest(const TestInfo* test_info) {
|
||||||
return test_info->should_run();
|
return test_info->should_run();
|
||||||
|
@ -876,7 +896,7 @@ class GTEST_API_ TestCase {
|
||||||
void UnshuffleTests();
|
void UnshuffleTests();
|
||||||
|
|
||||||
// Name of the test case.
|
// Name of the test case.
|
||||||
internal::String name_;
|
std::string name_;
|
||||||
// Name of the parameter type, or NULL if this is not a typed or a
|
// Name of the parameter type, or NULL if this is not a typed or a
|
||||||
// type-parameterized test.
|
// type-parameterized test.
|
||||||
const internal::scoped_ptr<const ::std::string> type_param_;
|
const internal::scoped_ptr<const ::std::string> type_param_;
|
||||||
|
@ -893,10 +913,11 @@ class GTEST_API_ TestCase {
|
||||||
Test::TearDownTestCaseFunc tear_down_tc_;
|
Test::TearDownTestCaseFunc tear_down_tc_;
|
||||||
// True iff any test in this test case should run.
|
// True iff any test in this test case should run.
|
||||||
bool should_run_;
|
bool should_run_;
|
||||||
// True if this test case should not be reported
|
|
||||||
bool should_skip_report_;
|
|
||||||
// Elapsed time, in milliseconds.
|
// Elapsed time, in milliseconds.
|
||||||
TimeInMillis elapsed_time_;
|
TimeInMillis elapsed_time_;
|
||||||
|
// Holds test properties recorded during execution of SetUpTestCase and
|
||||||
|
// TearDownTestCase.
|
||||||
|
TestResult ad_hoc_test_result_;
|
||||||
|
|
||||||
// We disallow copying TestCases.
|
// We disallow copying TestCases.
|
||||||
GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase);
|
GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase);
|
||||||
|
@ -1116,11 +1137,13 @@ class GTEST_API_ UnitTest {
|
||||||
|
|
||||||
// Returns the TestCase object for the test that's currently running,
|
// Returns the TestCase object for the test that's currently running,
|
||||||
// or NULL if no test is running.
|
// or NULL if no test is running.
|
||||||
const TestCase* current_test_case() const;
|
const TestCase* current_test_case() const
|
||||||
|
GTEST_LOCK_EXCLUDED_(mutex_);
|
||||||
|
|
||||||
// Returns the TestInfo object for the test that's currently running,
|
// Returns the TestInfo object for the test that's currently running,
|
||||||
// or NULL if no test is running.
|
// or NULL if no test is running.
|
||||||
const TestInfo* current_test_info() const;
|
const TestInfo* current_test_info() const
|
||||||
|
GTEST_LOCK_EXCLUDED_(mutex_);
|
||||||
|
|
||||||
// Returns the random seed used at the start of the current test run.
|
// Returns the random seed used at the start of the current test run.
|
||||||
int random_seed() const;
|
int random_seed() const;
|
||||||
|
@ -1130,7 +1153,8 @@ class GTEST_API_ UnitTest {
|
||||||
// value-parameterized tests and instantiate and register them.
|
// value-parameterized tests and instantiate and register them.
|
||||||
//
|
//
|
||||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
|
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
|
||||||
internal::ParameterizedTestCaseRegistry& parameterized_test_registry();
|
internal::ParameterizedTestCaseRegistry& parameterized_test_registry()
|
||||||
|
GTEST_LOCK_EXCLUDED_(mutex_);
|
||||||
#endif // GTEST_HAS_PARAM_TEST
|
#endif // GTEST_HAS_PARAM_TEST
|
||||||
|
|
||||||
// Gets the number of successful test cases.
|
// Gets the number of successful test cases.
|
||||||
|
@ -1152,15 +1176,25 @@ class GTEST_API_ UnitTest {
|
||||||
// Gets the number of failed tests.
|
// Gets the number of failed tests.
|
||||||
int failed_test_count() const;
|
int failed_test_count() const;
|
||||||
|
|
||||||
|
// Gets the number of disabled tests that will be reported in the XML report.
|
||||||
|
int reportable_disabled_test_count() const;
|
||||||
|
|
||||||
// Gets the number of disabled tests.
|
// Gets the number of disabled tests.
|
||||||
int disabled_test_count() const;
|
int disabled_test_count() const;
|
||||||
|
|
||||||
|
// Gets the number of tests to be printed in the XML report.
|
||||||
|
int reportable_test_count() const;
|
||||||
|
|
||||||
// Gets the number of all tests.
|
// Gets the number of all tests.
|
||||||
int total_test_count() const;
|
int total_test_count() const;
|
||||||
|
|
||||||
// Gets the number of tests that should run.
|
// Gets the number of tests that should run.
|
||||||
int test_to_run_count() const;
|
int test_to_run_count() const;
|
||||||
|
|
||||||
|
// Gets the time of the test program start, in ms from the start of the
|
||||||
|
// UNIX epoch.
|
||||||
|
TimeInMillis start_timestamp() const;
|
||||||
|
|
||||||
// Gets the elapsed time, in milliseconds.
|
// Gets the elapsed time, in milliseconds.
|
||||||
TimeInMillis elapsed_time() const;
|
TimeInMillis elapsed_time() const;
|
||||||
|
|
||||||
|
@ -1175,6 +1209,10 @@ class GTEST_API_ UnitTest {
|
||||||
// total_test_case_count() - 1. If i is not in that range, returns NULL.
|
// total_test_case_count() - 1. If i is not in that range, returns NULL.
|
||||||
const TestCase* GetTestCase(int i) const;
|
const TestCase* GetTestCase(int i) const;
|
||||||
|
|
||||||
|
// Returns the TestResult containing information on test failures and
|
||||||
|
// properties logged outside of individual test cases.
|
||||||
|
const TestResult& ad_hoc_test_result() const;
|
||||||
|
|
||||||
// Returns the list of event listeners that can be used to track events
|
// Returns the list of event listeners that can be used to track events
|
||||||
// inside Google Test.
|
// inside Google Test.
|
||||||
TestEventListeners& listeners();
|
TestEventListeners& listeners();
|
||||||
|
@ -1198,12 +1236,16 @@ class GTEST_API_ UnitTest {
|
||||||
void AddTestPartResult(TestPartResult::Type result_type,
|
void AddTestPartResult(TestPartResult::Type result_type,
|
||||||
const char* file_name,
|
const char* file_name,
|
||||||
int line_number,
|
int line_number,
|
||||||
const internal::String& message,
|
const std::string& message,
|
||||||
const internal::String& os_stack_trace);
|
const std::string& os_stack_trace)
|
||||||
|
GTEST_LOCK_EXCLUDED_(mutex_);
|
||||||
|
|
||||||
// Adds a TestProperty to the current TestResult object. If the result already
|
// Adds a TestProperty to the current TestResult object when invoked from
|
||||||
// contains a property with the same key, the value will be updated.
|
// inside a test, to current TestCase's ad_hoc_test_result_ when invoked
|
||||||
void RecordPropertyForCurrentTest(const char* key, const char* value);
|
// from SetUpTestCase or TearDownTestCase, or to the global property set
|
||||||
|
// when invoked elsewhere. If the result already contains a property with
|
||||||
|
// the same key, the value will be updated.
|
||||||
|
void RecordProperty(const std::string& key, const std::string& value);
|
||||||
|
|
||||||
// Gets the i-th test case among all the test cases. i can range from 0 to
|
// Gets the i-th test case among all the test cases. i can range from 0 to
|
||||||
// total_test_case_count() - 1. If i is not in that range, returns NULL.
|
// total_test_case_count() - 1. If i is not in that range, returns NULL.
|
||||||
|
@ -1218,11 +1260,13 @@ class GTEST_API_ UnitTest {
|
||||||
friend class Test;
|
friend class Test;
|
||||||
friend class internal::AssertHelper;
|
friend class internal::AssertHelper;
|
||||||
friend class internal::ScopedTrace;
|
friend class internal::ScopedTrace;
|
||||||
|
friend class internal::StreamingListenerTest;
|
||||||
|
friend class internal::UnitTestRecordPropertyTestHelper;
|
||||||
friend Environment* AddGlobalTestEnvironment(Environment* env);
|
friend Environment* AddGlobalTestEnvironment(Environment* env);
|
||||||
friend internal::UnitTestImpl* internal::GetUnitTestImpl();
|
friend internal::UnitTestImpl* internal::GetUnitTestImpl();
|
||||||
friend void internal::ReportFailureInUnknownLocation(
|
friend void internal::ReportFailureInUnknownLocation(
|
||||||
TestPartResult::Type result_type,
|
TestPartResult::Type result_type,
|
||||||
const internal::String& message);
|
const std::string& message);
|
||||||
|
|
||||||
// Creates an empty UnitTest.
|
// Creates an empty UnitTest.
|
||||||
UnitTest();
|
UnitTest();
|
||||||
|
@ -1232,10 +1276,12 @@ class GTEST_API_ UnitTest {
|
||||||
|
|
||||||
// Pushes a trace defined by SCOPED_TRACE() on to the per-thread
|
// Pushes a trace defined by SCOPED_TRACE() on to the per-thread
|
||||||
// Google Test trace stack.
|
// Google Test trace stack.
|
||||||
void PushGTestTrace(const internal::TraceInfo& trace);
|
void PushGTestTrace(const internal::TraceInfo& trace)
|
||||||
|
GTEST_LOCK_EXCLUDED_(mutex_);
|
||||||
|
|
||||||
// Pops a trace from the per-thread Google Test trace stack.
|
// Pops a trace from the per-thread Google Test trace stack.
|
||||||
void PopGTestTrace();
|
void PopGTestTrace()
|
||||||
|
GTEST_LOCK_EXCLUDED_(mutex_);
|
||||||
|
|
||||||
// Protects mutable state in *impl_. This is mutable as some const
|
// Protects mutable state in *impl_. This is mutable as some const
|
||||||
// methods need to lock it too.
|
// methods need to lock it too.
|
||||||
|
@ -1290,24 +1336,101 @@ GTEST_API_ void InitGoogleTest(int* argc, wchar_t** argv);
|
||||||
|
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
|
||||||
|
// FormatForComparison<ToPrint, OtherOperand>::Format(value) formats a
|
||||||
|
// value of type ToPrint that is an operand of a comparison assertion
|
||||||
|
// (e.g. ASSERT_EQ). OtherOperand is the type of the other operand in
|
||||||
|
// the comparison, and is used to help determine the best way to
|
||||||
|
// format the value. In particular, when the value is a C string
|
||||||
|
// (char pointer) and the other operand is an STL string object, we
|
||||||
|
// want to format the C string as a string, since we know it is
|
||||||
|
// compared by value with the string object. If the value is a char
|
||||||
|
// pointer but the other operand is not an STL string object, we don't
|
||||||
|
// know whether the pointer is supposed to point to a NUL-terminated
|
||||||
|
// string, and thus want to print it as a pointer to be safe.
|
||||||
|
//
|
||||||
|
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
|
||||||
|
|
||||||
|
// The default case.
|
||||||
|
template <typename ToPrint, typename OtherOperand>
|
||||||
|
class FormatForComparison {
|
||||||
|
public:
|
||||||
|
static ::std::string Format(const ToPrint& value) {
|
||||||
|
return ::testing::PrintToString(value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Array.
|
||||||
|
template <typename ToPrint, size_t N, typename OtherOperand>
|
||||||
|
class FormatForComparison<ToPrint[N], OtherOperand> {
|
||||||
|
public:
|
||||||
|
static ::std::string Format(const ToPrint* value) {
|
||||||
|
return FormatForComparison<const ToPrint*, OtherOperand>::Format(value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// By default, print C string as pointers to be safe, as we don't know
|
||||||
|
// whether they actually point to a NUL-terminated string.
|
||||||
|
|
||||||
|
#define GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(CharType) \
|
||||||
|
template <typename OtherOperand> \
|
||||||
|
class FormatForComparison<CharType*, OtherOperand> { \
|
||||||
|
public: \
|
||||||
|
static ::std::string Format(CharType* value) { \
|
||||||
|
return ::testing::PrintToString(static_cast<const void*>(value)); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char);
|
||||||
|
GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const char);
|
||||||
|
GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(wchar_t);
|
||||||
|
GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const wchar_t);
|
||||||
|
|
||||||
|
#undef GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_
|
||||||
|
|
||||||
|
// If a C string is compared with an STL string object, we know it's meant
|
||||||
|
// to point to a NUL-terminated string, and thus can print it as a string.
|
||||||
|
|
||||||
|
#define GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(CharType, OtherStringType) \
|
||||||
|
template <> \
|
||||||
|
class FormatForComparison<CharType*, OtherStringType> { \
|
||||||
|
public: \
|
||||||
|
static ::std::string Format(CharType* value) { \
|
||||||
|
return ::testing::PrintToString(value); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::std::string);
|
||||||
|
GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char, ::std::string);
|
||||||
|
|
||||||
|
#if GTEST_HAS_GLOBAL_STRING
|
||||||
|
GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::string);
|
||||||
|
GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char, ::string);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GTEST_HAS_GLOBAL_WSTRING
|
||||||
|
GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(wchar_t, ::wstring);
|
||||||
|
GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const wchar_t, ::wstring);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GTEST_HAS_STD_WSTRING
|
||||||
|
GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(wchar_t, ::std::wstring);
|
||||||
|
GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const wchar_t, ::std::wstring);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef GTEST_IMPL_FORMAT_C_STRING_AS_STRING_
|
||||||
|
|
||||||
// Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc)
|
// Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc)
|
||||||
// operand to be used in a failure message. The type (but not value)
|
// operand to be used in a failure message. The type (but not value)
|
||||||
// of the other operand may affect the format. This allows us to
|
// of the other operand may affect the format. This allows us to
|
||||||
// print a char* as a raw pointer when it is compared against another
|
// print a char* as a raw pointer when it is compared against another
|
||||||
// char*, and print it as a C string when it is compared against an
|
// char* or void*, and print it as a C string when it is compared
|
||||||
// std::string object, for example.
|
// against an std::string object, for example.
|
||||||
//
|
|
||||||
// The default implementation ignores the type of the other operand.
|
|
||||||
// Some specialized versions are used to handle formatting wide or
|
|
||||||
// narrow C strings.
|
|
||||||
//
|
//
|
||||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
|
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
|
||||||
template <typename T1, typename T2>
|
template <typename T1, typename T2>
|
||||||
String FormatForComparisonFailureMessage(const T1& value,
|
std::string FormatForComparisonFailureMessage(
|
||||||
const T2& /* other_operand */) {
|
const T1& value, const T2& /* other_operand */) {
|
||||||
// C++Builder compiles this incorrectly if the namespace isn't explicitly
|
return FormatForComparison<T1, T2>::Format(value);
|
||||||
// given.
|
|
||||||
return ::testing::PrintToString(value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The helper function for {ASSERT|EXPECT}_EQ.
|
// The helper function for {ASSERT|EXPECT}_EQ.
|
||||||
|
@ -1319,7 +1442,7 @@ AssertionResult CmpHelperEQ(const char* expected_expression,
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
# pragma warning(push) // Saves the current warning state.
|
# pragma warning(push) // Saves the current warning state.
|
||||||
# pragma warning(disable:4389) // Temporarily disables warning on
|
# pragma warning(disable:4389) // Temporarily disables warning on
|
||||||
// signed/unsigned mismatch.
|
// signed/unsigned mismatch.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (expected == actual) {
|
if (expected == actual) {
|
||||||
|
@ -1455,11 +1578,11 @@ GTEST_IMPL_CMP_HELPER_(NE, !=);
|
||||||
// Implements the helper function for {ASSERT|EXPECT}_LE
|
// Implements the helper function for {ASSERT|EXPECT}_LE
|
||||||
GTEST_IMPL_CMP_HELPER_(LE, <=);
|
GTEST_IMPL_CMP_HELPER_(LE, <=);
|
||||||
// Implements the helper function for {ASSERT|EXPECT}_LT
|
// Implements the helper function for {ASSERT|EXPECT}_LT
|
||||||
GTEST_IMPL_CMP_HELPER_(LT, < );
|
GTEST_IMPL_CMP_HELPER_(LT, <);
|
||||||
// Implements the helper function for {ASSERT|EXPECT}_GE
|
// Implements the helper function for {ASSERT|EXPECT}_GE
|
||||||
GTEST_IMPL_CMP_HELPER_(GE, >=);
|
GTEST_IMPL_CMP_HELPER_(GE, >=);
|
||||||
// Implements the helper function for {ASSERT|EXPECT}_GT
|
// Implements the helper function for {ASSERT|EXPECT}_GT
|
||||||
GTEST_IMPL_CMP_HELPER_(GT, > );
|
GTEST_IMPL_CMP_HELPER_(GT, >);
|
||||||
|
|
||||||
#undef GTEST_IMPL_CMP_HELPER_
|
#undef GTEST_IMPL_CMP_HELPER_
|
||||||
|
|
||||||
|
@ -1623,9 +1746,9 @@ class GTEST_API_ AssertHelper {
|
||||||
: type(t), file(srcfile), line(line_num), message(msg) { }
|
: type(t), file(srcfile), line(line_num), message(msg) { }
|
||||||
|
|
||||||
TestPartResult::Type const type;
|
TestPartResult::Type const type;
|
||||||
const char* const file;
|
const char* const file;
|
||||||
int const line;
|
int const line;
|
||||||
String const message;
|
std::string const message;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData);
|
GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData);
|
||||||
|
@ -1684,7 +1807,12 @@ class WithParamInterface {
|
||||||
// references static data, to reduce the opportunity for incorrect uses
|
// references static data, to reduce the opportunity for incorrect uses
|
||||||
// like writing 'WithParamInterface<bool>::GetParam()' for a test that
|
// like writing 'WithParamInterface<bool>::GetParam()' for a test that
|
||||||
// uses a fixture whose parameter type is int.
|
// uses a fixture whose parameter type is int.
|
||||||
const ParamType& GetParam() const { return *parameter_; }
|
const ParamType& GetParam() const {
|
||||||
|
GTEST_CHECK_(parameter_ != NULL)
|
||||||
|
<< "GetParam() can only be called inside a value-parameterized test "
|
||||||
|
<< "-- did you intend to write TEST_P instead of TEST_F?";
|
||||||
|
return *parameter_;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Sets parameter value. The caller is responsible for making sure the value
|
// Sets parameter value. The caller is responsible for making sure the value
|
||||||
|
@ -1730,12 +1858,6 @@ class TestWithParam : public Test, public WithParamInterface<T> {
|
||||||
// usually want the fail-fast behavior of FAIL and ASSERT_*, but those
|
// usually want the fail-fast behavior of FAIL and ASSERT_*, but those
|
||||||
// writing data-driven tests often find themselves using ADD_FAILURE
|
// writing data-driven tests often find themselves using ADD_FAILURE
|
||||||
// and EXPECT_* more.
|
// and EXPECT_* more.
|
||||||
//
|
|
||||||
// Examples:
|
|
||||||
//
|
|
||||||
// EXPECT_TRUE(server.StatusIsOK());
|
|
||||||
// ASSERT_FALSE(server.HasPendingRequest(port))
|
|
||||||
// << "There are still pending requests " << "on port " << port;
|
|
||||||
|
|
||||||
// Generates a nonfatal failure with a generic message.
|
// Generates a nonfatal failure with a generic message.
|
||||||
#define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed")
|
#define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed")
|
||||||
|
@ -1909,7 +2031,7 @@ class TestWithParam : public Test, public WithParamInterface<T> {
|
||||||
# define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2)
|
# define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// C String Comparisons. All tests treat NULL and any non-NULL string
|
// C-string Comparisons. All tests treat NULL and any non-NULL string
|
||||||
// as different. Two NULLs are equal.
|
// as different. Two NULLs are equal.
|
||||||
//
|
//
|
||||||
// * {ASSERT|EXPECT}_STREQ(s1, s2): Tests that s1 == s2
|
// * {ASSERT|EXPECT}_STREQ(s1, s2): Tests that s1 == s2
|
||||||
|
@ -2150,15 +2272,20 @@ bool StaticAssertTypeEq() {
|
||||||
GTEST_TEST_(test_fixture, test_name, test_fixture, \
|
GTEST_TEST_(test_fixture, test_name, test_fixture, \
|
||||||
::testing::internal::GetTypeId<test_fixture>())
|
::testing::internal::GetTypeId<test_fixture>())
|
||||||
|
|
||||||
// Use this macro in main() to run all tests. It returns 0 if all
|
} // namespace testing
|
||||||
|
|
||||||
|
// Use this function in main() to run all tests. It returns 0 if all
|
||||||
// tests are successful, or 1 otherwise.
|
// tests are successful, or 1 otherwise.
|
||||||
//
|
//
|
||||||
// RUN_ALL_TESTS() should be invoked after the command line has been
|
// RUN_ALL_TESTS() should be invoked after the command line has been
|
||||||
// parsed by InitGoogleTest().
|
// parsed by InitGoogleTest().
|
||||||
|
//
|
||||||
|
// This function was formerly a macro; thus, it is in the global
|
||||||
|
// namespace and has an all-caps name.
|
||||||
|
int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_;
|
||||||
|
|
||||||
#define RUN_ALL_TESTS()\
|
inline int RUN_ALL_TESTS() {
|
||||||
(::testing::UnitTest::GetInstance()->Run())
|
return ::testing::UnitTest::GetInstance()->Run();
|
||||||
|
}
|
||||||
} // namespace testing
|
|
||||||
|
|
||||||
#endif // GTEST_INCLUDE_GTEST_GTEST_H_
|
#endif // GTEST_INCLUDE_GTEST_GTEST_H_
|
|
@ -27,7 +27,7 @@
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
// This file is AUTOMATICALLY GENERATED on 09/24/2010 by command
|
// This file is AUTOMATICALLY GENERATED on 10/31/2011 by command
|
||||||
// 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND!
|
// 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND!
|
||||||
//
|
//
|
||||||
// Implements a family of generic predicate assertion macros.
|
// Implements a family of generic predicate assertion macros.
|
||||||
|
@ -98,7 +98,7 @@ AssertionResult AssertPred1Helper(const char* pred_text,
|
||||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1.
|
// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1.
|
||||||
// Don't use this in your code.
|
// Don't use this in your code.
|
||||||
#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\
|
#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\
|
||||||
GTEST_ASSERT_(pred_format(#v1, v1),\
|
GTEST_ASSERT_(pred_format(#v1, v1), \
|
||||||
on_failure)
|
on_failure)
|
||||||
|
|
||||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED1. Don't use
|
// Internal macro for implementing {EXPECT|ASSERT}_PRED1. Don't use
|
||||||
|
@ -144,7 +144,7 @@ AssertionResult AssertPred2Helper(const char* pred_text,
|
||||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2.
|
// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2.
|
||||||
// Don't use this in your code.
|
// Don't use this in your code.
|
||||||
#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\
|
#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\
|
||||||
GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2),\
|
GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \
|
||||||
on_failure)
|
on_failure)
|
||||||
|
|
||||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED2. Don't use
|
// Internal macro for implementing {EXPECT|ASSERT}_PRED2. Don't use
|
||||||
|
@ -197,7 +197,7 @@ AssertionResult AssertPred3Helper(const char* pred_text,
|
||||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3.
|
// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3.
|
||||||
// Don't use this in your code.
|
// Don't use this in your code.
|
||||||
#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\
|
#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\
|
||||||
GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3),\
|
GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), \
|
||||||
on_failure)
|
on_failure)
|
||||||
|
|
||||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED3. Don't use
|
// Internal macro for implementing {EXPECT|ASSERT}_PRED3. Don't use
|
||||||
|
@ -257,7 +257,7 @@ AssertionResult AssertPred4Helper(const char* pred_text,
|
||||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4.
|
// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4.
|
||||||
// Don't use this in your code.
|
// Don't use this in your code.
|
||||||
#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\
|
#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\
|
||||||
GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4),\
|
GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), \
|
||||||
on_failure)
|
on_failure)
|
||||||
|
|
||||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED4. Don't use
|
// Internal macro for implementing {EXPECT|ASSERT}_PRED4. Don't use
|
||||||
|
@ -324,7 +324,7 @@ AssertionResult AssertPred5Helper(const char* pred_text,
|
||||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5.
|
// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5.
|
||||||
// Don't use this in your code.
|
// Don't use this in your code.
|
||||||
#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\
|
#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\
|
||||||
GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5),\
|
GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \
|
||||||
on_failure)
|
on_failure)
|
||||||
|
|
||||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED5. Don't use
|
// Internal macro for implementing {EXPECT|ASSERT}_PRED5. Don't use
|
|
@ -127,11 +127,11 @@ class GTEST_API_ DeathTest {
|
||||||
// the last death test.
|
// the last death test.
|
||||||
static const char* LastMessage();
|
static const char* LastMessage();
|
||||||
|
|
||||||
static void set_last_death_test_message(const String& message);
|
static void set_last_death_test_message(const std::string& message);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// A string containing a description of the outcome of the last death test.
|
// A string containing a description of the outcome of the last death test.
|
||||||
static String last_death_test_message_;
|
static std::string last_death_test_message_;
|
||||||
|
|
||||||
GTEST_DISALLOW_COPY_AND_ASSIGN_(DeathTest);
|
GTEST_DISALLOW_COPY_AND_ASSIGN_(DeathTest);
|
||||||
};
|
};
|
||||||
|
@ -217,12 +217,23 @@ GTEST_API_ bool ExitedUnsuccessfully(int exit_status);
|
||||||
// The symbol "fail" here expands to something into which a message
|
// The symbol "fail" here expands to something into which a message
|
||||||
// can be streamed.
|
// can be streamed.
|
||||||
|
|
||||||
|
// This macro is for implementing ASSERT/EXPECT_DEBUG_DEATH when compiled in
|
||||||
|
// NDEBUG mode. In this case we need the statements to be executed, the regex is
|
||||||
|
// ignored, and the macro must accept a streamed message even though the message
|
||||||
|
// is never printed.
|
||||||
|
# define GTEST_EXECUTE_STATEMENT_(statement, regex) \
|
||||||
|
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
|
||||||
|
if (::testing::internal::AlwaysTrue()) { \
|
||||||
|
GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
|
||||||
|
} else \
|
||||||
|
::testing::Message()
|
||||||
|
|
||||||
// A class representing the parsed contents of the
|
// A class representing the parsed contents of the
|
||||||
// --gtest_internal_run_death_test flag, as it existed when
|
// --gtest_internal_run_death_test flag, as it existed when
|
||||||
// RUN_ALL_TESTS was called.
|
// RUN_ALL_TESTS was called.
|
||||||
class InternalRunDeathTestFlag {
|
class InternalRunDeathTestFlag {
|
||||||
public:
|
public:
|
||||||
InternalRunDeathTestFlag(const String& a_file,
|
InternalRunDeathTestFlag(const std::string& a_file,
|
||||||
int a_line,
|
int a_line,
|
||||||
int an_index,
|
int an_index,
|
||||||
int a_write_fd)
|
int a_write_fd)
|
||||||
|
@ -234,13 +245,13 @@ class InternalRunDeathTestFlag {
|
||||||
posix::Close(write_fd_);
|
posix::Close(write_fd_);
|
||||||
}
|
}
|
||||||
|
|
||||||
String file() const { return file_; }
|
const std::string& file() const { return file_; }
|
||||||
int line() const { return line_; }
|
int line() const { return line_; }
|
||||||
int index() const { return index_; }
|
int index() const { return index_; }
|
||||||
int write_fd() const { return write_fd_; }
|
int write_fd() const { return write_fd_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
String file_;
|
std::string file_;
|
||||||
int line_;
|
int line_;
|
||||||
int index_;
|
int index_;
|
||||||
int write_fd_;
|
int write_fd_;
|
|
@ -61,11 +61,7 @@ class GTEST_API_ FilePath {
|
||||||
FilePath() : pathname_("") { }
|
FilePath() : pathname_("") { }
|
||||||
FilePath(const FilePath& rhs) : pathname_(rhs.pathname_) { }
|
FilePath(const FilePath& rhs) : pathname_(rhs.pathname_) { }
|
||||||
|
|
||||||
explicit FilePath(const char* pathname) : pathname_(pathname) {
|
explicit FilePath(const std::string& pathname) : pathname_(pathname) {
|
||||||
Normalize();
|
|
||||||
}
|
|
||||||
|
|
||||||
explicit FilePath(const String& pathname) : pathname_(pathname) {
|
|
||||||
Normalize();
|
Normalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,7 +74,7 @@ class GTEST_API_ FilePath {
|
||||||
pathname_ = rhs.pathname_;
|
pathname_ = rhs.pathname_;
|
||||||
}
|
}
|
||||||
|
|
||||||
String ToString() const { return pathname_; }
|
const std::string& string() const { return pathname_; }
|
||||||
const char* c_str() const { return pathname_.c_str(); }
|
const char* c_str() const { return pathname_.c_str(); }
|
||||||
|
|
||||||
// Returns the current working directory, or "" if unsuccessful.
|
// Returns the current working directory, or "" if unsuccessful.
|
||||||
|
@ -111,8 +107,8 @@ class GTEST_API_ FilePath {
|
||||||
const FilePath& base_name,
|
const FilePath& base_name,
|
||||||
const char* extension);
|
const char* extension);
|
||||||
|
|
||||||
// Returns true iff the path is NULL or "".
|
// Returns true iff the path is "".
|
||||||
bool IsEmpty() const { return c_str() == NULL || *c_str() == '\0'; }
|
bool IsEmpty() const { return pathname_.empty(); }
|
||||||
|
|
||||||
// If input name has a trailing separator character, removes it and returns
|
// If input name has a trailing separator character, removes it and returns
|
||||||
// the name, otherwise return the name string unmodified.
|
// the name, otherwise return the name string unmodified.
|
||||||
|
@ -201,7 +197,7 @@ class GTEST_API_ FilePath {
|
||||||
// separators. Returns NULL if no path separator was found.
|
// separators. Returns NULL if no path separator was found.
|
||||||
const char* FindLastPathSeparator() const;
|
const char* FindLastPathSeparator() const;
|
||||||
|
|
||||||
String pathname_;
|
std::string pathname_;
|
||||||
}; // class FilePath
|
}; // class FilePath
|
||||||
|
|
||||||
} // namespace internal
|
} // namespace internal
|
|
@ -46,12 +46,18 @@
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif // GTEST_OS_LINUX
|
#endif // GTEST_OS_LINUX
|
||||||
|
|
||||||
|
#if GTEST_HAS_EXCEPTIONS
|
||||||
|
# include <stdexcept>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <float.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
|
#include "gtest/gtest-message.h"
|
||||||
#include "gtest/internal/gtest-string.h"
|
#include "gtest/internal/gtest-string.h"
|
||||||
#include "gtest/internal/gtest-filepath.h"
|
#include "gtest/internal/gtest-filepath.h"
|
||||||
#include "gtest/internal/gtest-type-util.h"
|
#include "gtest/internal/gtest-type-util.h"
|
||||||
|
@ -67,36 +73,6 @@
|
||||||
#define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar)
|
#define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar)
|
||||||
#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar
|
#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar
|
||||||
|
|
||||||
// Google Test defines the testing::Message class to allow construction of
|
|
||||||
// test messages via the << operator. The idea is that anything
|
|
||||||
// streamable to std::ostream can be streamed to a testing::Message.
|
|
||||||
// This allows a user to use his own types in Google Test assertions by
|
|
||||||
// overloading the << operator.
|
|
||||||
//
|
|
||||||
// util/gtl/stl_logging-inl.h overloads << for STL containers. These
|
|
||||||
// overloads cannot be defined in the std namespace, as that will be
|
|
||||||
// undefined behavior. Therefore, they are defined in the global
|
|
||||||
// namespace instead.
|
|
||||||
//
|
|
||||||
// C++'s symbol lookup rule (i.e. Koenig lookup) says that these
|
|
||||||
// overloads are visible in either the std namespace or the global
|
|
||||||
// namespace, but not other namespaces, including the testing
|
|
||||||
// namespace which Google Test's Message class is in.
|
|
||||||
//
|
|
||||||
// To allow STL containers (and other types that has a << operator
|
|
||||||
// defined in the global namespace) to be used in Google Test assertions,
|
|
||||||
// testing::Message must access the custom << operator from the global
|
|
||||||
// namespace. Hence this helper function.
|
|
||||||
//
|
|
||||||
// Note: Jeffrey Yasskin suggested an alternative fix by "using
|
|
||||||
// ::operator<<;" in the definition of Message's operator<<. That fix
|
|
||||||
// doesn't require a helper function, but unfortunately doesn't
|
|
||||||
// compile with MSVC.
|
|
||||||
template <typename T>
|
|
||||||
inline void GTestStreamToHelper(std::ostream* os, const T& val) {
|
|
||||||
*os << val;
|
|
||||||
}
|
|
||||||
|
|
||||||
class ProtocolMessage;
|
class ProtocolMessage;
|
||||||
namespace proto2 { class Message; }
|
namespace proto2 { class Message; }
|
||||||
|
|
||||||
|
@ -122,17 +98,12 @@ class TestInfoImpl; // Opaque implementation of TestInfo
|
||||||
class UnitTestImpl; // Opaque implementation of UnitTest
|
class UnitTestImpl; // Opaque implementation of UnitTest
|
||||||
|
|
||||||
// How many times InitGoogleTest() has been called.
|
// How many times InitGoogleTest() has been called.
|
||||||
extern int g_init_gtest_count;
|
GTEST_API_ extern int g_init_gtest_count;
|
||||||
|
|
||||||
// The text used in failure messages to indicate the start of the
|
// The text used in failure messages to indicate the start of the
|
||||||
// stack trace.
|
// stack trace.
|
||||||
GTEST_API_ extern const char kStackTraceMarker[];
|
GTEST_API_ extern const char kStackTraceMarker[];
|
||||||
|
|
||||||
// A secret type that Google Test users don't know about. It has no
|
|
||||||
// definition on purpose. Therefore it's impossible to create a
|
|
||||||
// Secret object, which is what we want.
|
|
||||||
class Secret;
|
|
||||||
|
|
||||||
// Two overloaded helpers for checking at compile time whether an
|
// Two overloaded helpers for checking at compile time whether an
|
||||||
// expression is a null pointer literal (i.e. NULL or any 0-valued
|
// expression is a null pointer literal (i.e. NULL or any 0-valued
|
||||||
// compile-time integral constant). Their return values have
|
// compile-time integral constant). Their return values have
|
||||||
|
@ -163,8 +134,23 @@ char (&IsNullLiteralHelper(...))[2]; // NOLINT
|
||||||
#endif // GTEST_ELLIPSIS_NEEDS_POD_
|
#endif // GTEST_ELLIPSIS_NEEDS_POD_
|
||||||
|
|
||||||
// Appends the user-supplied message to the Google-Test-generated message.
|
// Appends the user-supplied message to the Google-Test-generated message.
|
||||||
GTEST_API_ String AppendUserMessage(const String& gtest_msg,
|
GTEST_API_ std::string AppendUserMessage(
|
||||||
const Message& user_msg);
|
const std::string& gtest_msg, const Message& user_msg);
|
||||||
|
|
||||||
|
#if GTEST_HAS_EXCEPTIONS
|
||||||
|
|
||||||
|
// This exception is thrown by (and only by) a failed Google Test
|
||||||
|
// assertion when GTEST_FLAG(throw_on_failure) is true (if exceptions
|
||||||
|
// are enabled). We derive it from std::runtime_error, which is for
|
||||||
|
// errors presumably detectable only at run time. Since
|
||||||
|
// std::runtime_error inherits from std::exception, many testing
|
||||||
|
// frameworks know how to extract and print the message inside it.
|
||||||
|
class GTEST_API_ GoogleTestFailureException : public ::std::runtime_error {
|
||||||
|
public:
|
||||||
|
explicit GoogleTestFailureException(const TestPartResult& failure);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // GTEST_HAS_EXCEPTIONS
|
||||||
|
|
||||||
// A helper class for creating scoped traces in user programs.
|
// A helper class for creating scoped traces in user programs.
|
||||||
class GTEST_API_ ScopedTrace {
|
class GTEST_API_ ScopedTrace {
|
||||||
|
@ -185,77 +171,6 @@ class GTEST_API_ ScopedTrace {
|
||||||
// c'tor and d'tor. Therefore it doesn't
|
// c'tor and d'tor. Therefore it doesn't
|
||||||
// need to be used otherwise.
|
// need to be used otherwise.
|
||||||
|
|
||||||
// Converts a streamable value to a String. A NULL pointer is
|
|
||||||
// converted to "(null)". When the input value is a ::string,
|
|
||||||
// ::std::string, ::wstring, or ::std::wstring object, each NUL
|
|
||||||
// character in it is replaced with "\\0".
|
|
||||||
// Declared here but defined in gtest.h, so that it has access
|
|
||||||
// to the definition of the Message class, required by the ARM
|
|
||||||
// compiler.
|
|
||||||
template <typename T>
|
|
||||||
String StreamableToString(const T& streamable);
|
|
||||||
|
|
||||||
// The Symbian compiler has a bug that prevents it from selecting the
|
|
||||||
// correct overload of FormatForComparisonFailureMessage (see below)
|
|
||||||
// unless we pass the first argument by reference. If we do that,
|
|
||||||
// however, Visual Age C++ 10.1 generates a compiler error. Therefore
|
|
||||||
// we only apply the work-around for Symbian.
|
|
||||||
#if defined(__SYMBIAN32__)
|
|
||||||
# define GTEST_CREF_WORKAROUND_ const&
|
|
||||||
#else
|
|
||||||
# define GTEST_CREF_WORKAROUND_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// When this operand is a const char* or char*, if the other operand
|
|
||||||
// is a ::std::string or ::string, we print this operand as a C string
|
|
||||||
// rather than a pointer (we do the same for wide strings); otherwise
|
|
||||||
// we print it as a pointer to be safe.
|
|
||||||
|
|
||||||
// This internal macro is used to avoid duplicated code.
|
|
||||||
#define GTEST_FORMAT_IMPL_(operand2_type, operand1_printer)\
|
|
||||||
inline String FormatForComparisonFailureMessage(\
|
|
||||||
operand2_type::value_type* GTEST_CREF_WORKAROUND_ str, \
|
|
||||||
const operand2_type& /*operand2*/) {\
|
|
||||||
return operand1_printer(str);\
|
|
||||||
}\
|
|
||||||
inline String FormatForComparisonFailureMessage(\
|
|
||||||
const operand2_type::value_type* GTEST_CREF_WORKAROUND_ str, \
|
|
||||||
const operand2_type& /*operand2*/) {\
|
|
||||||
return operand1_printer(str);\
|
|
||||||
}
|
|
||||||
|
|
||||||
GTEST_FORMAT_IMPL_(::std::string, String::ShowCStringQuoted)
|
|
||||||
#if GTEST_HAS_STD_WSTRING
|
|
||||||
GTEST_FORMAT_IMPL_(::std::wstring, String::ShowWideCStringQuoted)
|
|
||||||
#endif // GTEST_HAS_STD_WSTRING
|
|
||||||
|
|
||||||
#if GTEST_HAS_GLOBAL_STRING
|
|
||||||
GTEST_FORMAT_IMPL_(::string, String::ShowCStringQuoted)
|
|
||||||
#endif // GTEST_HAS_GLOBAL_STRING
|
|
||||||
#if GTEST_HAS_GLOBAL_WSTRING
|
|
||||||
GTEST_FORMAT_IMPL_(::wstring, String::ShowWideCStringQuoted)
|
|
||||||
#endif // GTEST_HAS_GLOBAL_WSTRING
|
|
||||||
|
|
||||||
#undef GTEST_FORMAT_IMPL_
|
|
||||||
|
|
||||||
// The next four overloads handle the case where the operand being
|
|
||||||
// printed is a char/wchar_t pointer and the other operand is not a
|
|
||||||
// string/wstring object. In such cases, we just print the operand as
|
|
||||||
// a pointer to be safe.
|
|
||||||
#define GTEST_FORMAT_CHAR_PTR_IMPL_(CharType) \
|
|
||||||
template <typename T> \
|
|
||||||
String FormatForComparisonFailureMessage(CharType* GTEST_CREF_WORKAROUND_ p, \
|
|
||||||
const T&) { \
|
|
||||||
return PrintToString(static_cast<const void*>(p)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
GTEST_FORMAT_CHAR_PTR_IMPL_(char)
|
|
||||||
GTEST_FORMAT_CHAR_PTR_IMPL_(const char)
|
|
||||||
GTEST_FORMAT_CHAR_PTR_IMPL_(wchar_t)
|
|
||||||
GTEST_FORMAT_CHAR_PTR_IMPL_(const wchar_t)
|
|
||||||
|
|
||||||
#undef GTEST_FORMAT_CHAR_PTR_IMPL_
|
|
||||||
|
|
||||||
// Constructs and returns the message for an equality assertion
|
// Constructs and returns the message for an equality assertion
|
||||||
// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure.
|
// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure.
|
||||||
//
|
//
|
||||||
|
@ -273,12 +188,12 @@ GTEST_FORMAT_CHAR_PTR_IMPL_(const wchar_t)
|
||||||
// be inserted into the message.
|
// be inserted into the message.
|
||||||
GTEST_API_ AssertionResult EqFailure(const char* expected_expression,
|
GTEST_API_ AssertionResult EqFailure(const char* expected_expression,
|
||||||
const char* actual_expression,
|
const char* actual_expression,
|
||||||
const String& expected_value,
|
const std::string& expected_value,
|
||||||
const String& actual_value,
|
const std::string& actual_value,
|
||||||
bool ignoring_case);
|
bool ignoring_case);
|
||||||
|
|
||||||
// Constructs a failure message for Boolean assertions such as EXPECT_TRUE.
|
// Constructs a failure message for Boolean assertions such as EXPECT_TRUE.
|
||||||
GTEST_API_ String GetBoolAssertionFailureMessage(
|
GTEST_API_ std::string GetBoolAssertionFailureMessage(
|
||||||
const AssertionResult& assertion_result,
|
const AssertionResult& assertion_result,
|
||||||
const char* expression_text,
|
const char* expression_text,
|
||||||
const char* actual_predicate_value,
|
const char* actual_predicate_value,
|
||||||
|
@ -353,7 +268,7 @@ class FloatingPoint {
|
||||||
// bits. Therefore, 4 should be enough for ordinary use.
|
// bits. Therefore, 4 should be enough for ordinary use.
|
||||||
//
|
//
|
||||||
// See the following article for more details on ULP:
|
// See the following article for more details on ULP:
|
||||||
// http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm.
|
// http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
|
||||||
static const size_t kMaxUlps = 4;
|
static const size_t kMaxUlps = 4;
|
||||||
|
|
||||||
// Constructs a FloatingPoint from a raw floating-point number.
|
// Constructs a FloatingPoint from a raw floating-point number.
|
||||||
|
@ -380,6 +295,9 @@ class FloatingPoint {
|
||||||
return ReinterpretBits(kExponentBitMask);
|
return ReinterpretBits(kExponentBitMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns the maximum representable finite floating-point number.
|
||||||
|
static RawType Max();
|
||||||
|
|
||||||
// Non-static methods
|
// Non-static methods
|
||||||
|
|
||||||
// Returns the bits that represents this number.
|
// Returns the bits that represents this number.
|
||||||
|
@ -460,6 +378,13 @@ class FloatingPoint {
|
||||||
FloatingPointUnion u_;
|
FloatingPointUnion u_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// We cannot use std::numeric_limits<T>::max() as it clashes with the max()
|
||||||
|
// macro defined by <windows.h>.
|
||||||
|
template <>
|
||||||
|
inline float FloatingPoint<float>::Max() { return FLT_MAX; }
|
||||||
|
template <>
|
||||||
|
inline double FloatingPoint<double>::Max() { return DBL_MAX; }
|
||||||
|
|
||||||
// Typedefs the instances of the FloatingPoint template class that we
|
// Typedefs the instances of the FloatingPoint template class that we
|
||||||
// care to use.
|
// care to use.
|
||||||
typedef FloatingPoint<float> Float;
|
typedef FloatingPoint<float> Float;
|
||||||
|
@ -554,7 +479,7 @@ typedef void (*TearDownTestCaseFunc)();
|
||||||
// test_case_name: name of the test case
|
// test_case_name: name of the test case
|
||||||
// name: name of the test
|
// name: name of the test
|
||||||
// type_param the name of the test's type parameter, or NULL if
|
// type_param the name of the test's type parameter, or NULL if
|
||||||
// this is not a typed or a type-parameterized test.
|
// this is not a typed or a type-parameterized test.
|
||||||
// value_param text representation of the test's value parameter,
|
// value_param text representation of the test's value parameter,
|
||||||
// or NULL if this is not a type-parameterized test.
|
// or NULL if this is not a type-parameterized test.
|
||||||
// fixture_class_id: ID of the test fixture class
|
// fixture_class_id: ID of the test fixture class
|
||||||
|
@ -564,7 +489,8 @@ typedef void (*TearDownTestCaseFunc)();
|
||||||
// The newly created TestInfo instance will assume
|
// The newly created TestInfo instance will assume
|
||||||
// ownership of the factory object.
|
// ownership of the factory object.
|
||||||
GTEST_API_ TestInfo* MakeAndRegisterTestInfo(
|
GTEST_API_ TestInfo* MakeAndRegisterTestInfo(
|
||||||
const char* test_case_name, const char* name,
|
const char* test_case_name,
|
||||||
|
const char* name,
|
||||||
const char* type_param,
|
const char* type_param,
|
||||||
const char* value_param,
|
const char* value_param,
|
||||||
TypeId fixture_class_id,
|
TypeId fixture_class_id,
|
||||||
|
@ -624,9 +550,9 @@ inline const char* SkipComma(const char* str) {
|
||||||
|
|
||||||
// Returns the prefix of 'str' before the first comma in it; returns
|
// Returns the prefix of 'str' before the first comma in it; returns
|
||||||
// the entire string if it contains no comma.
|
// the entire string if it contains no comma.
|
||||||
inline String GetPrefixUntilComma(const char* str) {
|
inline std::string GetPrefixUntilComma(const char* str) {
|
||||||
const char* comma = strchr(str, ',');
|
const char* comma = strchr(str, ',');
|
||||||
return comma == NULL ? String(str) : String(str, comma - str);
|
return comma == NULL ? str : std::string(str, comma);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TypeParameterizedTest<Fixture, TestSel, Types>::Register()
|
// TypeParameterizedTest<Fixture, TestSel, Types>::Register()
|
||||||
|
@ -652,8 +578,8 @@ class TypeParameterizedTest {
|
||||||
// First, registers the first type-parameterized test in the type
|
// First, registers the first type-parameterized test in the type
|
||||||
// list.
|
// list.
|
||||||
MakeAndRegisterTestInfo(
|
MakeAndRegisterTestInfo(
|
||||||
String::Format("%s%s%s/%d", prefix, prefix[0] == '\0' ? "" : "/",
|
(std::string(prefix) + (prefix[0] == '\0' ? "" : "/") + case_name + "/"
|
||||||
case_name, index).c_str(),
|
+ StreamableToString(index)).c_str(),
|
||||||
GetPrefixUntilComma(test_names).c_str(),
|
GetPrefixUntilComma(test_names).c_str(),
|
||||||
GetTypeName<Type>().c_str(),
|
GetTypeName<Type>().c_str(),
|
||||||
NULL, // No value parameter.
|
NULL, // No value parameter.
|
||||||
|
@ -711,7 +637,7 @@ class TypeParameterizedTestCase<Fixture, Templates0, Types> {
|
||||||
|
|
||||||
#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
|
#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
|
||||||
|
|
||||||
// Returns the current OS stack trace as a String.
|
// Returns the current OS stack trace as an std::string.
|
||||||
//
|
//
|
||||||
// The maximum number of stack frames to be included is specified by
|
// The maximum number of stack frames to be included is specified by
|
||||||
// the gtest_stack_trace_depth flag. The skip_count parameter
|
// the gtest_stack_trace_depth flag. The skip_count parameter
|
||||||
|
@ -721,8 +647,8 @@ class TypeParameterizedTestCase<Fixture, Templates0, Types> {
|
||||||
// For example, if Foo() calls Bar(), which in turn calls
|
// For example, if Foo() calls Bar(), which in turn calls
|
||||||
// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in
|
// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in
|
||||||
// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't.
|
// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't.
|
||||||
GTEST_API_ String GetCurrentOsStackTraceExceptTop(UnitTest* unit_test,
|
GTEST_API_ std::string GetCurrentOsStackTraceExceptTop(
|
||||||
int skip_count);
|
UnitTest* unit_test, int skip_count);
|
||||||
|
|
||||||
// Helpers for suppressing warnings on unreachable code or constant
|
// Helpers for suppressing warnings on unreachable code or constant
|
||||||
// condition.
|
// condition.
|
||||||
|
@ -797,13 +723,19 @@ struct RemoveConst<const T> { typedef T type; }; // NOLINT
|
||||||
// MSVC 8.0, Sun C++, and IBM XL C++ have a bug which causes the above
|
// MSVC 8.0, Sun C++, and IBM XL C++ have a bug which causes the above
|
||||||
// definition to fail to remove the const in 'const int[3]' and 'const
|
// definition to fail to remove the const in 'const int[3]' and 'const
|
||||||
// char[3][4]'. The following specialization works around the bug.
|
// char[3][4]'. The following specialization works around the bug.
|
||||||
// However, it causes trouble with GCC and thus needs to be
|
|
||||||
// conditionally compiled.
|
|
||||||
#if defined(_MSC_VER) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
|
|
||||||
template <typename T, size_t N>
|
template <typename T, size_t N>
|
||||||
struct RemoveConst<const T[N]> {
|
struct RemoveConst<const T[N]> {
|
||||||
typedef typename RemoveConst<T>::type type[N];
|
typedef typename RemoveConst<T>::type type[N];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && _MSC_VER < 1400
|
||||||
|
// This is the only specialization that allows VC++ 7.1 to remove const in
|
||||||
|
// 'const int[3] and 'const int[3][4]'. However, it causes trouble with GCC
|
||||||
|
// and thus needs to be conditionally compiled.
|
||||||
|
template <typename T, size_t N>
|
||||||
|
struct RemoveConst<T[N]> {
|
||||||
|
typedef typename RemoveConst<T>::type type[N];
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// A handy wrapper around RemoveConst that works when the argument
|
// A handy wrapper around RemoveConst that works when the argument
|
|
@ -105,8 +105,8 @@ class linked_ptr_internal {
|
||||||
// framework.
|
// framework.
|
||||||
|
|
||||||
// Join an existing circle.
|
// Join an existing circle.
|
||||||
// L < g_linked_ptr_mutex
|
void join(linked_ptr_internal const* ptr)
|
||||||
void join(linked_ptr_internal const* ptr) {
|
GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) {
|
||||||
MutexLock lock(&g_linked_ptr_mutex);
|
MutexLock lock(&g_linked_ptr_mutex);
|
||||||
|
|
||||||
linked_ptr_internal const* p = ptr;
|
linked_ptr_internal const* p = ptr;
|
||||||
|
@ -117,8 +117,8 @@ class linked_ptr_internal {
|
||||||
|
|
||||||
// Leave whatever circle we're part of. Returns true if we were the
|
// Leave whatever circle we're part of. Returns true if we were the
|
||||||
// last member of the circle. Once this is done, you can join() another.
|
// last member of the circle. Once this is done, you can join() another.
|
||||||
// L < g_linked_ptr_mutex
|
bool depart()
|
||||||
bool depart() {
|
GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) {
|
||||||
MutexLock lock(&g_linked_ptr_mutex);
|
MutexLock lock(&g_linked_ptr_mutex);
|
||||||
|
|
||||||
if (next_ == this) return true;
|
if (next_ == this) return true;
|
|
@ -95,7 +95,7 @@ class ValueArray2 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_};
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,7 +114,8 @@ class ValueArray3 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_};
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
|
static_cast<T>(v3_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,7 +136,8 @@ class ValueArray4 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_};
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
|
static_cast<T>(v3_), static_cast<T>(v4_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,7 +159,8 @@ class ValueArray5 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_};
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,7 +184,9 @@ class ValueArray6 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_};
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,7 +211,9 @@ class ValueArray7 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_};
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_), static_cast<T>(v7_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -233,7 +240,9 @@ class ValueArray8 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_};
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -261,7 +270,10 @@ class ValueArray9 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_};
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -290,7 +302,10 @@ class ValueArray10 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_};
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -321,7 +336,10 @@ class ValueArray11 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_};
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -353,8 +371,11 @@ class ValueArray12 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_};
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -388,8 +409,11 @@ class ValueArray13 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_};
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -424,8 +448,11 @@ class ValueArray14 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_};
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -461,8 +488,12 @@ class ValueArray15 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_};
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -501,8 +532,12 @@ class ValueArray16 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_};
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -542,8 +577,12 @@ class ValueArray17 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_};
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -584,8 +623,13 @@ class ValueArray18 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_};
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -627,8 +671,13 @@ class ValueArray19 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_};
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -672,8 +721,13 @@ class ValueArray20 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_};
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -719,8 +773,14 @@ class ValueArray21 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_};
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -767,8 +827,14 @@ class ValueArray22 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_};
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -817,9 +883,14 @@ class ValueArray23 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v23_};
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -869,9 +940,15 @@ class ValueArray24 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_};
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -922,9 +999,15 @@ class ValueArray25 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_};
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -977,9 +1060,15 @@ class ValueArray26 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_};
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1034,9 +1123,16 @@ class ValueArray27 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_};
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1092,9 +1188,16 @@ class ValueArray28 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_};
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1151,9 +1254,16 @@ class ValueArray29 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_};
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1212,9 +1322,17 @@ class ValueArray30 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_};
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1275,9 +1393,17 @@ class ValueArray31 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_};
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1339,9 +1465,17 @@ class ValueArray32 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_};
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1405,9 +1539,18 @@ class ValueArray33 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_};
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1472,9 +1615,18 @@ class ValueArray34 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_};
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1540,10 +1692,18 @@ class ValueArray35 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_,
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
v35_};
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1611,10 +1771,19 @@ class ValueArray36 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
v36_};
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
|
||||||
|
static_cast<T>(v36_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1684,10 +1853,19 @@ class ValueArray37 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
v36_, v37_};
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
|
||||||
|
static_cast<T>(v36_), static_cast<T>(v37_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1758,10 +1936,19 @@ class ValueArray38 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
v36_, v37_, v38_};
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
|
||||||
|
static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1833,10 +2020,20 @@ class ValueArray39 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
v36_, v37_, v38_, v39_};
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
|
||||||
|
static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
|
||||||
|
static_cast<T>(v39_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1910,10 +2107,20 @@ class ValueArray40 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
v36_, v37_, v38_, v39_, v40_};
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
|
||||||
|
static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
|
||||||
|
static_cast<T>(v39_), static_cast<T>(v40_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1989,10 +2196,20 @@ class ValueArray41 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
v36_, v37_, v38_, v39_, v40_, v41_};
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
|
||||||
|
static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
|
||||||
|
static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2069,10 +2286,21 @@ class ValueArray42 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
v36_, v37_, v38_, v39_, v40_, v41_, v42_};
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
|
||||||
|
static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
|
||||||
|
static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
|
||||||
|
static_cast<T>(v42_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2150,10 +2378,21 @@ class ValueArray43 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_};
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
|
||||||
|
static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
|
||||||
|
static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
|
||||||
|
static_cast<T>(v42_), static_cast<T>(v43_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2233,10 +2472,21 @@ class ValueArray44 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_};
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
|
||||||
|
static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
|
||||||
|
static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
|
||||||
|
static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2317,10 +2567,22 @@ class ValueArray45 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_};
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
|
||||||
|
static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
|
||||||
|
static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
|
||||||
|
static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
|
||||||
|
static_cast<T>(v45_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2403,10 +2665,22 @@ class ValueArray46 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_};
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
|
||||||
|
static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
|
||||||
|
static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
|
||||||
|
static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
|
||||||
|
static_cast<T>(v45_), static_cast<T>(v46_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2491,11 +2765,22 @@ class ValueArray47 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_,
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
v47_};
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
|
||||||
|
static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
|
||||||
|
static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
|
||||||
|
static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
|
||||||
|
static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2581,11 +2866,23 @@ class ValueArray48 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
v48_};
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
|
||||||
|
static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
|
||||||
|
static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
|
||||||
|
static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
|
||||||
|
static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
|
||||||
|
static_cast<T>(v48_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2672,11 +2969,23 @@ class ValueArray49 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
v48_, v49_};
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
|
||||||
|
static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
|
||||||
|
static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
|
||||||
|
static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
|
||||||
|
static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
|
||||||
|
static_cast<T>(v48_), static_cast<T>(v49_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2764,11 +3073,23 @@ class ValueArray50 {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
|
||||||
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
|
||||||
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
|
||||||
v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
|
static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
|
||||||
v48_, v49_, v50_};
|
static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
|
||||||
|
static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
|
||||||
|
static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
|
||||||
|
static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
|
||||||
|
static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
|
||||||
|
static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
|
||||||
|
static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
|
||||||
|
static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
|
||||||
|
static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
|
||||||
|
static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
|
||||||
|
static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
|
||||||
|
static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
|
||||||
|
static_cast<T>(v48_), static_cast<T>(v49_), static_cast<T>(v50_)};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,7 +98,7 @@ class ValueArray$i {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator ParamGenerator<T>() const {
|
operator ParamGenerator<T>() const {
|
||||||
const T array[] = {$for j, [[v$(j)_]]};
|
const T array[] = {$for j, [[static_cast<T>(v$(j)_)]]};
|
||||||
return ValuesIn(array);
|
return ValuesIn(array);
|
||||||
}
|
}
|
||||||
|
|
|
@ -494,10 +494,10 @@ class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase {
|
||||||
const string& instantiation_name = gen_it->first;
|
const string& instantiation_name = gen_it->first;
|
||||||
ParamGenerator<ParamType> generator((*gen_it->second)());
|
ParamGenerator<ParamType> generator((*gen_it->second)());
|
||||||
|
|
||||||
Message test_case_name_stream;
|
string test_case_name;
|
||||||
if ( !instantiation_name.empty() )
|
if ( !instantiation_name.empty() )
|
||||||
test_case_name_stream << instantiation_name << "/";
|
test_case_name = instantiation_name + "/";
|
||||||
test_case_name_stream << test_info->test_case_base_name;
|
test_case_name += test_info->test_case_base_name;
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (typename ParamGenerator<ParamType>::iterator param_it =
|
for (typename ParamGenerator<ParamType>::iterator param_it =
|
||||||
|
@ -506,7 +506,7 @@ class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase {
|
||||||
Message test_name_stream;
|
Message test_name_stream;
|
||||||
test_name_stream << test_info->test_base_name << "/" << i;
|
test_name_stream << test_info->test_base_name << "/" << i;
|
||||||
MakeAndRegisterTestInfo(
|
MakeAndRegisterTestInfo(
|
||||||
test_case_name_stream.GetString().c_str(),
|
test_case_name.c_str(),
|
||||||
test_name_stream.GetString().c_str(),
|
test_name_stream.GetString().c_str(),
|
||||||
NULL, // No type parameter.
|
NULL, // No type parameter.
|
||||||
PrintToString(*param_it).c_str(),
|
PrintToString(*param_it).c_str(),
|
|
@ -32,6 +32,10 @@
|
||||||
// Low-level types and utilities for porting Google Test to various
|
// Low-level types and utilities for porting Google Test to various
|
||||||
// platforms. They are subject to change without notice. DO NOT USE
|
// platforms. They are subject to change without notice. DO NOT USE
|
||||||
// THEM IN USER CODE.
|
// THEM IN USER CODE.
|
||||||
|
//
|
||||||
|
// This file is fundamental to Google Test. All other Google Test source
|
||||||
|
// files are expected to #include this. Therefore, it cannot #include
|
||||||
|
// any other Google Test header.
|
||||||
|
|
||||||
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
|
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
|
||||||
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
|
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
|
||||||
|
@ -72,6 +76,8 @@
|
||||||
// Test's own tr1 tuple implementation should be
|
// Test's own tr1 tuple implementation should be
|
||||||
// used. Unused when the user sets
|
// used. Unused when the user sets
|
||||||
// GTEST_HAS_TR1_TUPLE to 0.
|
// GTEST_HAS_TR1_TUPLE to 0.
|
||||||
|
// GTEST_LANG_CXX11 - Define it to 1/0 to indicate that Google Test
|
||||||
|
// is building in C++11/C++98 mode.
|
||||||
// GTEST_LINKED_AS_SHARED_LIBRARY
|
// GTEST_LINKED_AS_SHARED_LIBRARY
|
||||||
// - Define to 1 when compiling tests that use
|
// - Define to 1 when compiling tests that use
|
||||||
// Google Test as a shared library (known as
|
// Google Test as a shared library (known as
|
||||||
|
@ -90,7 +96,11 @@
|
||||||
// GTEST_OS_LINUX - Linux
|
// GTEST_OS_LINUX - Linux
|
||||||
// GTEST_OS_LINUX_ANDROID - Google Android
|
// GTEST_OS_LINUX_ANDROID - Google Android
|
||||||
// GTEST_OS_MAC - Mac OS X
|
// GTEST_OS_MAC - Mac OS X
|
||||||
|
// GTEST_OS_IOS - iOS
|
||||||
|
// GTEST_OS_IOS_SIMULATOR - iOS simulator
|
||||||
// GTEST_OS_NACL - Google Native Client (NaCl)
|
// GTEST_OS_NACL - Google Native Client (NaCl)
|
||||||
|
// GTEST_OS_OPENBSD - OpenBSD
|
||||||
|
// GTEST_OS_QNX - QNX
|
||||||
// GTEST_OS_SOLARIS - Sun Solaris
|
// GTEST_OS_SOLARIS - Sun Solaris
|
||||||
// GTEST_OS_SYMBIAN - Symbian
|
// GTEST_OS_SYMBIAN - Symbian
|
||||||
// GTEST_OS_WINDOWS - Windows (Desktop, MinGW, or Mobile)
|
// GTEST_OS_WINDOWS - Windows (Desktop, MinGW, or Mobile)
|
||||||
|
@ -175,7 +185,7 @@
|
||||||
// GTEST_FLAG() - references a flag.
|
// GTEST_FLAG() - references a flag.
|
||||||
// GTEST_DECLARE_*() - declares a flag.
|
// GTEST_DECLARE_*() - declares a flag.
|
||||||
// GTEST_DEFINE_*() - defines a flag.
|
// GTEST_DEFINE_*() - defines a flag.
|
||||||
// GetArgvs() - returns the command line as a vector of strings.
|
// GetInjectableArgvs() - returns the command line as a vector of strings.
|
||||||
//
|
//
|
||||||
// Environment variable utilities:
|
// Environment variable utilities:
|
||||||
// GetEnv() - gets the value of an environment variable.
|
// GetEnv() - gets the value of an environment variable.
|
||||||
|
@ -193,6 +203,11 @@
|
||||||
# include <sys/stat.h>
|
# include <sys/stat.h>
|
||||||
#endif // !_WIN32_WCE
|
#endif // !_WIN32_WCE
|
||||||
|
|
||||||
|
#if defined __APPLE__
|
||||||
|
# include <AvailabilityMacros.h>
|
||||||
|
# include <TargetConditionals.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <iostream> // NOLINT
|
#include <iostream> // NOLINT
|
||||||
#include <sstream> // NOLINT
|
#include <sstream> // NOLINT
|
||||||
#include <string> // NOLINT
|
#include <string> // NOLINT
|
||||||
|
@ -227,11 +242,17 @@
|
||||||
# endif // _WIN32_WCE
|
# endif // _WIN32_WCE
|
||||||
#elif defined __APPLE__
|
#elif defined __APPLE__
|
||||||
# define GTEST_OS_MAC 1
|
# define GTEST_OS_MAC 1
|
||||||
|
# if TARGET_OS_IPHONE
|
||||||
|
# define GTEST_OS_IOS 1
|
||||||
|
# if TARGET_IPHONE_SIMULATOR
|
||||||
|
# define GTEST_OS_IOS_SIMULATOR 1
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
#elif defined __linux__
|
#elif defined __linux__
|
||||||
# define GTEST_OS_LINUX 1
|
# define GTEST_OS_LINUX 1
|
||||||
# ifdef ANDROID
|
# if defined __ANDROID__
|
||||||
# define GTEST_OS_LINUX_ANDROID 1
|
# define GTEST_OS_LINUX_ANDROID 1
|
||||||
# endif // ANDROID
|
# endif
|
||||||
#elif defined __MVS__
|
#elif defined __MVS__
|
||||||
# define GTEST_OS_ZOS 1
|
# define GTEST_OS_ZOS 1
|
||||||
#elif defined(__sun) && defined(__SVR4)
|
#elif defined(__sun) && defined(__SVR4)
|
||||||
|
@ -242,8 +263,25 @@
|
||||||
# define GTEST_OS_HPUX 1
|
# define GTEST_OS_HPUX 1
|
||||||
#elif defined __native_client__
|
#elif defined __native_client__
|
||||||
# define GTEST_OS_NACL 1
|
# define GTEST_OS_NACL 1
|
||||||
|
#elif defined __OpenBSD__
|
||||||
|
# define GTEST_OS_OPENBSD 1
|
||||||
|
#elif defined __QNX__
|
||||||
|
# define GTEST_OS_QNX 1
|
||||||
#endif // __CYGWIN__
|
#endif // __CYGWIN__
|
||||||
|
|
||||||
|
#ifndef GTEST_LANG_CXX11
|
||||||
|
// gcc and clang define __GXX_EXPERIMENTAL_CXX0X__ when
|
||||||
|
// -std={c,gnu}++{0x,11} is passed. The C++11 standard specifies a
|
||||||
|
// value for __cplusplus, and recent versions of clang, gcc, and
|
||||||
|
// probably other compilers set that too in C++11 mode.
|
||||||
|
# if __GXX_EXPERIMENTAL_CXX0X__ || __cplusplus >= 201103L
|
||||||
|
// Compiling in at least C++11 mode.
|
||||||
|
# define GTEST_LANG_CXX11 1
|
||||||
|
# else
|
||||||
|
# define GTEST_LANG_CXX11 0
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
// Brings in definitions for functions used in the testing::internal::posix
|
// Brings in definitions for functions used in the testing::internal::posix
|
||||||
// namespace (read, write, close, chdir, isatty, stat). We do not currently
|
// namespace (read, write, close, chdir, isatty, stat). We do not currently
|
||||||
// use them on Windows Mobile.
|
// use them on Windows Mobile.
|
||||||
|
@ -252,20 +290,25 @@
|
||||||
// is not the case, we need to include headers that provide the functions
|
// is not the case, we need to include headers that provide the functions
|
||||||
// mentioned above.
|
// mentioned above.
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
# if !GTEST_OS_NACL
|
# include <strings.h>
|
||||||
// TODO(vladl@google.com): Remove this condition when Native Client SDK adds
|
|
||||||
// strings.h (tracked in
|
|
||||||
// http://code.google.com/p/nativeclient/issues/detail?id=1175).
|
|
||||||
# include <strings.h> // Native Client doesn't provide strings.h.
|
|
||||||
# endif
|
|
||||||
#elif !GTEST_OS_WINDOWS_MOBILE
|
#elif !GTEST_OS_WINDOWS_MOBILE
|
||||||
# include <direct.h>
|
# include <direct.h>
|
||||||
# include <io.h>
|
# include <io.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if GTEST_OS_LINUX_ANDROID
|
||||||
|
// Used to define __ANDROID_API__ matching the target NDK API level.
|
||||||
|
# include <android/api-level.h> // NOLINT
|
||||||
|
#endif
|
||||||
|
|
||||||
// Defines this to true iff Google Test can use POSIX regular expressions.
|
// Defines this to true iff Google Test can use POSIX regular expressions.
|
||||||
#ifndef GTEST_HAS_POSIX_RE
|
#ifndef GTEST_HAS_POSIX_RE
|
||||||
# define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS)
|
# if GTEST_OS_LINUX_ANDROID
|
||||||
|
// On Android, <regex.h> is only available starting with Gingerbread.
|
||||||
|
# define GTEST_HAS_POSIX_RE (__ANDROID_API__ >= 9)
|
||||||
|
# else
|
||||||
|
# define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS)
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if GTEST_HAS_POSIX_RE
|
#if GTEST_HAS_POSIX_RE
|
||||||
|
@ -380,11 +423,27 @@
|
||||||
# elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40302)
|
# elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40302)
|
||||||
|
|
||||||
# ifdef __GXX_RTTI
|
# ifdef __GXX_RTTI
|
||||||
# define GTEST_HAS_RTTI 1
|
// When building against STLport with the Android NDK and with
|
||||||
|
// -frtti -fno-exceptions, the build fails at link time with undefined
|
||||||
|
// references to __cxa_bad_typeid. Note sure if STL or toolchain bug,
|
||||||
|
// so disable RTTI when detected.
|
||||||
|
# if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) && \
|
||||||
|
!defined(__EXCEPTIONS)
|
||||||
|
# define GTEST_HAS_RTTI 0
|
||||||
|
# else
|
||||||
|
# define GTEST_HAS_RTTI 1
|
||||||
|
# endif // GTEST_OS_LINUX_ANDROID && __STLPORT_MAJOR && !__EXCEPTIONS
|
||||||
# else
|
# else
|
||||||
# define GTEST_HAS_RTTI 0
|
# define GTEST_HAS_RTTI 0
|
||||||
# endif // __GXX_RTTI
|
# endif // __GXX_RTTI
|
||||||
|
|
||||||
|
// Clang defines __GXX_RTTI starting with version 3.0, but its manual recommends
|
||||||
|
// using has_feature instead. has_feature(cxx_rtti) is supported since 2.7, the
|
||||||
|
// first version with C++ support.
|
||||||
|
# elif defined(__clang__)
|
||||||
|
|
||||||
|
# define GTEST_HAS_RTTI __has_feature(cxx_rtti)
|
||||||
|
|
||||||
// Starting with version 9.0 IBM Visual Age defines __RTTI_ALL__ to 1 if
|
// Starting with version 9.0 IBM Visual Age defines __RTTI_ALL__ to 1 if
|
||||||
// both the typeid and dynamic_cast features are present.
|
// both the typeid and dynamic_cast features are present.
|
||||||
# elif defined(__IBMCPP__) && (__IBMCPP__ >= 900)
|
# elif defined(__IBMCPP__) && (__IBMCPP__ >= 900)
|
||||||
|
@ -417,7 +476,8 @@
|
||||||
//
|
//
|
||||||
// To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0
|
// To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0
|
||||||
// to your compiler flags.
|
// to your compiler flags.
|
||||||
# define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX)
|
# define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX \
|
||||||
|
|| GTEST_OS_QNX)
|
||||||
#endif // GTEST_HAS_PTHREAD
|
#endif // GTEST_HAS_PTHREAD
|
||||||
|
|
||||||
#if GTEST_HAS_PTHREAD
|
#if GTEST_HAS_PTHREAD
|
||||||
|
@ -433,8 +493,13 @@
|
||||||
// this macro to 0 to prevent Google Test from using tuple (any
|
// this macro to 0 to prevent Google Test from using tuple (any
|
||||||
// feature depending on tuple with be disabled in this mode).
|
// feature depending on tuple with be disabled in this mode).
|
||||||
#ifndef GTEST_HAS_TR1_TUPLE
|
#ifndef GTEST_HAS_TR1_TUPLE
|
||||||
|
# if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR)
|
||||||
|
// STLport, provided with the Android NDK, has neither <tr1/tuple> or <tuple>.
|
||||||
|
# define GTEST_HAS_TR1_TUPLE 0
|
||||||
|
# else
|
||||||
// The user didn't tell us not to do it, so we assume it's OK.
|
// The user didn't tell us not to do it, so we assume it's OK.
|
||||||
# define GTEST_HAS_TR1_TUPLE 1
|
# define GTEST_HAS_TR1_TUPLE 1
|
||||||
|
# endif
|
||||||
#endif // GTEST_HAS_TR1_TUPLE
|
#endif // GTEST_HAS_TR1_TUPLE
|
||||||
|
|
||||||
// Determines whether Google Test's own tr1 tuple implementation
|
// Determines whether Google Test's own tr1 tuple implementation
|
||||||
|
@ -443,14 +508,28 @@
|
||||||
// The user didn't tell us, so we need to figure it out.
|
// The user didn't tell us, so we need to figure it out.
|
||||||
|
|
||||||
// We use our own TR1 tuple if we aren't sure the user has an
|
// We use our own TR1 tuple if we aren't sure the user has an
|
||||||
// implementation of it already. At this time, GCC 4.0.0+ and MSVC
|
// implementation of it already. At this time, libstdc++ 4.0.0+ and
|
||||||
// 2010 are the only mainstream compilers that come with a TR1 tuple
|
// MSVC 2010 are the only mainstream standard libraries that come
|
||||||
// implementation. NVIDIA's CUDA NVCC compiler pretends to be GCC by
|
// with a TR1 tuple implementation. NVIDIA's CUDA NVCC compiler
|
||||||
// defining __GNUC__ and friends, but cannot compile GCC's tuple
|
// pretends to be GCC by defining __GNUC__ and friends, but cannot
|
||||||
// implementation. MSVC 2008 (9.0) provides TR1 tuple in a 323 MB
|
// compile GCC's tuple implementation. MSVC 2008 (9.0) provides TR1
|
||||||
// Feature Pack download, which we cannot assume the user has.
|
// tuple in a 323 MB Feature Pack download, which we cannot assume the
|
||||||
# if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000)) \
|
// user has. QNX's QCC compiler is a modified GCC but it doesn't
|
||||||
|| _MSC_VER >= 1600
|
// support TR1 tuple. libc++ only provides std::tuple, in C++11 mode,
|
||||||
|
// and it can be used with some compilers that define __GNUC__.
|
||||||
|
# if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000) \
|
||||||
|
&& !GTEST_OS_QNX && !defined(_LIBCPP_VERSION)) || _MSC_VER >= 1600
|
||||||
|
# define GTEST_ENV_HAS_TR1_TUPLE_ 1
|
||||||
|
# endif
|
||||||
|
|
||||||
|
// C++11 specifies that <tuple> provides std::tuple. Use that if gtest is used
|
||||||
|
// in C++11 mode and libstdc++ isn't very old (binaries targeting OS X 10.6
|
||||||
|
// can build with clang but need to use gcc4.2's libstdc++).
|
||||||
|
# if GTEST_LANG_CXX11 && (!defined(__GLIBCXX__) || __GLIBCXX__ > 20110325)
|
||||||
|
# define GTEST_ENV_HAS_STD_TUPLE_ 1
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if GTEST_ENV_HAS_TR1_TUPLE_ || GTEST_ENV_HAS_STD_TUPLE_
|
||||||
# define GTEST_USE_OWN_TR1_TUPLE 0
|
# define GTEST_USE_OWN_TR1_TUPLE 0
|
||||||
# else
|
# else
|
||||||
# define GTEST_USE_OWN_TR1_TUPLE 1
|
# define GTEST_USE_OWN_TR1_TUPLE 1
|
||||||
|
@ -465,6 +544,22 @@
|
||||||
|
|
||||||
# if GTEST_USE_OWN_TR1_TUPLE
|
# if GTEST_USE_OWN_TR1_TUPLE
|
||||||
# include "gtest/internal/gtest-tuple.h"
|
# include "gtest/internal/gtest-tuple.h"
|
||||||
|
# elif GTEST_ENV_HAS_STD_TUPLE_
|
||||||
|
# include <tuple>
|
||||||
|
// C++11 puts its tuple into the ::std namespace rather than
|
||||||
|
// ::std::tr1. gtest expects tuple to live in ::std::tr1, so put it there.
|
||||||
|
// This causes undefined behavior, but supported compilers react in
|
||||||
|
// the way we intend.
|
||||||
|
namespace std {
|
||||||
|
namespace tr1 {
|
||||||
|
using ::std::get;
|
||||||
|
using ::std::make_tuple;
|
||||||
|
using ::std::tuple;
|
||||||
|
using ::std::tuple_element;
|
||||||
|
using ::std::tuple_size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# elif GTEST_OS_SYMBIAN
|
# elif GTEST_OS_SYMBIAN
|
||||||
|
|
||||||
// On Symbian, BOOST_HAS_TR1_TUPLE causes Boost's TR1 tuple library to
|
// On Symbian, BOOST_HAS_TR1_TUPLE causes Boost's TR1 tuple library to
|
||||||
|
@ -515,7 +610,16 @@
|
||||||
// The user didn't tell us, so we need to figure it out.
|
// The user didn't tell us, so we need to figure it out.
|
||||||
|
|
||||||
# if GTEST_OS_LINUX && !defined(__ia64__)
|
# if GTEST_OS_LINUX && !defined(__ia64__)
|
||||||
# define GTEST_HAS_CLONE 1
|
# if GTEST_OS_LINUX_ANDROID
|
||||||
|
// On Android, clone() is only available on ARM starting with Gingerbread.
|
||||||
|
# if defined(__arm__) && __ANDROID_API__ >= 9
|
||||||
|
# define GTEST_HAS_CLONE 1
|
||||||
|
# else
|
||||||
|
# define GTEST_HAS_CLONE 0
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# define GTEST_HAS_CLONE 1
|
||||||
|
# endif
|
||||||
# else
|
# else
|
||||||
# define GTEST_HAS_CLONE 0
|
# define GTEST_HAS_CLONE 0
|
||||||
# endif // GTEST_OS_LINUX && !defined(__ia64__)
|
# endif // GTEST_OS_LINUX && !defined(__ia64__)
|
||||||
|
@ -538,9 +642,11 @@
|
||||||
// Google Test does not support death tests for VC 7.1 and earlier as
|
// Google Test does not support death tests for VC 7.1 and earlier as
|
||||||
// abort() in a VC 7.1 application compiled as GUI in debug config
|
// abort() in a VC 7.1 application compiled as GUI in debug config
|
||||||
// pops up a dialog window that cannot be suppressed programmatically.
|
// pops up a dialog window that cannot be suppressed programmatically.
|
||||||
#if (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \
|
#if (GTEST_OS_LINUX || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \
|
||||||
|
(GTEST_OS_MAC && !GTEST_OS_IOS) || GTEST_OS_IOS_SIMULATOR || \
|
||||||
(GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \
|
(GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \
|
||||||
GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX)
|
GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX || \
|
||||||
|
GTEST_OS_OPENBSD || GTEST_OS_QNX)
|
||||||
# define GTEST_HAS_DEATH_TEST 1
|
# define GTEST_HAS_DEATH_TEST 1
|
||||||
# include <vector> // NOLINT
|
# include <vector> // NOLINT
|
||||||
#endif
|
#endif
|
||||||
|
@ -669,13 +775,23 @@
|
||||||
# define GTEST_NO_INLINE_
|
# define GTEST_NO_INLINE_
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// _LIBCPP_VERSION is defined by the libc++ library from the LLVM project.
|
||||||
|
#if defined(__GLIBCXX__) || defined(_LIBCPP_VERSION)
|
||||||
|
# define GTEST_HAS_CXXABI_H_ 1
|
||||||
|
#else
|
||||||
|
# define GTEST_HAS_CXXABI_H_ 0
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace testing {
|
namespace testing {
|
||||||
|
|
||||||
class Message;
|
class Message;
|
||||||
|
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
|
||||||
class String;
|
// A secret type that Google Test users don't know about. It has no
|
||||||
|
// definition on purpose. Therefore it's impossible to create a
|
||||||
|
// Secret object, which is what we want.
|
||||||
|
class Secret;
|
||||||
|
|
||||||
// The GTEST_COMPILE_ASSERT_ macro can be used to verify that a compile time
|
// The GTEST_COMPILE_ASSERT_ macro can be used to verify that a compile time
|
||||||
// expression is true. For example, you could use it to verify the
|
// expression is true. For example, you could use it to verify the
|
||||||
|
@ -697,8 +813,8 @@ struct CompileAssert {
|
||||||
};
|
};
|
||||||
|
|
||||||
#define GTEST_COMPILE_ASSERT_(expr, msg) \
|
#define GTEST_COMPILE_ASSERT_(expr, msg) \
|
||||||
typedef ::testing::internal::CompileAssert<(bool(expr))> \
|
typedef ::testing::internal::CompileAssert<(static_cast<bool>(expr))> \
|
||||||
msg[bool(expr) ? 1 : -1]
|
msg[static_cast<bool>(expr) ? 1 : -1] GTEST_ATTRIBUTE_UNUSED_
|
||||||
|
|
||||||
// Implementation details of GTEST_COMPILE_ASSERT_:
|
// Implementation details of GTEST_COMPILE_ASSERT_:
|
||||||
//
|
//
|
||||||
|
@ -796,6 +912,7 @@ class scoped_ptr {
|
||||||
ptr_ = p;
|
ptr_ = p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
T* ptr_;
|
T* ptr_;
|
||||||
|
|
||||||
|
@ -858,10 +975,9 @@ class GTEST_API_ RE {
|
||||||
private:
|
private:
|
||||||
void Init(const char* regex);
|
void Init(const char* regex);
|
||||||
|
|
||||||
// We use a const char* instead of a string, as Google Test may be used
|
// We use a const char* instead of an std::string, as Google Test used to be
|
||||||
// where string is not available. We also do not use Google Test's own
|
// used where std::string is not available. TODO(wan@google.com): change to
|
||||||
// String type here, in order to simplify dependencies between the
|
// std::string.
|
||||||
// files.
|
|
||||||
const char* pattern_;
|
const char* pattern_;
|
||||||
bool is_valid_;
|
bool is_valid_;
|
||||||
|
|
||||||
|
@ -1044,20 +1160,21 @@ Derived* CheckedDowncastToActualType(Base* base) {
|
||||||
// GetCapturedStderr - stops capturing stderr and returns the captured string.
|
// GetCapturedStderr - stops capturing stderr and returns the captured string.
|
||||||
//
|
//
|
||||||
GTEST_API_ void CaptureStdout();
|
GTEST_API_ void CaptureStdout();
|
||||||
GTEST_API_ String GetCapturedStdout();
|
GTEST_API_ std::string GetCapturedStdout();
|
||||||
GTEST_API_ void CaptureStderr();
|
GTEST_API_ void CaptureStderr();
|
||||||
GTEST_API_ String GetCapturedStderr();
|
GTEST_API_ std::string GetCapturedStderr();
|
||||||
|
|
||||||
#endif // GTEST_HAS_STREAM_REDIRECTION
|
#endif // GTEST_HAS_STREAM_REDIRECTION
|
||||||
|
|
||||||
|
|
||||||
#if GTEST_HAS_DEATH_TEST
|
#if GTEST_HAS_DEATH_TEST
|
||||||
|
|
||||||
// A copy of all command line arguments. Set by InitGoogleTest().
|
const ::std::vector<testing::internal::string>& GetInjectableArgvs();
|
||||||
extern ::std::vector<String> g_argvs;
|
void SetInjectableArgvs(const ::std::vector<testing::internal::string>*
|
||||||
|
new_argvs);
|
||||||
|
|
||||||
// GTEST_HAS_DEATH_TEST implies we have ::std::string.
|
// A copy of all command line arguments. Set by InitGoogleTest().
|
||||||
const ::std::vector<String>& GetArgvs();
|
extern ::std::vector<testing::internal::string> g_argvs;
|
||||||
|
|
||||||
#endif // GTEST_HAS_DEATH_TEST
|
#endif // GTEST_HAS_DEATH_TEST
|
||||||
|
|
||||||
|
@ -1084,22 +1201,37 @@ inline void SleepMilliseconds(int n) {
|
||||||
// use it in user tests, either directly or indirectly.
|
// use it in user tests, either directly or indirectly.
|
||||||
class Notification {
|
class Notification {
|
||||||
public:
|
public:
|
||||||
Notification() : notified_(false) {}
|
Notification() : notified_(false) {
|
||||||
|
GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL));
|
||||||
|
}
|
||||||
|
~Notification() {
|
||||||
|
pthread_mutex_destroy(&mutex_);
|
||||||
|
}
|
||||||
|
|
||||||
// Notifies all threads created with this notification to start. Must
|
// Notifies all threads created with this notification to start. Must
|
||||||
// be called from the controller thread.
|
// be called from the controller thread.
|
||||||
void Notify() { notified_ = true; }
|
void Notify() {
|
||||||
|
pthread_mutex_lock(&mutex_);
|
||||||
|
notified_ = true;
|
||||||
|
pthread_mutex_unlock(&mutex_);
|
||||||
|
}
|
||||||
|
|
||||||
// Blocks until the controller thread notifies. Must be called from a test
|
// Blocks until the controller thread notifies. Must be called from a test
|
||||||
// thread.
|
// thread.
|
||||||
void WaitForNotification() {
|
void WaitForNotification() {
|
||||||
while(!notified_) {
|
for (;;) {
|
||||||
|
pthread_mutex_lock(&mutex_);
|
||||||
|
const bool notified = notified_;
|
||||||
|
pthread_mutex_unlock(&mutex_);
|
||||||
|
if (notified)
|
||||||
|
break;
|
||||||
SleepMilliseconds(10);
|
SleepMilliseconds(10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
volatile bool notified_;
|
pthread_mutex_t mutex_;
|
||||||
|
bool notified_;
|
||||||
|
|
||||||
GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification);
|
GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification);
|
||||||
};
|
};
|
||||||
|
@ -1207,21 +1339,23 @@ class MutexBase {
|
||||||
void Lock() {
|
void Lock() {
|
||||||
GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&mutex_));
|
GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&mutex_));
|
||||||
owner_ = pthread_self();
|
owner_ = pthread_self();
|
||||||
|
has_owner_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Releases this mutex.
|
// Releases this mutex.
|
||||||
void Unlock() {
|
void Unlock() {
|
||||||
// We don't protect writing to owner_ here, as it's the caller's
|
// Since the lock is being released the owner_ field should no longer be
|
||||||
// responsibility to ensure that the current thread holds the
|
// considered valid. We don't protect writing to has_owner_ here, as it's
|
||||||
|
// the caller's responsibility to ensure that the current thread holds the
|
||||||
// mutex when this is called.
|
// mutex when this is called.
|
||||||
owner_ = 0;
|
has_owner_ = false;
|
||||||
GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&mutex_));
|
GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&mutex_));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Does nothing if the current thread holds the mutex. Otherwise, crashes
|
// Does nothing if the current thread holds the mutex. Otherwise, crashes
|
||||||
// with high probability.
|
// with high probability.
|
||||||
void AssertHeld() const {
|
void AssertHeld() const {
|
||||||
GTEST_CHECK_(owner_ == pthread_self())
|
GTEST_CHECK_(has_owner_ && pthread_equal(owner_, pthread_self()))
|
||||||
<< "The current thread is not holding the mutex @" << this;
|
<< "The current thread is not holding the mutex @" << this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1232,7 +1366,14 @@ class MutexBase {
|
||||||
// have to be public.
|
// have to be public.
|
||||||
public:
|
public:
|
||||||
pthread_mutex_t mutex_; // The underlying pthread mutex.
|
pthread_mutex_t mutex_; // The underlying pthread mutex.
|
||||||
pthread_t owner_; // The thread holding the mutex; 0 means no one holds it.
|
// has_owner_ indicates whether the owner_ field below contains a valid thread
|
||||||
|
// ID and is therefore safe to inspect (e.g., to use in pthread_equal()). All
|
||||||
|
// accesses to the owner_ field should be protected by a check of this field.
|
||||||
|
// An alternative might be to memset() owner_ to all zeros, but there's no
|
||||||
|
// guarantee that a zero'd pthread_t is necessarily invalid or even different
|
||||||
|
// from pthread_self().
|
||||||
|
bool has_owner_;
|
||||||
|
pthread_t owner_; // The thread holding the mutex.
|
||||||
};
|
};
|
||||||
|
|
||||||
// Forward-declares a static mutex.
|
// Forward-declares a static mutex.
|
||||||
|
@ -1240,8 +1381,13 @@ class MutexBase {
|
||||||
extern ::testing::internal::MutexBase mutex
|
extern ::testing::internal::MutexBase mutex
|
||||||
|
|
||||||
// Defines and statically (i.e. at link time) initializes a static mutex.
|
// Defines and statically (i.e. at link time) initializes a static mutex.
|
||||||
|
// The initialization list here does not explicitly initialize each field,
|
||||||
|
// instead relying on default initialization for the unspecified fields. In
|
||||||
|
// particular, the owner_ field (a pthread_t) is not explicitly initialized.
|
||||||
|
// This allows initialization to work whether pthread_t is a scalar or struct.
|
||||||
|
// The flag -Wmissing-field-initializers must not be specified for this to work.
|
||||||
# define GTEST_DEFINE_STATIC_MUTEX_(mutex) \
|
# define GTEST_DEFINE_STATIC_MUTEX_(mutex) \
|
||||||
::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, 0 }
|
::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, false }
|
||||||
|
|
||||||
// The Mutex class can only be used for mutexes created at runtime. It
|
// The Mutex class can only be used for mutexes created at runtime. It
|
||||||
// shares its API with MutexBase otherwise.
|
// shares its API with MutexBase otherwise.
|
||||||
|
@ -1249,7 +1395,7 @@ class Mutex : public MutexBase {
|
||||||
public:
|
public:
|
||||||
Mutex() {
|
Mutex() {
|
||||||
GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL));
|
GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL));
|
||||||
owner_ = 0;
|
has_owner_ = false;
|
||||||
}
|
}
|
||||||
~Mutex() {
|
~Mutex() {
|
||||||
GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&mutex_));
|
GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&mutex_));
|
||||||
|
@ -1399,6 +1545,8 @@ class ThreadLocal {
|
||||||
class Mutex {
|
class Mutex {
|
||||||
public:
|
public:
|
||||||
Mutex() {}
|
Mutex() {}
|
||||||
|
void Lock() {}
|
||||||
|
void Unlock() {}
|
||||||
void AssertHeld() const {}
|
void AssertHeld() const {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1529,6 +1677,10 @@ inline bool IsUpper(char ch) {
|
||||||
inline bool IsXDigit(char ch) {
|
inline bool IsXDigit(char ch) {
|
||||||
return isxdigit(static_cast<unsigned char>(ch)) != 0;
|
return isxdigit(static_cast<unsigned char>(ch)) != 0;
|
||||||
}
|
}
|
||||||
|
inline bool IsXDigit(wchar_t ch) {
|
||||||
|
const unsigned char low_byte = static_cast<unsigned char>(ch);
|
||||||
|
return ch == low_byte && isxdigit(low_byte) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
inline char ToLower(char ch) {
|
inline char ToLower(char ch) {
|
||||||
return static_cast<char>(tolower(static_cast<unsigned char>(ch)));
|
return static_cast<char>(tolower(static_cast<unsigned char>(ch)));
|
||||||
|
@ -1666,6 +1818,23 @@ inline void Abort() { abort(); }
|
||||||
|
|
||||||
} // namespace posix
|
} // namespace posix
|
||||||
|
|
||||||
|
// MSVC "deprecates" snprintf and issues warnings wherever it is used. In
|
||||||
|
// order to avoid these warnings, we need to use _snprintf or _snprintf_s on
|
||||||
|
// MSVC-based platforms. We map the GTEST_SNPRINTF_ macro to the appropriate
|
||||||
|
// function in order to achieve that. We use macro definition here because
|
||||||
|
// snprintf is a variadic function.
|
||||||
|
#if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE
|
||||||
|
// MSVC 2005 and above support variadic macros.
|
||||||
|
# define GTEST_SNPRINTF_(buffer, size, format, ...) \
|
||||||
|
_snprintf_s(buffer, size, size, format, __VA_ARGS__)
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
// Windows CE does not define _snprintf_s and MSVC prior to 2005 doesn't
|
||||||
|
// complain about _snprintf.
|
||||||
|
# define GTEST_SNPRINTF_ _snprintf
|
||||||
|
#else
|
||||||
|
# define GTEST_SNPRINTF_ snprintf
|
||||||
|
#endif
|
||||||
|
|
||||||
// The maximum number a BiggestInt can represent. This definition
|
// The maximum number a BiggestInt can represent. This definition
|
||||||
// works no matter BiggestInt is represented in one's complement or
|
// works no matter BiggestInt is represented in one's complement or
|
||||||
// two's complement.
|
// two's complement.
|
||||||
|
@ -1718,7 +1887,6 @@ class TypeWithSize<4> {
|
||||||
template <>
|
template <>
|
||||||
class TypeWithSize<8> {
|
class TypeWithSize<8> {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
#if GTEST_OS_WINDOWS
|
#if GTEST_OS_WINDOWS
|
||||||
typedef __int64 Int;
|
typedef __int64 Int;
|
||||||
typedef unsigned __int64 UInt;
|
typedef unsigned __int64 UInt;
|
||||||
|
@ -1745,7 +1913,7 @@ typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds.
|
||||||
#define GTEST_DECLARE_int32_(name) \
|
#define GTEST_DECLARE_int32_(name) \
|
||||||
GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name)
|
GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name)
|
||||||
#define GTEST_DECLARE_string_(name) \
|
#define GTEST_DECLARE_string_(name) \
|
||||||
GTEST_API_ extern ::testing::internal::String GTEST_FLAG(name)
|
GTEST_API_ extern ::std::string GTEST_FLAG(name)
|
||||||
|
|
||||||
// Macros for defining flags.
|
// Macros for defining flags.
|
||||||
#define GTEST_DEFINE_bool_(name, default_val, doc) \
|
#define GTEST_DEFINE_bool_(name, default_val, doc) \
|
||||||
|
@ -1753,7 +1921,11 @@ typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds.
|
||||||
#define GTEST_DEFINE_int32_(name, default_val, doc) \
|
#define GTEST_DEFINE_int32_(name, default_val, doc) \
|
||||||
GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val)
|
GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val)
|
||||||
#define GTEST_DEFINE_string_(name, default_val, doc) \
|
#define GTEST_DEFINE_string_(name, default_val, doc) \
|
||||||
GTEST_API_ ::testing::internal::String GTEST_FLAG(name) = (default_val)
|
GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val)
|
||||||
|
|
||||||
|
// Thread annotations
|
||||||
|
#define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks)
|
||||||
|
#define GTEST_LOCK_EXCLUDED_(locks)
|
||||||
|
|
||||||
// Parses 'str' for a 32-bit signed integer. If successful, writes the result
|
// Parses 'str' for a 32-bit signed integer. If successful, writes the result
|
||||||
// to *value and returns true; otherwise leaves *value unchanged and returns
|
// to *value and returns true; otherwise leaves *value unchanged and returns
|
167
external/gtest/include/gtest/internal/gtest-string.h
vendored
Normal file
167
external/gtest/include/gtest/internal/gtest-string.h
vendored
Normal file
|
@ -0,0 +1,167 @@
|
||||||
|
// Copyright 2005, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee)
|
||||||
|
//
|
||||||
|
// The Google C++ Testing Framework (Google Test)
|
||||||
|
//
|
||||||
|
// This header file declares the String class and functions used internally by
|
||||||
|
// Google Test. They are subject to change without notice. They should not used
|
||||||
|
// by code external to Google Test.
|
||||||
|
//
|
||||||
|
// This header file is #included by <gtest/internal/gtest-internal.h>.
|
||||||
|
// It should not be #included by other files.
|
||||||
|
|
||||||
|
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
|
||||||
|
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
|
||||||
|
|
||||||
|
#ifdef __BORLANDC__
|
||||||
|
// string.h is not guaranteed to provide strcpy on C++ Builder.
|
||||||
|
# include <mem.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "gtest/internal/gtest-port.h"
|
||||||
|
|
||||||
|
namespace testing {
|
||||||
|
namespace internal {
|
||||||
|
|
||||||
|
// String - an abstract class holding static string utilities.
|
||||||
|
class GTEST_API_ String {
|
||||||
|
public:
|
||||||
|
// Static utility methods
|
||||||
|
|
||||||
|
// Clones a 0-terminated C string, allocating memory using new. The
|
||||||
|
// caller is responsible for deleting the return value using
|
||||||
|
// delete[]. Returns the cloned string, or NULL if the input is
|
||||||
|
// NULL.
|
||||||
|
//
|
||||||
|
// This is different from strdup() in string.h, which allocates
|
||||||
|
// memory using malloc().
|
||||||
|
static const char* CloneCString(const char* c_str);
|
||||||
|
|
||||||
|
#if GTEST_OS_WINDOWS_MOBILE
|
||||||
|
// Windows CE does not have the 'ANSI' versions of Win32 APIs. To be
|
||||||
|
// able to pass strings to Win32 APIs on CE we need to convert them
|
||||||
|
// to 'Unicode', UTF-16.
|
||||||
|
|
||||||
|
// Creates a UTF-16 wide string from the given ANSI string, allocating
|
||||||
|
// memory using new. The caller is responsible for deleting the return
|
||||||
|
// value using delete[]. Returns the wide string, or NULL if the
|
||||||
|
// input is NULL.
|
||||||
|
//
|
||||||
|
// The wide string is created using the ANSI codepage (CP_ACP) to
|
||||||
|
// match the behaviour of the ANSI versions of Win32 calls and the
|
||||||
|
// C runtime.
|
||||||
|
static LPCWSTR AnsiToUtf16(const char* c_str);
|
||||||
|
|
||||||
|
// Creates an ANSI string from the given wide string, allocating
|
||||||
|
// memory using new. The caller is responsible for deleting the return
|
||||||
|
// value using delete[]. Returns the ANSI string, or NULL if the
|
||||||
|
// input is NULL.
|
||||||
|
//
|
||||||
|
// The returned string is created using the ANSI codepage (CP_ACP) to
|
||||||
|
// match the behaviour of the ANSI versions of Win32 calls and the
|
||||||
|
// C runtime.
|
||||||
|
static const char* Utf16ToAnsi(LPCWSTR utf16_str);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Compares two C strings. Returns true iff they have the same content.
|
||||||
|
//
|
||||||
|
// Unlike strcmp(), this function can handle NULL argument(s). A
|
||||||
|
// NULL C string is considered different to any non-NULL C string,
|
||||||
|
// including the empty string.
|
||||||
|
static bool CStringEquals(const char* lhs, const char* rhs);
|
||||||
|
|
||||||
|
// Converts a wide C string to a String using the UTF-8 encoding.
|
||||||
|
// NULL will be converted to "(null)". If an error occurred during
|
||||||
|
// the conversion, "(failed to convert from wide string)" is
|
||||||
|
// returned.
|
||||||
|
static std::string ShowWideCString(const wchar_t* wide_c_str);
|
||||||
|
|
||||||
|
// Compares two wide C strings. Returns true iff they have the same
|
||||||
|
// content.
|
||||||
|
//
|
||||||
|
// Unlike wcscmp(), this function can handle NULL argument(s). A
|
||||||
|
// NULL C string is considered different to any non-NULL C string,
|
||||||
|
// including the empty string.
|
||||||
|
static bool WideCStringEquals(const wchar_t* lhs, const wchar_t* rhs);
|
||||||
|
|
||||||
|
// Compares two C strings, ignoring case. Returns true iff they
|
||||||
|
// have the same content.
|
||||||
|
//
|
||||||
|
// Unlike strcasecmp(), this function can handle NULL argument(s).
|
||||||
|
// A NULL C string is considered different to any non-NULL C string,
|
||||||
|
// including the empty string.
|
||||||
|
static bool CaseInsensitiveCStringEquals(const char* lhs,
|
||||||
|
const char* rhs);
|
||||||
|
|
||||||
|
// Compares two wide C strings, ignoring case. Returns true iff they
|
||||||
|
// have the same content.
|
||||||
|
//
|
||||||
|
// Unlike wcscasecmp(), this function can handle NULL argument(s).
|
||||||
|
// A NULL C string is considered different to any non-NULL wide C string,
|
||||||
|
// including the empty string.
|
||||||
|
// NB: The implementations on different platforms slightly differ.
|
||||||
|
// On windows, this method uses _wcsicmp which compares according to LC_CTYPE
|
||||||
|
// environment variable. On GNU platform this method uses wcscasecmp
|
||||||
|
// which compares according to LC_CTYPE category of the current locale.
|
||||||
|
// On MacOS X, it uses towlower, which also uses LC_CTYPE category of the
|
||||||
|
// current locale.
|
||||||
|
static bool CaseInsensitiveWideCStringEquals(const wchar_t* lhs,
|
||||||
|
const wchar_t* rhs);
|
||||||
|
|
||||||
|
// Returns true iff the given string ends with the given suffix, ignoring
|
||||||
|
// case. Any string is considered to end with an empty suffix.
|
||||||
|
static bool EndsWithCaseInsensitive(
|
||||||
|
const std::string& str, const std::string& suffix);
|
||||||
|
|
||||||
|
// Formats an int value as "%02d".
|
||||||
|
static std::string FormatIntWidth2(int value); // "%02d" for width == 2
|
||||||
|
|
||||||
|
// Formats an int value as "%X".
|
||||||
|
static std::string FormatHexInt(int value);
|
||||||
|
|
||||||
|
// Formats a byte as "%02X".
|
||||||
|
static std::string FormatByte(unsigned char value);
|
||||||
|
|
||||||
|
private:
|
||||||
|
String(); // Not meant to be instantiated.
|
||||||
|
}; // class String
|
||||||
|
|
||||||
|
// Gets the content of the stringstream's buffer as an std::string. Each '\0'
|
||||||
|
// character in the buffer is replaced with "\\0".
|
||||||
|
GTEST_API_ std::string StringStreamToString(::std::stringstream* stream);
|
||||||
|
|
||||||
|
} // namespace internal
|
||||||
|
} // namespace testing
|
||||||
|
|
||||||
|
#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
|
|
@ -1,4 +1,6 @@
|
||||||
// This file was GENERATED by a script. DO NOT EDIT BY HAND!!!
|
// This file was GENERATED by command:
|
||||||
|
// pump.py gtest-tuple.h.pump
|
||||||
|
// DO NOT EDIT BY HAND!!!
|
||||||
|
|
||||||
// Copyright 2009 Google Inc.
|
// Copyright 2009 Google Inc.
|
||||||
// All Rights Reserved.
|
// All Rights Reserved.
|
||||||
|
@ -140,34 +142,54 @@ template <bool kIndexValid, int kIndex, class Tuple>
|
||||||
struct TupleElement;
|
struct TupleElement;
|
||||||
|
|
||||||
template <GTEST_10_TYPENAMES_(T)>
|
template <GTEST_10_TYPENAMES_(T)>
|
||||||
struct TupleElement<true, 0, GTEST_10_TUPLE_(T)> { typedef T0 type; };
|
struct TupleElement<true, 0, GTEST_10_TUPLE_(T) > {
|
||||||
|
typedef T0 type;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_10_TYPENAMES_(T)>
|
template <GTEST_10_TYPENAMES_(T)>
|
||||||
struct TupleElement<true, 1, GTEST_10_TUPLE_(T)> { typedef T1 type; };
|
struct TupleElement<true, 1, GTEST_10_TUPLE_(T) > {
|
||||||
|
typedef T1 type;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_10_TYPENAMES_(T)>
|
template <GTEST_10_TYPENAMES_(T)>
|
||||||
struct TupleElement<true, 2, GTEST_10_TUPLE_(T)> { typedef T2 type; };
|
struct TupleElement<true, 2, GTEST_10_TUPLE_(T) > {
|
||||||
|
typedef T2 type;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_10_TYPENAMES_(T)>
|
template <GTEST_10_TYPENAMES_(T)>
|
||||||
struct TupleElement<true, 3, GTEST_10_TUPLE_(T)> { typedef T3 type; };
|
struct TupleElement<true, 3, GTEST_10_TUPLE_(T) > {
|
||||||
|
typedef T3 type;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_10_TYPENAMES_(T)>
|
template <GTEST_10_TYPENAMES_(T)>
|
||||||
struct TupleElement<true, 4, GTEST_10_TUPLE_(T)> { typedef T4 type; };
|
struct TupleElement<true, 4, GTEST_10_TUPLE_(T) > {
|
||||||
|
typedef T4 type;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_10_TYPENAMES_(T)>
|
template <GTEST_10_TYPENAMES_(T)>
|
||||||
struct TupleElement<true, 5, GTEST_10_TUPLE_(T)> { typedef T5 type; };
|
struct TupleElement<true, 5, GTEST_10_TUPLE_(T) > {
|
||||||
|
typedef T5 type;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_10_TYPENAMES_(T)>
|
template <GTEST_10_TYPENAMES_(T)>
|
||||||
struct TupleElement<true, 6, GTEST_10_TUPLE_(T)> { typedef T6 type; };
|
struct TupleElement<true, 6, GTEST_10_TUPLE_(T) > {
|
||||||
|
typedef T6 type;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_10_TYPENAMES_(T)>
|
template <GTEST_10_TYPENAMES_(T)>
|
||||||
struct TupleElement<true, 7, GTEST_10_TUPLE_(T)> { typedef T7 type; };
|
struct TupleElement<true, 7, GTEST_10_TUPLE_(T) > {
|
||||||
|
typedef T7 type;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_10_TYPENAMES_(T)>
|
template <GTEST_10_TYPENAMES_(T)>
|
||||||
struct TupleElement<true, 8, GTEST_10_TUPLE_(T)> { typedef T8 type; };
|
struct TupleElement<true, 8, GTEST_10_TUPLE_(T) > {
|
||||||
|
typedef T8 type;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_10_TYPENAMES_(T)>
|
template <GTEST_10_TYPENAMES_(T)>
|
||||||
struct TupleElement<true, 9, GTEST_10_TUPLE_(T)> { typedef T9 type; };
|
struct TupleElement<true, 9, GTEST_10_TUPLE_(T) > {
|
||||||
|
typedef T9 type;
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace gtest_internal
|
} // namespace gtest_internal
|
||||||
|
|
||||||
|
@ -708,37 +730,59 @@ inline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
|
||||||
template <typename Tuple> struct tuple_size;
|
template <typename Tuple> struct tuple_size;
|
||||||
|
|
||||||
template <GTEST_0_TYPENAMES_(T)>
|
template <GTEST_0_TYPENAMES_(T)>
|
||||||
struct tuple_size<GTEST_0_TUPLE_(T)> { static const int value = 0; };
|
struct tuple_size<GTEST_0_TUPLE_(T) > {
|
||||||
|
static const int value = 0;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_1_TYPENAMES_(T)>
|
template <GTEST_1_TYPENAMES_(T)>
|
||||||
struct tuple_size<GTEST_1_TUPLE_(T)> { static const int value = 1; };
|
struct tuple_size<GTEST_1_TUPLE_(T) > {
|
||||||
|
static const int value = 1;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_2_TYPENAMES_(T)>
|
template <GTEST_2_TYPENAMES_(T)>
|
||||||
struct tuple_size<GTEST_2_TUPLE_(T)> { static const int value = 2; };
|
struct tuple_size<GTEST_2_TUPLE_(T) > {
|
||||||
|
static const int value = 2;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_3_TYPENAMES_(T)>
|
template <GTEST_3_TYPENAMES_(T)>
|
||||||
struct tuple_size<GTEST_3_TUPLE_(T)> { static const int value = 3; };
|
struct tuple_size<GTEST_3_TUPLE_(T) > {
|
||||||
|
static const int value = 3;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_4_TYPENAMES_(T)>
|
template <GTEST_4_TYPENAMES_(T)>
|
||||||
struct tuple_size<GTEST_4_TUPLE_(T)> { static const int value = 4; };
|
struct tuple_size<GTEST_4_TUPLE_(T) > {
|
||||||
|
static const int value = 4;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_5_TYPENAMES_(T)>
|
template <GTEST_5_TYPENAMES_(T)>
|
||||||
struct tuple_size<GTEST_5_TUPLE_(T)> { static const int value = 5; };
|
struct tuple_size<GTEST_5_TUPLE_(T) > {
|
||||||
|
static const int value = 5;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_6_TYPENAMES_(T)>
|
template <GTEST_6_TYPENAMES_(T)>
|
||||||
struct tuple_size<GTEST_6_TUPLE_(T)> { static const int value = 6; };
|
struct tuple_size<GTEST_6_TUPLE_(T) > {
|
||||||
|
static const int value = 6;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_7_TYPENAMES_(T)>
|
template <GTEST_7_TYPENAMES_(T)>
|
||||||
struct tuple_size<GTEST_7_TUPLE_(T)> { static const int value = 7; };
|
struct tuple_size<GTEST_7_TUPLE_(T) > {
|
||||||
|
static const int value = 7;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_8_TYPENAMES_(T)>
|
template <GTEST_8_TYPENAMES_(T)>
|
||||||
struct tuple_size<GTEST_8_TUPLE_(T)> { static const int value = 8; };
|
struct tuple_size<GTEST_8_TUPLE_(T) > {
|
||||||
|
static const int value = 8;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_9_TYPENAMES_(T)>
|
template <GTEST_9_TYPENAMES_(T)>
|
||||||
struct tuple_size<GTEST_9_TUPLE_(T)> { static const int value = 9; };
|
struct tuple_size<GTEST_9_TUPLE_(T) > {
|
||||||
|
static const int value = 9;
|
||||||
|
};
|
||||||
|
|
||||||
template <GTEST_10_TYPENAMES_(T)>
|
template <GTEST_10_TYPENAMES_(T)>
|
||||||
struct tuple_size<GTEST_10_TUPLE_(T)> { static const int value = 10; };
|
struct tuple_size<GTEST_10_TUPLE_(T) > {
|
||||||
|
static const int value = 10;
|
||||||
|
};
|
||||||
|
|
||||||
template <int k, class Tuple>
|
template <int k, class Tuple>
|
||||||
struct tuple_element {
|
struct tuple_element {
|
||||||
|
@ -922,8 +966,8 @@ template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
|
||||||
inline bool operator==(const GTEST_10_TUPLE_(T)& t,
|
inline bool operator==(const GTEST_10_TUPLE_(T)& t,
|
||||||
const GTEST_10_TUPLE_(U)& u) {
|
const GTEST_10_TUPLE_(U)& u) {
|
||||||
return gtest_internal::SameSizeTuplePrefixComparator<
|
return gtest_internal::SameSizeTuplePrefixComparator<
|
||||||
tuple_size<GTEST_10_TUPLE_(T)>::value,
|
tuple_size<GTEST_10_TUPLE_(T) >::value,
|
||||||
tuple_size<GTEST_10_TUPLE_(U)>::value>::Eq(t, u);
|
tuple_size<GTEST_10_TUPLE_(U) >::value>::Eq(t, u);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
|
template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
|
|
@ -118,8 +118,9 @@ struct TupleElement;
|
||||||
|
|
||||||
$for i [[
|
$for i [[
|
||||||
template <GTEST_$(n)_TYPENAMES_(T)>
|
template <GTEST_$(n)_TYPENAMES_(T)>
|
||||||
struct TupleElement<true, $i, GTEST_$(n)_TUPLE_(T)> [[]]
|
struct TupleElement<true, $i, GTEST_$(n)_TUPLE_(T) > {
|
||||||
{ typedef T$i type; };
|
typedef T$i type;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
]]
|
]]
|
||||||
|
@ -220,7 +221,9 @@ template <typename Tuple> struct tuple_size;
|
||||||
|
|
||||||
$for j [[
|
$for j [[
|
||||||
template <GTEST_$(j)_TYPENAMES_(T)>
|
template <GTEST_$(j)_TYPENAMES_(T)>
|
||||||
struct tuple_size<GTEST_$(j)_TUPLE_(T)> { static const int value = $j; };
|
struct tuple_size<GTEST_$(j)_TUPLE_(T) > {
|
||||||
|
static const int value = $j;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
]]
|
]]
|
||||||
|
@ -302,8 +305,8 @@ template <GTEST_$(n)_TYPENAMES_(T), GTEST_$(n)_TYPENAMES_(U)>
|
||||||
inline bool operator==(const GTEST_$(n)_TUPLE_(T)& t,
|
inline bool operator==(const GTEST_$(n)_TUPLE_(T)& t,
|
||||||
const GTEST_$(n)_TUPLE_(U)& u) {
|
const GTEST_$(n)_TUPLE_(U)& u) {
|
||||||
return gtest_internal::SameSizeTuplePrefixComparator<
|
return gtest_internal::SameSizeTuplePrefixComparator<
|
||||||
tuple_size<GTEST_$(n)_TUPLE_(T)>::value,
|
tuple_size<GTEST_$(n)_TUPLE_(T) >::value,
|
||||||
tuple_size<GTEST_$(n)_TUPLE_(U)>::value>::Eq(t, u);
|
tuple_size<GTEST_$(n)_TUPLE_(U) >::value>::Eq(t, u);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <GTEST_$(n)_TYPENAMES_(T), GTEST_$(n)_TYPENAMES_(U)>
|
template <GTEST_$(n)_TYPENAMES_(T), GTEST_$(n)_TYPENAMES_(U)>
|
|
@ -45,15 +45,14 @@
|
||||||
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
|
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
|
||||||
|
|
||||||
#include "gtest/internal/gtest-port.h"
|
#include "gtest/internal/gtest-port.h"
|
||||||
#include "gtest/internal/gtest-string.h"
|
|
||||||
|
|
||||||
// #ifdef __GNUC__ is too general here. It is possible to use gcc without using
|
// #ifdef __GNUC__ is too general here. It is possible to use gcc without using
|
||||||
// libstdc++ (which is where cxxabi.h comes from).
|
// libstdc++ (which is where cxxabi.h comes from).
|
||||||
# ifdef __GLIBCXX__
|
# if GTEST_HAS_CXXABI_H_
|
||||||
# include <cxxabi.h>
|
# include <cxxabi.h>
|
||||||
# elif defined(__HP_aCC)
|
# elif defined(__HP_aCC)
|
||||||
# include <acxx_demangle.h>
|
# include <acxx_demangle.h>
|
||||||
# endif // __GLIBCXX__
|
# endif // GTEST_HASH_CXXABI_H_
|
||||||
|
|
||||||
namespace testing {
|
namespace testing {
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
@ -62,24 +61,24 @@ namespace internal {
|
||||||
// NB: This function is also used in Google Mock, so don't move it inside of
|
// NB: This function is also used in Google Mock, so don't move it inside of
|
||||||
// the typed-test-only section below.
|
// the typed-test-only section below.
|
||||||
template <typename T>
|
template <typename T>
|
||||||
String GetTypeName() {
|
std::string GetTypeName() {
|
||||||
# if GTEST_HAS_RTTI
|
# if GTEST_HAS_RTTI
|
||||||
|
|
||||||
const char* const name = typeid(T).name();
|
const char* const name = typeid(T).name();
|
||||||
# if defined(__GLIBCXX__) || defined(__HP_aCC)
|
# if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC)
|
||||||
int status = 0;
|
int status = 0;
|
||||||
// gcc's implementation of typeid(T).name() mangles the type name,
|
// gcc's implementation of typeid(T).name() mangles the type name,
|
||||||
// so we have to demangle it.
|
// so we have to demangle it.
|
||||||
# ifdef __GLIBCXX__
|
# if GTEST_HAS_CXXABI_H_
|
||||||
using abi::__cxa_demangle;
|
using abi::__cxa_demangle;
|
||||||
# endif // __GLIBCXX__
|
# endif // GTEST_HAS_CXXABI_H_
|
||||||
char* const readable_name = __cxa_demangle(name, 0, 0, &status);
|
char* const readable_name = __cxa_demangle(name, 0, 0, &status);
|
||||||
const String name_str(status == 0 ? readable_name : name);
|
const std::string name_str(status == 0 ? readable_name : name);
|
||||||
free(readable_name);
|
free(readable_name);
|
||||||
return name_str;
|
return name_str;
|
||||||
# else
|
# else
|
||||||
return name;
|
return name;
|
||||||
# endif // __GLIBCXX__ || __HP_aCC
|
# endif // GTEST_HAS_CXXABI_H_ || __HP_aCC
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
||||||
|
@ -3300,7 +3299,9 @@ struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
|
||||||
// INSTANTIATE_TYPED_TEST_CASE_P().
|
// INSTANTIATE_TYPED_TEST_CASE_P().
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct TypeList { typedef Types1<T> type; };
|
struct TypeList {
|
||||||
|
typedef Types1<T> type;
|
||||||
|
};
|
||||||
|
|
||||||
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||||||
typename T6, typename T7, typename T8, typename T9, typename T10,
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
|
@ -43,15 +43,14 @@ $var n = 50 $$ Maximum length of type lists we want to support.
|
||||||
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
|
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
|
||||||
|
|
||||||
#include "gtest/internal/gtest-port.h"
|
#include "gtest/internal/gtest-port.h"
|
||||||
#include "gtest/internal/gtest-string.h"
|
|
||||||
|
|
||||||
// #ifdef __GNUC__ is too general here. It is possible to use gcc without using
|
// #ifdef __GNUC__ is too general here. It is possible to use gcc without using
|
||||||
// libstdc++ (which is where cxxabi.h comes from).
|
// libstdc++ (which is where cxxabi.h comes from).
|
||||||
# ifdef __GLIBCXX__
|
# if GTEST_HAS_CXXABI_H_
|
||||||
# include <cxxabi.h>
|
# include <cxxabi.h>
|
||||||
# elif defined(__HP_aCC)
|
# elif defined(__HP_aCC)
|
||||||
# include <acxx_demangle.h>
|
# include <acxx_demangle.h>
|
||||||
# endif // __GLIBCXX__
|
# endif // GTEST_HASH_CXXABI_H_
|
||||||
|
|
||||||
namespace testing {
|
namespace testing {
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
@ -60,24 +59,24 @@ namespace internal {
|
||||||
// NB: This function is also used in Google Mock, so don't move it inside of
|
// NB: This function is also used in Google Mock, so don't move it inside of
|
||||||
// the typed-test-only section below.
|
// the typed-test-only section below.
|
||||||
template <typename T>
|
template <typename T>
|
||||||
String GetTypeName() {
|
std::string GetTypeName() {
|
||||||
# if GTEST_HAS_RTTI
|
# if GTEST_HAS_RTTI
|
||||||
|
|
||||||
const char* const name = typeid(T).name();
|
const char* const name = typeid(T).name();
|
||||||
# if defined(__GLIBCXX__) || defined(__HP_aCC)
|
# if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC)
|
||||||
int status = 0;
|
int status = 0;
|
||||||
// gcc's implementation of typeid(T).name() mangles the type name,
|
// gcc's implementation of typeid(T).name() mangles the type name,
|
||||||
// so we have to demangle it.
|
// so we have to demangle it.
|
||||||
# ifdef __GLIBCXX__
|
# if GTEST_HAS_CXXABI_H_
|
||||||
using abi::__cxa_demangle;
|
using abi::__cxa_demangle;
|
||||||
# endif // __GLIBCXX__
|
# endif // GTEST_HAS_CXXABI_H_
|
||||||
char* const readable_name = __cxa_demangle(name, 0, 0, &status);
|
char* const readable_name = __cxa_demangle(name, 0, 0, &status);
|
||||||
const String name_str(status == 0 ? readable_name : name);
|
const std::string name_str(status == 0 ? readable_name : name);
|
||||||
free(readable_name);
|
free(readable_name);
|
||||||
return name_str;
|
return name_str;
|
||||||
# else
|
# else
|
||||||
return name;
|
return name;
|
||||||
# endif // __GLIBCXX__ || __HP_aCC
|
# endif // GTEST_HAS_CXXABI_H_ || __HP_aCC
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
||||||
|
@ -279,7 +278,9 @@ struct Templates<$for j, [[T$j]]$for k[[, NoneT]]> {
|
||||||
// INSTANTIATE_TYPED_TEST_CASE_P().
|
// INSTANTIATE_TYPED_TEST_CASE_P().
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct TypeList { typedef Types1<T> type; };
|
struct TypeList {
|
||||||
|
typedef Types1<T> type;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
$range i 1..n
|
$range i 1..n
|
363
external/gtest/m4/acx_pthread.m4
vendored
Normal file
363
external/gtest/m4/acx_pthread.m4
vendored
Normal file
|
@ -0,0 +1,363 @@
|
||||||
|
# This was retrieved from
|
||||||
|
# http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?revision=1277&root=avahi
|
||||||
|
# See also (perhaps for new versions?)
|
||||||
|
# http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?root=avahi
|
||||||
|
#
|
||||||
|
# We've rewritten the inconsistency check code (from avahi), to work
|
||||||
|
# more broadly. In particular, it no longer assumes ld accepts -zdefs.
|
||||||
|
# This caused a restructing of the code, but the functionality has only
|
||||||
|
# changed a little.
|
||||||
|
|
||||||
|
dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
|
||||||
|
dnl
|
||||||
|
dnl @summary figure out how to build C programs using POSIX threads
|
||||||
|
dnl
|
||||||
|
dnl This macro figures out how to build C programs using POSIX threads.
|
||||||
|
dnl It sets the PTHREAD_LIBS output variable to the threads library and
|
||||||
|
dnl linker flags, and the PTHREAD_CFLAGS output variable to any special
|
||||||
|
dnl C compiler flags that are needed. (The user can also force certain
|
||||||
|
dnl compiler flags/libs to be tested by setting these environment
|
||||||
|
dnl variables.)
|
||||||
|
dnl
|
||||||
|
dnl Also sets PTHREAD_CC to any special C compiler that is needed for
|
||||||
|
dnl multi-threaded programs (defaults to the value of CC otherwise).
|
||||||
|
dnl (This is necessary on AIX to use the special cc_r compiler alias.)
|
||||||
|
dnl
|
||||||
|
dnl NOTE: You are assumed to not only compile your program with these
|
||||||
|
dnl flags, but also link it with them as well. e.g. you should link
|
||||||
|
dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
|
||||||
|
dnl $LIBS
|
||||||
|
dnl
|
||||||
|
dnl If you are only building threads programs, you may wish to use
|
||||||
|
dnl these variables in your default LIBS, CFLAGS, and CC:
|
||||||
|
dnl
|
||||||
|
dnl LIBS="$PTHREAD_LIBS $LIBS"
|
||||||
|
dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||||
|
dnl CC="$PTHREAD_CC"
|
||||||
|
dnl
|
||||||
|
dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
|
||||||
|
dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
|
||||||
|
dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
|
||||||
|
dnl
|
||||||
|
dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
|
||||||
|
dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to
|
||||||
|
dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the
|
||||||
|
dnl default action will define HAVE_PTHREAD.
|
||||||
|
dnl
|
||||||
|
dnl Please let the authors know if this macro fails on any platform, or
|
||||||
|
dnl if you have any other suggestions or comments. This macro was based
|
||||||
|
dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with
|
||||||
|
dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros
|
||||||
|
dnl posted by Alejandro Forero Cuervo to the autoconf macro repository.
|
||||||
|
dnl We are also grateful for the helpful feedback of numerous users.
|
||||||
|
dnl
|
||||||
|
dnl @category InstalledPackages
|
||||||
|
dnl @author Steven G. Johnson <stevenj@alum.mit.edu>
|
||||||
|
dnl @version 2006-05-29
|
||||||
|
dnl @license GPLWithACException
|
||||||
|
dnl
|
||||||
|
dnl Checks for GCC shared/pthread inconsistency based on work by
|
||||||
|
dnl Marcin Owsiany <marcin@owsiany.pl>
|
||||||
|
|
||||||
|
|
||||||
|
AC_DEFUN([ACX_PTHREAD], [
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||||
|
AC_LANG_SAVE
|
||||||
|
AC_LANG_C
|
||||||
|
acx_pthread_ok=no
|
||||||
|
|
||||||
|
# We used to check for pthread.h first, but this fails if pthread.h
|
||||||
|
# requires special compiler flags (e.g. on True64 or Sequent).
|
||||||
|
# It gets checked for in the link test anyway.
|
||||||
|
|
||||||
|
# First of all, check if the user has set any of the PTHREAD_LIBS,
|
||||||
|
# etcetera environment variables, and if threads linking works using
|
||||||
|
# them:
|
||||||
|
if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
|
||||||
|
save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||||
|
save_LIBS="$LIBS"
|
||||||
|
LIBS="$PTHREAD_LIBS $LIBS"
|
||||||
|
AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
|
||||||
|
AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
|
||||||
|
AC_MSG_RESULT($acx_pthread_ok)
|
||||||
|
if test x"$acx_pthread_ok" = xno; then
|
||||||
|
PTHREAD_LIBS=""
|
||||||
|
PTHREAD_CFLAGS=""
|
||||||
|
fi
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
CFLAGS="$save_CFLAGS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We must check for the threads library under a number of different
|
||||||
|
# names; the ordering is very important because some systems
|
||||||
|
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
|
||||||
|
# libraries is broken (non-POSIX).
|
||||||
|
|
||||||
|
# Create a list of thread flags to try. Items starting with a "-" are
|
||||||
|
# C compiler flags, and other items are library names, except for "none"
|
||||||
|
# which indicates that we try without any flags at all, and "pthread-config"
|
||||||
|
# which is a program returning the flags for the Pth emulation library.
|
||||||
|
|
||||||
|
acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
|
||||||
|
|
||||||
|
# The ordering *is* (sometimes) important. Some notes on the
|
||||||
|
# individual items follow:
|
||||||
|
|
||||||
|
# pthreads: AIX (must check this before -lpthread)
|
||||||
|
# none: in case threads are in libc; should be tried before -Kthread and
|
||||||
|
# other compiler flags to prevent continual compiler warnings
|
||||||
|
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
|
||||||
|
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
|
||||||
|
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
|
||||||
|
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
|
||||||
|
# -pthreads: Solaris/gcc
|
||||||
|
# -mthreads: Mingw32/gcc, Lynx/gcc
|
||||||
|
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
|
||||||
|
# doesn't hurt to check since this sometimes defines pthreads too;
|
||||||
|
# also defines -D_REENTRANT)
|
||||||
|
# ... -mt is also the pthreads flag for HP/aCC
|
||||||
|
# pthread: Linux, etcetera
|
||||||
|
# --thread-safe: KAI C++
|
||||||
|
# pthread-config: use pthread-config program (for GNU Pth library)
|
||||||
|
|
||||||
|
case "${host_cpu}-${host_os}" in
|
||||||
|
*solaris*)
|
||||||
|
|
||||||
|
# On Solaris (at least, for some versions), libc contains stubbed
|
||||||
|
# (non-functional) versions of the pthreads routines, so link-based
|
||||||
|
# tests will erroneously succeed. (We need to link with -pthreads/-mt/
|
||||||
|
# -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
|
||||||
|
# a function called by this macro, so we could check for that, but
|
||||||
|
# who knows whether they'll stub that too in a future libc.) So,
|
||||||
|
# we'll just look for -pthreads and -lpthread first:
|
||||||
|
|
||||||
|
acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if test x"$acx_pthread_ok" = xno; then
|
||||||
|
for flag in $acx_pthread_flags; do
|
||||||
|
|
||||||
|
case $flag in
|
||||||
|
none)
|
||||||
|
AC_MSG_CHECKING([whether pthreads work without any flags])
|
||||||
|
;;
|
||||||
|
|
||||||
|
-*)
|
||||||
|
AC_MSG_CHECKING([whether pthreads work with $flag])
|
||||||
|
PTHREAD_CFLAGS="$flag"
|
||||||
|
;;
|
||||||
|
|
||||||
|
pthread-config)
|
||||||
|
AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
|
||||||
|
if test x"$acx_pthread_config" = xno; then continue; fi
|
||||||
|
PTHREAD_CFLAGS="`pthread-config --cflags`"
|
||||||
|
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
AC_MSG_CHECKING([for the pthreads library -l$flag])
|
||||||
|
PTHREAD_LIBS="-l$flag"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
save_LIBS="$LIBS"
|
||||||
|
save_CFLAGS="$CFLAGS"
|
||||||
|
LIBS="$PTHREAD_LIBS $LIBS"
|
||||||
|
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||||
|
|
||||||
|
# Check for various functions. We must include pthread.h,
|
||||||
|
# since some functions may be macros. (On the Sequent, we
|
||||||
|
# need a special flag -Kthread to make this header compile.)
|
||||||
|
# We check for pthread_join because it is in -lpthread on IRIX
|
||||||
|
# while pthread_create is in libc. We check for pthread_attr_init
|
||||||
|
# due to DEC craziness with -lpthreads. We check for
|
||||||
|
# pthread_cleanup_push because it is one of the few pthread
|
||||||
|
# functions on Solaris that doesn't have a non-functional libc stub.
|
||||||
|
# We try pthread_create on general principles.
|
||||||
|
AC_TRY_LINK([#include <pthread.h>],
|
||||||
|
[pthread_t th; pthread_join(th, 0);
|
||||||
|
pthread_attr_init(0); pthread_cleanup_push(0, 0);
|
||||||
|
pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
|
||||||
|
[acx_pthread_ok=yes])
|
||||||
|
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
CFLAGS="$save_CFLAGS"
|
||||||
|
|
||||||
|
AC_MSG_RESULT($acx_pthread_ok)
|
||||||
|
if test "x$acx_pthread_ok" = xyes; then
|
||||||
|
break;
|
||||||
|
fi
|
||||||
|
|
||||||
|
PTHREAD_LIBS=""
|
||||||
|
PTHREAD_CFLAGS=""
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Various other checks:
|
||||||
|
if test "x$acx_pthread_ok" = xyes; then
|
||||||
|
save_LIBS="$LIBS"
|
||||||
|
LIBS="$PTHREAD_LIBS $LIBS"
|
||||||
|
save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||||
|
|
||||||
|
# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
|
||||||
|
AC_MSG_CHECKING([for joinable pthread attribute])
|
||||||
|
attr_name=unknown
|
||||||
|
for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
|
||||||
|
AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
|
||||||
|
[attr_name=$attr; break])
|
||||||
|
done
|
||||||
|
AC_MSG_RESULT($attr_name)
|
||||||
|
if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
|
||||||
|
AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
|
||||||
|
[Define to necessary symbol if this constant
|
||||||
|
uses a non-standard name on your system.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([if more special flags are required for pthreads])
|
||||||
|
flag=no
|
||||||
|
case "${host_cpu}-${host_os}" in
|
||||||
|
*-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
|
||||||
|
*solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
|
||||||
|
esac
|
||||||
|
AC_MSG_RESULT(${flag})
|
||||||
|
if test "x$flag" != xno; then
|
||||||
|
PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
CFLAGS="$save_CFLAGS"
|
||||||
|
# More AIX lossage: must compile with xlc_r or cc_r
|
||||||
|
if test x"$GCC" != xyes; then
|
||||||
|
AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
|
||||||
|
else
|
||||||
|
PTHREAD_CC=$CC
|
||||||
|
fi
|
||||||
|
|
||||||
|
# The next part tries to detect GCC inconsistency with -shared on some
|
||||||
|
# architectures and systems. The problem is that in certain
|
||||||
|
# configurations, when -shared is specified, GCC "forgets" to
|
||||||
|
# internally use various flags which are still necessary.
|
||||||
|
|
||||||
|
#
|
||||||
|
# Prepare the flags
|
||||||
|
#
|
||||||
|
save_CFLAGS="$CFLAGS"
|
||||||
|
save_LIBS="$LIBS"
|
||||||
|
save_CC="$CC"
|
||||||
|
|
||||||
|
# Try with the flags determined by the earlier checks.
|
||||||
|
#
|
||||||
|
# -Wl,-z,defs forces link-time symbol resolution, so that the
|
||||||
|
# linking checks with -shared actually have any value
|
||||||
|
#
|
||||||
|
# FIXME: -fPIC is required for -shared on many architectures,
|
||||||
|
# so we specify it here, but the right way would probably be to
|
||||||
|
# properly detect whether it is actually required.
|
||||||
|
CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS"
|
||||||
|
LIBS="$PTHREAD_LIBS $LIBS"
|
||||||
|
CC="$PTHREAD_CC"
|
||||||
|
|
||||||
|
# In order not to create several levels of indentation, we test
|
||||||
|
# the value of "$done" until we find the cure or run out of ideas.
|
||||||
|
done="no"
|
||||||
|
|
||||||
|
# First, make sure the CFLAGS we added are actually accepted by our
|
||||||
|
# compiler. If not (and OS X's ld, for instance, does not accept -z),
|
||||||
|
# then we can't do this test.
|
||||||
|
if test x"$done" = xno; then
|
||||||
|
AC_MSG_CHECKING([whether to check for GCC pthread/shared inconsistencies])
|
||||||
|
AC_TRY_LINK(,, , [done=yes])
|
||||||
|
|
||||||
|
if test "x$done" = xyes ; then
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test x"$done" = xno; then
|
||||||
|
AC_MSG_CHECKING([whether -pthread is sufficient with -shared])
|
||||||
|
AC_TRY_LINK([#include <pthread.h>],
|
||||||
|
[pthread_t th; pthread_join(th, 0);
|
||||||
|
pthread_attr_init(0); pthread_cleanup_push(0, 0);
|
||||||
|
pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
|
||||||
|
[done=yes])
|
||||||
|
|
||||||
|
if test "x$done" = xyes; then
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# Linux gcc on some architectures such as mips/mipsel forgets
|
||||||
|
# about -lpthread
|
||||||
|
#
|
||||||
|
if test x"$done" = xno; then
|
||||||
|
AC_MSG_CHECKING([whether -lpthread fixes that])
|
||||||
|
LIBS="-lpthread $PTHREAD_LIBS $save_LIBS"
|
||||||
|
AC_TRY_LINK([#include <pthread.h>],
|
||||||
|
[pthread_t th; pthread_join(th, 0);
|
||||||
|
pthread_attr_init(0); pthread_cleanup_push(0, 0);
|
||||||
|
pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
|
||||||
|
[done=yes])
|
||||||
|
|
||||||
|
if test "x$done" = xyes; then
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
PTHREAD_LIBS="-lpthread $PTHREAD_LIBS"
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
#
|
||||||
|
# FreeBSD 4.10 gcc forgets to use -lc_r instead of -lc
|
||||||
|
#
|
||||||
|
if test x"$done" = xno; then
|
||||||
|
AC_MSG_CHECKING([whether -lc_r fixes that])
|
||||||
|
LIBS="-lc_r $PTHREAD_LIBS $save_LIBS"
|
||||||
|
AC_TRY_LINK([#include <pthread.h>],
|
||||||
|
[pthread_t th; pthread_join(th, 0);
|
||||||
|
pthread_attr_init(0); pthread_cleanup_push(0, 0);
|
||||||
|
pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
|
||||||
|
[done=yes])
|
||||||
|
|
||||||
|
if test "x$done" = xyes; then
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
PTHREAD_LIBS="-lc_r $PTHREAD_LIBS"
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test x"$done" = xno; then
|
||||||
|
# OK, we have run out of ideas
|
||||||
|
AC_MSG_WARN([Impossible to determine how to use pthreads with shared libraries])
|
||||||
|
|
||||||
|
# so it's not safe to assume that we may use pthreads
|
||||||
|
acx_pthread_ok=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
CFLAGS="$save_CFLAGS"
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
CC="$save_CC"
|
||||||
|
else
|
||||||
|
PTHREAD_CC="$CC"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_SUBST(PTHREAD_LIBS)
|
||||||
|
AC_SUBST(PTHREAD_CFLAGS)
|
||||||
|
AC_SUBST(PTHREAD_CC)
|
||||||
|
|
||||||
|
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
||||||
|
if test x"$acx_pthread_ok" = xyes; then
|
||||||
|
ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
|
||||||
|
:
|
||||||
|
else
|
||||||
|
acx_pthread_ok=no
|
||||||
|
$2
|
||||||
|
fi
|
||||||
|
AC_LANG_RESTORE
|
||||||
|
])dnl ACX_PTHREAD
|
74
external/gtest/m4/gtest.m4
vendored
Normal file
74
external/gtest/m4/gtest.m4
vendored
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
dnl GTEST_LIB_CHECK([minimum version [,
|
||||||
|
dnl action if found [,action if not found]]])
|
||||||
|
dnl
|
||||||
|
dnl Check for the presence of the Google Test library, optionally at a minimum
|
||||||
|
dnl version, and indicate a viable version with the HAVE_GTEST flag. It defines
|
||||||
|
dnl standard variables for substitution including GTEST_CPPFLAGS,
|
||||||
|
dnl GTEST_CXXFLAGS, GTEST_LDFLAGS, and GTEST_LIBS. It also defines
|
||||||
|
dnl GTEST_VERSION as the version of Google Test found. Finally, it provides
|
||||||
|
dnl optional custom action slots in the event GTEST is found or not.
|
||||||
|
AC_DEFUN([GTEST_LIB_CHECK],
|
||||||
|
[
|
||||||
|
dnl Provide a flag to enable or disable Google Test usage.
|
||||||
|
AC_ARG_ENABLE([gtest],
|
||||||
|
[AS_HELP_STRING([--enable-gtest],
|
||||||
|
[Enable tests using the Google C++ Testing Framework.
|
||||||
|
(Default is enabled.)])],
|
||||||
|
[],
|
||||||
|
[enable_gtest=])
|
||||||
|
AC_ARG_VAR([GTEST_CONFIG],
|
||||||
|
[The exact path of Google Test's 'gtest-config' script.])
|
||||||
|
AC_ARG_VAR([GTEST_CPPFLAGS],
|
||||||
|
[C-like preprocessor flags for Google Test.])
|
||||||
|
AC_ARG_VAR([GTEST_CXXFLAGS],
|
||||||
|
[C++ compile flags for Google Test.])
|
||||||
|
AC_ARG_VAR([GTEST_LDFLAGS],
|
||||||
|
[Linker path and option flags for Google Test.])
|
||||||
|
AC_ARG_VAR([GTEST_LIBS],
|
||||||
|
[Library linking flags for Google Test.])
|
||||||
|
AC_ARG_VAR([GTEST_VERSION],
|
||||||
|
[The version of Google Test available.])
|
||||||
|
HAVE_GTEST="no"
|
||||||
|
AS_IF([test "x${enable_gtest}" != "xno"],
|
||||||
|
[AC_MSG_CHECKING([for 'gtest-config'])
|
||||||
|
AS_IF([test "x${enable_gtest}" != "xyes"],
|
||||||
|
[AS_IF([test -x "${enable_gtest}/scripts/gtest-config"],
|
||||||
|
[GTEST_CONFIG="${enable_gtest}/scripts/gtest-config"],
|
||||||
|
[GTEST_CONFIG="${enable_gtest}/bin/gtest-config"])
|
||||||
|
AS_IF([test -x "${GTEST_CONFIG}"], [],
|
||||||
|
[AC_MSG_RESULT([no])
|
||||||
|
AC_MSG_ERROR([dnl
|
||||||
|
Unable to locate either a built or installed Google Test.
|
||||||
|
The specific location '${enable_gtest}' was provided for a built or installed
|
||||||
|
Google Test, but no 'gtest-config' script could be found at this location.])
|
||||||
|
])],
|
||||||
|
[AC_PATH_PROG([GTEST_CONFIG], [gtest-config])])
|
||||||
|
AS_IF([test -x "${GTEST_CONFIG}"],
|
||||||
|
[AC_MSG_RESULT([${GTEST_CONFIG}])
|
||||||
|
m4_ifval([$1],
|
||||||
|
[_gtest_min_version="--min-version=$1"
|
||||||
|
AC_MSG_CHECKING([for Google Test at least version >= $1])],
|
||||||
|
[_gtest_min_version="--min-version=0"
|
||||||
|
AC_MSG_CHECKING([for Google Test])])
|
||||||
|
AS_IF([${GTEST_CONFIG} ${_gtest_min_version}],
|
||||||
|
[AC_MSG_RESULT([yes])
|
||||||
|
HAVE_GTEST='yes'],
|
||||||
|
[AC_MSG_RESULT([no])])],
|
||||||
|
[AC_MSG_RESULT([no])])
|
||||||
|
AS_IF([test "x${HAVE_GTEST}" = "xyes"],
|
||||||
|
[GTEST_CPPFLAGS=`${GTEST_CONFIG} --cppflags`
|
||||||
|
GTEST_CXXFLAGS=`${GTEST_CONFIG} --cxxflags`
|
||||||
|
GTEST_LDFLAGS=`${GTEST_CONFIG} --ldflags`
|
||||||
|
GTEST_LIBS=`${GTEST_CONFIG} --libs`
|
||||||
|
GTEST_VERSION=`${GTEST_CONFIG} --version`
|
||||||
|
AC_DEFINE([HAVE_GTEST],[1],[Defined when Google Test is available.])],
|
||||||
|
[AS_IF([test "x${enable_gtest}" = "xyes"],
|
||||||
|
[AC_MSG_ERROR([dnl
|
||||||
|
Google Test was enabled, but no viable version could be found.])
|
||||||
|
])])])
|
||||||
|
AC_SUBST([HAVE_GTEST])
|
||||||
|
AM_CONDITIONAL([HAVE_GTEST],[test "x$HAVE_GTEST" = "xyes"])
|
||||||
|
AS_IF([test "x$HAVE_GTEST" = "xyes"],
|
||||||
|
[m4_ifval([$2], [$2])],
|
||||||
|
[m4_ifval([$3], [$3])])
|
||||||
|
])
|
8001
external/gtest/m4/libtool.m4
vendored
Normal file
8001
external/gtest/m4/libtool.m4
vendored
Normal file
File diff suppressed because it is too large
Load diff
384
external/gtest/m4/ltoptions.m4
vendored
Normal file
384
external/gtest/m4/ltoptions.m4
vendored
Normal file
|
@ -0,0 +1,384 @@
|
||||||
|
# Helper functions for option handling. -*- Autoconf -*-
|
||||||
|
#
|
||||||
|
# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
|
||||||
|
# Inc.
|
||||||
|
# Written by Gary V. Vaughan, 2004
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation gives
|
||||||
|
# unlimited permission to copy and/or distribute it, with or without
|
||||||
|
# modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# serial 7 ltoptions.m4
|
||||||
|
|
||||||
|
# This is to help aclocal find these macros, as it can't see m4_define.
|
||||||
|
AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
|
||||||
|
|
||||||
|
|
||||||
|
# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
|
||||||
|
# ------------------------------------------
|
||||||
|
m4_define([_LT_MANGLE_OPTION],
|
||||||
|
[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
|
||||||
|
|
||||||
|
|
||||||
|
# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
|
||||||
|
# ---------------------------------------
|
||||||
|
# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
|
||||||
|
# matching handler defined, dispatch to it. Other OPTION-NAMEs are
|
||||||
|
# saved as a flag.
|
||||||
|
m4_define([_LT_SET_OPTION],
|
||||||
|
[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
|
||||||
|
m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
|
||||||
|
_LT_MANGLE_DEFUN([$1], [$2]),
|
||||||
|
[m4_warning([Unknown $1 option `$2'])])[]dnl
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
|
||||||
|
# ------------------------------------------------------------
|
||||||
|
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
|
||||||
|
m4_define([_LT_IF_OPTION],
|
||||||
|
[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
|
||||||
|
|
||||||
|
|
||||||
|
# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
|
||||||
|
# -------------------------------------------------------
|
||||||
|
# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
|
||||||
|
# are set.
|
||||||
|
m4_define([_LT_UNLESS_OPTIONS],
|
||||||
|
[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
|
||||||
|
[m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
|
||||||
|
[m4_define([$0_found])])])[]dnl
|
||||||
|
m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
|
||||||
|
])[]dnl
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
|
||||||
|
# ----------------------------------------
|
||||||
|
# OPTION-LIST is a space-separated list of Libtool options associated
|
||||||
|
# with MACRO-NAME. If any OPTION has a matching handler declared with
|
||||||
|
# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
|
||||||
|
# the unknown option and exit.
|
||||||
|
m4_defun([_LT_SET_OPTIONS],
|
||||||
|
[# Set options
|
||||||
|
m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
|
||||||
|
[_LT_SET_OPTION([$1], _LT_Option)])
|
||||||
|
|
||||||
|
m4_if([$1],[LT_INIT],[
|
||||||
|
dnl
|
||||||
|
dnl Simply set some default values (i.e off) if boolean options were not
|
||||||
|
dnl specified:
|
||||||
|
_LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
|
||||||
|
])
|
||||||
|
_LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
|
||||||
|
])
|
||||||
|
dnl
|
||||||
|
dnl If no reference was made to various pairs of opposing options, then
|
||||||
|
dnl we run the default mode handler for the pair. For example, if neither
|
||||||
|
dnl `shared' nor `disable-shared' was passed, we enable building of shared
|
||||||
|
dnl archives by default:
|
||||||
|
_LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
|
||||||
|
_LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
|
||||||
|
_LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
|
||||||
|
_LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
|
||||||
|
[_LT_ENABLE_FAST_INSTALL])
|
||||||
|
])
|
||||||
|
])# _LT_SET_OPTIONS
|
||||||
|
|
||||||
|
|
||||||
|
## --------------------------------- ##
|
||||||
|
## Macros to handle LT_INIT options. ##
|
||||||
|
## --------------------------------- ##
|
||||||
|
|
||||||
|
# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
|
||||||
|
# -----------------------------------------
|
||||||
|
m4_define([_LT_MANGLE_DEFUN],
|
||||||
|
[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
|
||||||
|
|
||||||
|
|
||||||
|
# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
|
||||||
|
# -----------------------------------------------
|
||||||
|
m4_define([LT_OPTION_DEFINE],
|
||||||
|
[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
|
||||||
|
])# LT_OPTION_DEFINE
|
||||||
|
|
||||||
|
|
||||||
|
# dlopen
|
||||||
|
# ------
|
||||||
|
LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
|
||||||
|
])
|
||||||
|
|
||||||
|
AU_DEFUN([AC_LIBTOOL_DLOPEN],
|
||||||
|
[_LT_SET_OPTION([LT_INIT], [dlopen])
|
||||||
|
AC_DIAGNOSE([obsolete],
|
||||||
|
[$0: Remove this warning and the call to _LT_SET_OPTION when you
|
||||||
|
put the `dlopen' option into LT_INIT's first parameter.])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl aclocal-1.4 backwards compatibility:
|
||||||
|
dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
|
||||||
|
|
||||||
|
|
||||||
|
# win32-dll
|
||||||
|
# ---------
|
||||||
|
# Declare package support for building win32 dll's.
|
||||||
|
LT_OPTION_DEFINE([LT_INIT], [win32-dll],
|
||||||
|
[enable_win32_dll=yes
|
||||||
|
|
||||||
|
case $host in
|
||||||
|
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
|
||||||
|
AC_CHECK_TOOL(AS, as, false)
|
||||||
|
AC_CHECK_TOOL(DLLTOOL, dlltool, false)
|
||||||
|
AC_CHECK_TOOL(OBJDUMP, objdump, false)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
test -z "$AS" && AS=as
|
||||||
|
_LT_DECL([], [AS], [1], [Assembler program])dnl
|
||||||
|
|
||||||
|
test -z "$DLLTOOL" && DLLTOOL=dlltool
|
||||||
|
_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
|
||||||
|
|
||||||
|
test -z "$OBJDUMP" && OBJDUMP=objdump
|
||||||
|
_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
|
||||||
|
])# win32-dll
|
||||||
|
|
||||||
|
AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
|
||||||
|
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||||
|
_LT_SET_OPTION([LT_INIT], [win32-dll])
|
||||||
|
AC_DIAGNOSE([obsolete],
|
||||||
|
[$0: Remove this warning and the call to _LT_SET_OPTION when you
|
||||||
|
put the `win32-dll' option into LT_INIT's first parameter.])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl aclocal-1.4 backwards compatibility:
|
||||||
|
dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
|
||||||
|
|
||||||
|
|
||||||
|
# _LT_ENABLE_SHARED([DEFAULT])
|
||||||
|
# ----------------------------
|
||||||
|
# implement the --enable-shared flag, and supports the `shared' and
|
||||||
|
# `disable-shared' LT_INIT options.
|
||||||
|
# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
|
||||||
|
m4_define([_LT_ENABLE_SHARED],
|
||||||
|
[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
|
||||||
|
AC_ARG_ENABLE([shared],
|
||||||
|
[AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
|
||||||
|
[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
|
||||||
|
[p=${PACKAGE-default}
|
||||||
|
case $enableval in
|
||||||
|
yes) enable_shared=yes ;;
|
||||||
|
no) enable_shared=no ;;
|
||||||
|
*)
|
||||||
|
enable_shared=no
|
||||||
|
# Look at the argument we got. We use all the common list separators.
|
||||||
|
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
|
||||||
|
for pkg in $enableval; do
|
||||||
|
IFS="$lt_save_ifs"
|
||||||
|
if test "X$pkg" = "X$p"; then
|
||||||
|
enable_shared=yes
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
IFS="$lt_save_ifs"
|
||||||
|
;;
|
||||||
|
esac],
|
||||||
|
[enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
|
||||||
|
|
||||||
|
_LT_DECL([build_libtool_libs], [enable_shared], [0],
|
||||||
|
[Whether or not to build shared libraries])
|
||||||
|
])# _LT_ENABLE_SHARED
|
||||||
|
|
||||||
|
LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
|
||||||
|
LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
|
||||||
|
|
||||||
|
# Old names:
|
||||||
|
AC_DEFUN([AC_ENABLE_SHARED],
|
||||||
|
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([AC_DISABLE_SHARED],
|
||||||
|
[_LT_SET_OPTION([LT_INIT], [disable-shared])
|
||||||
|
])
|
||||||
|
|
||||||
|
AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
|
||||||
|
AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
|
||||||
|
|
||||||
|
dnl aclocal-1.4 backwards compatibility:
|
||||||
|
dnl AC_DEFUN([AM_ENABLE_SHARED], [])
|
||||||
|
dnl AC_DEFUN([AM_DISABLE_SHARED], [])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# _LT_ENABLE_STATIC([DEFAULT])
|
||||||
|
# ----------------------------
|
||||||
|
# implement the --enable-static flag, and support the `static' and
|
||||||
|
# `disable-static' LT_INIT options.
|
||||||
|
# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
|
||||||
|
m4_define([_LT_ENABLE_STATIC],
|
||||||
|
[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
|
||||||
|
AC_ARG_ENABLE([static],
|
||||||
|
[AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
|
||||||
|
[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
|
||||||
|
[p=${PACKAGE-default}
|
||||||
|
case $enableval in
|
||||||
|
yes) enable_static=yes ;;
|
||||||
|
no) enable_static=no ;;
|
||||||
|
*)
|
||||||
|
enable_static=no
|
||||||
|
# Look at the argument we got. We use all the common list separators.
|
||||||
|
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
|
||||||
|
for pkg in $enableval; do
|
||||||
|
IFS="$lt_save_ifs"
|
||||||
|
if test "X$pkg" = "X$p"; then
|
||||||
|
enable_static=yes
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
IFS="$lt_save_ifs"
|
||||||
|
;;
|
||||||
|
esac],
|
||||||
|
[enable_static=]_LT_ENABLE_STATIC_DEFAULT)
|
||||||
|
|
||||||
|
_LT_DECL([build_old_libs], [enable_static], [0],
|
||||||
|
[Whether or not to build static libraries])
|
||||||
|
])# _LT_ENABLE_STATIC
|
||||||
|
|
||||||
|
LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
|
||||||
|
LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
|
||||||
|
|
||||||
|
# Old names:
|
||||||
|
AC_DEFUN([AC_ENABLE_STATIC],
|
||||||
|
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([AC_DISABLE_STATIC],
|
||||||
|
[_LT_SET_OPTION([LT_INIT], [disable-static])
|
||||||
|
])
|
||||||
|
|
||||||
|
AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
|
||||||
|
AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
|
||||||
|
|
||||||
|
dnl aclocal-1.4 backwards compatibility:
|
||||||
|
dnl AC_DEFUN([AM_ENABLE_STATIC], [])
|
||||||
|
dnl AC_DEFUN([AM_DISABLE_STATIC], [])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# _LT_ENABLE_FAST_INSTALL([DEFAULT])
|
||||||
|
# ----------------------------------
|
||||||
|
# implement the --enable-fast-install flag, and support the `fast-install'
|
||||||
|
# and `disable-fast-install' LT_INIT options.
|
||||||
|
# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
|
||||||
|
m4_define([_LT_ENABLE_FAST_INSTALL],
|
||||||
|
[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
|
||||||
|
AC_ARG_ENABLE([fast-install],
|
||||||
|
[AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
|
||||||
|
[optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
|
||||||
|
[p=${PACKAGE-default}
|
||||||
|
case $enableval in
|
||||||
|
yes) enable_fast_install=yes ;;
|
||||||
|
no) enable_fast_install=no ;;
|
||||||
|
*)
|
||||||
|
enable_fast_install=no
|
||||||
|
# Look at the argument we got. We use all the common list separators.
|
||||||
|
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
|
||||||
|
for pkg in $enableval; do
|
||||||
|
IFS="$lt_save_ifs"
|
||||||
|
if test "X$pkg" = "X$p"; then
|
||||||
|
enable_fast_install=yes
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
IFS="$lt_save_ifs"
|
||||||
|
;;
|
||||||
|
esac],
|
||||||
|
[enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
|
||||||
|
|
||||||
|
_LT_DECL([fast_install], [enable_fast_install], [0],
|
||||||
|
[Whether or not to optimize for fast installation])dnl
|
||||||
|
])# _LT_ENABLE_FAST_INSTALL
|
||||||
|
|
||||||
|
LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
|
||||||
|
LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
|
||||||
|
|
||||||
|
# Old names:
|
||||||
|
AU_DEFUN([AC_ENABLE_FAST_INSTALL],
|
||||||
|
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
|
||||||
|
AC_DIAGNOSE([obsolete],
|
||||||
|
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
|
||||||
|
the `fast-install' option into LT_INIT's first parameter.])
|
||||||
|
])
|
||||||
|
|
||||||
|
AU_DEFUN([AC_DISABLE_FAST_INSTALL],
|
||||||
|
[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
|
||||||
|
AC_DIAGNOSE([obsolete],
|
||||||
|
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
|
||||||
|
the `disable-fast-install' option into LT_INIT's first parameter.])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl aclocal-1.4 backwards compatibility:
|
||||||
|
dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
|
||||||
|
dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
|
||||||
|
|
||||||
|
|
||||||
|
# _LT_WITH_PIC([MODE])
|
||||||
|
# --------------------
|
||||||
|
# implement the --with-pic flag, and support the `pic-only' and `no-pic'
|
||||||
|
# LT_INIT options.
|
||||||
|
# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
|
||||||
|
m4_define([_LT_WITH_PIC],
|
||||||
|
[AC_ARG_WITH([pic],
|
||||||
|
[AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
|
||||||
|
[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
|
||||||
|
[lt_p=${PACKAGE-default}
|
||||||
|
case $withval in
|
||||||
|
yes|no) pic_mode=$withval ;;
|
||||||
|
*)
|
||||||
|
pic_mode=default
|
||||||
|
# Look at the argument we got. We use all the common list separators.
|
||||||
|
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
|
||||||
|
for lt_pkg in $withval; do
|
||||||
|
IFS="$lt_save_ifs"
|
||||||
|
if test "X$lt_pkg" = "X$lt_p"; then
|
||||||
|
pic_mode=yes
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
IFS="$lt_save_ifs"
|
||||||
|
;;
|
||||||
|
esac],
|
||||||
|
[pic_mode=default])
|
||||||
|
|
||||||
|
test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
|
||||||
|
|
||||||
|
_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
|
||||||
|
])# _LT_WITH_PIC
|
||||||
|
|
||||||
|
LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
|
||||||
|
LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
|
||||||
|
|
||||||
|
# Old name:
|
||||||
|
AU_DEFUN([AC_LIBTOOL_PICMODE],
|
||||||
|
[_LT_SET_OPTION([LT_INIT], [pic-only])
|
||||||
|
AC_DIAGNOSE([obsolete],
|
||||||
|
[$0: Remove this warning and the call to _LT_SET_OPTION when you
|
||||||
|
put the `pic-only' option into LT_INIT's first parameter.])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl aclocal-1.4 backwards compatibility:
|
||||||
|
dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
|
||||||
|
|
||||||
|
## ----------------- ##
|
||||||
|
## LTDL_INIT Options ##
|
||||||
|
## ----------------- ##
|
||||||
|
|
||||||
|
m4_define([_LTDL_MODE], [])
|
||||||
|
LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
|
||||||
|
[m4_define([_LTDL_MODE], [nonrecursive])])
|
||||||
|
LT_OPTION_DEFINE([LTDL_INIT], [recursive],
|
||||||
|
[m4_define([_LTDL_MODE], [recursive])])
|
||||||
|
LT_OPTION_DEFINE([LTDL_INIT], [subproject],
|
||||||
|
[m4_define([_LTDL_MODE], [subproject])])
|
||||||
|
|
||||||
|
m4_define([_LTDL_TYPE], [])
|
||||||
|
LT_OPTION_DEFINE([LTDL_INIT], [installable],
|
||||||
|
[m4_define([_LTDL_TYPE], [installable])])
|
||||||
|
LT_OPTION_DEFINE([LTDL_INIT], [convenience],
|
||||||
|
[m4_define([_LTDL_TYPE], [convenience])])
|
123
external/gtest/m4/ltsugar.m4
vendored
Normal file
123
external/gtest/m4/ltsugar.m4
vendored
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
|
||||||
|
#
|
||||||
|
# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
|
||||||
|
# Written by Gary V. Vaughan, 2004
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation gives
|
||||||
|
# unlimited permission to copy and/or distribute it, with or without
|
||||||
|
# modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# serial 6 ltsugar.m4
|
||||||
|
|
||||||
|
# This is to help aclocal find these macros, as it can't see m4_define.
|
||||||
|
AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
|
||||||
|
|
||||||
|
|
||||||
|
# lt_join(SEP, ARG1, [ARG2...])
|
||||||
|
# -----------------------------
|
||||||
|
# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
|
||||||
|
# associated separator.
|
||||||
|
# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
|
||||||
|
# versions in m4sugar had bugs.
|
||||||
|
m4_define([lt_join],
|
||||||
|
[m4_if([$#], [1], [],
|
||||||
|
[$#], [2], [[$2]],
|
||||||
|
[m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
|
||||||
|
m4_define([_lt_join],
|
||||||
|
[m4_if([$#$2], [2], [],
|
||||||
|
[m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
|
||||||
|
|
||||||
|
|
||||||
|
# lt_car(LIST)
|
||||||
|
# lt_cdr(LIST)
|
||||||
|
# ------------
|
||||||
|
# Manipulate m4 lists.
|
||||||
|
# These macros are necessary as long as will still need to support
|
||||||
|
# Autoconf-2.59 which quotes differently.
|
||||||
|
m4_define([lt_car], [[$1]])
|
||||||
|
m4_define([lt_cdr],
|
||||||
|
[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
|
||||||
|
[$#], 1, [],
|
||||||
|
[m4_dquote(m4_shift($@))])])
|
||||||
|
m4_define([lt_unquote], $1)
|
||||||
|
|
||||||
|
|
||||||
|
# lt_append(MACRO-NAME, STRING, [SEPARATOR])
|
||||||
|
# ------------------------------------------
|
||||||
|
# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
|
||||||
|
# Note that neither SEPARATOR nor STRING are expanded; they are appended
|
||||||
|
# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
|
||||||
|
# No SEPARATOR is output if MACRO-NAME was previously undefined (different
|
||||||
|
# than defined and empty).
|
||||||
|
#
|
||||||
|
# This macro is needed until we can rely on Autoconf 2.62, since earlier
|
||||||
|
# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
|
||||||
|
m4_define([lt_append],
|
||||||
|
[m4_define([$1],
|
||||||
|
m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
|
||||||
|
# ----------------------------------------------------------
|
||||||
|
# Produce a SEP delimited list of all paired combinations of elements of
|
||||||
|
# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
|
||||||
|
# has the form PREFIXmINFIXSUFFIXn.
|
||||||
|
# Needed until we can rely on m4_combine added in Autoconf 2.62.
|
||||||
|
m4_define([lt_combine],
|
||||||
|
[m4_if(m4_eval([$# > 3]), [1],
|
||||||
|
[m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
|
||||||
|
[[m4_foreach([_Lt_prefix], [$2],
|
||||||
|
[m4_foreach([_Lt_suffix],
|
||||||
|
]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
|
||||||
|
[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
|
||||||
|
|
||||||
|
|
||||||
|
# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
|
||||||
|
# -----------------------------------------------------------------------
|
||||||
|
# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
|
||||||
|
# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
|
||||||
|
m4_define([lt_if_append_uniq],
|
||||||
|
[m4_ifdef([$1],
|
||||||
|
[m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
|
||||||
|
[lt_append([$1], [$2], [$3])$4],
|
||||||
|
[$5])],
|
||||||
|
[lt_append([$1], [$2], [$3])$4])])
|
||||||
|
|
||||||
|
|
||||||
|
# lt_dict_add(DICT, KEY, VALUE)
|
||||||
|
# -----------------------------
|
||||||
|
m4_define([lt_dict_add],
|
||||||
|
[m4_define([$1($2)], [$3])])
|
||||||
|
|
||||||
|
|
||||||
|
# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
|
||||||
|
# --------------------------------------------
|
||||||
|
m4_define([lt_dict_add_subkey],
|
||||||
|
[m4_define([$1($2:$3)], [$4])])
|
||||||
|
|
||||||
|
|
||||||
|
# lt_dict_fetch(DICT, KEY, [SUBKEY])
|
||||||
|
# ----------------------------------
|
||||||
|
m4_define([lt_dict_fetch],
|
||||||
|
[m4_ifval([$3],
|
||||||
|
m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
|
||||||
|
m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
|
||||||
|
|
||||||
|
|
||||||
|
# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
|
||||||
|
# -----------------------------------------------------------------
|
||||||
|
m4_define([lt_if_dict_fetch],
|
||||||
|
[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
|
||||||
|
[$5],
|
||||||
|
[$6])])
|
||||||
|
|
||||||
|
|
||||||
|
# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
|
||||||
|
# --------------------------------------------------------------
|
||||||
|
m4_define([lt_dict_filter],
|
||||||
|
[m4_if([$5], [], [],
|
||||||
|
[lt_join(m4_quote(m4_default([$4], [[, ]])),
|
||||||
|
lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
|
||||||
|
[lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
|
||||||
|
])
|
23
external/gtest/m4/ltversion.m4
vendored
Normal file
23
external/gtest/m4/ltversion.m4
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# ltversion.m4 -- version numbers -*- Autoconf -*-
|
||||||
|
#
|
||||||
|
# Copyright (C) 2004 Free Software Foundation, Inc.
|
||||||
|
# Written by Scott James Remnant, 2004
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation gives
|
||||||
|
# unlimited permission to copy and/or distribute it, with or without
|
||||||
|
# modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# @configure_input@
|
||||||
|
|
||||||
|
# serial 3337 ltversion.m4
|
||||||
|
# This file is part of GNU Libtool
|
||||||
|
|
||||||
|
m4_define([LT_PACKAGE_VERSION], [2.4.2])
|
||||||
|
m4_define([LT_PACKAGE_REVISION], [1.3337])
|
||||||
|
|
||||||
|
AC_DEFUN([LTVERSION_VERSION],
|
||||||
|
[macro_version='2.4.2'
|
||||||
|
macro_revision='1.3337'
|
||||||
|
_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
|
||||||
|
_LT_DECL(, macro_revision, 0)
|
||||||
|
])
|
98
external/gtest/m4/lt~obsolete.m4
vendored
Normal file
98
external/gtest/m4/lt~obsolete.m4
vendored
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
|
||||||
|
#
|
||||||
|
# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
|
||||||
|
# Written by Scott James Remnant, 2004.
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation gives
|
||||||
|
# unlimited permission to copy and/or distribute it, with or without
|
||||||
|
# modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# serial 5 lt~obsolete.m4
|
||||||
|
|
||||||
|
# These exist entirely to fool aclocal when bootstrapping libtool.
|
||||||
|
#
|
||||||
|
# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
|
||||||
|
# which have later been changed to m4_define as they aren't part of the
|
||||||
|
# exported API, or moved to Autoconf or Automake where they belong.
|
||||||
|
#
|
||||||
|
# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
|
||||||
|
# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
|
||||||
|
# using a macro with the same name in our local m4/libtool.m4 it'll
|
||||||
|
# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
|
||||||
|
# and doesn't know about Autoconf macros at all.)
|
||||||
|
#
|
||||||
|
# So we provide this file, which has a silly filename so it's always
|
||||||
|
# included after everything else. This provides aclocal with the
|
||||||
|
# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
|
||||||
|
# because those macros already exist, or will be overwritten later.
|
||||||
|
# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
|
||||||
|
#
|
||||||
|
# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
|
||||||
|
# Yes, that means every name once taken will need to remain here until
|
||||||
|
# we give up compatibility with versions before 1.7, at which point
|
||||||
|
# we need to keep only those names which we still refer to.
|
||||||
|
|
||||||
|
# This is to help aclocal find these macros, as it can't see m4_define.
|
||||||
|
AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
|
||||||
|
|
||||||
|
m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
|
||||||
|
m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
|
||||||
|
m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
|
||||||
|
m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
|
||||||
|
m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
|
||||||
|
m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
|
||||||
|
m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
|
||||||
|
m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
|
||||||
|
m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
|
||||||
|
m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
|
||||||
|
m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
|
||||||
|
m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
|
||||||
|
m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
|
||||||
|
m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
|
||||||
|
m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
|
||||||
|
m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
|
||||||
|
m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
|
||||||
|
m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
|
||||||
|
m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
|
||||||
|
m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
|
||||||
|
m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
|
||||||
|
m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
|
||||||
|
m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
|
||||||
|
m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
|
||||||
|
m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
|
||||||
|
m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
|
||||||
|
m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
|
||||||
|
m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
|
||||||
|
m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
|
||||||
|
m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
|
||||||
|
m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
|
||||||
|
m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
|
||||||
|
m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
|
||||||
|
m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
|
||||||
|
m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
|
||||||
|
m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
|
||||||
|
m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
|
||||||
|
m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])])
|
||||||
|
m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
|
||||||
|
m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
|
||||||
|
m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])])
|
||||||
|
m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])])
|
||||||
|
m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])
|
82
external/gtest/make/Makefile
vendored
Normal file
82
external/gtest/make/Makefile
vendored
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
# A sample Makefile for building Google Test and using it in user
|
||||||
|
# tests. Please tweak it to suit your environment and project. You
|
||||||
|
# may want to move it to your project's root directory.
|
||||||
|
#
|
||||||
|
# SYNOPSIS:
|
||||||
|
#
|
||||||
|
# make [all] - makes everything.
|
||||||
|
# make TARGET - makes the given target.
|
||||||
|
# make clean - removes all files generated by make.
|
||||||
|
|
||||||
|
# Please tweak the following variable definitions as needed by your
|
||||||
|
# project, except GTEST_HEADERS, which you can use in your own targets
|
||||||
|
# but shouldn't modify.
|
||||||
|
|
||||||
|
# Points to the root of Google Test, relative to where this file is.
|
||||||
|
# Remember to tweak this if you move this file.
|
||||||
|
GTEST_DIR = ..
|
||||||
|
|
||||||
|
# Where to find user code.
|
||||||
|
USER_DIR = ../samples
|
||||||
|
|
||||||
|
# Flags passed to the preprocessor.
|
||||||
|
# Set Google Test's header directory as a system directory, such that
|
||||||
|
# the compiler doesn't generate warnings in Google Test headers.
|
||||||
|
CPPFLAGS += -isystem $(GTEST_DIR)/include
|
||||||
|
|
||||||
|
# Flags passed to the C++ compiler.
|
||||||
|
CXXFLAGS += -g -Wall -Wextra -pthread
|
||||||
|
|
||||||
|
# All tests produced by this Makefile. Remember to add new tests you
|
||||||
|
# created to the list.
|
||||||
|
TESTS = sample1_unittest
|
||||||
|
|
||||||
|
# All Google Test headers. Usually you shouldn't change this
|
||||||
|
# definition.
|
||||||
|
GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \
|
||||||
|
$(GTEST_DIR)/include/gtest/internal/*.h
|
||||||
|
|
||||||
|
# House-keeping build targets.
|
||||||
|
|
||||||
|
all : $(TESTS)
|
||||||
|
|
||||||
|
clean :
|
||||||
|
rm -f $(TESTS) gtest.a gtest_main.a *.o
|
||||||
|
|
||||||
|
# Builds gtest.a and gtest_main.a.
|
||||||
|
|
||||||
|
# Usually you shouldn't tweak such internal variables, indicated by a
|
||||||
|
# trailing _.
|
||||||
|
GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)
|
||||||
|
|
||||||
|
# For simplicity and to avoid depending on Google Test's
|
||||||
|
# implementation details, the dependencies specified below are
|
||||||
|
# conservative and not optimized. This is fine as Google Test
|
||||||
|
# compiles fast and for ordinary users its source rarely changes.
|
||||||
|
gtest-all.o : $(GTEST_SRCS_)
|
||||||
|
$(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \
|
||||||
|
$(GTEST_DIR)/src/gtest-all.cc
|
||||||
|
|
||||||
|
gtest_main.o : $(GTEST_SRCS_)
|
||||||
|
$(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \
|
||||||
|
$(GTEST_DIR)/src/gtest_main.cc
|
||||||
|
|
||||||
|
gtest.a : gtest-all.o
|
||||||
|
$(AR) $(ARFLAGS) $@ $^
|
||||||
|
|
||||||
|
gtest_main.a : gtest-all.o gtest_main.o
|
||||||
|
$(AR) $(ARFLAGS) $@ $^
|
||||||
|
|
||||||
|
# Builds a sample test. A test should link with either gtest.a or
|
||||||
|
# gtest_main.a, depending on whether it defines its own main()
|
||||||
|
# function.
|
||||||
|
|
||||||
|
sample1.o : $(USER_DIR)/sample1.cc $(USER_DIR)/sample1.h $(GTEST_HEADERS)
|
||||||
|
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/sample1.cc
|
||||||
|
|
||||||
|
sample1_unittest.o : $(USER_DIR)/sample1_unittest.cc \
|
||||||
|
$(USER_DIR)/sample1.h $(GTEST_HEADERS)
|
||||||
|
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/sample1_unittest.cc
|
||||||
|
|
||||||
|
sample1_unittest : sample1.o sample1_unittest.o gtest_main.a
|
||||||
|
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
45
external/gtest/msvc/gtest-md.sln
vendored
Normal file
45
external/gtest/msvc/gtest-md.sln
vendored
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 8.00
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-md", "gtest-md.vcproj", "{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_main-md", "gtest_main-md.vcproj", "{3AF54C8A-10BF-4332-9147-F68ED9862033}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_prod_test-md", "gtest_prod_test-md.vcproj", "{24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_unittest-md", "gtest_unittest-md.vcproj", "{4D9FDFB5-986A-4139-823C-F4EE0ED481A2}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfiguration) = preSolution
|
||||||
|
Debug = Debug
|
||||||
|
Release = Release
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfiguration) = postSolution
|
||||||
|
{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Debug.ActiveCfg = Debug|Win32
|
||||||
|
{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Debug.Build.0 = Debug|Win32
|
||||||
|
{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Release.ActiveCfg = Release|Win32
|
||||||
|
{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Release.Build.0 = Release|Win32
|
||||||
|
{3AF54C8A-10BF-4332-9147-F68ED9862033}.Debug.ActiveCfg = Debug|Win32
|
||||||
|
{3AF54C8A-10BF-4332-9147-F68ED9862033}.Debug.Build.0 = Debug|Win32
|
||||||
|
{3AF54C8A-10BF-4332-9147-F68ED9862033}.Release.ActiveCfg = Release|Win32
|
||||||
|
{3AF54C8A-10BF-4332-9147-F68ED9862033}.Release.Build.0 = Release|Win32
|
||||||
|
{24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Debug.ActiveCfg = Debug|Win32
|
||||||
|
{24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Debug.Build.0 = Debug|Win32
|
||||||
|
{24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Release.ActiveCfg = Release|Win32
|
||||||
|
{24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Release.Build.0 = Release|Win32
|
||||||
|
{4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Debug.ActiveCfg = Debug|Win32
|
||||||
|
{4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Debug.Build.0 = Debug|Win32
|
||||||
|
{4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Release.ActiveCfg = Release|Win32
|
||||||
|
{4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Release.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityAddIns) = postSolution
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
126
external/gtest/msvc/gtest-md.vcproj
vendored
Normal file
126
external/gtest/msvc/gtest-md.vcproj
vendored
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="7.10"
|
||||||
|
Name="gtest-md"
|
||||||
|
ProjectGUID="{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}"
|
||||||
|
Keyword="Win32Proj">
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"/>
|
||||||
|
</Platforms>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(OutDir)/$(ProjectName)"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="2"
|
||||||
|
ReferencesPath="">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
|
||||||
|
MinimalRebuild="TRUE"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="4"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="$(OutDir)/gtestd.lib"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(OutDir)/$(ProjectName)"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="2"
|
||||||
|
ReferencesPath=""..\include";".."">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="3"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="$(OutDir)/gtest.lib"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
|
||||||
|
<File
|
||||||
|
RelativePath="..\src\gtest-all.cc">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
45
external/gtest/msvc/gtest.sln
vendored
Normal file
45
external/gtest/msvc/gtest.sln
vendored
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 8.00
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest", "gtest.vcproj", "{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_main", "gtest_main.vcproj", "{3AF54C8A-10BF-4332-9147-F68ED9862032}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_unittest", "gtest_unittest.vcproj", "{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_prod_test", "gtest_prod_test.vcproj", "{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfiguration) = preSolution
|
||||||
|
Debug = Debug
|
||||||
|
Release = Release
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfiguration) = postSolution
|
||||||
|
{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Debug.ActiveCfg = Debug|Win32
|
||||||
|
{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Debug.Build.0 = Debug|Win32
|
||||||
|
{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Release.ActiveCfg = Release|Win32
|
||||||
|
{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Release.Build.0 = Release|Win32
|
||||||
|
{3AF54C8A-10BF-4332-9147-F68ED9862032}.Debug.ActiveCfg = Debug|Win32
|
||||||
|
{3AF54C8A-10BF-4332-9147-F68ED9862032}.Debug.Build.0 = Debug|Win32
|
||||||
|
{3AF54C8A-10BF-4332-9147-F68ED9862032}.Release.ActiveCfg = Release|Win32
|
||||||
|
{3AF54C8A-10BF-4332-9147-F68ED9862032}.Release.Build.0 = Release|Win32
|
||||||
|
{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Debug.ActiveCfg = Debug|Win32
|
||||||
|
{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Debug.Build.0 = Debug|Win32
|
||||||
|
{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Release.ActiveCfg = Release|Win32
|
||||||
|
{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Release.Build.0 = Release|Win32
|
||||||
|
{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Debug.ActiveCfg = Debug|Win32
|
||||||
|
{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Debug.Build.0 = Debug|Win32
|
||||||
|
{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Release.ActiveCfg = Release|Win32
|
||||||
|
{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Release.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityAddIns) = postSolution
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
126
external/gtest/msvc/gtest.vcproj
vendored
Normal file
126
external/gtest/msvc/gtest.vcproj
vendored
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="7.10"
|
||||||
|
Name="gtest"
|
||||||
|
ProjectGUID="{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}"
|
||||||
|
Keyword="Win32Proj">
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"/>
|
||||||
|
</Platforms>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(OutDir)/$(ProjectName)"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="2"
|
||||||
|
ReferencesPath="">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
|
||||||
|
MinimalRebuild="TRUE"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="5"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="4"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="$(OutDir)/gtestd.lib"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(OutDir)/$(ProjectName)"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="2"
|
||||||
|
ReferencesPath=""..\include";".."">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
|
||||||
|
RuntimeLibrary="4"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="3"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="$(OutDir)/gtest.lib"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
|
||||||
|
<File
|
||||||
|
RelativePath="..\src\gtest-all.cc">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
129
external/gtest/msvc/gtest_main-md.vcproj
vendored
Normal file
129
external/gtest/msvc/gtest_main-md.vcproj
vendored
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="7.10"
|
||||||
|
Name="gtest_main-md"
|
||||||
|
ProjectGUID="{3AF54C8A-10BF-4332-9147-F68ED9862033}"
|
||||||
|
Keyword="Win32Proj">
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"/>
|
||||||
|
</Platforms>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(OutDir)/$(ProjectName)"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="2"
|
||||||
|
ReferencesPath="">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
|
||||||
|
MinimalRebuild="TRUE"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="4"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="$(OutDir)/$(ProjectName)d.lib"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(OutDir)/$(ProjectName)"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="2"
|
||||||
|
ReferencesPath=""..\include";".."">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="3"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="$(OutDir)/$(ProjectName).lib"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
<ProjectReference
|
||||||
|
ReferencedProjectIdentifier="{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}"
|
||||||
|
Name="gtest-md"/>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
|
||||||
|
<File
|
||||||
|
RelativePath="..\src\gtest_main.cc">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
129
external/gtest/msvc/gtest_main.vcproj
vendored
Normal file
129
external/gtest/msvc/gtest_main.vcproj
vendored
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="7.10"
|
||||||
|
Name="gtest_main"
|
||||||
|
ProjectGUID="{3AF54C8A-10BF-4332-9147-F68ED9862032}"
|
||||||
|
Keyword="Win32Proj">
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"/>
|
||||||
|
</Platforms>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(OutDir)/$(ProjectName)"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="2"
|
||||||
|
ReferencesPath="">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
|
||||||
|
MinimalRebuild="TRUE"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="5"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="4"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="$(OutDir)/$(ProjectName)d.lib"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(OutDir)/$(ProjectName)"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="2"
|
||||||
|
ReferencesPath=""..\include";".."">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
|
||||||
|
RuntimeLibrary="4"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="3"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="$(OutDir)/$(ProjectName).lib"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
<ProjectReference
|
||||||
|
ReferencedProjectIdentifier="{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}"
|
||||||
|
Name="gtest"/>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
|
||||||
|
<File
|
||||||
|
RelativePath="..\src\gtest_main.cc">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
164
external/gtest/msvc/gtest_prod_test-md.vcproj
vendored
Normal file
164
external/gtest/msvc/gtest_prod_test-md.vcproj
vendored
Normal file
|
@ -0,0 +1,164 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="7.10"
|
||||||
|
Name="gtest_prod_test-md"
|
||||||
|
ProjectGUID="{24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}"
|
||||||
|
Keyword="Win32Proj">
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"/>
|
||||||
|
</Platforms>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(OutDir)/$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||||
|
MinimalRebuild="TRUE"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="4"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)/gtest_prod_test.exe"
|
||||||
|
LinkIncremental="2"
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
ProgramDatabaseFile="$(OutDir)/gtest_prod_test.pdb"
|
||||||
|
SubSystem="1"
|
||||||
|
TargetMachine="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(OutDir)/$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="3"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)/gtest_prod_test.exe"
|
||||||
|
LinkIncremental="1"
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
<ProjectReference
|
||||||
|
ReferencedProjectIdentifier="{3AF54C8A-10BF-4332-9147-F68ED9862033}"
|
||||||
|
Name="gtest_main-md"/>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
|
||||||
|
<File
|
||||||
|
RelativePath="..\test\gtest_prod_test.cc">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""
|
||||||
|
UsePrecompiledHeader="0"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""
|
||||||
|
UsePrecompiledHeader="0"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\test\production.cc">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""
|
||||||
|
UsePrecompiledHeader="0"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""
|
||||||
|
UsePrecompiledHeader="0"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||||
|
<File
|
||||||
|
RelativePath="..\test\production.h">
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
164
external/gtest/msvc/gtest_prod_test.vcproj
vendored
Normal file
164
external/gtest/msvc/gtest_prod_test.vcproj
vendored
Normal file
|
@ -0,0 +1,164 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="7.10"
|
||||||
|
Name="gtest_prod_test"
|
||||||
|
ProjectGUID="{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}"
|
||||||
|
Keyword="Win32Proj">
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"/>
|
||||||
|
</Platforms>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(OutDir)/$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||||
|
MinimalRebuild="TRUE"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="5"
|
||||||
|
UsePrecompiledHeader="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="4"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)/gtest_prod_test.exe"
|
||||||
|
LinkIncremental="2"
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
ProgramDatabaseFile="$(OutDir)/gtest_prod_test.pdb"
|
||||||
|
SubSystem="1"
|
||||||
|
TargetMachine="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(OutDir)/$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||||
|
RuntimeLibrary="4"
|
||||||
|
UsePrecompiledHeader="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="3"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)/gtest_prod_test.exe"
|
||||||
|
LinkIncremental="1"
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
<ProjectReference
|
||||||
|
ReferencedProjectIdentifier="{3AF54C8A-10BF-4332-9147-F68ED9862032}"
|
||||||
|
Name="gtest_main"/>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
|
||||||
|
<File
|
||||||
|
RelativePath="..\test\gtest_prod_test.cc">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""
|
||||||
|
UsePrecompiledHeader="0"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""
|
||||||
|
UsePrecompiledHeader="0"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\test\production.cc">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""
|
||||||
|
UsePrecompiledHeader="0"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""
|
||||||
|
UsePrecompiledHeader="0"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||||
|
<File
|
||||||
|
RelativePath="..\test\production.h">
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
147
external/gtest/msvc/gtest_unittest-md.vcproj
vendored
Normal file
147
external/gtest/msvc/gtest_unittest-md.vcproj
vendored
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="7.10"
|
||||||
|
Name="gtest_unittest-md"
|
||||||
|
ProjectGUID="{4D9FDFB5-986A-4139-823C-F4EE0ED481A2}"
|
||||||
|
Keyword="Win32Proj">
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"/>
|
||||||
|
</Platforms>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(OutDir)/$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||||
|
MinimalRebuild="TRUE"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="4"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)/gtest_unittest.exe"
|
||||||
|
LinkIncremental="2"
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
ProgramDatabaseFile="$(OutDir)/gtest_unittest.pdb"
|
||||||
|
SubSystem="1"
|
||||||
|
TargetMachine="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(OutDir)/$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="3"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)/gtest_unittest.exe"
|
||||||
|
LinkIncremental="1"
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
<ProjectReference
|
||||||
|
ReferencedProjectIdentifier="{3AF54C8A-10BF-4332-9147-F68ED9862033}"
|
||||||
|
Name="gtest_main-md"/>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
|
||||||
|
<File
|
||||||
|
RelativePath="..\test\gtest_unittest.cc">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="1"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""
|
||||||
|
BasicRuntimeChecks="0"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
DebugInformationFormat="3"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""
|
||||||
|
UsePrecompiledHeader="0"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
147
external/gtest/msvc/gtest_unittest.vcproj
vendored
Normal file
147
external/gtest/msvc/gtest_unittest.vcproj
vendored
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="7.10"
|
||||||
|
Name="gtest_unittest"
|
||||||
|
ProjectGUID="{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}"
|
||||||
|
Keyword="Win32Proj">
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"/>
|
||||||
|
</Platforms>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(OutDir)/$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||||
|
MinimalRebuild="TRUE"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="5"
|
||||||
|
UsePrecompiledHeader="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="4"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)/gtest_unittest.exe"
|
||||||
|
LinkIncremental="2"
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
ProgramDatabaseFile="$(OutDir)/gtest_unittest.pdb"
|
||||||
|
SubSystem="1"
|
||||||
|
TargetMachine="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(OutDir)/$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||||
|
RuntimeLibrary="4"
|
||||||
|
UsePrecompiledHeader="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="3"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)/gtest_unittest.exe"
|
||||||
|
LinkIncremental="1"
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
<ProjectReference
|
||||||
|
ReferencedProjectIdentifier="{3AF54C8A-10BF-4332-9147-F68ED9862032}"
|
||||||
|
Name="gtest_main"/>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
|
||||||
|
<File
|
||||||
|
RelativePath="..\test\gtest_unittest.cc">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="1"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""
|
||||||
|
BasicRuntimeChecks="0"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
DebugInformationFormat="3"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""..";"..\include""
|
||||||
|
UsePrecompiledHeader="0"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
123
external/gtest/samples/prime_tables.h
vendored
Normal file
123
external/gtest/samples/prime_tables.h
vendored
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
// Copyright 2008 Google Inc.
|
||||||
|
// All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
// Author: wan@google.com (Zhanyong Wan)
|
||||||
|
// Author: vladl@google.com (Vlad Losev)
|
||||||
|
|
||||||
|
// This provides interface PrimeTable that determines whether a number is a
|
||||||
|
// prime and determines a next prime number. This interface is used
|
||||||
|
// in Google Test samples demonstrating use of parameterized tests.
|
||||||
|
|
||||||
|
#ifndef GTEST_SAMPLES_PRIME_TABLES_H_
|
||||||
|
#define GTEST_SAMPLES_PRIME_TABLES_H_
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
// The prime table interface.
|
||||||
|
class PrimeTable {
|
||||||
|
public:
|
||||||
|
virtual ~PrimeTable() {}
|
||||||
|
|
||||||
|
// Returns true iff n is a prime number.
|
||||||
|
virtual bool IsPrime(int n) const = 0;
|
||||||
|
|
||||||
|
// Returns the smallest prime number greater than p; or returns -1
|
||||||
|
// if the next prime is beyond the capacity of the table.
|
||||||
|
virtual int GetNextPrime(int p) const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Implementation #1 calculates the primes on-the-fly.
|
||||||
|
class OnTheFlyPrimeTable : public PrimeTable {
|
||||||
|
public:
|
||||||
|
virtual bool IsPrime(int n) const {
|
||||||
|
if (n <= 1) return false;
|
||||||
|
|
||||||
|
for (int i = 2; i*i <= n; i++) {
|
||||||
|
// n is divisible by an integer other than 1 and itself.
|
||||||
|
if ((n % i) == 0) return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual int GetNextPrime(int p) const {
|
||||||
|
for (int n = p + 1; n > 0; n++) {
|
||||||
|
if (IsPrime(n)) return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Implementation #2 pre-calculates the primes and stores the result
|
||||||
|
// in an array.
|
||||||
|
class PreCalculatedPrimeTable : public PrimeTable {
|
||||||
|
public:
|
||||||
|
// 'max' specifies the maximum number the prime table holds.
|
||||||
|
explicit PreCalculatedPrimeTable(int max)
|
||||||
|
: is_prime_size_(max + 1), is_prime_(new bool[max + 1]) {
|
||||||
|
CalculatePrimesUpTo(max);
|
||||||
|
}
|
||||||
|
virtual ~PreCalculatedPrimeTable() { delete[] is_prime_; }
|
||||||
|
|
||||||
|
virtual bool IsPrime(int n) const {
|
||||||
|
return 0 <= n && n < is_prime_size_ && is_prime_[n];
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual int GetNextPrime(int p) const {
|
||||||
|
for (int n = p + 1; n < is_prime_size_; n++) {
|
||||||
|
if (is_prime_[n]) return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void CalculatePrimesUpTo(int max) {
|
||||||
|
::std::fill(is_prime_, is_prime_ + is_prime_size_, true);
|
||||||
|
is_prime_[0] = is_prime_[1] = false;
|
||||||
|
|
||||||
|
for (int i = 2; i <= max; i++) {
|
||||||
|
if (!is_prime_[i]) continue;
|
||||||
|
|
||||||
|
// Marks all multiples of i (except i itself) as non-prime.
|
||||||
|
for (int j = 2*i; j <= max; j += i) {
|
||||||
|
is_prime_[j] = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const int is_prime_size_;
|
||||||
|
bool* const is_prime_;
|
||||||
|
|
||||||
|
// Disables compiler warning "assignment operator could not be generated."
|
||||||
|
void operator=(const PreCalculatedPrimeTable& rhs);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // GTEST_SAMPLES_PRIME_TABLES_H_
|
68
external/gtest/samples/sample1.cc
vendored
Normal file
68
external/gtest/samples/sample1.cc
vendored
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
// Copyright 2005, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// A sample program demonstrating using Google C++ testing framework.
|
||||||
|
//
|
||||||
|
// Author: wan@google.com (Zhanyong Wan)
|
||||||
|
|
||||||
|
#include "sample1.h"
|
||||||
|
|
||||||
|
// Returns n! (the factorial of n). For negative n, n! is defined to be 1.
|
||||||
|
int Factorial(int n) {
|
||||||
|
int result = 1;
|
||||||
|
for (int i = 1; i <= n; i++) {
|
||||||
|
result *= i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns true iff n is a prime number.
|
||||||
|
bool IsPrime(int n) {
|
||||||
|
// Trivial case 1: small numbers
|
||||||
|
if (n <= 1) return false;
|
||||||
|
|
||||||
|
// Trivial case 2: even numbers
|
||||||
|
if (n % 2 == 0) return n == 2;
|
||||||
|
|
||||||
|
// Now, we have that n is odd and n >= 3.
|
||||||
|
|
||||||
|
// Try to divide n by every odd number i, starting from 3
|
||||||
|
for (int i = 3; ; i += 2) {
|
||||||
|
// We only have to try i up to the squre root of n
|
||||||
|
if (i > n/i) break;
|
||||||
|
|
||||||
|
// Now, we have i <= n/i < n.
|
||||||
|
// If n is divisible by i, n is not prime.
|
||||||
|
if (n % i == 0) return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// n has no integer factor in the range (1, n), and thus is prime.
|
||||||
|
return true;
|
||||||
|
}
|
43
external/gtest/samples/sample1.h
vendored
Normal file
43
external/gtest/samples/sample1.h
vendored
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
// Copyright 2005, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// A sample program demonstrating using Google C++ testing framework.
|
||||||
|
//
|
||||||
|
// Author: wan@google.com (Zhanyong Wan)
|
||||||
|
|
||||||
|
#ifndef GTEST_SAMPLES_SAMPLE1_H_
|
||||||
|
#define GTEST_SAMPLES_SAMPLE1_H_
|
||||||
|
|
||||||
|
// Returns n! (the factorial of n). For negative n, n! is defined to be 1.
|
||||||
|
int Factorial(int n);
|
||||||
|
|
||||||
|
// Returns true iff n is a prime number.
|
||||||
|
bool IsPrime(int n);
|
||||||
|
|
||||||
|
#endif // GTEST_SAMPLES_SAMPLE1_H_
|
144
external/gtest/samples/sample10_unittest.cc
vendored
Normal file
144
external/gtest/samples/sample10_unittest.cc
vendored
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
// Copyright 2009 Google Inc. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
// Author: vladl@google.com (Vlad Losev)
|
||||||
|
|
||||||
|
// This sample shows how to use Google Test listener API to implement
|
||||||
|
// a primitive leak checker.
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
|
using ::testing::EmptyTestEventListener;
|
||||||
|
using ::testing::InitGoogleTest;
|
||||||
|
using ::testing::Test;
|
||||||
|
using ::testing::TestCase;
|
||||||
|
using ::testing::TestEventListeners;
|
||||||
|
using ::testing::TestInfo;
|
||||||
|
using ::testing::TestPartResult;
|
||||||
|
using ::testing::UnitTest;
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
// We will track memory used by this class.
|
||||||
|
class Water {
|
||||||
|
public:
|
||||||
|
// Normal Water declarations go here.
|
||||||
|
|
||||||
|
// operator new and operator delete help us control water allocation.
|
||||||
|
void* operator new(size_t allocation_size) {
|
||||||
|
allocated_++;
|
||||||
|
return malloc(allocation_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator delete(void* block, size_t /* allocation_size */) {
|
||||||
|
allocated_--;
|
||||||
|
free(block);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int allocated() { return allocated_; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
static int allocated_;
|
||||||
|
};
|
||||||
|
|
||||||
|
int Water::allocated_ = 0;
|
||||||
|
|
||||||
|
// This event listener monitors how many Water objects are created and
|
||||||
|
// destroyed by each test, and reports a failure if a test leaks some Water
|
||||||
|
// objects. It does this by comparing the number of live Water objects at
|
||||||
|
// the beginning of a test and at the end of a test.
|
||||||
|
class LeakChecker : public EmptyTestEventListener {
|
||||||
|
private:
|
||||||
|
// Called before a test starts.
|
||||||
|
virtual void OnTestStart(const TestInfo& /* test_info */) {
|
||||||
|
initially_allocated_ = Water::allocated();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called after a test ends.
|
||||||
|
virtual void OnTestEnd(const TestInfo& /* test_info */) {
|
||||||
|
int difference = Water::allocated() - initially_allocated_;
|
||||||
|
|
||||||
|
// You can generate a failure in any event handler except
|
||||||
|
// OnTestPartResult. Just use an appropriate Google Test assertion to do
|
||||||
|
// it.
|
||||||
|
EXPECT_LE(difference, 0) << "Leaked " << difference << " unit(s) of Water!";
|
||||||
|
}
|
||||||
|
|
||||||
|
int initially_allocated_;
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST(ListenersTest, DoesNotLeak) {
|
||||||
|
Water* water = new Water;
|
||||||
|
delete water;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This should fail when the --check_for_leaks command line flag is
|
||||||
|
// specified.
|
||||||
|
TEST(ListenersTest, LeaksWater) {
|
||||||
|
Water* water = new Water;
|
||||||
|
EXPECT_TRUE(water != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
InitGoogleTest(&argc, argv);
|
||||||
|
|
||||||
|
bool check_for_leaks = false;
|
||||||
|
if (argc > 1 && strcmp(argv[1], "--check_for_leaks") == 0 )
|
||||||
|
check_for_leaks = true;
|
||||||
|
else
|
||||||
|
printf("%s\n", "Run this program with --check_for_leaks to enable "
|
||||||
|
"custom leak checking in the tests.");
|
||||||
|
|
||||||
|
// If we are given the --check_for_leaks command line flag, installs the
|
||||||
|
// leak checker.
|
||||||
|
if (check_for_leaks) {
|
||||||
|
TestEventListeners& listeners = UnitTest::GetInstance()->listeners();
|
||||||
|
|
||||||
|
// Adds the leak checker to the end of the test event listener list,
|
||||||
|
// after the default text output printer and the default XML report
|
||||||
|
// generator.
|
||||||
|
//
|
||||||
|
// The order is important - it ensures that failures generated in the
|
||||||
|
// leak checker's OnTestEnd() method are processed by the text and XML
|
||||||
|
// printers *before* their OnTestEnd() methods are called, such that
|
||||||
|
// they are attributed to the right test. Remember that a listener
|
||||||
|
// receives an OnXyzStart event *after* listeners preceding it in the
|
||||||
|
// list received that event, and receives an OnXyzEnd event *before*
|
||||||
|
// listeners preceding it.
|
||||||
|
//
|
||||||
|
// We don't need to worry about deleting the new listener later, as
|
||||||
|
// Google Test will do it.
|
||||||
|
listeners.Append(new LeakChecker);
|
||||||
|
}
|
||||||
|
return RUN_ALL_TESTS();
|
||||||
|
}
|
153
external/gtest/samples/sample1_unittest.cc
vendored
Normal file
153
external/gtest/samples/sample1_unittest.cc
vendored
Normal file
|
@ -0,0 +1,153 @@
|
||||||
|
// Copyright 2005, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// A sample program demonstrating using Google C++ testing framework.
|
||||||
|
//
|
||||||
|
// Author: wan@google.com (Zhanyong Wan)
|
||||||
|
|
||||||
|
|
||||||
|
// This sample shows how to write a simple unit test for a function,
|
||||||
|
// using Google C++ testing framework.
|
||||||
|
//
|
||||||
|
// Writing a unit test using Google C++ testing framework is easy as 1-2-3:
|
||||||
|
|
||||||
|
|
||||||
|
// Step 1. Include necessary header files such that the stuff your
|
||||||
|
// test logic needs is declared.
|
||||||
|
//
|
||||||
|
// Don't forget gtest.h, which declares the testing framework.
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
#include "sample1.h"
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
|
|
||||||
|
// Step 2. Use the TEST macro to define your tests.
|
||||||
|
//
|
||||||
|
// TEST has two parameters: the test case name and the test name.
|
||||||
|
// After using the macro, you should define your test logic between a
|
||||||
|
// pair of braces. You can use a bunch of macros to indicate the
|
||||||
|
// success or failure of a test. EXPECT_TRUE and EXPECT_EQ are
|
||||||
|
// examples of such macros. For a complete list, see gtest.h.
|
||||||
|
//
|
||||||
|
// <TechnicalDetails>
|
||||||
|
//
|
||||||
|
// In Google Test, tests are grouped into test cases. This is how we
|
||||||
|
// keep test code organized. You should put logically related tests
|
||||||
|
// into the same test case.
|
||||||
|
//
|
||||||
|
// The test case name and the test name should both be valid C++
|
||||||
|
// identifiers. And you should not use underscore (_) in the names.
|
||||||
|
//
|
||||||
|
// Google Test guarantees that each test you define is run exactly
|
||||||
|
// once, but it makes no guarantee on the order the tests are
|
||||||
|
// executed. Therefore, you should write your tests in such a way
|
||||||
|
// that their results don't depend on their order.
|
||||||
|
//
|
||||||
|
// </TechnicalDetails>
|
||||||
|
|
||||||
|
|
||||||
|
// Tests Factorial().
|
||||||
|
|
||||||
|
// Tests factorial of negative numbers.
|
||||||
|
TEST(FactorialTest, Negative) {
|
||||||
|
// This test is named "Negative", and belongs to the "FactorialTest"
|
||||||
|
// test case.
|
||||||
|
EXPECT_EQ(1, Factorial(-5));
|
||||||
|
EXPECT_EQ(1, Factorial(-1));
|
||||||
|
EXPECT_GT(Factorial(-10), 0);
|
||||||
|
|
||||||
|
// <TechnicalDetails>
|
||||||
|
//
|
||||||
|
// EXPECT_EQ(expected, actual) is the same as
|
||||||
|
//
|
||||||
|
// EXPECT_TRUE((expected) == (actual))
|
||||||
|
//
|
||||||
|
// except that it will print both the expected value and the actual
|
||||||
|
// value when the assertion fails. This is very helpful for
|
||||||
|
// debugging. Therefore in this case EXPECT_EQ is preferred.
|
||||||
|
//
|
||||||
|
// On the other hand, EXPECT_TRUE accepts any Boolean expression,
|
||||||
|
// and is thus more general.
|
||||||
|
//
|
||||||
|
// </TechnicalDetails>
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests factorial of 0.
|
||||||
|
TEST(FactorialTest, Zero) {
|
||||||
|
EXPECT_EQ(1, Factorial(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests factorial of positive numbers.
|
||||||
|
TEST(FactorialTest, Positive) {
|
||||||
|
EXPECT_EQ(1, Factorial(1));
|
||||||
|
EXPECT_EQ(2, Factorial(2));
|
||||||
|
EXPECT_EQ(6, Factorial(3));
|
||||||
|
EXPECT_EQ(40320, Factorial(8));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Tests IsPrime()
|
||||||
|
|
||||||
|
// Tests negative input.
|
||||||
|
TEST(IsPrimeTest, Negative) {
|
||||||
|
// This test belongs to the IsPrimeTest test case.
|
||||||
|
|
||||||
|
EXPECT_FALSE(IsPrime(-1));
|
||||||
|
EXPECT_FALSE(IsPrime(-2));
|
||||||
|
EXPECT_FALSE(IsPrime(INT_MIN));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests some trivial cases.
|
||||||
|
TEST(IsPrimeTest, Trivial) {
|
||||||
|
EXPECT_FALSE(IsPrime(0));
|
||||||
|
EXPECT_FALSE(IsPrime(1));
|
||||||
|
EXPECT_TRUE(IsPrime(2));
|
||||||
|
EXPECT_TRUE(IsPrime(3));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests positive input.
|
||||||
|
TEST(IsPrimeTest, Positive) {
|
||||||
|
EXPECT_FALSE(IsPrime(4));
|
||||||
|
EXPECT_TRUE(IsPrime(5));
|
||||||
|
EXPECT_FALSE(IsPrime(6));
|
||||||
|
EXPECT_TRUE(IsPrime(23));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 3. Call RUN_ALL_TESTS() in main().
|
||||||
|
//
|
||||||
|
// We do this by linking in src/gtest_main.cc file, which consists of
|
||||||
|
// a main() function which calls RUN_ALL_TESTS() for us.
|
||||||
|
//
|
||||||
|
// This runs all the tests you've defined, prints the result, and
|
||||||
|
// returns 0 if successful, or 1 otherwise.
|
||||||
|
//
|
||||||
|
// Did you notice that we didn't register the tests? The
|
||||||
|
// RUN_ALL_TESTS() macro magically knows about all the tests we
|
||||||
|
// defined. Isn't this convenient?
|
56
external/gtest/samples/sample2.cc
vendored
Normal file
56
external/gtest/samples/sample2.cc
vendored
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
// Copyright 2005, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// A sample program demonstrating using Google C++ testing framework.
|
||||||
|
//
|
||||||
|
// Author: wan@google.com (Zhanyong Wan)
|
||||||
|
|
||||||
|
#include "sample2.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
// Clones a 0-terminated C string, allocating memory using new.
|
||||||
|
const char* MyString::CloneCString(const char* a_c_string) {
|
||||||
|
if (a_c_string == NULL) return NULL;
|
||||||
|
|
||||||
|
const size_t len = strlen(a_c_string);
|
||||||
|
char* const clone = new char[ len + 1 ];
|
||||||
|
memcpy(clone, a_c_string, len + 1);
|
||||||
|
|
||||||
|
return clone;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sets the 0-terminated C string this MyString object
|
||||||
|
// represents.
|
||||||
|
void MyString::Set(const char* a_c_string) {
|
||||||
|
// Makes sure this works when c_string == c_string_
|
||||||
|
const char* const temp = MyString::CloneCString(a_c_string);
|
||||||
|
delete[] c_string_;
|
||||||
|
c_string_ = temp;
|
||||||
|
}
|
85
external/gtest/samples/sample2.h
vendored
Normal file
85
external/gtest/samples/sample2.h
vendored
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
// Copyright 2005, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// A sample program demonstrating using Google C++ testing framework.
|
||||||
|
//
|
||||||
|
// Author: wan@google.com (Zhanyong Wan)
|
||||||
|
|
||||||
|
#ifndef GTEST_SAMPLES_SAMPLE2_H_
|
||||||
|
#define GTEST_SAMPLES_SAMPLE2_H_
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
// A simple string class.
|
||||||
|
class MyString {
|
||||||
|
private:
|
||||||
|
const char* c_string_;
|
||||||
|
const MyString& operator=(const MyString& rhs);
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Clones a 0-terminated C string, allocating memory using new.
|
||||||
|
static const char* CloneCString(const char* a_c_string);
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// C'tors
|
||||||
|
|
||||||
|
// The default c'tor constructs a NULL string.
|
||||||
|
MyString() : c_string_(NULL) {}
|
||||||
|
|
||||||
|
// Constructs a MyString by cloning a 0-terminated C string.
|
||||||
|
explicit MyString(const char* a_c_string) : c_string_(NULL) {
|
||||||
|
Set(a_c_string);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy c'tor
|
||||||
|
MyString(const MyString& string) : c_string_(NULL) {
|
||||||
|
Set(string.c_string_);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// D'tor. MyString is intended to be a final class, so the d'tor
|
||||||
|
// doesn't need to be virtual.
|
||||||
|
~MyString() { delete[] c_string_; }
|
||||||
|
|
||||||
|
// Gets the 0-terminated C string this MyString object represents.
|
||||||
|
const char* c_string() const { return c_string_; }
|
||||||
|
|
||||||
|
size_t Length() const {
|
||||||
|
return c_string_ == NULL ? 0 : strlen(c_string_);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sets the 0-terminated C string this MyString object represents.
|
||||||
|
void Set(const char* c_string);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // GTEST_SAMPLES_SAMPLE2_H_
|
109
external/gtest/samples/sample2_unittest.cc
vendored
Normal file
109
external/gtest/samples/sample2_unittest.cc
vendored
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
// Copyright 2005, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// A sample program demonstrating using Google C++ testing framework.
|
||||||
|
//
|
||||||
|
// Author: wan@google.com (Zhanyong Wan)
|
||||||
|
|
||||||
|
|
||||||
|
// This sample shows how to write a more complex unit test for a class
|
||||||
|
// that has multiple member functions.
|
||||||
|
//
|
||||||
|
// Usually, it's a good idea to have one test for each method in your
|
||||||
|
// class. You don't have to do that exactly, but it helps to keep
|
||||||
|
// your tests organized. You may also throw in additional tests as
|
||||||
|
// needed.
|
||||||
|
|
||||||
|
#include "sample2.h"
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
|
// In this example, we test the MyString class (a simple string).
|
||||||
|
|
||||||
|
// Tests the default c'tor.
|
||||||
|
TEST(MyString, DefaultConstructor) {
|
||||||
|
const MyString s;
|
||||||
|
|
||||||
|
// Asserts that s.c_string() returns NULL.
|
||||||
|
//
|
||||||
|
// <TechnicalDetails>
|
||||||
|
//
|
||||||
|
// If we write NULL instead of
|
||||||
|
//
|
||||||
|
// static_cast<const char *>(NULL)
|
||||||
|
//
|
||||||
|
// in this assertion, it will generate a warning on gcc 3.4. The
|
||||||
|
// reason is that EXPECT_EQ needs to know the types of its
|
||||||
|
// arguments in order to print them when it fails. Since NULL is
|
||||||
|
// #defined as 0, the compiler will use the formatter function for
|
||||||
|
// int to print it. However, gcc thinks that NULL should be used as
|
||||||
|
// a pointer, not an int, and therefore complains.
|
||||||
|
//
|
||||||
|
// The root of the problem is C++'s lack of distinction between the
|
||||||
|
// integer number 0 and the null pointer constant. Unfortunately,
|
||||||
|
// we have to live with this fact.
|
||||||
|
//
|
||||||
|
// </TechnicalDetails>
|
||||||
|
EXPECT_STREQ(NULL, s.c_string());
|
||||||
|
|
||||||
|
EXPECT_EQ(0u, s.Length());
|
||||||
|
}
|
||||||
|
|
||||||
|
const char kHelloString[] = "Hello, world!";
|
||||||
|
|
||||||
|
// Tests the c'tor that accepts a C string.
|
||||||
|
TEST(MyString, ConstructorFromCString) {
|
||||||
|
const MyString s(kHelloString);
|
||||||
|
EXPECT_EQ(0, strcmp(s.c_string(), kHelloString));
|
||||||
|
EXPECT_EQ(sizeof(kHelloString)/sizeof(kHelloString[0]) - 1,
|
||||||
|
s.Length());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests the copy c'tor.
|
||||||
|
TEST(MyString, CopyConstructor) {
|
||||||
|
const MyString s1(kHelloString);
|
||||||
|
const MyString s2 = s1;
|
||||||
|
EXPECT_EQ(0, strcmp(s2.c_string(), kHelloString));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests the Set method.
|
||||||
|
TEST(MyString, Set) {
|
||||||
|
MyString s;
|
||||||
|
|
||||||
|
s.Set(kHelloString);
|
||||||
|
EXPECT_EQ(0, strcmp(s.c_string(), kHelloString));
|
||||||
|
|
||||||
|
// Set should work when the input pointer is the same as the one
|
||||||
|
// already in the MyString object.
|
||||||
|
s.Set(s.c_string());
|
||||||
|
EXPECT_EQ(0, strcmp(s.c_string(), kHelloString));
|
||||||
|
|
||||||
|
// Can we set the MyString to NULL?
|
||||||
|
s.Set(NULL);
|
||||||
|
EXPECT_STREQ(NULL, s.c_string());
|
||||||
|
}
|
172
external/gtest/samples/sample3-inl.h
vendored
Normal file
172
external/gtest/samples/sample3-inl.h
vendored
Normal file
|
@ -0,0 +1,172 @@
|
||||||
|
// Copyright 2005, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// A sample program demonstrating using Google C++ testing framework.
|
||||||
|
//
|
||||||
|
// Author: wan@google.com (Zhanyong Wan)
|
||||||
|
|
||||||
|
#ifndef GTEST_SAMPLES_SAMPLE3_INL_H_
|
||||||
|
#define GTEST_SAMPLES_SAMPLE3_INL_H_
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
|
||||||
|
// Queue is a simple queue implemented as a singled-linked list.
|
||||||
|
//
|
||||||
|
// The element type must support copy constructor.
|
||||||
|
template <typename E> // E is the element type
|
||||||
|
class Queue;
|
||||||
|
|
||||||
|
// QueueNode is a node in a Queue, which consists of an element of
|
||||||
|
// type E and a pointer to the next node.
|
||||||
|
template <typename E> // E is the element type
|
||||||
|
class QueueNode {
|
||||||
|
friend class Queue<E>;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Gets the element in this node.
|
||||||
|
const E& element() const { return element_; }
|
||||||
|
|
||||||
|
// Gets the next node in the queue.
|
||||||
|
QueueNode* next() { return next_; }
|
||||||
|
const QueueNode* next() const { return next_; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Creates a node with a given element value. The next pointer is
|
||||||
|
// set to NULL.
|
||||||
|
explicit QueueNode(const E& an_element) : element_(an_element), next_(NULL) {}
|
||||||
|
|
||||||
|
// We disable the default assignment operator and copy c'tor.
|
||||||
|
const QueueNode& operator = (const QueueNode&);
|
||||||
|
QueueNode(const QueueNode&);
|
||||||
|
|
||||||
|
E element_;
|
||||||
|
QueueNode* next_;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename E> // E is the element type.
|
||||||
|
class Queue {
|
||||||
|
public:
|
||||||
|
// Creates an empty queue.
|
||||||
|
Queue() : head_(NULL), last_(NULL), size_(0) {}
|
||||||
|
|
||||||
|
// D'tor. Clears the queue.
|
||||||
|
~Queue() { Clear(); }
|
||||||
|
|
||||||
|
// Clears the queue.
|
||||||
|
void Clear() {
|
||||||
|
if (size_ > 0) {
|
||||||
|
// 1. Deletes every node.
|
||||||
|
QueueNode<E>* node = head_;
|
||||||
|
QueueNode<E>* next = node->next();
|
||||||
|
for (; ;) {
|
||||||
|
delete node;
|
||||||
|
node = next;
|
||||||
|
if (node == NULL) break;
|
||||||
|
next = node->next();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Resets the member variables.
|
||||||
|
head_ = last_ = NULL;
|
||||||
|
size_ = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gets the number of elements.
|
||||||
|
size_t Size() const { return size_; }
|
||||||
|
|
||||||
|
// Gets the first element of the queue, or NULL if the queue is empty.
|
||||||
|
QueueNode<E>* Head() { return head_; }
|
||||||
|
const QueueNode<E>* Head() const { return head_; }
|
||||||
|
|
||||||
|
// Gets the last element of the queue, or NULL if the queue is empty.
|
||||||
|
QueueNode<E>* Last() { return last_; }
|
||||||
|
const QueueNode<E>* Last() const { return last_; }
|
||||||
|
|
||||||
|
// Adds an element to the end of the queue. A copy of the element is
|
||||||
|
// created using the copy constructor, and then stored in the queue.
|
||||||
|
// Changes made to the element in the queue doesn't affect the source
|
||||||
|
// object, and vice versa.
|
||||||
|
void Enqueue(const E& element) {
|
||||||
|
QueueNode<E>* new_node = new QueueNode<E>(element);
|
||||||
|
|
||||||
|
if (size_ == 0) {
|
||||||
|
head_ = last_ = new_node;
|
||||||
|
size_ = 1;
|
||||||
|
} else {
|
||||||
|
last_->next_ = new_node;
|
||||||
|
last_ = new_node;
|
||||||
|
size_++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Removes the head of the queue and returns it. Returns NULL if
|
||||||
|
// the queue is empty.
|
||||||
|
E* Dequeue() {
|
||||||
|
if (size_ == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QueueNode<E>* const old_head = head_;
|
||||||
|
head_ = head_->next_;
|
||||||
|
size_--;
|
||||||
|
if (size_ == 0) {
|
||||||
|
last_ = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
E* element = new E(old_head->element());
|
||||||
|
delete old_head;
|
||||||
|
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Applies a function/functor on each element of the queue, and
|
||||||
|
// returns the result in a new queue. The original queue is not
|
||||||
|
// affected.
|
||||||
|
template <typename F>
|
||||||
|
Queue* Map(F function) const {
|
||||||
|
Queue* new_queue = new Queue();
|
||||||
|
for (const QueueNode<E>* node = head_; node != NULL; node = node->next_) {
|
||||||
|
new_queue->Enqueue(function(node->element()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return new_queue;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
QueueNode<E>* head_; // The first node of the queue.
|
||||||
|
QueueNode<E>* last_; // The last node of the queue.
|
||||||
|
size_t size_; // The number of elements in the queue.
|
||||||
|
|
||||||
|
// We disallow copying a queue.
|
||||||
|
Queue(const Queue&);
|
||||||
|
const Queue& operator = (const Queue&);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // GTEST_SAMPLES_SAMPLE3_INL_H_
|
151
external/gtest/samples/sample3_unittest.cc
vendored
Normal file
151
external/gtest/samples/sample3_unittest.cc
vendored
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
// Copyright 2005, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// A sample program demonstrating using Google C++ testing framework.
|
||||||
|
//
|
||||||
|
// Author: wan@google.com (Zhanyong Wan)
|
||||||
|
|
||||||
|
|
||||||
|
// In this example, we use a more advanced feature of Google Test called
|
||||||
|
// test fixture.
|
||||||
|
//
|
||||||
|
// A test fixture is a place to hold objects and functions shared by
|
||||||
|
// all tests in a test case. Using a test fixture avoids duplicating
|
||||||
|
// the test code necessary to initialize and cleanup those common
|
||||||
|
// objects for each test. It is also useful for defining sub-routines
|
||||||
|
// that your tests need to invoke a lot.
|
||||||
|
//
|
||||||
|
// <TechnicalDetails>
|
||||||
|
//
|
||||||
|
// The tests share the test fixture in the sense of code sharing, not
|
||||||
|
// data sharing. Each test is given its own fresh copy of the
|
||||||
|
// fixture. You cannot expect the data modified by one test to be
|
||||||
|
// passed on to another test, which is a bad idea.
|
||||||
|
//
|
||||||
|
// The reason for this design is that tests should be independent and
|
||||||
|
// repeatable. In particular, a test should not fail as the result of
|
||||||
|
// another test's failure. If one test depends on info produced by
|
||||||
|
// another test, then the two tests should really be one big test.
|
||||||
|
//
|
||||||
|
// The macros for indicating the success/failure of a test
|
||||||
|
// (EXPECT_TRUE, FAIL, etc) need to know what the current test is
|
||||||
|
// (when Google Test prints the test result, it tells you which test
|
||||||
|
// each failure belongs to). Technically, these macros invoke a
|
||||||
|
// member function of the Test class. Therefore, you cannot use them
|
||||||
|
// in a global function. That's why you should put test sub-routines
|
||||||
|
// in a test fixture.
|
||||||
|
//
|
||||||
|
// </TechnicalDetails>
|
||||||
|
|
||||||
|
#include "sample3-inl.h"
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
|
// To use a test fixture, derive a class from testing::Test.
|
||||||
|
class QueueTest : public testing::Test {
|
||||||
|
protected: // You should make the members protected s.t. they can be
|
||||||
|
// accessed from sub-classes.
|
||||||
|
|
||||||
|
// virtual void SetUp() will be called before each test is run. You
|
||||||
|
// should define it if you need to initialize the varaibles.
|
||||||
|
// Otherwise, this can be skipped.
|
||||||
|
virtual void SetUp() {
|
||||||
|
q1_.Enqueue(1);
|
||||||
|
q2_.Enqueue(2);
|
||||||
|
q2_.Enqueue(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// virtual void TearDown() will be called after each test is run.
|
||||||
|
// You should define it if there is cleanup work to do. Otherwise,
|
||||||
|
// you don't have to provide it.
|
||||||
|
//
|
||||||
|
// virtual void TearDown() {
|
||||||
|
// }
|
||||||
|
|
||||||
|
// A helper function that some test uses.
|
||||||
|
static int Double(int n) {
|
||||||
|
return 2*n;
|
||||||
|
}
|
||||||
|
|
||||||
|
// A helper function for testing Queue::Map().
|
||||||
|
void MapTester(const Queue<int> * q) {
|
||||||
|
// Creates a new queue, where each element is twice as big as the
|
||||||
|
// corresponding one in q.
|
||||||
|
const Queue<int> * const new_q = q->Map(Double);
|
||||||
|
|
||||||
|
// Verifies that the new queue has the same size as q.
|
||||||
|
ASSERT_EQ(q->Size(), new_q->Size());
|
||||||
|
|
||||||
|
// Verifies the relationship between the elements of the two queues.
|
||||||
|
for ( const QueueNode<int> * n1 = q->Head(), * n2 = new_q->Head();
|
||||||
|
n1 != NULL; n1 = n1->next(), n2 = n2->next() ) {
|
||||||
|
EXPECT_EQ(2 * n1->element(), n2->element());
|
||||||
|
}
|
||||||
|
|
||||||
|
delete new_q;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Declares the variables your tests want to use.
|
||||||
|
Queue<int> q0_;
|
||||||
|
Queue<int> q1_;
|
||||||
|
Queue<int> q2_;
|
||||||
|
};
|
||||||
|
|
||||||
|
// When you have a test fixture, you define a test using TEST_F
|
||||||
|
// instead of TEST.
|
||||||
|
|
||||||
|
// Tests the default c'tor.
|
||||||
|
TEST_F(QueueTest, DefaultConstructor) {
|
||||||
|
// You can access data in the test fixture here.
|
||||||
|
EXPECT_EQ(0u, q0_.Size());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests Dequeue().
|
||||||
|
TEST_F(QueueTest, Dequeue) {
|
||||||
|
int * n = q0_.Dequeue();
|
||||||
|
EXPECT_TRUE(n == NULL);
|
||||||
|
|
||||||
|
n = q1_.Dequeue();
|
||||||
|
ASSERT_TRUE(n != NULL);
|
||||||
|
EXPECT_EQ(1, *n);
|
||||||
|
EXPECT_EQ(0u, q1_.Size());
|
||||||
|
delete n;
|
||||||
|
|
||||||
|
n = q2_.Dequeue();
|
||||||
|
ASSERT_TRUE(n != NULL);
|
||||||
|
EXPECT_EQ(2, *n);
|
||||||
|
EXPECT_EQ(1u, q2_.Size());
|
||||||
|
delete n;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests the Queue::Map() function.
|
||||||
|
TEST_F(QueueTest, Map) {
|
||||||
|
MapTester(&q0_);
|
||||||
|
MapTester(&q1_);
|
||||||
|
MapTester(&q2_);
|
||||||
|
}
|
46
external/gtest/samples/sample4.cc
vendored
Normal file
46
external/gtest/samples/sample4.cc
vendored
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
// Copyright 2005, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// A sample program demonstrating using Google C++ testing framework.
|
||||||
|
//
|
||||||
|
// Author: wan@google.com (Zhanyong Wan)
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "sample4.h"
|
||||||
|
|
||||||
|
// Returns the current counter value, and increments it.
|
||||||
|
int Counter::Increment() {
|
||||||
|
return counter_++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prints the current counter value to STDOUT.
|
||||||
|
void Counter::Print() const {
|
||||||
|
printf("%d", counter_);
|
||||||
|
}
|
53
external/gtest/samples/sample4.h
vendored
Normal file
53
external/gtest/samples/sample4.h
vendored
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
// Copyright 2005, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// A sample program demonstrating using Google C++ testing framework.
|
||||||
|
//
|
||||||
|
// Author: wan@google.com (Zhanyong Wan)
|
||||||
|
|
||||||
|
#ifndef GTEST_SAMPLES_SAMPLE4_H_
|
||||||
|
#define GTEST_SAMPLES_SAMPLE4_H_
|
||||||
|
|
||||||
|
// A simple monotonic counter.
|
||||||
|
class Counter {
|
||||||
|
private:
|
||||||
|
int counter_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Creates a counter that starts at 0.
|
||||||
|
Counter() : counter_(0) {}
|
||||||
|
|
||||||
|
// Returns the current counter value, and increments it.
|
||||||
|
int Increment();
|
||||||
|
|
||||||
|
// Prints the current counter value to STDOUT.
|
||||||
|
void Print() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // GTEST_SAMPLES_SAMPLE4_H_
|
45
external/gtest/samples/sample4_unittest.cc
vendored
Normal file
45
external/gtest/samples/sample4_unittest.cc
vendored
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
// Copyright 2005, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
// Author: wan@google.com (Zhanyong Wan)
|
||||||
|
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
#include "sample4.h"
|
||||||
|
|
||||||
|
// Tests the Increment() method.
|
||||||
|
TEST(Counter, Increment) {
|
||||||
|
Counter c;
|
||||||
|
|
||||||
|
// EXPECT_EQ() evaluates its arguments exactly once, so they
|
||||||
|
// can have side effects.
|
||||||
|
|
||||||
|
EXPECT_EQ(0, c.Increment());
|
||||||
|
EXPECT_EQ(1, c.Increment());
|
||||||
|
EXPECT_EQ(2, c.Increment());
|
||||||
|
}
|
199
external/gtest/samples/sample5_unittest.cc
vendored
Normal file
199
external/gtest/samples/sample5_unittest.cc
vendored
Normal file
|
@ -0,0 +1,199 @@
|
||||||
|
// Copyright 2005, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
// Author: wan@google.com (Zhanyong Wan)
|
||||||
|
|
||||||
|
// This sample teaches how to reuse a test fixture in multiple test
|
||||||
|
// cases by deriving sub-fixtures from it.
|
||||||
|
//
|
||||||
|
// When you define a test fixture, you specify the name of the test
|
||||||
|
// case that will use this fixture. Therefore, a test fixture can
|
||||||
|
// be used by only one test case.
|
||||||
|
//
|
||||||
|
// Sometimes, more than one test cases may want to use the same or
|
||||||
|
// slightly different test fixtures. For example, you may want to
|
||||||
|
// make sure that all tests for a GUI library don't leak important
|
||||||
|
// system resources like fonts and brushes. In Google Test, you do
|
||||||
|
// this by putting the shared logic in a super (as in "super class")
|
||||||
|
// test fixture, and then have each test case use a fixture derived
|
||||||
|
// from this super fixture.
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include "sample3-inl.h"
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
#include "sample1.h"
|
||||||
|
|
||||||
|
// In this sample, we want to ensure that every test finishes within
|
||||||
|
// ~5 seconds. If a test takes longer to run, we consider it a
|
||||||
|
// failure.
|
||||||
|
//
|
||||||
|
// We put the code for timing a test in a test fixture called
|
||||||
|
// "QuickTest". QuickTest is intended to be the super fixture that
|
||||||
|
// other fixtures derive from, therefore there is no test case with
|
||||||
|
// the name "QuickTest". This is OK.
|
||||||
|
//
|
||||||
|
// Later, we will derive multiple test fixtures from QuickTest.
|
||||||
|
class QuickTest : public testing::Test {
|
||||||
|
protected:
|
||||||
|
// Remember that SetUp() is run immediately before a test starts.
|
||||||
|
// This is a good place to record the start time.
|
||||||
|
virtual void SetUp() {
|
||||||
|
start_time_ = time(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TearDown() is invoked immediately after a test finishes. Here we
|
||||||
|
// check if the test was too slow.
|
||||||
|
virtual void TearDown() {
|
||||||
|
// Gets the time when the test finishes
|
||||||
|
const time_t end_time = time(NULL);
|
||||||
|
|
||||||
|
// Asserts that the test took no more than ~5 seconds. Did you
|
||||||
|
// know that you can use assertions in SetUp() and TearDown() as
|
||||||
|
// well?
|
||||||
|
EXPECT_TRUE(end_time - start_time_ <= 5) << "The test took too long.";
|
||||||
|
}
|
||||||
|
|
||||||
|
// The UTC time (in seconds) when the test starts
|
||||||
|
time_t start_time_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// We derive a fixture named IntegerFunctionTest from the QuickTest
|
||||||
|
// fixture. All tests using this fixture will be automatically
|
||||||
|
// required to be quick.
|
||||||
|
class IntegerFunctionTest : public QuickTest {
|
||||||
|
// We don't need any more logic than already in the QuickTest fixture.
|
||||||
|
// Therefore the body is empty.
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Now we can write tests in the IntegerFunctionTest test case.
|
||||||
|
|
||||||
|
// Tests Factorial()
|
||||||
|
TEST_F(IntegerFunctionTest, Factorial) {
|
||||||
|
// Tests factorial of negative numbers.
|
||||||
|
EXPECT_EQ(1, Factorial(-5));
|
||||||
|
EXPECT_EQ(1, Factorial(-1));
|
||||||
|
EXPECT_GT(Factorial(-10), 0);
|
||||||
|
|
||||||
|
// Tests factorial of 0.
|
||||||
|
EXPECT_EQ(1, Factorial(0));
|
||||||
|
|
||||||
|
// Tests factorial of positive numbers.
|
||||||
|
EXPECT_EQ(1, Factorial(1));
|
||||||
|
EXPECT_EQ(2, Factorial(2));
|
||||||
|
EXPECT_EQ(6, Factorial(3));
|
||||||
|
EXPECT_EQ(40320, Factorial(8));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Tests IsPrime()
|
||||||
|
TEST_F(IntegerFunctionTest, IsPrime) {
|
||||||
|
// Tests negative input.
|
||||||
|
EXPECT_FALSE(IsPrime(-1));
|
||||||
|
EXPECT_FALSE(IsPrime(-2));
|
||||||
|
EXPECT_FALSE(IsPrime(INT_MIN));
|
||||||
|
|
||||||
|
// Tests some trivial cases.
|
||||||
|
EXPECT_FALSE(IsPrime(0));
|
||||||
|
EXPECT_FALSE(IsPrime(1));
|
||||||
|
EXPECT_TRUE(IsPrime(2));
|
||||||
|
EXPECT_TRUE(IsPrime(3));
|
||||||
|
|
||||||
|
// Tests positive input.
|
||||||
|
EXPECT_FALSE(IsPrime(4));
|
||||||
|
EXPECT_TRUE(IsPrime(5));
|
||||||
|
EXPECT_FALSE(IsPrime(6));
|
||||||
|
EXPECT_TRUE(IsPrime(23));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// The next test case (named "QueueTest") also needs to be quick, so
|
||||||
|
// we derive another fixture from QuickTest.
|
||||||
|
//
|
||||||
|
// The QueueTest test fixture has some logic and shared objects in
|
||||||
|
// addition to what's in QuickTest already. We define the additional
|
||||||
|
// stuff inside the body of the test fixture, as usual.
|
||||||
|
class QueueTest : public QuickTest {
|
||||||
|
protected:
|
||||||
|
virtual void SetUp() {
|
||||||
|
// First, we need to set up the super fixture (QuickTest).
|
||||||
|
QuickTest::SetUp();
|
||||||
|
|
||||||
|
// Second, some additional setup for this fixture.
|
||||||
|
q1_.Enqueue(1);
|
||||||
|
q2_.Enqueue(2);
|
||||||
|
q2_.Enqueue(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// By default, TearDown() inherits the behavior of
|
||||||
|
// QuickTest::TearDown(). As we have no additional cleaning work
|
||||||
|
// for QueueTest, we omit it here.
|
||||||
|
//
|
||||||
|
// virtual void TearDown() {
|
||||||
|
// QuickTest::TearDown();
|
||||||
|
// }
|
||||||
|
|
||||||
|
Queue<int> q0_;
|
||||||
|
Queue<int> q1_;
|
||||||
|
Queue<int> q2_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Now, let's write tests using the QueueTest fixture.
|
||||||
|
|
||||||
|
// Tests the default constructor.
|
||||||
|
TEST_F(QueueTest, DefaultConstructor) {
|
||||||
|
EXPECT_EQ(0u, q0_.Size());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests Dequeue().
|
||||||
|
TEST_F(QueueTest, Dequeue) {
|
||||||
|
int* n = q0_.Dequeue();
|
||||||
|
EXPECT_TRUE(n == NULL);
|
||||||
|
|
||||||
|
n = q1_.Dequeue();
|
||||||
|
EXPECT_TRUE(n != NULL);
|
||||||
|
EXPECT_EQ(1, *n);
|
||||||
|
EXPECT_EQ(0u, q1_.Size());
|
||||||
|
delete n;
|
||||||
|
|
||||||
|
n = q2_.Dequeue();
|
||||||
|
EXPECT_TRUE(n != NULL);
|
||||||
|
EXPECT_EQ(2, *n);
|
||||||
|
EXPECT_EQ(1u, q2_.Size());
|
||||||
|
delete n;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If necessary, you can derive further test fixtures from a derived
|
||||||
|
// fixture itself. For example, you can derive another fixture from
|
||||||
|
// QueueTest. Google Test imposes no limit on how deep the hierarchy
|
||||||
|
// can be. In practice, however, you probably don't want it to be too
|
||||||
|
// deep as to be confusing.
|
224
external/gtest/samples/sample6_unittest.cc
vendored
Normal file
224
external/gtest/samples/sample6_unittest.cc
vendored
Normal file
|
@ -0,0 +1,224 @@
|
||||||
|
// Copyright 2008 Google Inc.
|
||||||
|
// All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
// Author: wan@google.com (Zhanyong Wan)
|
||||||
|
|
||||||
|
// This sample shows how to test common properties of multiple
|
||||||
|
// implementations of the same interface (aka interface tests).
|
||||||
|
|
||||||
|
// The interface and its implementations are in this header.
|
||||||
|
#include "prime_tables.h"
|
||||||
|
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
|
// First, we define some factory functions for creating instances of
|
||||||
|
// the implementations. You may be able to skip this step if all your
|
||||||
|
// implementations can be constructed the same way.
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
PrimeTable* CreatePrimeTable();
|
||||||
|
|
||||||
|
template <>
|
||||||
|
PrimeTable* CreatePrimeTable<OnTheFlyPrimeTable>() {
|
||||||
|
return new OnTheFlyPrimeTable;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
PrimeTable* CreatePrimeTable<PreCalculatedPrimeTable>() {
|
||||||
|
return new PreCalculatedPrimeTable(10000);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Then we define a test fixture class template.
|
||||||
|
template <class T>
|
||||||
|
class PrimeTableTest : public testing::Test {
|
||||||
|
protected:
|
||||||
|
// The ctor calls the factory function to create a prime table
|
||||||
|
// implemented by T.
|
||||||
|
PrimeTableTest() : table_(CreatePrimeTable<T>()) {}
|
||||||
|
|
||||||
|
virtual ~PrimeTableTest() { delete table_; }
|
||||||
|
|
||||||
|
// Note that we test an implementation via the base interface
|
||||||
|
// instead of the actual implementation class. This is important
|
||||||
|
// for keeping the tests close to the real world scenario, where the
|
||||||
|
// implementation is invoked via the base interface. It avoids
|
||||||
|
// got-yas where the implementation class has a method that shadows
|
||||||
|
// a method with the same name (but slightly different argument
|
||||||
|
// types) in the base interface, for example.
|
||||||
|
PrimeTable* const table_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#if GTEST_HAS_TYPED_TEST
|
||||||
|
|
||||||
|
using testing::Types;
|
||||||
|
|
||||||
|
// Google Test offers two ways for reusing tests for different types.
|
||||||
|
// The first is called "typed tests". You should use it if you
|
||||||
|
// already know *all* the types you are gonna exercise when you write
|
||||||
|
// the tests.
|
||||||
|
|
||||||
|
// To write a typed test case, first use
|
||||||
|
//
|
||||||
|
// TYPED_TEST_CASE(TestCaseName, TypeList);
|
||||||
|
//
|
||||||
|
// to declare it and specify the type parameters. As with TEST_F,
|
||||||
|
// TestCaseName must match the test fixture name.
|
||||||
|
|
||||||
|
// The list of types we want to test.
|
||||||
|
typedef Types<OnTheFlyPrimeTable, PreCalculatedPrimeTable> Implementations;
|
||||||
|
|
||||||
|
TYPED_TEST_CASE(PrimeTableTest, Implementations);
|
||||||
|
|
||||||
|
// Then use TYPED_TEST(TestCaseName, TestName) to define a typed test,
|
||||||
|
// similar to TEST_F.
|
||||||
|
TYPED_TEST(PrimeTableTest, ReturnsFalseForNonPrimes) {
|
||||||
|
// Inside the test body, you can refer to the type parameter by
|
||||||
|
// TypeParam, and refer to the fixture class by TestFixture. We
|
||||||
|
// don't need them in this example.
|
||||||
|
|
||||||
|
// Since we are in the template world, C++ requires explicitly
|
||||||
|
// writing 'this->' when referring to members of the fixture class.
|
||||||
|
// This is something you have to learn to live with.
|
||||||
|
EXPECT_FALSE(this->table_->IsPrime(-5));
|
||||||
|
EXPECT_FALSE(this->table_->IsPrime(0));
|
||||||
|
EXPECT_FALSE(this->table_->IsPrime(1));
|
||||||
|
EXPECT_FALSE(this->table_->IsPrime(4));
|
||||||
|
EXPECT_FALSE(this->table_->IsPrime(6));
|
||||||
|
EXPECT_FALSE(this->table_->IsPrime(100));
|
||||||
|
}
|
||||||
|
|
||||||
|
TYPED_TEST(PrimeTableTest, ReturnsTrueForPrimes) {
|
||||||
|
EXPECT_TRUE(this->table_->IsPrime(2));
|
||||||
|
EXPECT_TRUE(this->table_->IsPrime(3));
|
||||||
|
EXPECT_TRUE(this->table_->IsPrime(5));
|
||||||
|
EXPECT_TRUE(this->table_->IsPrime(7));
|
||||||
|
EXPECT_TRUE(this->table_->IsPrime(11));
|
||||||
|
EXPECT_TRUE(this->table_->IsPrime(131));
|
||||||
|
}
|
||||||
|
|
||||||
|
TYPED_TEST(PrimeTableTest, CanGetNextPrime) {
|
||||||
|
EXPECT_EQ(2, this->table_->GetNextPrime(0));
|
||||||
|
EXPECT_EQ(3, this->table_->GetNextPrime(2));
|
||||||
|
EXPECT_EQ(5, this->table_->GetNextPrime(3));
|
||||||
|
EXPECT_EQ(7, this->table_->GetNextPrime(5));
|
||||||
|
EXPECT_EQ(11, this->table_->GetNextPrime(7));
|
||||||
|
EXPECT_EQ(131, this->table_->GetNextPrime(128));
|
||||||
|
}
|
||||||
|
|
||||||
|
// That's it! Google Test will repeat each TYPED_TEST for each type
|
||||||
|
// in the type list specified in TYPED_TEST_CASE. Sit back and be
|
||||||
|
// happy that you don't have to define them multiple times.
|
||||||
|
|
||||||
|
#endif // GTEST_HAS_TYPED_TEST
|
||||||
|
|
||||||
|
#if GTEST_HAS_TYPED_TEST_P
|
||||||
|
|
||||||
|
using testing::Types;
|
||||||
|
|
||||||
|
// Sometimes, however, you don't yet know all the types that you want
|
||||||
|
// to test when you write the tests. For example, if you are the
|
||||||
|
// author of an interface and expect other people to implement it, you
|
||||||
|
// might want to write a set of tests to make sure each implementation
|
||||||
|
// conforms to some basic requirements, but you don't know what
|
||||||
|
// implementations will be written in the future.
|
||||||
|
//
|
||||||
|
// How can you write the tests without committing to the type
|
||||||
|
// parameters? That's what "type-parameterized tests" can do for you.
|
||||||
|
// It is a bit more involved than typed tests, but in return you get a
|
||||||
|
// test pattern that can be reused in many contexts, which is a big
|
||||||
|
// win. Here's how you do it:
|
||||||
|
|
||||||
|
// First, define a test fixture class template. Here we just reuse
|
||||||
|
// the PrimeTableTest fixture defined earlier:
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
class PrimeTableTest2 : public PrimeTableTest<T> {
|
||||||
|
};
|
||||||
|
|
||||||
|
// Then, declare the test case. The argument is the name of the test
|
||||||
|
// fixture, and also the name of the test case (as usual). The _P
|
||||||
|
// suffix is for "parameterized" or "pattern".
|
||||||
|
TYPED_TEST_CASE_P(PrimeTableTest2);
|
||||||
|
|
||||||
|
// Next, use TYPED_TEST_P(TestCaseName, TestName) to define a test,
|
||||||
|
// similar to what you do with TEST_F.
|
||||||
|
TYPED_TEST_P(PrimeTableTest2, ReturnsFalseForNonPrimes) {
|
||||||
|
EXPECT_FALSE(this->table_->IsPrime(-5));
|
||||||
|
EXPECT_FALSE(this->table_->IsPrime(0));
|
||||||
|
EXPECT_FALSE(this->table_->IsPrime(1));
|
||||||
|
EXPECT_FALSE(this->table_->IsPrime(4));
|
||||||
|
EXPECT_FALSE(this->table_->IsPrime(6));
|
||||||
|
EXPECT_FALSE(this->table_->IsPrime(100));
|
||||||
|
}
|
||||||
|
|
||||||
|
TYPED_TEST_P(PrimeTableTest2, ReturnsTrueForPrimes) {
|
||||||
|
EXPECT_TRUE(this->table_->IsPrime(2));
|
||||||
|
EXPECT_TRUE(this->table_->IsPrime(3));
|
||||||
|
EXPECT_TRUE(this->table_->IsPrime(5));
|
||||||
|
EXPECT_TRUE(this->table_->IsPrime(7));
|
||||||
|
EXPECT_TRUE(this->table_->IsPrime(11));
|
||||||
|
EXPECT_TRUE(this->table_->IsPrime(131));
|
||||||
|
}
|
||||||
|
|
||||||
|
TYPED_TEST_P(PrimeTableTest2, CanGetNextPrime) {
|
||||||
|
EXPECT_EQ(2, this->table_->GetNextPrime(0));
|
||||||
|
EXPECT_EQ(3, this->table_->GetNextPrime(2));
|
||||||
|
EXPECT_EQ(5, this->table_->GetNextPrime(3));
|
||||||
|
EXPECT_EQ(7, this->table_->GetNextPrime(5));
|
||||||
|
EXPECT_EQ(11, this->table_->GetNextPrime(7));
|
||||||
|
EXPECT_EQ(131, this->table_->GetNextPrime(128));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type-parameterized tests involve one extra step: you have to
|
||||||
|
// enumerate the tests you defined:
|
||||||
|
REGISTER_TYPED_TEST_CASE_P(
|
||||||
|
PrimeTableTest2, // The first argument is the test case name.
|
||||||
|
// The rest of the arguments are the test names.
|
||||||
|
ReturnsFalseForNonPrimes, ReturnsTrueForPrimes, CanGetNextPrime);
|
||||||
|
|
||||||
|
// At this point the test pattern is done. However, you don't have
|
||||||
|
// any real test yet as you haven't said which types you want to run
|
||||||
|
// the tests with.
|
||||||
|
|
||||||
|
// To turn the abstract test pattern into real tests, you instantiate
|
||||||
|
// it with a list of types. Usually the test pattern will be defined
|
||||||
|
// in a .h file, and anyone can #include and instantiate it. You can
|
||||||
|
// even instantiate it more than once in the same program. To tell
|
||||||
|
// different instances apart, you give each of them a name, which will
|
||||||
|
// become part of the test case name and can be used in test filters.
|
||||||
|
|
||||||
|
// The list of types we want to test. Note that it doesn't have to be
|
||||||
|
// defined at the time we write the TYPED_TEST_P()s.
|
||||||
|
typedef Types<OnTheFlyPrimeTable, PreCalculatedPrimeTable>
|
||||||
|
PrimeTableImplementations;
|
||||||
|
INSTANTIATE_TYPED_TEST_CASE_P(OnTheFlyAndPreCalculated, // Instance name
|
||||||
|
PrimeTableTest2, // Test case name
|
||||||
|
PrimeTableImplementations); // Type list
|
||||||
|
|
||||||
|
#endif // GTEST_HAS_TYPED_TEST_P
|
130
external/gtest/samples/sample7_unittest.cc
vendored
Normal file
130
external/gtest/samples/sample7_unittest.cc
vendored
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
// Copyright 2008 Google Inc.
|
||||||
|
// All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
// Author: vladl@google.com (Vlad Losev)
|
||||||
|
|
||||||
|
// This sample shows how to test common properties of multiple
|
||||||
|
// implementations of an interface (aka interface tests) using
|
||||||
|
// value-parameterized tests. Each test in the test case has
|
||||||
|
// a parameter that is an interface pointer to an implementation
|
||||||
|
// tested.
|
||||||
|
|
||||||
|
// The interface and its implementations are in this header.
|
||||||
|
#include "prime_tables.h"
|
||||||
|
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
|
#if GTEST_HAS_PARAM_TEST
|
||||||
|
|
||||||
|
using ::testing::TestWithParam;
|
||||||
|
using ::testing::Values;
|
||||||
|
|
||||||
|
// As a general rule, to prevent a test from affecting the tests that come
|
||||||
|
// after it, you should create and destroy the tested objects for each test
|
||||||
|
// instead of reusing them. In this sample we will define a simple factory
|
||||||
|
// function for PrimeTable objects. We will instantiate objects in test's
|
||||||
|
// SetUp() method and delete them in TearDown() method.
|
||||||
|
typedef PrimeTable* CreatePrimeTableFunc();
|
||||||
|
|
||||||
|
PrimeTable* CreateOnTheFlyPrimeTable() {
|
||||||
|
return new OnTheFlyPrimeTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <size_t max_precalculated>
|
||||||
|
PrimeTable* CreatePreCalculatedPrimeTable() {
|
||||||
|
return new PreCalculatedPrimeTable(max_precalculated);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inside the test body, fixture constructor, SetUp(), and TearDown() you
|
||||||
|
// can refer to the test parameter by GetParam(). In this case, the test
|
||||||
|
// parameter is a factory function which we call in fixture's SetUp() to
|
||||||
|
// create and store an instance of PrimeTable.
|
||||||
|
class PrimeTableTest : public TestWithParam<CreatePrimeTableFunc*> {
|
||||||
|
public:
|
||||||
|
virtual ~PrimeTableTest() { delete table_; }
|
||||||
|
virtual void SetUp() { table_ = (*GetParam())(); }
|
||||||
|
virtual void TearDown() {
|
||||||
|
delete table_;
|
||||||
|
table_ = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
PrimeTable* table_;
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST_P(PrimeTableTest, ReturnsFalseForNonPrimes) {
|
||||||
|
EXPECT_FALSE(table_->IsPrime(-5));
|
||||||
|
EXPECT_FALSE(table_->IsPrime(0));
|
||||||
|
EXPECT_FALSE(table_->IsPrime(1));
|
||||||
|
EXPECT_FALSE(table_->IsPrime(4));
|
||||||
|
EXPECT_FALSE(table_->IsPrime(6));
|
||||||
|
EXPECT_FALSE(table_->IsPrime(100));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_P(PrimeTableTest, ReturnsTrueForPrimes) {
|
||||||
|
EXPECT_TRUE(table_->IsPrime(2));
|
||||||
|
EXPECT_TRUE(table_->IsPrime(3));
|
||||||
|
EXPECT_TRUE(table_->IsPrime(5));
|
||||||
|
EXPECT_TRUE(table_->IsPrime(7));
|
||||||
|
EXPECT_TRUE(table_->IsPrime(11));
|
||||||
|
EXPECT_TRUE(table_->IsPrime(131));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_P(PrimeTableTest, CanGetNextPrime) {
|
||||||
|
EXPECT_EQ(2, table_->GetNextPrime(0));
|
||||||
|
EXPECT_EQ(3, table_->GetNextPrime(2));
|
||||||
|
EXPECT_EQ(5, table_->GetNextPrime(3));
|
||||||
|
EXPECT_EQ(7, table_->GetNextPrime(5));
|
||||||
|
EXPECT_EQ(11, table_->GetNextPrime(7));
|
||||||
|
EXPECT_EQ(131, table_->GetNextPrime(128));
|
||||||
|
}
|
||||||
|
|
||||||
|
// In order to run value-parameterized tests, you need to instantiate them,
|
||||||
|
// or bind them to a list of values which will be used as test parameters.
|
||||||
|
// You can instantiate them in a different translation module, or even
|
||||||
|
// instantiate them several times.
|
||||||
|
//
|
||||||
|
// Here, we instantiate our tests with a list of two PrimeTable object
|
||||||
|
// factory functions:
|
||||||
|
INSTANTIATE_TEST_CASE_P(
|
||||||
|
OnTheFlyAndPreCalculated,
|
||||||
|
PrimeTableTest,
|
||||||
|
Values(&CreateOnTheFlyPrimeTable, &CreatePreCalculatedPrimeTable<1000>));
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
// Google Test may not support value-parameterized tests with some
|
||||||
|
// compilers. If we use conditional compilation to compile out all
|
||||||
|
// code referring to the gtest_main library, MSVC linker will not link
|
||||||
|
// that library at all and consequently complain about missing entry
|
||||||
|
// point defined in that library (fatal error LNK1561: entry point
|
||||||
|
// must be defined). This dummy test keeps gtest_main linked in.
|
||||||
|
TEST(DummyTest, ValueParameterizedTestsAreNotSupportedOnThisPlatform) {}
|
||||||
|
|
||||||
|
#endif // GTEST_HAS_PARAM_TEST
|
173
external/gtest/samples/sample8_unittest.cc
vendored
Normal file
173
external/gtest/samples/sample8_unittest.cc
vendored
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
// Copyright 2008 Google Inc.
|
||||||
|
// All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
// Author: vladl@google.com (Vlad Losev)
|
||||||
|
|
||||||
|
// This sample shows how to test code relying on some global flag variables.
|
||||||
|
// Combine() helps with generating all possible combinations of such flags,
|
||||||
|
// and each test is given one combination as a parameter.
|
||||||
|
|
||||||
|
// Use class definitions to test from this header.
|
||||||
|
#include "prime_tables.h"
|
||||||
|
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
|
#if GTEST_HAS_COMBINE
|
||||||
|
|
||||||
|
// Suppose we want to introduce a new, improved implementation of PrimeTable
|
||||||
|
// which combines speed of PrecalcPrimeTable and versatility of
|
||||||
|
// OnTheFlyPrimeTable (see prime_tables.h). Inside it instantiates both
|
||||||
|
// PrecalcPrimeTable and OnTheFlyPrimeTable and uses the one that is more
|
||||||
|
// appropriate under the circumstances. But in low memory conditions, it can be
|
||||||
|
// told to instantiate without PrecalcPrimeTable instance at all and use only
|
||||||
|
// OnTheFlyPrimeTable.
|
||||||
|
class HybridPrimeTable : public PrimeTable {
|
||||||
|
public:
|
||||||
|
HybridPrimeTable(bool force_on_the_fly, int max_precalculated)
|
||||||
|
: on_the_fly_impl_(new OnTheFlyPrimeTable),
|
||||||
|
precalc_impl_(force_on_the_fly ? NULL :
|
||||||
|
new PreCalculatedPrimeTable(max_precalculated)),
|
||||||
|
max_precalculated_(max_precalculated) {}
|
||||||
|
virtual ~HybridPrimeTable() {
|
||||||
|
delete on_the_fly_impl_;
|
||||||
|
delete precalc_impl_;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool IsPrime(int n) const {
|
||||||
|
if (precalc_impl_ != NULL && n < max_precalculated_)
|
||||||
|
return precalc_impl_->IsPrime(n);
|
||||||
|
else
|
||||||
|
return on_the_fly_impl_->IsPrime(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual int GetNextPrime(int p) const {
|
||||||
|
int next_prime = -1;
|
||||||
|
if (precalc_impl_ != NULL && p < max_precalculated_)
|
||||||
|
next_prime = precalc_impl_->GetNextPrime(p);
|
||||||
|
|
||||||
|
return next_prime != -1 ? next_prime : on_the_fly_impl_->GetNextPrime(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
OnTheFlyPrimeTable* on_the_fly_impl_;
|
||||||
|
PreCalculatedPrimeTable* precalc_impl_;
|
||||||
|
int max_precalculated_;
|
||||||
|
};
|
||||||
|
|
||||||
|
using ::testing::TestWithParam;
|
||||||
|
using ::testing::Bool;
|
||||||
|
using ::testing::Values;
|
||||||
|
using ::testing::Combine;
|
||||||
|
|
||||||
|
// To test all code paths for HybridPrimeTable we must test it with numbers
|
||||||
|
// both within and outside PreCalculatedPrimeTable's capacity and also with
|
||||||
|
// PreCalculatedPrimeTable disabled. We do this by defining fixture which will
|
||||||
|
// accept different combinations of parameters for instantiating a
|
||||||
|
// HybridPrimeTable instance.
|
||||||
|
class PrimeTableTest : public TestWithParam< ::std::tr1::tuple<bool, int> > {
|
||||||
|
protected:
|
||||||
|
virtual void SetUp() {
|
||||||
|
// This can be written as
|
||||||
|
//
|
||||||
|
// bool force_on_the_fly;
|
||||||
|
// int max_precalculated;
|
||||||
|
// tie(force_on_the_fly, max_precalculated) = GetParam();
|
||||||
|
//
|
||||||
|
// once the Google C++ Style Guide allows use of ::std::tr1::tie.
|
||||||
|
//
|
||||||
|
bool force_on_the_fly = ::std::tr1::get<0>(GetParam());
|
||||||
|
int max_precalculated = ::std::tr1::get<1>(GetParam());
|
||||||
|
table_ = new HybridPrimeTable(force_on_the_fly, max_precalculated);
|
||||||
|
}
|
||||||
|
virtual void TearDown() {
|
||||||
|
delete table_;
|
||||||
|
table_ = NULL;
|
||||||
|
}
|
||||||
|
HybridPrimeTable* table_;
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST_P(PrimeTableTest, ReturnsFalseForNonPrimes) {
|
||||||
|
// Inside the test body, you can refer to the test parameter by GetParam().
|
||||||
|
// In this case, the test parameter is a PrimeTable interface pointer which
|
||||||
|
// we can use directly.
|
||||||
|
// Please note that you can also save it in the fixture's SetUp() method
|
||||||
|
// or constructor and use saved copy in the tests.
|
||||||
|
|
||||||
|
EXPECT_FALSE(table_->IsPrime(-5));
|
||||||
|
EXPECT_FALSE(table_->IsPrime(0));
|
||||||
|
EXPECT_FALSE(table_->IsPrime(1));
|
||||||
|
EXPECT_FALSE(table_->IsPrime(4));
|
||||||
|
EXPECT_FALSE(table_->IsPrime(6));
|
||||||
|
EXPECT_FALSE(table_->IsPrime(100));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_P(PrimeTableTest, ReturnsTrueForPrimes) {
|
||||||
|
EXPECT_TRUE(table_->IsPrime(2));
|
||||||
|
EXPECT_TRUE(table_->IsPrime(3));
|
||||||
|
EXPECT_TRUE(table_->IsPrime(5));
|
||||||
|
EXPECT_TRUE(table_->IsPrime(7));
|
||||||
|
EXPECT_TRUE(table_->IsPrime(11));
|
||||||
|
EXPECT_TRUE(table_->IsPrime(131));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_P(PrimeTableTest, CanGetNextPrime) {
|
||||||
|
EXPECT_EQ(2, table_->GetNextPrime(0));
|
||||||
|
EXPECT_EQ(3, table_->GetNextPrime(2));
|
||||||
|
EXPECT_EQ(5, table_->GetNextPrime(3));
|
||||||
|
EXPECT_EQ(7, table_->GetNextPrime(5));
|
||||||
|
EXPECT_EQ(11, table_->GetNextPrime(7));
|
||||||
|
EXPECT_EQ(131, table_->GetNextPrime(128));
|
||||||
|
}
|
||||||
|
|
||||||
|
// In order to run value-parameterized tests, you need to instantiate them,
|
||||||
|
// or bind them to a list of values which will be used as test parameters.
|
||||||
|
// You can instantiate them in a different translation module, or even
|
||||||
|
// instantiate them several times.
|
||||||
|
//
|
||||||
|
// Here, we instantiate our tests with a list of parameters. We must combine
|
||||||
|
// all variations of the boolean flag suppressing PrecalcPrimeTable and some
|
||||||
|
// meaningful values for tests. We choose a small value (1), and a value that
|
||||||
|
// will put some of the tested numbers beyond the capability of the
|
||||||
|
// PrecalcPrimeTable instance and some inside it (10). Combine will produce all
|
||||||
|
// possible combinations.
|
||||||
|
INSTANTIATE_TEST_CASE_P(MeaningfulTestParameters,
|
||||||
|
PrimeTableTest,
|
||||||
|
Combine(Bool(), Values(1, 10)));
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
// Google Test may not support Combine() with some compilers. If we
|
||||||
|
// use conditional compilation to compile out all code referring to
|
||||||
|
// the gtest_main library, MSVC linker will not link that library at
|
||||||
|
// all and consequently complain about missing entry point defined in
|
||||||
|
// that library (fatal error LNK1561: entry point must be
|
||||||
|
// defined). This dummy test keeps gtest_main linked in.
|
||||||
|
TEST(DummyTest, CombineIsNotSupportedOnThisPlatform) {}
|
||||||
|
|
||||||
|
#endif // GTEST_HAS_COMBINE
|
160
external/gtest/samples/sample9_unittest.cc
vendored
Normal file
160
external/gtest/samples/sample9_unittest.cc
vendored
Normal file
|
@ -0,0 +1,160 @@
|
||||||
|
// Copyright 2009 Google Inc. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
// Author: vladl@google.com (Vlad Losev)
|
||||||
|
|
||||||
|
// This sample shows how to use Google Test listener API to implement
|
||||||
|
// an alternative console output and how to use the UnitTest reflection API
|
||||||
|
// to enumerate test cases and tests and to inspect their results.
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
|
using ::testing::EmptyTestEventListener;
|
||||||
|
using ::testing::InitGoogleTest;
|
||||||
|
using ::testing::Test;
|
||||||
|
using ::testing::TestCase;
|
||||||
|
using ::testing::TestEventListeners;
|
||||||
|
using ::testing::TestInfo;
|
||||||
|
using ::testing::TestPartResult;
|
||||||
|
using ::testing::UnitTest;
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
// Provides alternative output mode which produces minimal amount of
|
||||||
|
// information about tests.
|
||||||
|
class TersePrinter : public EmptyTestEventListener {
|
||||||
|
private:
|
||||||
|
// Called before any test activity starts.
|
||||||
|
virtual void OnTestProgramStart(const UnitTest& /* unit_test */) {}
|
||||||
|
|
||||||
|
// Called after all test activities have ended.
|
||||||
|
virtual void OnTestProgramEnd(const UnitTest& unit_test) {
|
||||||
|
fprintf(stdout, "TEST %s\n", unit_test.Passed() ? "PASSED" : "FAILED");
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called before a test starts.
|
||||||
|
virtual void OnTestStart(const TestInfo& test_info) {
|
||||||
|
fprintf(stdout,
|
||||||
|
"*** Test %s.%s starting.\n",
|
||||||
|
test_info.test_case_name(),
|
||||||
|
test_info.name());
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called after a failed assertion or a SUCCEED() invocation.
|
||||||
|
virtual void OnTestPartResult(const TestPartResult& test_part_result) {
|
||||||
|
fprintf(stdout,
|
||||||
|
"%s in %s:%d\n%s\n",
|
||||||
|
test_part_result.failed() ? "*** Failure" : "Success",
|
||||||
|
test_part_result.file_name(),
|
||||||
|
test_part_result.line_number(),
|
||||||
|
test_part_result.summary());
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called after a test ends.
|
||||||
|
virtual void OnTestEnd(const TestInfo& test_info) {
|
||||||
|
fprintf(stdout,
|
||||||
|
"*** Test %s.%s ending.\n",
|
||||||
|
test_info.test_case_name(),
|
||||||
|
test_info.name());
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
}; // class TersePrinter
|
||||||
|
|
||||||
|
TEST(CustomOutputTest, PrintsMessage) {
|
||||||
|
printf("Printing something from the test body...\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(CustomOutputTest, Succeeds) {
|
||||||
|
SUCCEED() << "SUCCEED() has been invoked from here";
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(CustomOutputTest, Fails) {
|
||||||
|
EXPECT_EQ(1, 2)
|
||||||
|
<< "This test fails in order to demonstrate alternative failure messages";
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
InitGoogleTest(&argc, argv);
|
||||||
|
|
||||||
|
bool terse_output = false;
|
||||||
|
if (argc > 1 && strcmp(argv[1], "--terse_output") == 0 )
|
||||||
|
terse_output = true;
|
||||||
|
else
|
||||||
|
printf("%s\n", "Run this program with --terse_output to change the way "
|
||||||
|
"it prints its output.");
|
||||||
|
|
||||||
|
UnitTest& unit_test = *UnitTest::GetInstance();
|
||||||
|
|
||||||
|
// If we are given the --terse_output command line flag, suppresses the
|
||||||
|
// standard output and attaches own result printer.
|
||||||
|
if (terse_output) {
|
||||||
|
TestEventListeners& listeners = unit_test.listeners();
|
||||||
|
|
||||||
|
// Removes the default console output listener from the list so it will
|
||||||
|
// not receive events from Google Test and won't print any output. Since
|
||||||
|
// this operation transfers ownership of the listener to the caller we
|
||||||
|
// have to delete it as well.
|
||||||
|
delete listeners.Release(listeners.default_result_printer());
|
||||||
|
|
||||||
|
// Adds the custom output listener to the list. It will now receive
|
||||||
|
// events from Google Test and print the alternative output. We don't
|
||||||
|
// have to worry about deleting it since Google Test assumes ownership
|
||||||
|
// over it after adding it to the list.
|
||||||
|
listeners.Append(new TersePrinter);
|
||||||
|
}
|
||||||
|
int ret_val = RUN_ALL_TESTS();
|
||||||
|
|
||||||
|
// This is an example of using the UnitTest reflection API to inspect test
|
||||||
|
// results. Here we discount failures from the tests we expected to fail.
|
||||||
|
int unexpectedly_failed_tests = 0;
|
||||||
|
for (int i = 0; i < unit_test.total_test_case_count(); ++i) {
|
||||||
|
const TestCase& test_case = *unit_test.GetTestCase(i);
|
||||||
|
for (int j = 0; j < test_case.total_test_count(); ++j) {
|
||||||
|
const TestInfo& test_info = *test_case.GetTestInfo(j);
|
||||||
|
// Counts failed tests that were not meant to fail (those without
|
||||||
|
// 'Fails' in the name).
|
||||||
|
if (test_info.result()->Failed() &&
|
||||||
|
strcmp(test_info.name(), "Fails") != 0) {
|
||||||
|
unexpectedly_failed_tests++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test that were meant to fail should not affect the test program outcome.
|
||||||
|
if (unexpectedly_failed_tests == 0)
|
||||||
|
ret_val = 0;
|
||||||
|
|
||||||
|
return ret_val;
|
||||||
|
}
|
250
external/gtest/scripts/fuse_gtest_files.py
vendored
Normal file
250
external/gtest/scripts/fuse_gtest_files.py
vendored
Normal file
|
@ -0,0 +1,250 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
#
|
||||||
|
# Copyright 2009, Google Inc.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are
|
||||||
|
# met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above
|
||||||
|
# copyright notice, this list of conditions and the following disclaimer
|
||||||
|
# in the documentation and/or other materials provided with the
|
||||||
|
# distribution.
|
||||||
|
# * Neither the name of Google Inc. nor the names of its
|
||||||
|
# contributors may be used to endorse or promote products derived from
|
||||||
|
# this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
"""fuse_gtest_files.py v0.2.0
|
||||||
|
Fuses Google Test source code into a .h file and a .cc file.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
fuse_gtest_files.py [GTEST_ROOT_DIR] OUTPUT_DIR
|
||||||
|
|
||||||
|
Scans GTEST_ROOT_DIR for Google Test source code, and generates
|
||||||
|
two files: OUTPUT_DIR/gtest/gtest.h and OUTPUT_DIR/gtest/gtest-all.cc.
|
||||||
|
Then you can build your tests by adding OUTPUT_DIR to the include
|
||||||
|
search path and linking with OUTPUT_DIR/gtest/gtest-all.cc. These
|
||||||
|
two files contain everything you need to use Google Test. Hence
|
||||||
|
you can "install" Google Test by copying them to wherever you want.
|
||||||
|
|
||||||
|
GTEST_ROOT_DIR can be omitted and defaults to the parent
|
||||||
|
directory of the directory holding this script.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
./fuse_gtest_files.py fused_gtest
|
||||||
|
./fuse_gtest_files.py path/to/unpacked/gtest fused_gtest
|
||||||
|
|
||||||
|
This tool is experimental. In particular, it assumes that there is no
|
||||||
|
conditional inclusion of Google Test headers. Please report any
|
||||||
|
problems to googletestframework@googlegroups.com. You can read
|
||||||
|
http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide for
|
||||||
|
more information.
|
||||||
|
"""
|
||||||
|
|
||||||
|
__author__ = 'wan@google.com (Zhanyong Wan)'
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sets
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# We assume that this file is in the scripts/ directory in the Google
|
||||||
|
# Test root directory.
|
||||||
|
DEFAULT_GTEST_ROOT_DIR = os.path.join(os.path.dirname(__file__), '..')
|
||||||
|
|
||||||
|
# Regex for matching '#include "gtest/..."'.
|
||||||
|
INCLUDE_GTEST_FILE_REGEX = re.compile(r'^\s*#\s*include\s*"(gtest/.+)"')
|
||||||
|
|
||||||
|
# Regex for matching '#include "src/..."'.
|
||||||
|
INCLUDE_SRC_FILE_REGEX = re.compile(r'^\s*#\s*include\s*"(src/.+)"')
|
||||||
|
|
||||||
|
# Where to find the source seed files.
|
||||||
|
GTEST_H_SEED = 'include/gtest/gtest.h'
|
||||||
|
GTEST_SPI_H_SEED = 'include/gtest/gtest-spi.h'
|
||||||
|
GTEST_ALL_CC_SEED = 'src/gtest-all.cc'
|
||||||
|
|
||||||
|
# Where to put the generated files.
|
||||||
|
GTEST_H_OUTPUT = 'gtest/gtest.h'
|
||||||
|
GTEST_ALL_CC_OUTPUT = 'gtest/gtest-all.cc'
|
||||||
|
|
||||||
|
|
||||||
|
def VerifyFileExists(directory, relative_path):
|
||||||
|
"""Verifies that the given file exists; aborts on failure.
|
||||||
|
|
||||||
|
relative_path is the file path relative to the given directory.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not os.path.isfile(os.path.join(directory, relative_path)):
|
||||||
|
print 'ERROR: Cannot find %s in directory %s.' % (relative_path,
|
||||||
|
directory)
|
||||||
|
print ('Please either specify a valid project root directory '
|
||||||
|
'or omit it on the command line.')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def ValidateGTestRootDir(gtest_root):
|
||||||
|
"""Makes sure gtest_root points to a valid gtest root directory.
|
||||||
|
|
||||||
|
The function aborts the program on failure.
|
||||||
|
"""
|
||||||
|
|
||||||
|
VerifyFileExists(gtest_root, GTEST_H_SEED)
|
||||||
|
VerifyFileExists(gtest_root, GTEST_ALL_CC_SEED)
|
||||||
|
|
||||||
|
|
||||||
|
def VerifyOutputFile(output_dir, relative_path):
|
||||||
|
"""Verifies that the given output file path is valid.
|
||||||
|
|
||||||
|
relative_path is relative to the output_dir directory.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Makes sure the output file either doesn't exist or can be overwritten.
|
||||||
|
output_file = os.path.join(output_dir, relative_path)
|
||||||
|
if os.path.exists(output_file):
|
||||||
|
# TODO(wan@google.com): The following user-interaction doesn't
|
||||||
|
# work with automated processes. We should provide a way for the
|
||||||
|
# Makefile to force overwriting the files.
|
||||||
|
print ('%s already exists in directory %s - overwrite it? (y/N) ' %
|
||||||
|
(relative_path, output_dir))
|
||||||
|
answer = sys.stdin.readline().strip()
|
||||||
|
if answer not in ['y', 'Y']:
|
||||||
|
print 'ABORTED.'
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Makes sure the directory holding the output file exists; creates
|
||||||
|
# it and all its ancestors if necessary.
|
||||||
|
parent_directory = os.path.dirname(output_file)
|
||||||
|
if not os.path.isdir(parent_directory):
|
||||||
|
os.makedirs(parent_directory)
|
||||||
|
|
||||||
|
|
||||||
|
def ValidateOutputDir(output_dir):
|
||||||
|
"""Makes sure output_dir points to a valid output directory.
|
||||||
|
|
||||||
|
The function aborts the program on failure.
|
||||||
|
"""
|
||||||
|
|
||||||
|
VerifyOutputFile(output_dir, GTEST_H_OUTPUT)
|
||||||
|
VerifyOutputFile(output_dir, GTEST_ALL_CC_OUTPUT)
|
||||||
|
|
||||||
|
|
||||||
|
def FuseGTestH(gtest_root, output_dir):
|
||||||
|
"""Scans folder gtest_root to generate gtest/gtest.h in output_dir."""
|
||||||
|
|
||||||
|
output_file = file(os.path.join(output_dir, GTEST_H_OUTPUT), 'w')
|
||||||
|
processed_files = sets.Set() # Holds all gtest headers we've processed.
|
||||||
|
|
||||||
|
def ProcessFile(gtest_header_path):
|
||||||
|
"""Processes the given gtest header file."""
|
||||||
|
|
||||||
|
# We don't process the same header twice.
|
||||||
|
if gtest_header_path in processed_files:
|
||||||
|
return
|
||||||
|
|
||||||
|
processed_files.add(gtest_header_path)
|
||||||
|
|
||||||
|
# Reads each line in the given gtest header.
|
||||||
|
for line in file(os.path.join(gtest_root, gtest_header_path), 'r'):
|
||||||
|
m = INCLUDE_GTEST_FILE_REGEX.match(line)
|
||||||
|
if m:
|
||||||
|
# It's '#include "gtest/..."' - let's process it recursively.
|
||||||
|
ProcessFile('include/' + m.group(1))
|
||||||
|
else:
|
||||||
|
# Otherwise we copy the line unchanged to the output file.
|
||||||
|
output_file.write(line)
|
||||||
|
|
||||||
|
ProcessFile(GTEST_H_SEED)
|
||||||
|
output_file.close()
|
||||||
|
|
||||||
|
|
||||||
|
def FuseGTestAllCcToFile(gtest_root, output_file):
|
||||||
|
"""Scans folder gtest_root to generate gtest/gtest-all.cc in output_file."""
|
||||||
|
|
||||||
|
processed_files = sets.Set()
|
||||||
|
|
||||||
|
def ProcessFile(gtest_source_file):
|
||||||
|
"""Processes the given gtest source file."""
|
||||||
|
|
||||||
|
# We don't process the same #included file twice.
|
||||||
|
if gtest_source_file in processed_files:
|
||||||
|
return
|
||||||
|
|
||||||
|
processed_files.add(gtest_source_file)
|
||||||
|
|
||||||
|
# Reads each line in the given gtest source file.
|
||||||
|
for line in file(os.path.join(gtest_root, gtest_source_file), 'r'):
|
||||||
|
m = INCLUDE_GTEST_FILE_REGEX.match(line)
|
||||||
|
if m:
|
||||||
|
if 'include/' + m.group(1) == GTEST_SPI_H_SEED:
|
||||||
|
# It's '#include "gtest/gtest-spi.h"'. This file is not
|
||||||
|
# #included by "gtest/gtest.h", so we need to process it.
|
||||||
|
ProcessFile(GTEST_SPI_H_SEED)
|
||||||
|
else:
|
||||||
|
# It's '#include "gtest/foo.h"' where foo is not gtest-spi.
|
||||||
|
# We treat it as '#include "gtest/gtest.h"', as all other
|
||||||
|
# gtest headers are being fused into gtest.h and cannot be
|
||||||
|
# #included directly.
|
||||||
|
|
||||||
|
# There is no need to #include "gtest/gtest.h" more than once.
|
||||||
|
if not GTEST_H_SEED in processed_files:
|
||||||
|
processed_files.add(GTEST_H_SEED)
|
||||||
|
output_file.write('#include "%s"\n' % (GTEST_H_OUTPUT,))
|
||||||
|
else:
|
||||||
|
m = INCLUDE_SRC_FILE_REGEX.match(line)
|
||||||
|
if m:
|
||||||
|
# It's '#include "src/foo"' - let's process it recursively.
|
||||||
|
ProcessFile(m.group(1))
|
||||||
|
else:
|
||||||
|
output_file.write(line)
|
||||||
|
|
||||||
|
ProcessFile(GTEST_ALL_CC_SEED)
|
||||||
|
|
||||||
|
|
||||||
|
def FuseGTestAllCc(gtest_root, output_dir):
|
||||||
|
"""Scans folder gtest_root to generate gtest/gtest-all.cc in output_dir."""
|
||||||
|
|
||||||
|
output_file = file(os.path.join(output_dir, GTEST_ALL_CC_OUTPUT), 'w')
|
||||||
|
FuseGTestAllCcToFile(gtest_root, output_file)
|
||||||
|
output_file.close()
|
||||||
|
|
||||||
|
|
||||||
|
def FuseGTest(gtest_root, output_dir):
|
||||||
|
"""Fuses gtest.h and gtest-all.cc."""
|
||||||
|
|
||||||
|
ValidateGTestRootDir(gtest_root)
|
||||||
|
ValidateOutputDir(output_dir)
|
||||||
|
|
||||||
|
FuseGTestH(gtest_root, output_dir)
|
||||||
|
FuseGTestAllCc(gtest_root, output_dir)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
argc = len(sys.argv)
|
||||||
|
if argc == 2:
|
||||||
|
# fuse_gtest_files.py OUTPUT_DIR
|
||||||
|
FuseGTest(DEFAULT_GTEST_ROOT_DIR, sys.argv[1])
|
||||||
|
elif argc == 3:
|
||||||
|
# fuse_gtest_files.py GTEST_ROOT_DIR OUTPUT_DIR
|
||||||
|
FuseGTest(sys.argv[1], sys.argv[2])
|
||||||
|
else:
|
||||||
|
print __doc__
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
730
external/gtest/scripts/gen_gtest_pred_impl.py
vendored
Normal file
730
external/gtest/scripts/gen_gtest_pred_impl.py
vendored
Normal file
|
@ -0,0 +1,730 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
#
|
||||||
|
# Copyright 2006, Google Inc.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are
|
||||||
|
# met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above
|
||||||
|
# copyright notice, this list of conditions and the following disclaimer
|
||||||
|
# in the documentation and/or other materials provided with the
|
||||||
|
# distribution.
|
||||||
|
# * Neither the name of Google Inc. nor the names of its
|
||||||
|
# contributors may be used to endorse or promote products derived from
|
||||||
|
# this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
"""gen_gtest_pred_impl.py v0.1
|
||||||
|
|
||||||
|
Generates the implementation of Google Test predicate assertions and
|
||||||
|
accompanying tests.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
gen_gtest_pred_impl.py MAX_ARITY
|
||||||
|
|
||||||
|
where MAX_ARITY is a positive integer.
|
||||||
|
|
||||||
|
The command generates the implementation of up-to MAX_ARITY-ary
|
||||||
|
predicate assertions, and writes it to file gtest_pred_impl.h in the
|
||||||
|
directory where the script is. It also generates the accompanying
|
||||||
|
unit test in file gtest_pred_impl_unittest.cc.
|
||||||
|
"""
|
||||||
|
|
||||||
|
__author__ = 'wan@google.com (Zhanyong Wan)'
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
|
# Where this script is.
|
||||||
|
SCRIPT_DIR = os.path.dirname(sys.argv[0])
|
||||||
|
|
||||||
|
# Where to store the generated header.
|
||||||
|
HEADER = os.path.join(SCRIPT_DIR, '../include/gtest/gtest_pred_impl.h')
|
||||||
|
|
||||||
|
# Where to store the generated unit test.
|
||||||
|
UNIT_TEST = os.path.join(SCRIPT_DIR, '../test/gtest_pred_impl_unittest.cc')
|
||||||
|
|
||||||
|
|
||||||
|
def HeaderPreamble(n):
|
||||||
|
"""Returns the preamble for the header file.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
n: the maximum arity of the predicate macros to be generated.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# A map that defines the values used in the preamble template.
|
||||||
|
DEFS = {
|
||||||
|
'today' : time.strftime('%m/%d/%Y'),
|
||||||
|
'year' : time.strftime('%Y'),
|
||||||
|
'command' : '%s %s' % (os.path.basename(sys.argv[0]), n),
|
||||||
|
'n' : n
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
"""// Copyright 2006, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// This file is AUTOMATICALLY GENERATED on %(today)s by command
|
||||||
|
// '%(command)s'. DO NOT EDIT BY HAND!
|
||||||
|
//
|
||||||
|
// Implements a family of generic predicate assertion macros.
|
||||||
|
|
||||||
|
#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
|
||||||
|
#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
|
||||||
|
|
||||||
|
// Makes sure this header is not included before gtest.h.
|
||||||
|
#ifndef GTEST_INCLUDE_GTEST_GTEST_H_
|
||||||
|
# error Do not include gtest_pred_impl.h directly. Include gtest.h instead.
|
||||||
|
#endif // GTEST_INCLUDE_GTEST_GTEST_H_
|
||||||
|
|
||||||
|
// This header implements a family of generic predicate assertion
|
||||||
|
// macros:
|
||||||
|
//
|
||||||
|
// ASSERT_PRED_FORMAT1(pred_format, v1)
|
||||||
|
// ASSERT_PRED_FORMAT2(pred_format, v1, v2)
|
||||||
|
// ...
|
||||||
|
//
|
||||||
|
// where pred_format is a function or functor that takes n (in the
|
||||||
|
// case of ASSERT_PRED_FORMATn) values and their source expression
|
||||||
|
// text, and returns a testing::AssertionResult. See the definition
|
||||||
|
// of ASSERT_EQ in gtest.h for an example.
|
||||||
|
//
|
||||||
|
// If you don't care about formatting, you can use the more
|
||||||
|
// restrictive version:
|
||||||
|
//
|
||||||
|
// ASSERT_PRED1(pred, v1)
|
||||||
|
// ASSERT_PRED2(pred, v1, v2)
|
||||||
|
// ...
|
||||||
|
//
|
||||||
|
// where pred is an n-ary function or functor that returns bool,
|
||||||
|
// and the values v1, v2, ..., must support the << operator for
|
||||||
|
// streaming to std::ostream.
|
||||||
|
//
|
||||||
|
// We also define the EXPECT_* variations.
|
||||||
|
//
|
||||||
|
// For now we only support predicates whose arity is at most %(n)s.
|
||||||
|
// Please email googletestframework@googlegroups.com if you need
|
||||||
|
// support for higher arities.
|
||||||
|
|
||||||
|
// GTEST_ASSERT_ is the basic statement to which all of the assertions
|
||||||
|
// in this file reduce. Don't use this in your code.
|
||||||
|
|
||||||
|
#define GTEST_ASSERT_(expression, on_failure) \\
|
||||||
|
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \\
|
||||||
|
if (const ::testing::AssertionResult gtest_ar = (expression)) \\
|
||||||
|
; \\
|
||||||
|
else \\
|
||||||
|
on_failure(gtest_ar.failure_message())
|
||||||
|
""" % DEFS)
|
||||||
|
|
||||||
|
|
||||||
|
def Arity(n):
|
||||||
|
"""Returns the English name of the given arity."""
|
||||||
|
|
||||||
|
if n < 0:
|
||||||
|
return None
|
||||||
|
elif n <= 3:
|
||||||
|
return ['nullary', 'unary', 'binary', 'ternary'][n]
|
||||||
|
else:
|
||||||
|
return '%s-ary' % n
|
||||||
|
|
||||||
|
|
||||||
|
def Title(word):
|
||||||
|
"""Returns the given word in title case. The difference between
|
||||||
|
this and string's title() method is that Title('4-ary') is '4-ary'
|
||||||
|
while '4-ary'.title() is '4-Ary'."""
|
||||||
|
|
||||||
|
return word[0].upper() + word[1:]
|
||||||
|
|
||||||
|
|
||||||
|
def OneTo(n):
|
||||||
|
"""Returns the list [1, 2, 3, ..., n]."""
|
||||||
|
|
||||||
|
return range(1, n + 1)
|
||||||
|
|
||||||
|
|
||||||
|
def Iter(n, format, sep=''):
|
||||||
|
"""Given a positive integer n, a format string that contains 0 or
|
||||||
|
more '%s' format specs, and optionally a separator string, returns
|
||||||
|
the join of n strings, each formatted with the format string on an
|
||||||
|
iterator ranged from 1 to n.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
Iter(3, 'v%s', sep=', ') returns 'v1, v2, v3'.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# How many '%s' specs are in format?
|
||||||
|
spec_count = len(format.split('%s')) - 1
|
||||||
|
return sep.join([format % (spec_count * (i,)) for i in OneTo(n)])
|
||||||
|
|
||||||
|
|
||||||
|
def ImplementationForArity(n):
|
||||||
|
"""Returns the implementation of n-ary predicate assertions."""
|
||||||
|
|
||||||
|
# A map the defines the values used in the implementation template.
|
||||||
|
DEFS = {
|
||||||
|
'n' : str(n),
|
||||||
|
'vs' : Iter(n, 'v%s', sep=', '),
|
||||||
|
'vts' : Iter(n, '#v%s', sep=', '),
|
||||||
|
'arity' : Arity(n),
|
||||||
|
'Arity' : Title(Arity(n))
|
||||||
|
}
|
||||||
|
|
||||||
|
impl = """
|
||||||
|
|
||||||
|
// Helper function for implementing {EXPECT|ASSERT}_PRED%(n)s. Don't use
|
||||||
|
// this in your code.
|
||||||
|
template <typename Pred""" % DEFS
|
||||||
|
|
||||||
|
impl += Iter(n, """,
|
||||||
|
typename T%s""")
|
||||||
|
|
||||||
|
impl += """>
|
||||||
|
AssertionResult AssertPred%(n)sHelper(const char* pred_text""" % DEFS
|
||||||
|
|
||||||
|
impl += Iter(n, """,
|
||||||
|
const char* e%s""")
|
||||||
|
|
||||||
|
impl += """,
|
||||||
|
Pred pred"""
|
||||||
|
|
||||||
|
impl += Iter(n, """,
|
||||||
|
const T%s& v%s""")
|
||||||
|
|
||||||
|
impl += """) {
|
||||||
|
if (pred(%(vs)s)) return AssertionSuccess();
|
||||||
|
|
||||||
|
""" % DEFS
|
||||||
|
|
||||||
|
impl += ' return AssertionFailure() << pred_text << "("'
|
||||||
|
|
||||||
|
impl += Iter(n, """
|
||||||
|
<< e%s""", sep=' << ", "')
|
||||||
|
|
||||||
|
impl += ' << ") evaluates to false, where"'
|
||||||
|
|
||||||
|
impl += Iter(n, """
|
||||||
|
<< "\\n" << e%s << " evaluates to " << v%s""")
|
||||||
|
|
||||||
|
impl += """;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT%(n)s.
|
||||||
|
// Don't use this in your code.
|
||||||
|
#define GTEST_PRED_FORMAT%(n)s_(pred_format, %(vs)s, on_failure)\\
|
||||||
|
GTEST_ASSERT_(pred_format(%(vts)s, %(vs)s), \\
|
||||||
|
on_failure)
|
||||||
|
|
||||||
|
// Internal macro for implementing {EXPECT|ASSERT}_PRED%(n)s. Don't use
|
||||||
|
// this in your code.
|
||||||
|
#define GTEST_PRED%(n)s_(pred, %(vs)s, on_failure)\\
|
||||||
|
GTEST_ASSERT_(::testing::AssertPred%(n)sHelper(#pred""" % DEFS
|
||||||
|
|
||||||
|
impl += Iter(n, """, \\
|
||||||
|
#v%s""")
|
||||||
|
|
||||||
|
impl += """, \\
|
||||||
|
pred"""
|
||||||
|
|
||||||
|
impl += Iter(n, """, \\
|
||||||
|
v%s""")
|
||||||
|
|
||||||
|
impl += """), on_failure)
|
||||||
|
|
||||||
|
// %(Arity)s predicate assertion macros.
|
||||||
|
#define EXPECT_PRED_FORMAT%(n)s(pred_format, %(vs)s) \\
|
||||||
|
GTEST_PRED_FORMAT%(n)s_(pred_format, %(vs)s, GTEST_NONFATAL_FAILURE_)
|
||||||
|
#define EXPECT_PRED%(n)s(pred, %(vs)s) \\
|
||||||
|
GTEST_PRED%(n)s_(pred, %(vs)s, GTEST_NONFATAL_FAILURE_)
|
||||||
|
#define ASSERT_PRED_FORMAT%(n)s(pred_format, %(vs)s) \\
|
||||||
|
GTEST_PRED_FORMAT%(n)s_(pred_format, %(vs)s, GTEST_FATAL_FAILURE_)
|
||||||
|
#define ASSERT_PRED%(n)s(pred, %(vs)s) \\
|
||||||
|
GTEST_PRED%(n)s_(pred, %(vs)s, GTEST_FATAL_FAILURE_)
|
||||||
|
|
||||||
|
""" % DEFS
|
||||||
|
|
||||||
|
return impl
|
||||||
|
|
||||||
|
|
||||||
|
def HeaderPostamble():
|
||||||
|
"""Returns the postamble for the header file."""
|
||||||
|
|
||||||
|
return """
|
||||||
|
|
||||||
|
#endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def GenerateFile(path, content):
|
||||||
|
"""Given a file path and a content string, overwrites it with the
|
||||||
|
given content."""
|
||||||
|
|
||||||
|
print 'Updating file %s . . .' % path
|
||||||
|
|
||||||
|
f = file(path, 'w+')
|
||||||
|
print >>f, content,
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
print 'File %s has been updated.' % path
|
||||||
|
|
||||||
|
|
||||||
|
def GenerateHeader(n):
|
||||||
|
"""Given the maximum arity n, updates the header file that implements
|
||||||
|
the predicate assertions."""
|
||||||
|
|
||||||
|
GenerateFile(HEADER,
|
||||||
|
HeaderPreamble(n)
|
||||||
|
+ ''.join([ImplementationForArity(i) for i in OneTo(n)])
|
||||||
|
+ HeaderPostamble())
|
||||||
|
|
||||||
|
|
||||||
|
def UnitTestPreamble():
|
||||||
|
"""Returns the preamble for the unit test file."""
|
||||||
|
|
||||||
|
# A map that defines the values used in the preamble template.
|
||||||
|
DEFS = {
|
||||||
|
'today' : time.strftime('%m/%d/%Y'),
|
||||||
|
'year' : time.strftime('%Y'),
|
||||||
|
'command' : '%s %s' % (os.path.basename(sys.argv[0]), sys.argv[1]),
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
"""// Copyright 2006, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// This file is AUTOMATICALLY GENERATED on %(today)s by command
|
||||||
|
// '%(command)s'. DO NOT EDIT BY HAND!
|
||||||
|
|
||||||
|
// Regression test for gtest_pred_impl.h
|
||||||
|
//
|
||||||
|
// This file is generated by a script and quite long. If you intend to
|
||||||
|
// learn how Google Test works by reading its unit tests, read
|
||||||
|
// gtest_unittest.cc instead.
|
||||||
|
//
|
||||||
|
// This is intended as a regression test for the Google Test predicate
|
||||||
|
// assertions. We compile it as part of the gtest_unittest target
|
||||||
|
// only to keep the implementation tidy and compact, as it is quite
|
||||||
|
// involved to set up the stage for testing Google Test using Google
|
||||||
|
// Test itself.
|
||||||
|
//
|
||||||
|
// Currently, gtest_unittest takes ~11 seconds to run in the testing
|
||||||
|
// daemon. In the future, if it grows too large and needs much more
|
||||||
|
// time to finish, we should consider separating this file into a
|
||||||
|
// stand-alone regression test.
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
#include "gtest/gtest-spi.h"
|
||||||
|
|
||||||
|
// A user-defined data type.
|
||||||
|
struct Bool {
|
||||||
|
explicit Bool(int val) : value(val != 0) {}
|
||||||
|
|
||||||
|
bool operator>(int n) const { return value > Bool(n).value; }
|
||||||
|
|
||||||
|
Bool operator+(const Bool& rhs) const { return Bool(value + rhs.value); }
|
||||||
|
|
||||||
|
bool operator==(const Bool& rhs) const { return value == rhs.value; }
|
||||||
|
|
||||||
|
bool value;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Enables Bool to be used in assertions.
|
||||||
|
std::ostream& operator<<(std::ostream& os, const Bool& x) {
|
||||||
|
return os << (x.value ? "true" : "false");
|
||||||
|
}
|
||||||
|
|
||||||
|
""" % DEFS)
|
||||||
|
|
||||||
|
|
||||||
|
def TestsForArity(n):
|
||||||
|
"""Returns the tests for n-ary predicate assertions."""
|
||||||
|
|
||||||
|
# A map that defines the values used in the template for the tests.
|
||||||
|
DEFS = {
|
||||||
|
'n' : n,
|
||||||
|
'es' : Iter(n, 'e%s', sep=', '),
|
||||||
|
'vs' : Iter(n, 'v%s', sep=', '),
|
||||||
|
'vts' : Iter(n, '#v%s', sep=', '),
|
||||||
|
'tvs' : Iter(n, 'T%s v%s', sep=', '),
|
||||||
|
'int_vs' : Iter(n, 'int v%s', sep=', '),
|
||||||
|
'Bool_vs' : Iter(n, 'Bool v%s', sep=', '),
|
||||||
|
'types' : Iter(n, 'typename T%s', sep=', '),
|
||||||
|
'v_sum' : Iter(n, 'v%s', sep=' + '),
|
||||||
|
'arity' : Arity(n),
|
||||||
|
'Arity' : Title(Arity(n)),
|
||||||
|
}
|
||||||
|
|
||||||
|
tests = (
|
||||||
|
"""// Sample functions/functors for testing %(arity)s predicate assertions.
|
||||||
|
|
||||||
|
// A %(arity)s predicate function.
|
||||||
|
template <%(types)s>
|
||||||
|
bool PredFunction%(n)s(%(tvs)s) {
|
||||||
|
return %(v_sum)s > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The following two functions are needed to circumvent a bug in
|
||||||
|
// gcc 2.95.3, which sometimes has problem with the above template
|
||||||
|
// function.
|
||||||
|
bool PredFunction%(n)sInt(%(int_vs)s) {
|
||||||
|
return %(v_sum)s > 0;
|
||||||
|
}
|
||||||
|
bool PredFunction%(n)sBool(%(Bool_vs)s) {
|
||||||
|
return %(v_sum)s > 0;
|
||||||
|
}
|
||||||
|
""" % DEFS)
|
||||||
|
|
||||||
|
tests += """
|
||||||
|
// A %(arity)s predicate functor.
|
||||||
|
struct PredFunctor%(n)s {
|
||||||
|
template <%(types)s>
|
||||||
|
bool operator()(""" % DEFS
|
||||||
|
|
||||||
|
tests += Iter(n, 'const T%s& v%s', sep=""",
|
||||||
|
""")
|
||||||
|
|
||||||
|
tests += """) {
|
||||||
|
return %(v_sum)s > 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
""" % DEFS
|
||||||
|
|
||||||
|
tests += """
|
||||||
|
// A %(arity)s predicate-formatter function.
|
||||||
|
template <%(types)s>
|
||||||
|
testing::AssertionResult PredFormatFunction%(n)s(""" % DEFS
|
||||||
|
|
||||||
|
tests += Iter(n, 'const char* e%s', sep=""",
|
||||||
|
""")
|
||||||
|
|
||||||
|
tests += Iter(n, """,
|
||||||
|
const T%s& v%s""")
|
||||||
|
|
||||||
|
tests += """) {
|
||||||
|
if (PredFunction%(n)s(%(vs)s))
|
||||||
|
return testing::AssertionSuccess();
|
||||||
|
|
||||||
|
return testing::AssertionFailure()
|
||||||
|
<< """ % DEFS
|
||||||
|
|
||||||
|
tests += Iter(n, 'e%s', sep=' << " + " << ')
|
||||||
|
|
||||||
|
tests += """
|
||||||
|
<< " is expected to be positive, but evaluates to "
|
||||||
|
<< %(v_sum)s << ".";
|
||||||
|
}
|
||||||
|
""" % DEFS
|
||||||
|
|
||||||
|
tests += """
|
||||||
|
// A %(arity)s predicate-formatter functor.
|
||||||
|
struct PredFormatFunctor%(n)s {
|
||||||
|
template <%(types)s>
|
||||||
|
testing::AssertionResult operator()(""" % DEFS
|
||||||
|
|
||||||
|
tests += Iter(n, 'const char* e%s', sep=""",
|
||||||
|
""")
|
||||||
|
|
||||||
|
tests += Iter(n, """,
|
||||||
|
const T%s& v%s""")
|
||||||
|
|
||||||
|
tests += """) const {
|
||||||
|
return PredFormatFunction%(n)s(%(es)s, %(vs)s);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
""" % DEFS
|
||||||
|
|
||||||
|
tests += """
|
||||||
|
// Tests for {EXPECT|ASSERT}_PRED_FORMAT%(n)s.
|
||||||
|
|
||||||
|
class Predicate%(n)sTest : public testing::Test {
|
||||||
|
protected:
|
||||||
|
virtual void SetUp() {
|
||||||
|
expected_to_finish_ = true;
|
||||||
|
finished_ = false;""" % DEFS
|
||||||
|
|
||||||
|
tests += """
|
||||||
|
""" + Iter(n, 'n%s_ = ') + """0;
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
|
||||||
|
tests += """
|
||||||
|
virtual void TearDown() {
|
||||||
|
// Verifies that each of the predicate's arguments was evaluated
|
||||||
|
// exactly once."""
|
||||||
|
|
||||||
|
tests += ''.join(["""
|
||||||
|
EXPECT_EQ(1, n%s_) <<
|
||||||
|
"The predicate assertion didn't evaluate argument %s "
|
||||||
|
"exactly once.";""" % (i, i + 1) for i in OneTo(n)])
|
||||||
|
|
||||||
|
tests += """
|
||||||
|
|
||||||
|
// Verifies that the control flow in the test function is expected.
|
||||||
|
if (expected_to_finish_ && !finished_) {
|
||||||
|
FAIL() << "The predicate assertion unexpactedly aborted the test.";
|
||||||
|
} else if (!expected_to_finish_ && finished_) {
|
||||||
|
FAIL() << "The failed predicate assertion didn't abort the test "
|
||||||
|
"as expected.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// true iff the test function is expected to run to finish.
|
||||||
|
static bool expected_to_finish_;
|
||||||
|
|
||||||
|
// true iff the test function did run to finish.
|
||||||
|
static bool finished_;
|
||||||
|
""" % DEFS
|
||||||
|
|
||||||
|
tests += Iter(n, """
|
||||||
|
static int n%s_;""")
|
||||||
|
|
||||||
|
tests += """
|
||||||
|
};
|
||||||
|
|
||||||
|
bool Predicate%(n)sTest::expected_to_finish_;
|
||||||
|
bool Predicate%(n)sTest::finished_;
|
||||||
|
""" % DEFS
|
||||||
|
|
||||||
|
tests += Iter(n, """int Predicate%%(n)sTest::n%s_;
|
||||||
|
""") % DEFS
|
||||||
|
|
||||||
|
tests += """
|
||||||
|
typedef Predicate%(n)sTest EXPECT_PRED_FORMAT%(n)sTest;
|
||||||
|
typedef Predicate%(n)sTest ASSERT_PRED_FORMAT%(n)sTest;
|
||||||
|
typedef Predicate%(n)sTest EXPECT_PRED%(n)sTest;
|
||||||
|
typedef Predicate%(n)sTest ASSERT_PRED%(n)sTest;
|
||||||
|
""" % DEFS
|
||||||
|
|
||||||
|
def GenTest(use_format, use_assert, expect_failure,
|
||||||
|
use_functor, use_user_type):
|
||||||
|
"""Returns the test for a predicate assertion macro.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
use_format: true iff the assertion is a *_PRED_FORMAT*.
|
||||||
|
use_assert: true iff the assertion is a ASSERT_*.
|
||||||
|
expect_failure: true iff the assertion is expected to fail.
|
||||||
|
use_functor: true iff the first argument of the assertion is
|
||||||
|
a functor (as opposed to a function)
|
||||||
|
use_user_type: true iff the predicate functor/function takes
|
||||||
|
argument(s) of a user-defined type.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
GenTest(1, 0, 0, 1, 0) returns a test that tests the behavior
|
||||||
|
of a successful EXPECT_PRED_FORMATn() that takes a functor
|
||||||
|
whose arguments have built-in types."""
|
||||||
|
|
||||||
|
if use_assert:
|
||||||
|
assrt = 'ASSERT' # 'assert' is reserved, so we cannot use
|
||||||
|
# that identifier here.
|
||||||
|
else:
|
||||||
|
assrt = 'EXPECT'
|
||||||
|
|
||||||
|
assertion = assrt + '_PRED'
|
||||||
|
|
||||||
|
if use_format:
|
||||||
|
pred_format = 'PredFormat'
|
||||||
|
assertion += '_FORMAT'
|
||||||
|
else:
|
||||||
|
pred_format = 'Pred'
|
||||||
|
|
||||||
|
assertion += '%(n)s' % DEFS
|
||||||
|
|
||||||
|
if use_functor:
|
||||||
|
pred_format_type = 'functor'
|
||||||
|
pred_format += 'Functor%(n)s()'
|
||||||
|
else:
|
||||||
|
pred_format_type = 'function'
|
||||||
|
pred_format += 'Function%(n)s'
|
||||||
|
if not use_format:
|
||||||
|
if use_user_type:
|
||||||
|
pred_format += 'Bool'
|
||||||
|
else:
|
||||||
|
pred_format += 'Int'
|
||||||
|
|
||||||
|
test_name = pred_format_type.title()
|
||||||
|
|
||||||
|
if use_user_type:
|
||||||
|
arg_type = 'user-defined type (Bool)'
|
||||||
|
test_name += 'OnUserType'
|
||||||
|
if expect_failure:
|
||||||
|
arg = 'Bool(n%s_++)'
|
||||||
|
else:
|
||||||
|
arg = 'Bool(++n%s_)'
|
||||||
|
else:
|
||||||
|
arg_type = 'built-in type (int)'
|
||||||
|
test_name += 'OnBuiltInType'
|
||||||
|
if expect_failure:
|
||||||
|
arg = 'n%s_++'
|
||||||
|
else:
|
||||||
|
arg = '++n%s_'
|
||||||
|
|
||||||
|
if expect_failure:
|
||||||
|
successful_or_failed = 'failed'
|
||||||
|
expected_or_not = 'expected.'
|
||||||
|
test_name += 'Failure'
|
||||||
|
else:
|
||||||
|
successful_or_failed = 'successful'
|
||||||
|
expected_or_not = 'UNEXPECTED!'
|
||||||
|
test_name += 'Success'
|
||||||
|
|
||||||
|
# A map that defines the values used in the test template.
|
||||||
|
defs = DEFS.copy()
|
||||||
|
defs.update({
|
||||||
|
'assert' : assrt,
|
||||||
|
'assertion' : assertion,
|
||||||
|
'test_name' : test_name,
|
||||||
|
'pf_type' : pred_format_type,
|
||||||
|
'pf' : pred_format,
|
||||||
|
'arg_type' : arg_type,
|
||||||
|
'arg' : arg,
|
||||||
|
'successful' : successful_or_failed,
|
||||||
|
'expected' : expected_or_not,
|
||||||
|
})
|
||||||
|
|
||||||
|
test = """
|
||||||
|
// Tests a %(successful)s %(assertion)s where the
|
||||||
|
// predicate-formatter is a %(pf_type)s on a %(arg_type)s.
|
||||||
|
TEST_F(%(assertion)sTest, %(test_name)s) {""" % defs
|
||||||
|
|
||||||
|
indent = (len(assertion) + 3)*' '
|
||||||
|
extra_indent = ''
|
||||||
|
|
||||||
|
if expect_failure:
|
||||||
|
extra_indent = ' '
|
||||||
|
if use_assert:
|
||||||
|
test += """
|
||||||
|
expected_to_finish_ = false;
|
||||||
|
EXPECT_FATAL_FAILURE({ // NOLINT"""
|
||||||
|
else:
|
||||||
|
test += """
|
||||||
|
EXPECT_NONFATAL_FAILURE({ // NOLINT"""
|
||||||
|
|
||||||
|
test += '\n' + extra_indent + """ %(assertion)s(%(pf)s""" % defs
|
||||||
|
|
||||||
|
test = test % defs
|
||||||
|
test += Iter(n, ',\n' + indent + extra_indent + '%(arg)s' % defs)
|
||||||
|
test += ');\n' + extra_indent + ' finished_ = true;\n'
|
||||||
|
|
||||||
|
if expect_failure:
|
||||||
|
test += ' }, "");\n'
|
||||||
|
|
||||||
|
test += '}\n'
|
||||||
|
return test
|
||||||
|
|
||||||
|
# Generates tests for all 2**6 = 64 combinations.
|
||||||
|
tests += ''.join([GenTest(use_format, use_assert, expect_failure,
|
||||||
|
use_functor, use_user_type)
|
||||||
|
for use_format in [0, 1]
|
||||||
|
for use_assert in [0, 1]
|
||||||
|
for expect_failure in [0, 1]
|
||||||
|
for use_functor in [0, 1]
|
||||||
|
for use_user_type in [0, 1]
|
||||||
|
])
|
||||||
|
|
||||||
|
return tests
|
||||||
|
|
||||||
|
|
||||||
|
def UnitTestPostamble():
|
||||||
|
"""Returns the postamble for the tests."""
|
||||||
|
|
||||||
|
return ''
|
||||||
|
|
||||||
|
|
||||||
|
def GenerateUnitTest(n):
|
||||||
|
"""Returns the tests for up-to n-ary predicate assertions."""
|
||||||
|
|
||||||
|
GenerateFile(UNIT_TEST,
|
||||||
|
UnitTestPreamble()
|
||||||
|
+ ''.join([TestsForArity(i) for i in OneTo(n)])
|
||||||
|
+ UnitTestPostamble())
|
||||||
|
|
||||||
|
|
||||||
|
def _Main():
|
||||||
|
"""The entry point of the script. Generates the header file and its
|
||||||
|
unit test."""
|
||||||
|
|
||||||
|
if len(sys.argv) != 2:
|
||||||
|
print __doc__
|
||||||
|
print 'Author: ' + __author__
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
n = int(sys.argv[1])
|
||||||
|
GenerateHeader(n)
|
||||||
|
GenerateUnitTest(n)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
_Main()
|
274
external/gtest/scripts/gtest-config.in
vendored
Normal file
274
external/gtest/scripts/gtest-config.in
vendored
Normal file
|
@ -0,0 +1,274 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# These variables are automatically filled in by the configure script.
|
||||||
|
name="@PACKAGE_TARNAME@"
|
||||||
|
version="@PACKAGE_VERSION@"
|
||||||
|
|
||||||
|
show_usage()
|
||||||
|
{
|
||||||
|
echo "Usage: gtest-config [OPTIONS...]"
|
||||||
|
}
|
||||||
|
|
||||||
|
show_help()
|
||||||
|
{
|
||||||
|
show_usage
|
||||||
|
cat <<\EOF
|
||||||
|
|
||||||
|
The `gtest-config' script provides access to the necessary compile and linking
|
||||||
|
flags to connect with Google C++ Testing Framework, both in a build prior to
|
||||||
|
installation, and on the system proper after installation. The installation
|
||||||
|
overrides may be issued in combination with any other queries, but will only
|
||||||
|
affect installation queries if called on a built but not installed gtest. The
|
||||||
|
installation queries may not be issued with any other types of queries, and
|
||||||
|
only one installation query may be made at a time. The version queries and
|
||||||
|
compiler flag queries may be combined as desired but not mixed. Different
|
||||||
|
version queries are always combined with logical "and" semantics, and only the
|
||||||
|
last of any particular query is used while all previous ones ignored. All
|
||||||
|
versions must be specified as a sequence of numbers separated by periods.
|
||||||
|
Compiler flag queries output the union of the sets of flags when combined.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
gtest-config --min-version=1.0 || echo "Insufficient Google Test version."
|
||||||
|
|
||||||
|
g++ $(gtest-config --cppflags --cxxflags) -o foo.o -c foo.cpp
|
||||||
|
g++ $(gtest-config --ldflags --libs) -o foo foo.o
|
||||||
|
|
||||||
|
# When using a built but not installed Google Test:
|
||||||
|
g++ $(../../my_gtest_build/scripts/gtest-config ...) ...
|
||||||
|
|
||||||
|
# When using an installed Google Test, but with installation overrides:
|
||||||
|
export GTEST_PREFIX="/opt"
|
||||||
|
g++ $(gtest-config --libdir="/opt/lib64" ...) ...
|
||||||
|
|
||||||
|
Help:
|
||||||
|
--usage brief usage information
|
||||||
|
--help display this help message
|
||||||
|
|
||||||
|
Installation Overrides:
|
||||||
|
--prefix=<dir> overrides the installation prefix
|
||||||
|
--exec-prefix=<dir> overrides the executable installation prefix
|
||||||
|
--libdir=<dir> overrides the library installation prefix
|
||||||
|
--includedir=<dir> overrides the header file installation prefix
|
||||||
|
|
||||||
|
Installation Queries:
|
||||||
|
--prefix installation prefix
|
||||||
|
--exec-prefix executable installation prefix
|
||||||
|
--libdir library installation directory
|
||||||
|
--includedir header file installation directory
|
||||||
|
--version the version of the Google Test installation
|
||||||
|
|
||||||
|
Version Queries:
|
||||||
|
--min-version=VERSION return 0 if the version is at least VERSION
|
||||||
|
--exact-version=VERSION return 0 if the version is exactly VERSION
|
||||||
|
--max-version=VERSION return 0 if the version is at most VERSION
|
||||||
|
|
||||||
|
Compilation Flag Queries:
|
||||||
|
--cppflags compile flags specific to the C-like preprocessors
|
||||||
|
--cxxflags compile flags appropriate for C++ programs
|
||||||
|
--ldflags linker flags
|
||||||
|
--libs libraries for linking
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# This function bounds our version with a min and a max. It uses some clever
|
||||||
|
# POSIX-compliant variable expansion to portably do all the work in the shell
|
||||||
|
# and avoid any dependency on a particular "sed" or "awk" implementation.
|
||||||
|
# Notable is that it will only ever compare the first 3 components of versions.
|
||||||
|
# Further components will be cleanly stripped off. All versions must be
|
||||||
|
# unadorned, so "v1.0" will *not* work. The minimum version must be in $1, and
|
||||||
|
# the max in $2. TODO(chandlerc@google.com): If this ever breaks, we should
|
||||||
|
# investigate expanding this via autom4te from AS_VERSION_COMPARE rather than
|
||||||
|
# continuing to maintain our own shell version.
|
||||||
|
check_versions()
|
||||||
|
{
|
||||||
|
major_version=${version%%.*}
|
||||||
|
minor_version="0"
|
||||||
|
point_version="0"
|
||||||
|
if test "${version#*.}" != "${version}"; then
|
||||||
|
minor_version=${version#*.}
|
||||||
|
minor_version=${minor_version%%.*}
|
||||||
|
fi
|
||||||
|
if test "${version#*.*.}" != "${version}"; then
|
||||||
|
point_version=${version#*.*.}
|
||||||
|
point_version=${point_version%%.*}
|
||||||
|
fi
|
||||||
|
|
||||||
|
min_version="$1"
|
||||||
|
min_major_version=${min_version%%.*}
|
||||||
|
min_minor_version="0"
|
||||||
|
min_point_version="0"
|
||||||
|
if test "${min_version#*.}" != "${min_version}"; then
|
||||||
|
min_minor_version=${min_version#*.}
|
||||||
|
min_minor_version=${min_minor_version%%.*}
|
||||||
|
fi
|
||||||
|
if test "${min_version#*.*.}" != "${min_version}"; then
|
||||||
|
min_point_version=${min_version#*.*.}
|
||||||
|
min_point_version=${min_point_version%%.*}
|
||||||
|
fi
|
||||||
|
|
||||||
|
max_version="$2"
|
||||||
|
max_major_version=${max_version%%.*}
|
||||||
|
max_minor_version="0"
|
||||||
|
max_point_version="0"
|
||||||
|
if test "${max_version#*.}" != "${max_version}"; then
|
||||||
|
max_minor_version=${max_version#*.}
|
||||||
|
max_minor_version=${max_minor_version%%.*}
|
||||||
|
fi
|
||||||
|
if test "${max_version#*.*.}" != "${max_version}"; then
|
||||||
|
max_point_version=${max_version#*.*.}
|
||||||
|
max_point_version=${max_point_version%%.*}
|
||||||
|
fi
|
||||||
|
|
||||||
|
test $(($major_version)) -lt $(($min_major_version)) && exit 1
|
||||||
|
if test $(($major_version)) -eq $(($min_major_version)); then
|
||||||
|
test $(($minor_version)) -lt $(($min_minor_version)) && exit 1
|
||||||
|
if test $(($minor_version)) -eq $(($min_minor_version)); then
|
||||||
|
test $(($point_version)) -lt $(($min_point_version)) && exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
test $(($major_version)) -gt $(($max_major_version)) && exit 1
|
||||||
|
if test $(($major_version)) -eq $(($max_major_version)); then
|
||||||
|
test $(($minor_version)) -gt $(($max_minor_version)) && exit 1
|
||||||
|
if test $(($minor_version)) -eq $(($max_minor_version)); then
|
||||||
|
test $(($point_version)) -gt $(($max_point_version)) && exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Show the usage line when no arguments are specified.
|
||||||
|
if test $# -eq 0; then
|
||||||
|
show_usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
while test $# -gt 0; do
|
||||||
|
case $1 in
|
||||||
|
--usage) show_usage; exit 0;;
|
||||||
|
--help) show_help; exit 0;;
|
||||||
|
|
||||||
|
# Installation overrides
|
||||||
|
--prefix=*) GTEST_PREFIX=${1#--prefix=};;
|
||||||
|
--exec-prefix=*) GTEST_EXEC_PREFIX=${1#--exec-prefix=};;
|
||||||
|
--libdir=*) GTEST_LIBDIR=${1#--libdir=};;
|
||||||
|
--includedir=*) GTEST_INCLUDEDIR=${1#--includedir=};;
|
||||||
|
|
||||||
|
# Installation queries
|
||||||
|
--prefix|--exec-prefix|--libdir|--includedir|--version)
|
||||||
|
if test -n "${do_query}"; then
|
||||||
|
show_usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
do_query=${1#--}
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Version checking
|
||||||
|
--min-version=*)
|
||||||
|
do_check_versions=yes
|
||||||
|
min_version=${1#--min-version=}
|
||||||
|
;;
|
||||||
|
--max-version=*)
|
||||||
|
do_check_versions=yes
|
||||||
|
max_version=${1#--max-version=}
|
||||||
|
;;
|
||||||
|
--exact-version=*)
|
||||||
|
do_check_versions=yes
|
||||||
|
exact_version=${1#--exact-version=}
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Compiler flag output
|
||||||
|
--cppflags) echo_cppflags=yes;;
|
||||||
|
--cxxflags) echo_cxxflags=yes;;
|
||||||
|
--ldflags) echo_ldflags=yes;;
|
||||||
|
--libs) echo_libs=yes;;
|
||||||
|
|
||||||
|
# Everything else is an error
|
||||||
|
*) show_usage; exit 1;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
# These have defaults filled in by the configure script but can also be
|
||||||
|
# overridden by environment variables or command line parameters.
|
||||||
|
prefix="${GTEST_PREFIX:-@prefix@}"
|
||||||
|
exec_prefix="${GTEST_EXEC_PREFIX:-@exec_prefix@}"
|
||||||
|
libdir="${GTEST_LIBDIR:-@libdir@}"
|
||||||
|
includedir="${GTEST_INCLUDEDIR:-@includedir@}"
|
||||||
|
|
||||||
|
# We try and detect if our binary is not located at its installed location. If
|
||||||
|
# it's not, we provide variables pointing to the source and build tree rather
|
||||||
|
# than to the install tree. This allows building against a just-built gtest
|
||||||
|
# rather than an installed gtest.
|
||||||
|
bindir="@bindir@"
|
||||||
|
this_relative_bindir=`dirname $0`
|
||||||
|
this_bindir=`cd ${this_relative_bindir}; pwd -P`
|
||||||
|
if test "${this_bindir}" = "${this_bindir%${bindir}}"; then
|
||||||
|
# The path to the script doesn't end in the bindir sequence from Autoconf,
|
||||||
|
# assume that we are in a build tree.
|
||||||
|
build_dir=`dirname ${this_bindir}`
|
||||||
|
src_dir=`cd ${this_bindir}; cd @top_srcdir@; pwd -P`
|
||||||
|
|
||||||
|
# TODO(chandlerc@google.com): This is a dangerous dependency on libtool, we
|
||||||
|
# should work to remove it, and/or remove libtool altogether, replacing it
|
||||||
|
# with direct references to the library and a link path.
|
||||||
|
gtest_libs="${build_dir}/lib/libgtest.la @PTHREAD_CFLAGS@ @PTHREAD_LIBS@"
|
||||||
|
gtest_ldflags=""
|
||||||
|
|
||||||
|
# We provide hooks to include from either the source or build dir, where the
|
||||||
|
# build dir is always preferred. This will potentially allow us to write
|
||||||
|
# build rules for generated headers and have them automatically be preferred
|
||||||
|
# over provided versions.
|
||||||
|
gtest_cppflags="-I${build_dir}/include -I${src_dir}/include"
|
||||||
|
gtest_cxxflags="@PTHREAD_CFLAGS@"
|
||||||
|
else
|
||||||
|
# We're using an installed gtest, although it may be staged under some
|
||||||
|
# prefix. Assume (as our own libraries do) that we can resolve the prefix,
|
||||||
|
# and are present in the dynamic link paths.
|
||||||
|
gtest_ldflags="-L${libdir}"
|
||||||
|
gtest_libs="-l${name} @PTHREAD_CFLAGS@ @PTHREAD_LIBS@"
|
||||||
|
gtest_cppflags="-I${includedir}"
|
||||||
|
gtest_cxxflags="@PTHREAD_CFLAGS@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Do an installation query if requested.
|
||||||
|
if test -n "$do_query"; then
|
||||||
|
case $do_query in
|
||||||
|
prefix) echo $prefix; exit 0;;
|
||||||
|
exec-prefix) echo $exec_prefix; exit 0;;
|
||||||
|
libdir) echo $libdir; exit 0;;
|
||||||
|
includedir) echo $includedir; exit 0;;
|
||||||
|
version) echo $version; exit 0;;
|
||||||
|
*) show_usage; exit 1;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Do a version check if requested.
|
||||||
|
if test "$do_check_versions" = "yes"; then
|
||||||
|
# Make sure we didn't receive a bad combination of parameters.
|
||||||
|
test "$echo_cppflags" = "yes" && show_usage && exit 1
|
||||||
|
test "$echo_cxxflags" = "yes" && show_usage && exit 1
|
||||||
|
test "$echo_ldflags" = "yes" && show_usage && exit 1
|
||||||
|
test "$echo_libs" = "yes" && show_usage && exit 1
|
||||||
|
|
||||||
|
if test "$exact_version" != ""; then
|
||||||
|
check_versions $exact_version $exact_version
|
||||||
|
# unreachable
|
||||||
|
else
|
||||||
|
check_versions ${min_version:-0.0.0} ${max_version:-9999.9999.9999}
|
||||||
|
# unreachable
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Do the output in the correct order so that these can be used in-line of
|
||||||
|
# a compiler invocation.
|
||||||
|
output=""
|
||||||
|
test "$echo_cppflags" = "yes" && output="$output $gtest_cppflags"
|
||||||
|
test "$echo_cxxflags" = "yes" && output="$output $gtest_cxxflags"
|
||||||
|
test "$echo_ldflags" = "yes" && output="$output $gtest_ldflags"
|
||||||
|
test "$echo_libs" = "yes" && output="$output $gtest_libs"
|
||||||
|
echo $output
|
||||||
|
|
||||||
|
exit 0
|
855
external/gtest/scripts/pump.py
vendored
Normal file
855
external/gtest/scripts/pump.py
vendored
Normal file
|
@ -0,0 +1,855 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
#
|
||||||
|
# Copyright 2008, Google Inc.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are
|
||||||
|
# met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above
|
||||||
|
# copyright notice, this list of conditions and the following disclaimer
|
||||||
|
# in the documentation and/or other materials provided with the
|
||||||
|
# distribution.
|
||||||
|
# * Neither the name of Google Inc. nor the names of its
|
||||||
|
# contributors may be used to endorse or promote products derived from
|
||||||
|
# this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
"""pump v0.2.0 - Pretty Useful for Meta Programming.
|
||||||
|
|
||||||
|
A tool for preprocessor meta programming. Useful for generating
|
||||||
|
repetitive boilerplate code. Especially useful for writing C++
|
||||||
|
classes, functions, macros, and templates that need to work with
|
||||||
|
various number of arguments.
|
||||||
|
|
||||||
|
USAGE:
|
||||||
|
pump.py SOURCE_FILE
|
||||||
|
|
||||||
|
EXAMPLES:
|
||||||
|
pump.py foo.cc.pump
|
||||||
|
Converts foo.cc.pump to foo.cc.
|
||||||
|
|
||||||
|
GRAMMAR:
|
||||||
|
CODE ::= ATOMIC_CODE*
|
||||||
|
ATOMIC_CODE ::= $var ID = EXPRESSION
|
||||||
|
| $var ID = [[ CODE ]]
|
||||||
|
| $range ID EXPRESSION..EXPRESSION
|
||||||
|
| $for ID SEPARATOR [[ CODE ]]
|
||||||
|
| $($)
|
||||||
|
| $ID
|
||||||
|
| $(EXPRESSION)
|
||||||
|
| $if EXPRESSION [[ CODE ]] ELSE_BRANCH
|
||||||
|
| [[ CODE ]]
|
||||||
|
| RAW_CODE
|
||||||
|
SEPARATOR ::= RAW_CODE | EMPTY
|
||||||
|
ELSE_BRANCH ::= $else [[ CODE ]]
|
||||||
|
| $elif EXPRESSION [[ CODE ]] ELSE_BRANCH
|
||||||
|
| EMPTY
|
||||||
|
EXPRESSION has Python syntax.
|
||||||
|
"""
|
||||||
|
|
||||||
|
__author__ = 'wan@google.com (Zhanyong Wan)'
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
TOKEN_TABLE = [
|
||||||
|
(re.compile(r'\$var\s+'), '$var'),
|
||||||
|
(re.compile(r'\$elif\s+'), '$elif'),
|
||||||
|
(re.compile(r'\$else\s+'), '$else'),
|
||||||
|
(re.compile(r'\$for\s+'), '$for'),
|
||||||
|
(re.compile(r'\$if\s+'), '$if'),
|
||||||
|
(re.compile(r'\$range\s+'), '$range'),
|
||||||
|
(re.compile(r'\$[_A-Za-z]\w*'), '$id'),
|
||||||
|
(re.compile(r'\$\(\$\)'), '$($)'),
|
||||||
|
(re.compile(r'\$'), '$'),
|
||||||
|
(re.compile(r'\[\[\n?'), '[['),
|
||||||
|
(re.compile(r'\]\]\n?'), ']]'),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class Cursor:
|
||||||
|
"""Represents a position (line and column) in a text file."""
|
||||||
|
|
||||||
|
def __init__(self, line=-1, column=-1):
|
||||||
|
self.line = line
|
||||||
|
self.column = column
|
||||||
|
|
||||||
|
def __eq__(self, rhs):
|
||||||
|
return self.line == rhs.line and self.column == rhs.column
|
||||||
|
|
||||||
|
def __ne__(self, rhs):
|
||||||
|
return not self == rhs
|
||||||
|
|
||||||
|
def __lt__(self, rhs):
|
||||||
|
return self.line < rhs.line or (
|
||||||
|
self.line == rhs.line and self.column < rhs.column)
|
||||||
|
|
||||||
|
def __le__(self, rhs):
|
||||||
|
return self < rhs or self == rhs
|
||||||
|
|
||||||
|
def __gt__(self, rhs):
|
||||||
|
return rhs < self
|
||||||
|
|
||||||
|
def __ge__(self, rhs):
|
||||||
|
return rhs <= self
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
if self == Eof():
|
||||||
|
return 'EOF'
|
||||||
|
else:
|
||||||
|
return '%s(%s)' % (self.line + 1, self.column)
|
||||||
|
|
||||||
|
def __add__(self, offset):
|
||||||
|
return Cursor(self.line, self.column + offset)
|
||||||
|
|
||||||
|
def __sub__(self, offset):
|
||||||
|
return Cursor(self.line, self.column - offset)
|
||||||
|
|
||||||
|
def Clone(self):
|
||||||
|
"""Returns a copy of self."""
|
||||||
|
|
||||||
|
return Cursor(self.line, self.column)
|
||||||
|
|
||||||
|
|
||||||
|
# Special cursor to indicate the end-of-file.
|
||||||
|
def Eof():
|
||||||
|
"""Returns the special cursor to denote the end-of-file."""
|
||||||
|
return Cursor(-1, -1)
|
||||||
|
|
||||||
|
|
||||||
|
class Token:
|
||||||
|
"""Represents a token in a Pump source file."""
|
||||||
|
|
||||||
|
def __init__(self, start=None, end=None, value=None, token_type=None):
|
||||||
|
if start is None:
|
||||||
|
self.start = Eof()
|
||||||
|
else:
|
||||||
|
self.start = start
|
||||||
|
if end is None:
|
||||||
|
self.end = Eof()
|
||||||
|
else:
|
||||||
|
self.end = end
|
||||||
|
self.value = value
|
||||||
|
self.token_type = token_type
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return 'Token @%s: \'%s\' type=%s' % (
|
||||||
|
self.start, self.value, self.token_type)
|
||||||
|
|
||||||
|
def Clone(self):
|
||||||
|
"""Returns a copy of self."""
|
||||||
|
|
||||||
|
return Token(self.start.Clone(), self.end.Clone(), self.value,
|
||||||
|
self.token_type)
|
||||||
|
|
||||||
|
|
||||||
|
def StartsWith(lines, pos, string):
|
||||||
|
"""Returns True iff the given position in lines starts with 'string'."""
|
||||||
|
|
||||||
|
return lines[pos.line][pos.column:].startswith(string)
|
||||||
|
|
||||||
|
|
||||||
|
def FindFirstInLine(line, token_table):
|
||||||
|
best_match_start = -1
|
||||||
|
for (regex, token_type) in token_table:
|
||||||
|
m = regex.search(line)
|
||||||
|
if m:
|
||||||
|
# We found regex in lines
|
||||||
|
if best_match_start < 0 or m.start() < best_match_start:
|
||||||
|
best_match_start = m.start()
|
||||||
|
best_match_length = m.end() - m.start()
|
||||||
|
best_match_token_type = token_type
|
||||||
|
|
||||||
|
if best_match_start < 0:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return (best_match_start, best_match_length, best_match_token_type)
|
||||||
|
|
||||||
|
|
||||||
|
def FindFirst(lines, token_table, cursor):
|
||||||
|
"""Finds the first occurrence of any string in strings in lines."""
|
||||||
|
|
||||||
|
start = cursor.Clone()
|
||||||
|
cur_line_number = cursor.line
|
||||||
|
for line in lines[start.line:]:
|
||||||
|
if cur_line_number == start.line:
|
||||||
|
line = line[start.column:]
|
||||||
|
m = FindFirstInLine(line, token_table)
|
||||||
|
if m:
|
||||||
|
# We found a regex in line.
|
||||||
|
(start_column, length, token_type) = m
|
||||||
|
if cur_line_number == start.line:
|
||||||
|
start_column += start.column
|
||||||
|
found_start = Cursor(cur_line_number, start_column)
|
||||||
|
found_end = found_start + length
|
||||||
|
return MakeToken(lines, found_start, found_end, token_type)
|
||||||
|
cur_line_number += 1
|
||||||
|
# We failed to find str in lines
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def SubString(lines, start, end):
|
||||||
|
"""Returns a substring in lines."""
|
||||||
|
|
||||||
|
if end == Eof():
|
||||||
|
end = Cursor(len(lines) - 1, len(lines[-1]))
|
||||||
|
|
||||||
|
if start >= end:
|
||||||
|
return ''
|
||||||
|
|
||||||
|
if start.line == end.line:
|
||||||
|
return lines[start.line][start.column:end.column]
|
||||||
|
|
||||||
|
result_lines = ([lines[start.line][start.column:]] +
|
||||||
|
lines[start.line + 1:end.line] +
|
||||||
|
[lines[end.line][:end.column]])
|
||||||
|
return ''.join(result_lines)
|
||||||
|
|
||||||
|
|
||||||
|
def StripMetaComments(str):
|
||||||
|
"""Strip meta comments from each line in the given string."""
|
||||||
|
|
||||||
|
# First, completely remove lines containing nothing but a meta
|
||||||
|
# comment, including the trailing \n.
|
||||||
|
str = re.sub(r'^\s*\$\$.*\n', '', str)
|
||||||
|
|
||||||
|
# Then, remove meta comments from contentful lines.
|
||||||
|
return re.sub(r'\s*\$\$.*', '', str)
|
||||||
|
|
||||||
|
|
||||||
|
def MakeToken(lines, start, end, token_type):
|
||||||
|
"""Creates a new instance of Token."""
|
||||||
|
|
||||||
|
return Token(start, end, SubString(lines, start, end), token_type)
|
||||||
|
|
||||||
|
|
||||||
|
def ParseToken(lines, pos, regex, token_type):
|
||||||
|
line = lines[pos.line][pos.column:]
|
||||||
|
m = regex.search(line)
|
||||||
|
if m and not m.start():
|
||||||
|
return MakeToken(lines, pos, pos + m.end(), token_type)
|
||||||
|
else:
|
||||||
|
print 'ERROR: %s expected at %s.' % (token_type, pos)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
ID_REGEX = re.compile(r'[_A-Za-z]\w*')
|
||||||
|
EQ_REGEX = re.compile(r'=')
|
||||||
|
REST_OF_LINE_REGEX = re.compile(r'.*?(?=$|\$\$)')
|
||||||
|
OPTIONAL_WHITE_SPACES_REGEX = re.compile(r'\s*')
|
||||||
|
WHITE_SPACE_REGEX = re.compile(r'\s')
|
||||||
|
DOT_DOT_REGEX = re.compile(r'\.\.')
|
||||||
|
|
||||||
|
|
||||||
|
def Skip(lines, pos, regex):
|
||||||
|
line = lines[pos.line][pos.column:]
|
||||||
|
m = re.search(regex, line)
|
||||||
|
if m and not m.start():
|
||||||
|
return pos + m.end()
|
||||||
|
else:
|
||||||
|
return pos
|
||||||
|
|
||||||
|
|
||||||
|
def SkipUntil(lines, pos, regex, token_type):
|
||||||
|
line = lines[pos.line][pos.column:]
|
||||||
|
m = re.search(regex, line)
|
||||||
|
if m:
|
||||||
|
return pos + m.start()
|
||||||
|
else:
|
||||||
|
print ('ERROR: %s expected on line %s after column %s.' %
|
||||||
|
(token_type, pos.line + 1, pos.column))
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def ParseExpTokenInParens(lines, pos):
|
||||||
|
def ParseInParens(pos):
|
||||||
|
pos = Skip(lines, pos, OPTIONAL_WHITE_SPACES_REGEX)
|
||||||
|
pos = Skip(lines, pos, r'\(')
|
||||||
|
pos = Parse(pos)
|
||||||
|
pos = Skip(lines, pos, r'\)')
|
||||||
|
return pos
|
||||||
|
|
||||||
|
def Parse(pos):
|
||||||
|
pos = SkipUntil(lines, pos, r'\(|\)', ')')
|
||||||
|
if SubString(lines, pos, pos + 1) == '(':
|
||||||
|
pos = Parse(pos + 1)
|
||||||
|
pos = Skip(lines, pos, r'\)')
|
||||||
|
return Parse(pos)
|
||||||
|
else:
|
||||||
|
return pos
|
||||||
|
|
||||||
|
start = pos.Clone()
|
||||||
|
pos = ParseInParens(pos)
|
||||||
|
return MakeToken(lines, start, pos, 'exp')
|
||||||
|
|
||||||
|
|
||||||
|
def RStripNewLineFromToken(token):
|
||||||
|
if token.value.endswith('\n'):
|
||||||
|
return Token(token.start, token.end, token.value[:-1], token.token_type)
|
||||||
|
else:
|
||||||
|
return token
|
||||||
|
|
||||||
|
|
||||||
|
def TokenizeLines(lines, pos):
|
||||||
|
while True:
|
||||||
|
found = FindFirst(lines, TOKEN_TABLE, pos)
|
||||||
|
if not found:
|
||||||
|
yield MakeToken(lines, pos, Eof(), 'code')
|
||||||
|
return
|
||||||
|
|
||||||
|
if found.start == pos:
|
||||||
|
prev_token = None
|
||||||
|
prev_token_rstripped = None
|
||||||
|
else:
|
||||||
|
prev_token = MakeToken(lines, pos, found.start, 'code')
|
||||||
|
prev_token_rstripped = RStripNewLineFromToken(prev_token)
|
||||||
|
|
||||||
|
if found.token_type == '$var':
|
||||||
|
if prev_token_rstripped:
|
||||||
|
yield prev_token_rstripped
|
||||||
|
yield found
|
||||||
|
id_token = ParseToken(lines, found.end, ID_REGEX, 'id')
|
||||||
|
yield id_token
|
||||||
|
pos = Skip(lines, id_token.end, OPTIONAL_WHITE_SPACES_REGEX)
|
||||||
|
|
||||||
|
eq_token = ParseToken(lines, pos, EQ_REGEX, '=')
|
||||||
|
yield eq_token
|
||||||
|
pos = Skip(lines, eq_token.end, r'\s*')
|
||||||
|
|
||||||
|
if SubString(lines, pos, pos + 2) != '[[':
|
||||||
|
exp_token = ParseToken(lines, pos, REST_OF_LINE_REGEX, 'exp')
|
||||||
|
yield exp_token
|
||||||
|
pos = Cursor(exp_token.end.line + 1, 0)
|
||||||
|
elif found.token_type == '$for':
|
||||||
|
if prev_token_rstripped:
|
||||||
|
yield prev_token_rstripped
|
||||||
|
yield found
|
||||||
|
id_token = ParseToken(lines, found.end, ID_REGEX, 'id')
|
||||||
|
yield id_token
|
||||||
|
pos = Skip(lines, id_token.end, WHITE_SPACE_REGEX)
|
||||||
|
elif found.token_type == '$range':
|
||||||
|
if prev_token_rstripped:
|
||||||
|
yield prev_token_rstripped
|
||||||
|
yield found
|
||||||
|
id_token = ParseToken(lines, found.end, ID_REGEX, 'id')
|
||||||
|
yield id_token
|
||||||
|
pos = Skip(lines, id_token.end, OPTIONAL_WHITE_SPACES_REGEX)
|
||||||
|
|
||||||
|
dots_pos = SkipUntil(lines, pos, DOT_DOT_REGEX, '..')
|
||||||
|
yield MakeToken(lines, pos, dots_pos, 'exp')
|
||||||
|
yield MakeToken(lines, dots_pos, dots_pos + 2, '..')
|
||||||
|
pos = dots_pos + 2
|
||||||
|
new_pos = Cursor(pos.line + 1, 0)
|
||||||
|
yield MakeToken(lines, pos, new_pos, 'exp')
|
||||||
|
pos = new_pos
|
||||||
|
elif found.token_type == '$':
|
||||||
|
if prev_token:
|
||||||
|
yield prev_token
|
||||||
|
yield found
|
||||||
|
exp_token = ParseExpTokenInParens(lines, found.end)
|
||||||
|
yield exp_token
|
||||||
|
pos = exp_token.end
|
||||||
|
elif (found.token_type == ']]' or found.token_type == '$if' or
|
||||||
|
found.token_type == '$elif' or found.token_type == '$else'):
|
||||||
|
if prev_token_rstripped:
|
||||||
|
yield prev_token_rstripped
|
||||||
|
yield found
|
||||||
|
pos = found.end
|
||||||
|
else:
|
||||||
|
if prev_token:
|
||||||
|
yield prev_token
|
||||||
|
yield found
|
||||||
|
pos = found.end
|
||||||
|
|
||||||
|
|
||||||
|
def Tokenize(s):
|
||||||
|
"""A generator that yields the tokens in the given string."""
|
||||||
|
if s != '':
|
||||||
|
lines = s.splitlines(True)
|
||||||
|
for token in TokenizeLines(lines, Cursor(0, 0)):
|
||||||
|
yield token
|
||||||
|
|
||||||
|
|
||||||
|
class CodeNode:
|
||||||
|
def __init__(self, atomic_code_list=None):
|
||||||
|
self.atomic_code = atomic_code_list
|
||||||
|
|
||||||
|
|
||||||
|
class VarNode:
|
||||||
|
def __init__(self, identifier=None, atomic_code=None):
|
||||||
|
self.identifier = identifier
|
||||||
|
self.atomic_code = atomic_code
|
||||||
|
|
||||||
|
|
||||||
|
class RangeNode:
|
||||||
|
def __init__(self, identifier=None, exp1=None, exp2=None):
|
||||||
|
self.identifier = identifier
|
||||||
|
self.exp1 = exp1
|
||||||
|
self.exp2 = exp2
|
||||||
|
|
||||||
|
|
||||||
|
class ForNode:
|
||||||
|
def __init__(self, identifier=None, sep=None, code=None):
|
||||||
|
self.identifier = identifier
|
||||||
|
self.sep = sep
|
||||||
|
self.code = code
|
||||||
|
|
||||||
|
|
||||||
|
class ElseNode:
|
||||||
|
def __init__(self, else_branch=None):
|
||||||
|
self.else_branch = else_branch
|
||||||
|
|
||||||
|
|
||||||
|
class IfNode:
|
||||||
|
def __init__(self, exp=None, then_branch=None, else_branch=None):
|
||||||
|
self.exp = exp
|
||||||
|
self.then_branch = then_branch
|
||||||
|
self.else_branch = else_branch
|
||||||
|
|
||||||
|
|
||||||
|
class RawCodeNode:
|
||||||
|
def __init__(self, token=None):
|
||||||
|
self.raw_code = token
|
||||||
|
|
||||||
|
|
||||||
|
class LiteralDollarNode:
|
||||||
|
def __init__(self, token):
|
||||||
|
self.token = token
|
||||||
|
|
||||||
|
|
||||||
|
class ExpNode:
|
||||||
|
def __init__(self, token, python_exp):
|
||||||
|
self.token = token
|
||||||
|
self.python_exp = python_exp
|
||||||
|
|
||||||
|
|
||||||
|
def PopFront(a_list):
|
||||||
|
head = a_list[0]
|
||||||
|
a_list[:1] = []
|
||||||
|
return head
|
||||||
|
|
||||||
|
|
||||||
|
def PushFront(a_list, elem):
|
||||||
|
a_list[:0] = [elem]
|
||||||
|
|
||||||
|
|
||||||
|
def PopToken(a_list, token_type=None):
|
||||||
|
token = PopFront(a_list)
|
||||||
|
if token_type is not None and token.token_type != token_type:
|
||||||
|
print 'ERROR: %s expected at %s' % (token_type, token.start)
|
||||||
|
print 'ERROR: %s found instead' % (token,)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
return token
|
||||||
|
|
||||||
|
|
||||||
|
def PeekToken(a_list):
|
||||||
|
if not a_list:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return a_list[0]
|
||||||
|
|
||||||
|
|
||||||
|
def ParseExpNode(token):
|
||||||
|
python_exp = re.sub(r'([_A-Za-z]\w*)', r'self.GetValue("\1")', token.value)
|
||||||
|
return ExpNode(token, python_exp)
|
||||||
|
|
||||||
|
|
||||||
|
def ParseElseNode(tokens):
|
||||||
|
def Pop(token_type=None):
|
||||||
|
return PopToken(tokens, token_type)
|
||||||
|
|
||||||
|
next = PeekToken(tokens)
|
||||||
|
if not next:
|
||||||
|
return None
|
||||||
|
if next.token_type == '$else':
|
||||||
|
Pop('$else')
|
||||||
|
Pop('[[')
|
||||||
|
code_node = ParseCodeNode(tokens)
|
||||||
|
Pop(']]')
|
||||||
|
return code_node
|
||||||
|
elif next.token_type == '$elif':
|
||||||
|
Pop('$elif')
|
||||||
|
exp = Pop('code')
|
||||||
|
Pop('[[')
|
||||||
|
code_node = ParseCodeNode(tokens)
|
||||||
|
Pop(']]')
|
||||||
|
inner_else_node = ParseElseNode(tokens)
|
||||||
|
return CodeNode([IfNode(ParseExpNode(exp), code_node, inner_else_node)])
|
||||||
|
elif not next.value.strip():
|
||||||
|
Pop('code')
|
||||||
|
return ParseElseNode(tokens)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def ParseAtomicCodeNode(tokens):
|
||||||
|
def Pop(token_type=None):
|
||||||
|
return PopToken(tokens, token_type)
|
||||||
|
|
||||||
|
head = PopFront(tokens)
|
||||||
|
t = head.token_type
|
||||||
|
if t == 'code':
|
||||||
|
return RawCodeNode(head)
|
||||||
|
elif t == '$var':
|
||||||
|
id_token = Pop('id')
|
||||||
|
Pop('=')
|
||||||
|
next = PeekToken(tokens)
|
||||||
|
if next.token_type == 'exp':
|
||||||
|
exp_token = Pop()
|
||||||
|
return VarNode(id_token, ParseExpNode(exp_token))
|
||||||
|
Pop('[[')
|
||||||
|
code_node = ParseCodeNode(tokens)
|
||||||
|
Pop(']]')
|
||||||
|
return VarNode(id_token, code_node)
|
||||||
|
elif t == '$for':
|
||||||
|
id_token = Pop('id')
|
||||||
|
next_token = PeekToken(tokens)
|
||||||
|
if next_token.token_type == 'code':
|
||||||
|
sep_token = next_token
|
||||||
|
Pop('code')
|
||||||
|
else:
|
||||||
|
sep_token = None
|
||||||
|
Pop('[[')
|
||||||
|
code_node = ParseCodeNode(tokens)
|
||||||
|
Pop(']]')
|
||||||
|
return ForNode(id_token, sep_token, code_node)
|
||||||
|
elif t == '$if':
|
||||||
|
exp_token = Pop('code')
|
||||||
|
Pop('[[')
|
||||||
|
code_node = ParseCodeNode(tokens)
|
||||||
|
Pop(']]')
|
||||||
|
else_node = ParseElseNode(tokens)
|
||||||
|
return IfNode(ParseExpNode(exp_token), code_node, else_node)
|
||||||
|
elif t == '$range':
|
||||||
|
id_token = Pop('id')
|
||||||
|
exp1_token = Pop('exp')
|
||||||
|
Pop('..')
|
||||||
|
exp2_token = Pop('exp')
|
||||||
|
return RangeNode(id_token, ParseExpNode(exp1_token),
|
||||||
|
ParseExpNode(exp2_token))
|
||||||
|
elif t == '$id':
|
||||||
|
return ParseExpNode(Token(head.start + 1, head.end, head.value[1:], 'id'))
|
||||||
|
elif t == '$($)':
|
||||||
|
return LiteralDollarNode(head)
|
||||||
|
elif t == '$':
|
||||||
|
exp_token = Pop('exp')
|
||||||
|
return ParseExpNode(exp_token)
|
||||||
|
elif t == '[[':
|
||||||
|
code_node = ParseCodeNode(tokens)
|
||||||
|
Pop(']]')
|
||||||
|
return code_node
|
||||||
|
else:
|
||||||
|
PushFront(tokens, head)
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def ParseCodeNode(tokens):
|
||||||
|
atomic_code_list = []
|
||||||
|
while True:
|
||||||
|
if not tokens:
|
||||||
|
break
|
||||||
|
atomic_code_node = ParseAtomicCodeNode(tokens)
|
||||||
|
if atomic_code_node:
|
||||||
|
atomic_code_list.append(atomic_code_node)
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
return CodeNode(atomic_code_list)
|
||||||
|
|
||||||
|
|
||||||
|
def ParseToAST(pump_src_text):
|
||||||
|
"""Convert the given Pump source text into an AST."""
|
||||||
|
tokens = list(Tokenize(pump_src_text))
|
||||||
|
code_node = ParseCodeNode(tokens)
|
||||||
|
return code_node
|
||||||
|
|
||||||
|
|
||||||
|
class Env:
|
||||||
|
def __init__(self):
|
||||||
|
self.variables = []
|
||||||
|
self.ranges = []
|
||||||
|
|
||||||
|
def Clone(self):
|
||||||
|
clone = Env()
|
||||||
|
clone.variables = self.variables[:]
|
||||||
|
clone.ranges = self.ranges[:]
|
||||||
|
return clone
|
||||||
|
|
||||||
|
def PushVariable(self, var, value):
|
||||||
|
# If value looks like an int, store it as an int.
|
||||||
|
try:
|
||||||
|
int_value = int(value)
|
||||||
|
if ('%s' % int_value) == value:
|
||||||
|
value = int_value
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
self.variables[:0] = [(var, value)]
|
||||||
|
|
||||||
|
def PopVariable(self):
|
||||||
|
self.variables[:1] = []
|
||||||
|
|
||||||
|
def PushRange(self, var, lower, upper):
|
||||||
|
self.ranges[:0] = [(var, lower, upper)]
|
||||||
|
|
||||||
|
def PopRange(self):
|
||||||
|
self.ranges[:1] = []
|
||||||
|
|
||||||
|
def GetValue(self, identifier):
|
||||||
|
for (var, value) in self.variables:
|
||||||
|
if identifier == var:
|
||||||
|
return value
|
||||||
|
|
||||||
|
print 'ERROR: meta variable %s is undefined.' % (identifier,)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
def EvalExp(self, exp):
|
||||||
|
try:
|
||||||
|
result = eval(exp.python_exp)
|
||||||
|
except Exception, e:
|
||||||
|
print 'ERROR: caught exception %s: %s' % (e.__class__.__name__, e)
|
||||||
|
print ('ERROR: failed to evaluate meta expression %s at %s' %
|
||||||
|
(exp.python_exp, exp.token.start))
|
||||||
|
sys.exit(1)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def GetRange(self, identifier):
|
||||||
|
for (var, lower, upper) in self.ranges:
|
||||||
|
if identifier == var:
|
||||||
|
return (lower, upper)
|
||||||
|
|
||||||
|
print 'ERROR: range %s is undefined.' % (identifier,)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
class Output:
|
||||||
|
def __init__(self):
|
||||||
|
self.string = ''
|
||||||
|
|
||||||
|
def GetLastLine(self):
|
||||||
|
index = self.string.rfind('\n')
|
||||||
|
if index < 0:
|
||||||
|
return ''
|
||||||
|
|
||||||
|
return self.string[index + 1:]
|
||||||
|
|
||||||
|
def Append(self, s):
|
||||||
|
self.string += s
|
||||||
|
|
||||||
|
|
||||||
|
def RunAtomicCode(env, node, output):
|
||||||
|
if isinstance(node, VarNode):
|
||||||
|
identifier = node.identifier.value.strip()
|
||||||
|
result = Output()
|
||||||
|
RunAtomicCode(env.Clone(), node.atomic_code, result)
|
||||||
|
value = result.string
|
||||||
|
env.PushVariable(identifier, value)
|
||||||
|
elif isinstance(node, RangeNode):
|
||||||
|
identifier = node.identifier.value.strip()
|
||||||
|
lower = int(env.EvalExp(node.exp1))
|
||||||
|
upper = int(env.EvalExp(node.exp2))
|
||||||
|
env.PushRange(identifier, lower, upper)
|
||||||
|
elif isinstance(node, ForNode):
|
||||||
|
identifier = node.identifier.value.strip()
|
||||||
|
if node.sep is None:
|
||||||
|
sep = ''
|
||||||
|
else:
|
||||||
|
sep = node.sep.value
|
||||||
|
(lower, upper) = env.GetRange(identifier)
|
||||||
|
for i in range(lower, upper + 1):
|
||||||
|
new_env = env.Clone()
|
||||||
|
new_env.PushVariable(identifier, i)
|
||||||
|
RunCode(new_env, node.code, output)
|
||||||
|
if i != upper:
|
||||||
|
output.Append(sep)
|
||||||
|
elif isinstance(node, RawCodeNode):
|
||||||
|
output.Append(node.raw_code.value)
|
||||||
|
elif isinstance(node, IfNode):
|
||||||
|
cond = env.EvalExp(node.exp)
|
||||||
|
if cond:
|
||||||
|
RunCode(env.Clone(), node.then_branch, output)
|
||||||
|
elif node.else_branch is not None:
|
||||||
|
RunCode(env.Clone(), node.else_branch, output)
|
||||||
|
elif isinstance(node, ExpNode):
|
||||||
|
value = env.EvalExp(node)
|
||||||
|
output.Append('%s' % (value,))
|
||||||
|
elif isinstance(node, LiteralDollarNode):
|
||||||
|
output.Append('$')
|
||||||
|
elif isinstance(node, CodeNode):
|
||||||
|
RunCode(env.Clone(), node, output)
|
||||||
|
else:
|
||||||
|
print 'BAD'
|
||||||
|
print node
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def RunCode(env, code_node, output):
|
||||||
|
for atomic_code in code_node.atomic_code:
|
||||||
|
RunAtomicCode(env, atomic_code, output)
|
||||||
|
|
||||||
|
|
||||||
|
def IsSingleLineComment(cur_line):
|
||||||
|
return '//' in cur_line
|
||||||
|
|
||||||
|
|
||||||
|
def IsInPreprocessorDirective(prev_lines, cur_line):
|
||||||
|
if cur_line.lstrip().startswith('#'):
|
||||||
|
return True
|
||||||
|
return prev_lines and prev_lines[-1].endswith('\\')
|
||||||
|
|
||||||
|
|
||||||
|
def WrapComment(line, output):
|
||||||
|
loc = line.find('//')
|
||||||
|
before_comment = line[:loc].rstrip()
|
||||||
|
if before_comment == '':
|
||||||
|
indent = loc
|
||||||
|
else:
|
||||||
|
output.append(before_comment)
|
||||||
|
indent = len(before_comment) - len(before_comment.lstrip())
|
||||||
|
prefix = indent*' ' + '// '
|
||||||
|
max_len = 80 - len(prefix)
|
||||||
|
comment = line[loc + 2:].strip()
|
||||||
|
segs = [seg for seg in re.split(r'(\w+\W*)', comment) if seg != '']
|
||||||
|
cur_line = ''
|
||||||
|
for seg in segs:
|
||||||
|
if len((cur_line + seg).rstrip()) < max_len:
|
||||||
|
cur_line += seg
|
||||||
|
else:
|
||||||
|
if cur_line.strip() != '':
|
||||||
|
output.append(prefix + cur_line.rstrip())
|
||||||
|
cur_line = seg.lstrip()
|
||||||
|
if cur_line.strip() != '':
|
||||||
|
output.append(prefix + cur_line.strip())
|
||||||
|
|
||||||
|
|
||||||
|
def WrapCode(line, line_concat, output):
|
||||||
|
indent = len(line) - len(line.lstrip())
|
||||||
|
prefix = indent*' ' # Prefix of the current line
|
||||||
|
max_len = 80 - indent - len(line_concat) # Maximum length of the current line
|
||||||
|
new_prefix = prefix + 4*' ' # Prefix of a continuation line
|
||||||
|
new_max_len = max_len - 4 # Maximum length of a continuation line
|
||||||
|
# Prefers to wrap a line after a ',' or ';'.
|
||||||
|
segs = [seg for seg in re.split(r'([^,;]+[,;]?)', line.strip()) if seg != '']
|
||||||
|
cur_line = '' # The current line without leading spaces.
|
||||||
|
for seg in segs:
|
||||||
|
# If the line is still too long, wrap at a space.
|
||||||
|
while cur_line == '' and len(seg.strip()) > max_len:
|
||||||
|
seg = seg.lstrip()
|
||||||
|
split_at = seg.rfind(' ', 0, max_len)
|
||||||
|
output.append(prefix + seg[:split_at].strip() + line_concat)
|
||||||
|
seg = seg[split_at + 1:]
|
||||||
|
prefix = new_prefix
|
||||||
|
max_len = new_max_len
|
||||||
|
|
||||||
|
if len((cur_line + seg).rstrip()) < max_len:
|
||||||
|
cur_line = (cur_line + seg).lstrip()
|
||||||
|
else:
|
||||||
|
output.append(prefix + cur_line.rstrip() + line_concat)
|
||||||
|
prefix = new_prefix
|
||||||
|
max_len = new_max_len
|
||||||
|
cur_line = seg.lstrip()
|
||||||
|
if cur_line.strip() != '':
|
||||||
|
output.append(prefix + cur_line.strip())
|
||||||
|
|
||||||
|
|
||||||
|
def WrapPreprocessorDirective(line, output):
|
||||||
|
WrapCode(line, ' \\', output)
|
||||||
|
|
||||||
|
|
||||||
|
def WrapPlainCode(line, output):
|
||||||
|
WrapCode(line, '', output)
|
||||||
|
|
||||||
|
|
||||||
|
def IsMultiLineIWYUPragma(line):
|
||||||
|
return re.search(r'/\* IWYU pragma: ', line)
|
||||||
|
|
||||||
|
|
||||||
|
def IsHeaderGuardIncludeOrOneLineIWYUPragma(line):
|
||||||
|
return (re.match(r'^#(ifndef|define|endif\s*//)\s*[\w_]+\s*$', line) or
|
||||||
|
re.match(r'^#include\s', line) or
|
||||||
|
# Don't break IWYU pragmas, either; that causes iwyu.py problems.
|
||||||
|
re.search(r'// IWYU pragma: ', line))
|
||||||
|
|
||||||
|
|
||||||
|
def WrapLongLine(line, output):
|
||||||
|
line = line.rstrip()
|
||||||
|
if len(line) <= 80:
|
||||||
|
output.append(line)
|
||||||
|
elif IsSingleLineComment(line):
|
||||||
|
if IsHeaderGuardIncludeOrOneLineIWYUPragma(line):
|
||||||
|
# The style guide made an exception to allow long header guard lines,
|
||||||
|
# includes and IWYU pragmas.
|
||||||
|
output.append(line)
|
||||||
|
else:
|
||||||
|
WrapComment(line, output)
|
||||||
|
elif IsInPreprocessorDirective(output, line):
|
||||||
|
if IsHeaderGuardIncludeOrOneLineIWYUPragma(line):
|
||||||
|
# The style guide made an exception to allow long header guard lines,
|
||||||
|
# includes and IWYU pragmas.
|
||||||
|
output.append(line)
|
||||||
|
else:
|
||||||
|
WrapPreprocessorDirective(line, output)
|
||||||
|
elif IsMultiLineIWYUPragma(line):
|
||||||
|
output.append(line)
|
||||||
|
else:
|
||||||
|
WrapPlainCode(line, output)
|
||||||
|
|
||||||
|
|
||||||
|
def BeautifyCode(string):
|
||||||
|
lines = string.splitlines()
|
||||||
|
output = []
|
||||||
|
for line in lines:
|
||||||
|
WrapLongLine(line, output)
|
||||||
|
output2 = [line.rstrip() for line in output]
|
||||||
|
return '\n'.join(output2) + '\n'
|
||||||
|
|
||||||
|
|
||||||
|
def ConvertFromPumpSource(src_text):
|
||||||
|
"""Return the text generated from the given Pump source text."""
|
||||||
|
ast = ParseToAST(StripMetaComments(src_text))
|
||||||
|
output = Output()
|
||||||
|
RunCode(Env(), ast, output)
|
||||||
|
return BeautifyCode(output.string)
|
||||||
|
|
||||||
|
|
||||||
|
def main(argv):
|
||||||
|
if len(argv) == 1:
|
||||||
|
print __doc__
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
file_path = argv[-1]
|
||||||
|
output_str = ConvertFromPumpSource(file(file_path, 'r').read())
|
||||||
|
if file_path.endswith('.pump'):
|
||||||
|
output_file_path = file_path[:-5]
|
||||||
|
else:
|
||||||
|
output_file_path = '-'
|
||||||
|
if output_file_path == '-':
|
||||||
|
print output_str,
|
||||||
|
else:
|
||||||
|
output_file = file(output_file_path, 'w')
|
||||||
|
output_file.write('// This file was GENERATED by command:\n')
|
||||||
|
output_file.write('// %s %s\n' %
|
||||||
|
(os.path.basename(__file__), os.path.basename(file_path)))
|
||||||
|
output_file.write('// DO NOT EDIT BY HAND!!!\n\n')
|
||||||
|
output_file.write(output_str)
|
||||||
|
output_file.close()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(sys.argv)
|
59
external/gtest/scripts/test/Makefile
vendored
Normal file
59
external/gtest/scripts/test/Makefile
vendored
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
# A Makefile for fusing Google Test and building a sample test against it.
|
||||||
|
#
|
||||||
|
# SYNOPSIS:
|
||||||
|
#
|
||||||
|
# make [all] - makes everything.
|
||||||
|
# make TARGET - makes the given target.
|
||||||
|
# make check - makes everything and runs the built sample test.
|
||||||
|
# make clean - removes all files generated by make.
|
||||||
|
|
||||||
|
# Points to the root of fused Google Test, relative to where this file is.
|
||||||
|
FUSED_GTEST_DIR = output
|
||||||
|
|
||||||
|
# Paths to the fused gtest files.
|
||||||
|
FUSED_GTEST_H = $(FUSED_GTEST_DIR)/gtest/gtest.h
|
||||||
|
FUSED_GTEST_ALL_CC = $(FUSED_GTEST_DIR)/gtest/gtest-all.cc
|
||||||
|
|
||||||
|
# Where to find the sample test.
|
||||||
|
SAMPLE_DIR = ../../samples
|
||||||
|
|
||||||
|
# Where to find gtest_main.cc.
|
||||||
|
GTEST_MAIN_CC = ../../src/gtest_main.cc
|
||||||
|
|
||||||
|
# Flags passed to the preprocessor.
|
||||||
|
# We have no idea here whether pthreads is available in the system, so
|
||||||
|
# disable its use.
|
||||||
|
CPPFLAGS += -I$(FUSED_GTEST_DIR) -DGTEST_HAS_PTHREAD=0
|
||||||
|
|
||||||
|
# Flags passed to the C++ compiler.
|
||||||
|
CXXFLAGS += -g
|
||||||
|
|
||||||
|
all : sample1_unittest
|
||||||
|
|
||||||
|
check : all
|
||||||
|
./sample1_unittest
|
||||||
|
|
||||||
|
clean :
|
||||||
|
rm -rf $(FUSED_GTEST_DIR) sample1_unittest *.o
|
||||||
|
|
||||||
|
$(FUSED_GTEST_H) :
|
||||||
|
../fuse_gtest_files.py $(FUSED_GTEST_DIR)
|
||||||
|
|
||||||
|
$(FUSED_GTEST_ALL_CC) :
|
||||||
|
../fuse_gtest_files.py $(FUSED_GTEST_DIR)
|
||||||
|
|
||||||
|
gtest-all.o : $(FUSED_GTEST_H) $(FUSED_GTEST_ALL_CC)
|
||||||
|
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(FUSED_GTEST_DIR)/gtest/gtest-all.cc
|
||||||
|
|
||||||
|
gtest_main.o : $(FUSED_GTEST_H) $(GTEST_MAIN_CC)
|
||||||
|
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(GTEST_MAIN_CC)
|
||||||
|
|
||||||
|
sample1.o : $(SAMPLE_DIR)/sample1.cc $(SAMPLE_DIR)/sample1.h
|
||||||
|
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(SAMPLE_DIR)/sample1.cc
|
||||||
|
|
||||||
|
sample1_unittest.o : $(SAMPLE_DIR)/sample1_unittest.cc \
|
||||||
|
$(SAMPLE_DIR)/sample1.h $(FUSED_GTEST_H)
|
||||||
|
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(SAMPLE_DIR)/sample1_unittest.cc
|
||||||
|
|
||||||
|
sample1_unittest : sample1.o sample1_unittest.o gtest-all.o gtest_main.o
|
||||||
|
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $^ -o $@
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue