From 116df9d176c9bff97b8a615bdc517ad7d52b39e3 Mon Sep 17 00:00:00 2001 From: ciigann Date: Mon, 2 Dec 2024 22:34:14 +0500 Subject: [PATCH 1/2] Updated two_sum function in src/two-sum.cpp --- .gitmodules | 3 +++ external/googletest | 1 + src/two-sum.cpp | 20 ++++++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 .gitmodules create mode 160000 external/googletest create mode 100644 src/two-sum.cpp diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..bab1865 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "external/googletest"] + path = external/googletest + url = https://github.com/google/googletest.git diff --git a/external/googletest b/external/googletest new file mode 160000 index 0000000..35d0c36 --- /dev/null +++ b/external/googletest @@ -0,0 +1 @@ +Subproject commit 35d0c365609296fa4730d62057c487e3cfa030ff diff --git a/src/two-sum.cpp b/src/two-sum.cpp new file mode 100644 index 0000000..bb6b5a6 --- /dev/null +++ b/src/two-sum.cpp @@ -0,0 +1,20 @@ +#include + +#define ARRAY_SIZE 5 + +bool two_sum(const int nums[ARRAY_SIZE], const int target, std::size_t& index0, std::size_t& index1) { + std::unordered_map num_indices; + for (std::size_t i = 0; i < ARRAY_SIZE; ++i) { + int complement = target - nums[i]; + if (num_indices.find(complement) != num_indices.end()) { + index0 = num_indices[complement]; + index1 = i; + if (index0 > index1) { + std::swap(index0, index1); + } + return true; + } + num_indices[nums[i]] = i; + } + return false; +} From 1d7de7175912cb2884c06c8db63d9d4eaa057940 Mon Sep 17 00:00:00 2001 From: ciigann Date: Thu, 5 Dec 2024 18:29:31 +0500 Subject: [PATCH 2/2] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20two?= =?UTF-8?q?=5Fsum.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 12 +- build/CMakeCache.txt | 590 ++ build/CMakeFiles/3.28.3/CMakeCCompiler.cmake | 74 + .../CMakeFiles/3.28.3/CMakeCXXCompiler.cmake | 85 + .../3.28.3/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 15960 bytes .../3.28.3/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 15984 bytes build/CMakeFiles/3.28.3/CMakeSystem.cmake | 15 + .../3.28.3/CompilerIdC/CMakeCCompilerId.c | 880 ++ build/CMakeFiles/3.28.3/CompilerIdC/a.out | Bin 0 -> 16080 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 869 ++ build/CMakeFiles/3.28.3/CompilerIdCXX/a.out | Bin 0 -> 16088 bytes build/CMakeFiles/CMakeConfigureLog.yaml | 563 ++ .../CMakeDirectoryInformation.cmake | 16 + build/CMakeFiles/Makefile.cmake | 90 + build/CMakeFiles/Makefile2 | 299 + build/CMakeFiles/TargetDirectories.txt | 34 + build/CMakeFiles/cmake.check_cache | 1 + build/CMakeFiles/main.dir/DependInfo.cmake | 24 + build/CMakeFiles/main.dir/build.make | 126 + build/CMakeFiles/main.dir/cmake_clean.cmake | 13 + .../main.dir/compiler_depend.internal | 198 + .../CMakeFiles/main.dir/compiler_depend.make | 574 ++ build/CMakeFiles/main.dir/compiler_depend.ts | 2 + build/CMakeFiles/main.dir/depend.make | 2 + build/CMakeFiles/main.dir/flags.make | 10 + build/CMakeFiles/main.dir/link.txt | 1 + build/CMakeFiles/main.dir/progress.make | 4 + build/CMakeFiles/main.dir/src/main.cpp.o | Bin 0 -> 20912 bytes build/CMakeFiles/main.dir/src/main.cpp.o.d | 152 + build/CMakeFiles/main.dir/src/two-sum.cpp.o | Bin 0 -> 1384 bytes build/CMakeFiles/main.dir/src/two-sum.cpp.o.d | 15 + build/CMakeFiles/progress.marks | 1 + .../two-sum-test.dir/DependInfo.cmake | 24 + build/CMakeFiles/two-sum-test.dir/build.make | 130 + .../two-sum-test.dir/cmake_clean.cmake | 14 + .../two-sum-test.dir/compiler_depend.make | 2 + .../two-sum-test.dir/compiler_depend.ts | 2 + build/CMakeFiles/two-sum-test.dir/depend.make | 2 + build/CMakeFiles/two-sum-test.dir/flags.make | 10 + build/CMakeFiles/two-sum-test.dir/link.txt | 1 + .../CMakeFiles/two-sum-test.dir/progress.make | 4 + .../two-sum-test.dir/src/two-sum.cpp.o | Bin 0 -> 6616 bytes .../two-sum-test.dir/src/two-sum.cpp.o.d | 15 + .../two-sum-test.dir/tests/test.cpp.o | Bin 0 -> 406168 bytes .../two-sum-test.dir/tests/test.cpp.o.d | 277 + build/CTestTestfile.cmake | 10 + build/Makefile | 368 + build/Testing/Temporary/CTestCostData.txt | 8 + build/Testing/Temporary/LastTest.log | 201 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/progress.marks | 1 + .../googletest-build/CTestTestfile.cmake | 7 + build/_deps/googletest-build/Makefile | 200 + .../googletest-build/cmake_install.cmake | 50 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/gmock.dir/DependInfo.cmake | 23 + .../CMakeFiles/gmock.dir/build.make | 111 + .../CMakeFiles/gmock.dir/cmake_clean.cmake | 11 + .../gmock.dir/cmake_clean_target.cmake | 3 + .../CMakeFiles/gmock.dir/compiler_depend.make | 2 + .../CMakeFiles/gmock.dir/compiler_depend.ts | 2 + .../CMakeFiles/gmock.dir/depend.make | 2 + .../CMakeFiles/gmock.dir/flags.make | 10 + .../googlemock/CMakeFiles/gmock.dir/link.txt | 2 + .../CMakeFiles/gmock.dir/progress.make | 3 + .../CMakeFiles/gmock.dir/src/gmock-all.cc.o | Bin 0 -> 642960 bytes .../CMakeFiles/gmock.dir/src/gmock-all.cc.o.d | 328 + .../gmock_main.dir/DependInfo.cmake | 23 + .../CMakeFiles/gmock_main.dir/build.make | 111 + .../gmock_main.dir/cmake_clean.cmake | 11 + .../gmock_main.dir/cmake_clean_target.cmake | 3 + .../gmock_main.dir/compiler_depend.make | 2 + .../gmock_main.dir/compiler_depend.ts | 2 + .../CMakeFiles/gmock_main.dir/depend.make | 2 + .../CMakeFiles/gmock_main.dir/flags.make | 10 + .../CMakeFiles/gmock_main.dir/link.txt | 2 + .../CMakeFiles/gmock_main.dir/progress.make | 3 + .../gmock_main.dir/src/gmock_main.cc.o | Bin 0 -> 3320 bytes .../gmock_main.dir/src/gmock_main.cc.o.d | 324 + .../googlemock/CMakeFiles/progress.marks | 1 + .../googlemock/CTestTestfile.cmake | 7 + .../googletest-build/googlemock/Makefile | 284 + .../googlemock/cmake_install.cmake | 70 + .../CMakeDirectoryInformation.cmake | 16 + .../GTestTargets-noconfig.cmake | 49 + .../GTestTargets.cmake | 139 + .../CMakeFiles/gtest.dir/DependInfo.cmake | 23 + .../CMakeFiles/gtest.dir/build.make | 111 + .../CMakeFiles/gtest.dir/cmake_clean.cmake | 11 + .../gtest.dir/cmake_clean_target.cmake | 3 + .../CMakeFiles/gtest.dir/compiler_depend.make | 2 + .../CMakeFiles/gtest.dir/compiler_depend.ts | 2 + .../CMakeFiles/gtest.dir/depend.make | 2 + .../CMakeFiles/gtest.dir/flags.make | 10 + .../googletest/CMakeFiles/gtest.dir/link.txt | 2 + .../CMakeFiles/gtest.dir/progress.make | 3 + .../CMakeFiles/gtest.dir/src/gtest-all.cc.o | Bin 0 -> 2076024 bytes .../CMakeFiles/gtest.dir/src/gtest-all.cc.o.d | 349 + .../gtest_main.dir/DependInfo.cmake | 23 + .../CMakeFiles/gtest_main.dir/build.make | 111 + .../gtest_main.dir/cmake_clean.cmake | 11 + .../gtest_main.dir/cmake_clean_target.cmake | 3 + .../gtest_main.dir/compiler_depend.make | 2 + .../gtest_main.dir/compiler_depend.ts | 2 + .../CMakeFiles/gtest_main.dir/depend.make | 2 + .../CMakeFiles/gtest_main.dir/flags.make | 10 + .../CMakeFiles/gtest_main.dir/link.txt | 2 + .../CMakeFiles/gtest_main.dir/progress.make | 3 + .../gtest_main.dir/src/gtest_main.cc.o | Bin 0 -> 3048 bytes .../gtest_main.dir/src/gtest_main.cc.o.d | 275 + .../googletest/CMakeFiles/progress.marks | 1 + .../googletest/CTestTestfile.cmake | 6 + .../googletest-build/googletest/Makefile | 284 + .../googletest/cmake_install.cmake | 94 + .../googletest/generated/GTestConfig.cmake | 33 + .../generated/GTestConfigVersion.cmake | 43 + .../googletest/generated/gmock.pc | 10 + .../googletest/generated/gmock_main.pc | 10 + .../googletest/generated/gtest.pc | 9 + .../googletest/generated/gtest_main.pc | 10 + build/_deps/googletest-src/.clang-format | 4 + .../.github/ISSUE_TEMPLATE/00-bug_report.md | 43 + .../ISSUE_TEMPLATE/10-feature_request.md | 24 + .../.github/ISSUE_TEMPLATE/config.yml | 1 + build/_deps/googletest-src/.gitignore | 84 + build/_deps/googletest-src/BUILD.bazel | 190 + build/_deps/googletest-src/CMakeLists.txt | 32 + build/_deps/googletest-src/CONTRIBUTING.md | 130 + build/_deps/googletest-src/CONTRIBUTORS | 63 + build/_deps/googletest-src/LICENSE | 28 + build/_deps/googletest-src/README.md | 140 + build/_deps/googletest-src/WORKSPACE | 24 + .../googletest-src/ci/linux-presubmit.sh | 126 + .../googletest-src/ci/macos-presubmit.sh | 73 + build/_deps/googletest-src/docs/_config.yml | 1 + .../googletest-src/docs/_data/navigation.yml | 43 + .../googletest-src/docs/_layouts/default.html | 58 + .../_deps/googletest-src/docs/_sass/main.scss | 200 + build/_deps/googletest-src/docs/advanced.md | 2318 +++++ .../googletest-src/docs/assets/css/style.scss | 5 + .../docs/community_created_documentation.md | 7 + build/_deps/googletest-src/docs/faq.md | 693 ++ .../googletest-src/docs/gmock_cheat_sheet.md | 241 + .../googletest-src/docs/gmock_cook_book.md | 4301 +++++++++ build/_deps/googletest-src/docs/gmock_faq.md | 390 + .../googletest-src/docs/gmock_for_dummies.md | 700 ++ build/_deps/googletest-src/docs/index.md | 22 + build/_deps/googletest-src/docs/pkgconfig.md | 148 + build/_deps/googletest-src/docs/platforms.md | 35 + build/_deps/googletest-src/docs/primer.md | 482 + .../googletest-src/docs/quickstart-bazel.md | 161 + .../googletest-src/docs/quickstart-cmake.md | 156 + .../googletest-src/docs/reference/actions.md | 115 + .../docs/reference/assertions.md | 633 ++ .../googletest-src/docs/reference/matchers.md | 283 + .../googletest-src/docs/reference/mocking.md | 587 ++ .../googletest-src/docs/reference/testing.md | 1431 +++ build/_deps/googletest-src/docs/samples.md | 22 + .../googletest-src/googlemock/CMakeLists.txt | 218 + .../_deps/googletest-src/googlemock/README.md | 44 + .../googlemock/cmake/gmock.pc.in | 10 + .../googlemock/cmake/gmock_main.pc.in | 10 + .../googletest-src/googlemock/docs/README.md | 4 + .../googlemock/include/gmock/gmock-actions.h | 1687 ++++ .../include/gmock/gmock-cardinalities.h | 157 + .../include/gmock/gmock-function-mocker.h | 479 + .../googlemock/include/gmock/gmock-matchers.h | 5392 +++++++++++ .../include/gmock/gmock-more-actions.h | 573 ++ .../include/gmock/gmock-more-matchers.h | 92 + .../include/gmock/gmock-nice-strict.h | 261 + .../include/gmock/gmock-spec-builders.h | 2038 ++++ .../googlemock/include/gmock/gmock.h | 98 + .../include/gmock/internal/custom/README.md | 16 + .../internal/custom/gmock-generated-actions.h | 6 + .../gmock/internal/custom/gmock-matchers.h | 36 + .../gmock/internal/custom/gmock-port.h | 39 + .../gmock/internal/gmock-internal-utils.h | 459 + .../include/gmock/internal/gmock-port.h | 87 + .../include/gmock/internal/gmock-pp.h | 279 + .../googlemock/scripts/README.md | 5 + .../googlemock/scripts/fuse_gmock_files.py | 256 + .../googlemock/scripts/generator/LICENSE | 203 + .../googlemock/scripts/generator/README | 34 + .../scripts/generator/README.cppclean | 115 + .../scripts/generator/cpp/__init__.py | 0 .../googlemock/scripts/generator/cpp/ast.py | 1773 ++++ .../scripts/generator/cpp/gmock_class.py | 247 + .../scripts/generator/cpp/gmock_class_test.py | 570 ++ .../scripts/generator/cpp/keywords.py | 56 + .../scripts/generator/cpp/tokenize.py | 284 + .../googlemock/scripts/generator/cpp/utils.py | 37 + .../googlemock/scripts/generator/gmock_gen.py | 30 + .../googlemock/src/gmock-all.cc | 46 + .../googlemock/src/gmock-cardinalities.cc | 155 + .../googlemock/src/gmock-internal-utils.cc | 200 + .../googlemock/src/gmock-matchers.cc | 459 + .../googlemock/src/gmock-spec-builders.cc | 908 ++ .../googletest-src/googlemock/src/gmock.cc | 213 + .../googlemock/src/gmock_main.cc | 72 + .../googlemock/test/BUILD.bazel | 118 + .../googlemock/test/gmock-actions_test.cc | 1583 +++ .../test/gmock-cardinalities_test.cc | 429 + .../test/gmock-function-mocker_test.cc | 986 ++ .../test/gmock-internal-utils_test.cc | 720 ++ .../googlemock/test/gmock-matchers_test.cc | 8562 +++++++++++++++++ .../test/gmock-more-actions_test.cc | 1547 +++ .../googlemock/test/gmock-nice-strict_test.cc | 539 ++ .../googlemock/test/gmock-port_test.cc | 42 + .../googlemock/test/gmock-pp-string_test.cc | 206 + .../googlemock/test/gmock-pp_test.cc | 83 + .../test/gmock-spec-builders_test.cc | 2775 ++++++ .../googlemock/test/gmock_all_test.cc | 46 + .../googlemock/test/gmock_ex_test.cc | 80 + .../googlemock/test/gmock_leak_test.py | 104 + .../googlemock/test/gmock_leak_test_.cc | 99 + .../googlemock/test/gmock_link2_test.cc | 39 + .../googlemock/test/gmock_link_test.cc | 39 + .../googlemock/test/gmock_link_test.h | 690 ++ .../googlemock/test/gmock_output_test.py | 183 + .../googlemock/test/gmock_output_test_.cc | 309 + .../test/gmock_output_test_golden.txt | 317 + .../googlemock/test/gmock_stress_test.cc | 240 + .../googlemock/test/gmock_test.cc | 181 + .../googlemock/test/gmock_test_utils.py | 108 + .../googletest-src/googletest/CMakeLists.txt | 323 + .../_deps/googletest-src/googletest/README.md | 215 + .../googletest/cmake/Config.cmake.in | 9 + .../googletest/cmake/gtest.pc.in | 9 + .../googletest/cmake/gtest_main.pc.in | 10 + .../googletest/cmake/internal_utils.cmake | 344 + .../googletest/cmake/libgtest.la.in | 21 + .../googletest-src/googletest/docs/README.md | 4 + .../include/gtest/gtest-death-test.h | 346 + .../googletest/include/gtest/gtest-matchers.h | 930 ++ .../googletest/include/gtest/gtest-message.h | 219 + .../include/gtest/gtest-param-test.h | 507 + .../googletest/include/gtest/gtest-printers.h | 1029 ++ .../googletest/include/gtest/gtest-spi.h | 238 + .../include/gtest/gtest-test-part.h | 184 + .../include/gtest/gtest-typed-test.h | 329 + .../googletest/include/gtest/gtest.h | 2495 +++++ .../include/gtest/gtest_pred_impl.h | 359 + .../googletest/include/gtest/gtest_prod.h | 61 + .../include/gtest/internal/custom/README.md | 56 + .../gtest/internal/custom/gtest-port.h | 37 + .../gtest/internal/custom/gtest-printers.h | 42 + .../include/gtest/internal/custom/gtest.h | 37 + .../internal/gtest-death-test-internal.h | 304 + .../include/gtest/internal/gtest-filepath.h | 211 + .../include/gtest/internal/gtest-internal.h | 1560 +++ .../include/gtest/internal/gtest-param-util.h | 947 ++ .../include/gtest/internal/gtest-port-arch.h | 114 + .../include/gtest/internal/gtest-port.h | 2389 +++++ .../include/gtest/internal/gtest-string.h | 175 + .../include/gtest/internal/gtest-type-util.h | 183 + .../googletest/samples/prime_tables.h | 126 + .../googletest/samples/sample1.cc | 66 + .../googletest/samples/sample1.h | 41 + .../googletest/samples/sample10_unittest.cc | 139 + .../googletest/samples/sample1_unittest.cc | 151 + .../googletest/samples/sample2.cc | 54 + .../googletest/samples/sample2.h | 80 + .../googletest/samples/sample2_unittest.cc | 107 + .../googletest/samples/sample3-inl.h | 172 + .../googletest/samples/sample3_unittest.cc | 149 + .../googletest/samples/sample4.cc | 54 + .../googletest/samples/sample4.h | 53 + .../googletest/samples/sample4_unittest.cc | 53 + .../googletest/samples/sample5_unittest.cc | 196 + .../googletest/samples/sample6_unittest.cc | 217 + .../googletest/samples/sample7_unittest.cc | 117 + .../googletest/samples/sample8_unittest.cc | 154 + .../googletest/samples/sample9_unittest.cc | 156 + .../googletest/scripts/README.md | 5 + .../googletest/scripts/common.py | 83 + .../googletest/scripts/fuse_gtest_files.py | 253 + .../googletest/scripts/gen_gtest_pred_impl.py | 733 ++ .../googletest/scripts/gtest-config.in | 274 + .../googletest/scripts/release_docs.py | 158 + .../googletest/scripts/run_with_path.py | 32 + .../googletest/scripts/upload.py | 1402 +++ .../googletest/scripts/upload_gtest.py | 78 + .../googletest/src/gtest-all.cc | 48 + .../googletest/src/gtest-death-test.cc | 1644 ++++ .../googletest/src/gtest-filepath.cc | 369 + .../googletest/src/gtest-internal-inl.h | 1221 +++ .../googletest/src/gtest-matchers.cc | 97 + .../googletest/src/gtest-port.cc | 1433 +++ .../googletest/src/gtest-printers.cc | 533 + .../googletest/src/gtest-test-part.cc | 108 + .../googletest/src/gtest-typed-test.cc | 107 + .../googletest-src/googletest/src/gtest.cc | 6746 +++++++++++++ .../googletest/src/gtest_main.cc | 54 + .../googletest/test/BUILD.bazel | 590 ++ .../googletest-break-on-failure-unittest.py | 208 + .../googletest-break-on-failure-unittest_.cc | 86 + .../test/googletest-catch-exceptions-test.py | 236 + .../test/googletest-catch-exceptions-test_.cc | 293 + .../googletest/test/googletest-color-test.py | 127 + .../googletest/test/googletest-color-test_.cc | 62 + .../test/googletest-death-test-test.cc | 1542 +++ .../test/googletest-death-test_ex_test.cc | 92 + .../test/googletest-env-var-test.py | 120 + .../test/googletest-env-var-test_.cc | 132 + .../test/googletest-failfast-unittest.py | 410 + .../test/googletest-failfast-unittest_.cc | 167 + .../test/googletest-filepath-test.cc | 649 ++ .../test/googletest-filter-unittest.py | 639 ++ .../test/googletest-filter-unittest_.cc | 137 + .../googletest-global-environment-unittest.py | 72 + ...googletest-global-environment-unittest_.cc | 58 + .../test/googletest-json-outfiles-test.py | 191 + .../test/googletest-json-output-unittest.py | 848 ++ .../test/googletest-list-tests-unittest.py | 205 + .../test/googletest-list-tests-unittest_.cc | 156 + .../test/googletest-listener-test.cc | 518 + .../test/googletest-message-test.cc | 158 + .../test/googletest-options-test.cc | 219 + .../googletest-output-test-golden-lin.txt | 1180 +++ .../googletest/test/googletest-output-test.py | 346 + .../test/googletest-output-test_.cc | 1108 +++ ...oogletest-param-test-invalid-name1-test.py | 63 + ...ogletest-param-test-invalid-name1-test_.cc | 50 + ...oogletest-param-test-invalid-name2-test.py | 62 + ...ogletest-param-test-invalid-name2-test_.cc | 55 + .../test/googletest-param-test-test.cc | 1119 +++ .../test/googletest-param-test-test.h | 51 + .../test/googletest-param-test2-test.cc | 61 + .../googletest/test/googletest-port-test.cc | 1276 +++ .../test/googletest-printers-test.cc | 1962 ++++ .../test/googletest-setuptestsuite-test.py | 54 + .../test/googletest-setuptestsuite-test_.cc | 49 + .../test/googletest-shuffle-test.py | 323 + .../test/googletest-shuffle-test_.cc | 101 + .../test/googletest-test-part-test.cc | 230 + .../test/googletest-throw-on-failure-test.py | 168 + .../test/googletest-throw-on-failure-test_.cc | 71 + .../test/googletest-uninitialized-test.py | 67 + .../test/googletest-uninitialized-test_.cc | 42 + .../googletest/test/gtest-typed-test2_test.cc | 40 + .../googletest/test/gtest-typed-test_test.cc | 437 + .../googletest/test/gtest-typed-test_test.h | 60 + .../test/gtest-unittest-api_test.cc | 328 + .../googletest/test/gtest_all_test.cc | 46 + .../test/gtest_assert_by_exception_test.cc | 116 + .../googletest/test/gtest_environment_test.cc | 188 + .../googletest/test/gtest_help_test.py | 172 + .../googletest/test/gtest_help_test_.cc | 45 + .../googletest/test/gtest_json_test_utils.py | 60 + .../test/gtest_list_output_unittest.py | 286 + .../test/gtest_list_output_unittest_.cc | 77 + .../googletest/test/gtest_main_unittest.cc | 44 + .../googletest/test/gtest_no_test_unittest.cc | 54 + .../test/gtest_pred_impl_unittest.cc | 2422 +++++ .../test/gtest_premature_exit_test.cc | 126 + .../googletest/test/gtest_prod_test.cc | 56 + .../googletest/test/gtest_repeat_test.cc | 233 + .../test/gtest_skip_check_output_test.py | 59 + ...test_skip_environment_check_output_test.py | 54 + .../gtest_skip_in_environment_setup_test.cc | 49 + .../googletest/test/gtest_skip_test.cc | 55 + .../googletest/test/gtest_sole_header_test.cc | 56 + .../googletest/test/gtest_stress_test.cc | 248 + .../gtest_test_macro_stack_footprint_test.cc | 89 + .../googletest/test/gtest_test_utils.py | 312 + .../googletest/test/gtest_testbridge_test.py | 63 + .../googletest/test/gtest_testbridge_test_.cc | 43 + .../test/gtest_throw_on_failure_ex_test.cc | 90 + .../googletest/test/gtest_unittest.cc | 7784 +++++++++++++++ .../test/gtest_xml_outfile1_test_.cc | 43 + .../test/gtest_xml_outfile2_test_.cc | 43 + .../test/gtest_xml_outfiles_test.py | 135 + .../test/gtest_xml_output_unittest.py | 415 + .../test/gtest_xml_output_unittest_.cc | 193 + .../googletest/test/gtest_xml_test_utils.py | 197 + .../googletest/test/production.cc | 35 + .../googletest/test/production.h | 54 + build/_deps/googletest-src/library.json | 62 + .../_deps/googletest-subbuild/CMakeCache.txt | 117 + .../CMakeFiles/3.28.3/CMakeSystem.cmake | 15 + .../CMakeFiles/CMakeConfigureLog.yaml | 11 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/CMakeRuleHashes.txt | 11 + .../CMakeFiles/Makefile.cmake | 52 + .../googletest-subbuild/CMakeFiles/Makefile2 | 112 + .../CMakeFiles/TargetDirectories.txt | 3 + .../CMakeFiles/cmake.check_cache | 1 + .../CMakeFiles/googletest-populate-complete | 0 .../googletest-populate.dir/DependInfo.cmake | 22 + .../googletest-populate.dir/Labels.json | 46 + .../googletest-populate.dir/Labels.txt | 14 + .../googletest-populate.dir/build.make | 156 + .../googletest-populate.dir/cmake_clean.cmake | 17 + .../compiler_depend.make | 2 + .../compiler_depend.ts | 2 + .../googletest-populate.dir/progress.make | 10 + .../CMakeFiles/progress.marks | 1 + .../_deps/googletest-subbuild/CMakeLists.txt | 34 + build/_deps/googletest-subbuild/Makefile | 154 + .../googletest-subbuild/cmake_install.cmake | 49 + .../download-googletest-populate.cmake | 173 + .../extract-googletest-populate.cmake | 65 + .../googletest-populate-build | 0 .../googletest-populate-configure | 0 .../googletest-populate-done | 0 .../googletest-populate-download | 0 .../googletest-populate-install | 0 .../googletest-populate-mkdir | 0 .../googletest-populate-patch | 0 .../googletest-populate-patch-info.txt | 6 + .../googletest-populate-test | 0 .../googletest-populate-update | 0 .../googletest-populate-update-info.txt | 7 + .../googletest-populate-urlinfo.txt | 12 + .../verify-googletest-populate.cmake | 0 .../src/release-1.11.0.zip | Bin 0 -> 1121369 bytes .../tmp/googletest-populate-cfgcmd.txt | 1 + .../tmp/googletest-populate-mkdirs.cmake | 22 + build/cmake_install.cmake | 59 + build/lib/libgmock.a | Bin 0 -> 735814 bytes build/lib/libgmock_main.a | Bin 0 -> 3484 bytes build/lib/libgtest.a | Bin 0 -> 2369880 bytes build/lib/libgtest_main.a | Bin 0 -> 3212 bytes build/main | Bin 0 -> 29224 bytes build/two-sum-test | Bin 0 -> 1237416 bytes build/two-sum-test[1]_include.cmake | 5 + build/two-sum-test[1]_tests.cmake | 13 + src/two-sum.cpp | 19 +- src/two-sum.hpp | 10 + 429 files changed, 124288 insertions(+), 14 deletions(-) create mode 100644 build/CMakeCache.txt create mode 100644 build/CMakeFiles/3.28.3/CMakeCCompiler.cmake create mode 100644 build/CMakeFiles/3.28.3/CMakeCXXCompiler.cmake create mode 100755 build/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_C.bin create mode 100755 build/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_CXX.bin create mode 100644 build/CMakeFiles/3.28.3/CMakeSystem.cmake create mode 100644 build/CMakeFiles/3.28.3/CompilerIdC/CMakeCCompilerId.c create mode 100755 build/CMakeFiles/3.28.3/CompilerIdC/a.out create mode 100644 build/CMakeFiles/3.28.3/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100755 build/CMakeFiles/3.28.3/CompilerIdCXX/a.out create mode 100644 build/CMakeFiles/CMakeConfigureLog.yaml create mode 100644 build/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 build/CMakeFiles/Makefile.cmake create mode 100644 build/CMakeFiles/Makefile2 create mode 100644 build/CMakeFiles/TargetDirectories.txt create mode 100644 build/CMakeFiles/cmake.check_cache create mode 100644 build/CMakeFiles/main.dir/DependInfo.cmake create mode 100644 build/CMakeFiles/main.dir/build.make create mode 100644 build/CMakeFiles/main.dir/cmake_clean.cmake create mode 100644 build/CMakeFiles/main.dir/compiler_depend.internal create mode 100644 build/CMakeFiles/main.dir/compiler_depend.make create mode 100644 build/CMakeFiles/main.dir/compiler_depend.ts create mode 100644 build/CMakeFiles/main.dir/depend.make create mode 100644 build/CMakeFiles/main.dir/flags.make create mode 100644 build/CMakeFiles/main.dir/link.txt create mode 100644 build/CMakeFiles/main.dir/progress.make create mode 100644 build/CMakeFiles/main.dir/src/main.cpp.o create mode 100644 build/CMakeFiles/main.dir/src/main.cpp.o.d create mode 100644 build/CMakeFiles/main.dir/src/two-sum.cpp.o create mode 100644 build/CMakeFiles/main.dir/src/two-sum.cpp.o.d create mode 100644 build/CMakeFiles/progress.marks create mode 100644 build/CMakeFiles/two-sum-test.dir/DependInfo.cmake create mode 100644 build/CMakeFiles/two-sum-test.dir/build.make create mode 100644 build/CMakeFiles/two-sum-test.dir/cmake_clean.cmake create mode 100644 build/CMakeFiles/two-sum-test.dir/compiler_depend.make create mode 100644 build/CMakeFiles/two-sum-test.dir/compiler_depend.ts create mode 100644 build/CMakeFiles/two-sum-test.dir/depend.make create mode 100644 build/CMakeFiles/two-sum-test.dir/flags.make create mode 100644 build/CMakeFiles/two-sum-test.dir/link.txt create mode 100644 build/CMakeFiles/two-sum-test.dir/progress.make create mode 100644 build/CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o create mode 100644 build/CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o.d create mode 100644 build/CMakeFiles/two-sum-test.dir/tests/test.cpp.o create mode 100644 build/CMakeFiles/two-sum-test.dir/tests/test.cpp.o.d create mode 100644 build/CTestTestfile.cmake create mode 100644 build/Makefile create mode 100644 build/Testing/Temporary/CTestCostData.txt create mode 100644 build/Testing/Temporary/LastTest.log create mode 100644 build/_deps/googletest-build/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 build/_deps/googletest-build/CMakeFiles/progress.marks create mode 100644 build/_deps/googletest-build/CTestTestfile.cmake create mode 100644 build/_deps/googletest-build/Makefile create mode 100644 build/_deps/googletest-build/cmake_install.cmake create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean.cmake create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean_target.cmake create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.make create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.ts create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend.make create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/flags.make create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/link.txt create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/progress.make create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o.d create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/DependInfo.cmake create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean.cmake create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean_target.cmake create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.make create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.ts create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend.make create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/flags.make create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/link.txt create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/progress.make create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o.d create mode 100644 build/_deps/googletest-build/googlemock/CMakeFiles/progress.marks create mode 100644 build/_deps/googletest-build/googlemock/CTestTestfile.cmake create mode 100644 build/_deps/googletest-build/googlemock/Makefile create mode 100644 build/_deps/googletest-build/googlemock/cmake_install.cmake create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets-noconfig.cmake create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets.cmake create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean.cmake create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean_target.cmake create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.make create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.ts create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend.make create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/flags.make create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/link.txt create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/progress.make create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o.d create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/DependInfo.cmake create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean.cmake create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean_target.cmake create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.make create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.ts create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend.make create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/flags.make create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/link.txt create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/progress.make create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o.d create mode 100644 build/_deps/googletest-build/googletest/CMakeFiles/progress.marks create mode 100644 build/_deps/googletest-build/googletest/CTestTestfile.cmake create mode 100644 build/_deps/googletest-build/googletest/Makefile create mode 100644 build/_deps/googletest-build/googletest/cmake_install.cmake create mode 100644 build/_deps/googletest-build/googletest/generated/GTestConfig.cmake create mode 100644 build/_deps/googletest-build/googletest/generated/GTestConfigVersion.cmake create mode 100644 build/_deps/googletest-build/googletest/generated/gmock.pc create mode 100644 build/_deps/googletest-build/googletest/generated/gmock_main.pc create mode 100644 build/_deps/googletest-build/googletest/generated/gtest.pc create mode 100644 build/_deps/googletest-build/googletest/generated/gtest_main.pc create mode 100644 build/_deps/googletest-src/.clang-format create mode 100644 build/_deps/googletest-src/.github/ISSUE_TEMPLATE/00-bug_report.md create mode 100644 build/_deps/googletest-src/.github/ISSUE_TEMPLATE/10-feature_request.md create mode 100644 build/_deps/googletest-src/.github/ISSUE_TEMPLATE/config.yml create mode 100644 build/_deps/googletest-src/.gitignore create mode 100644 build/_deps/googletest-src/BUILD.bazel create mode 100644 build/_deps/googletest-src/CMakeLists.txt create mode 100644 build/_deps/googletest-src/CONTRIBUTING.md create mode 100644 build/_deps/googletest-src/CONTRIBUTORS create mode 100644 build/_deps/googletest-src/LICENSE create mode 100644 build/_deps/googletest-src/README.md create mode 100644 build/_deps/googletest-src/WORKSPACE create mode 100644 build/_deps/googletest-src/ci/linux-presubmit.sh create mode 100644 build/_deps/googletest-src/ci/macos-presubmit.sh create mode 100644 build/_deps/googletest-src/docs/_config.yml create mode 100644 build/_deps/googletest-src/docs/_data/navigation.yml create mode 100644 build/_deps/googletest-src/docs/_layouts/default.html create mode 100644 build/_deps/googletest-src/docs/_sass/main.scss create mode 100644 build/_deps/googletest-src/docs/advanced.md create mode 100644 build/_deps/googletest-src/docs/assets/css/style.scss create mode 100644 build/_deps/googletest-src/docs/community_created_documentation.md create mode 100644 build/_deps/googletest-src/docs/faq.md create mode 100644 build/_deps/googletest-src/docs/gmock_cheat_sheet.md create mode 100644 build/_deps/googletest-src/docs/gmock_cook_book.md create mode 100644 build/_deps/googletest-src/docs/gmock_faq.md create mode 100644 build/_deps/googletest-src/docs/gmock_for_dummies.md create mode 100644 build/_deps/googletest-src/docs/index.md create mode 100644 build/_deps/googletest-src/docs/pkgconfig.md create mode 100644 build/_deps/googletest-src/docs/platforms.md create mode 100644 build/_deps/googletest-src/docs/primer.md create mode 100644 build/_deps/googletest-src/docs/quickstart-bazel.md create mode 100644 build/_deps/googletest-src/docs/quickstart-cmake.md create mode 100644 build/_deps/googletest-src/docs/reference/actions.md create mode 100644 build/_deps/googletest-src/docs/reference/assertions.md create mode 100644 build/_deps/googletest-src/docs/reference/matchers.md create mode 100644 build/_deps/googletest-src/docs/reference/mocking.md create mode 100644 build/_deps/googletest-src/docs/reference/testing.md create mode 100644 build/_deps/googletest-src/docs/samples.md create mode 100644 build/_deps/googletest-src/googlemock/CMakeLists.txt create mode 100644 build/_deps/googletest-src/googlemock/README.md create mode 100644 build/_deps/googletest-src/googlemock/cmake/gmock.pc.in create mode 100644 build/_deps/googletest-src/googlemock/cmake/gmock_main.pc.in create mode 100644 build/_deps/googletest-src/googlemock/docs/README.md create mode 100644 build/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h create mode 100644 build/_deps/googletest-src/googlemock/include/gmock/gmock-cardinalities.h create mode 100644 build/_deps/googletest-src/googlemock/include/gmock/gmock-function-mocker.h create mode 100644 build/_deps/googletest-src/googlemock/include/gmock/gmock-matchers.h create mode 100644 build/_deps/googletest-src/googlemock/include/gmock/gmock-more-actions.h create mode 100644 build/_deps/googletest-src/googlemock/include/gmock/gmock-more-matchers.h create mode 100644 build/_deps/googletest-src/googlemock/include/gmock/gmock-nice-strict.h create mode 100644 build/_deps/googletest-src/googlemock/include/gmock/gmock-spec-builders.h create mode 100644 build/_deps/googletest-src/googlemock/include/gmock/gmock.h create mode 100644 build/_deps/googletest-src/googlemock/include/gmock/internal/custom/README.md create mode 100644 build/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-generated-actions.h create mode 100644 build/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-matchers.h create mode 100644 build/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-port.h create mode 100644 build/_deps/googletest-src/googlemock/include/gmock/internal/gmock-internal-utils.h create mode 100644 build/_deps/googletest-src/googlemock/include/gmock/internal/gmock-port.h create mode 100644 build/_deps/googletest-src/googlemock/include/gmock/internal/gmock-pp.h create mode 100644 build/_deps/googletest-src/googlemock/scripts/README.md create mode 100755 build/_deps/googletest-src/googlemock/scripts/fuse_gmock_files.py create mode 100644 build/_deps/googletest-src/googlemock/scripts/generator/LICENSE create mode 100644 build/_deps/googletest-src/googlemock/scripts/generator/README create mode 100644 build/_deps/googletest-src/googlemock/scripts/generator/README.cppclean create mode 100755 build/_deps/googletest-src/googlemock/scripts/generator/cpp/__init__.py create mode 100755 build/_deps/googletest-src/googlemock/scripts/generator/cpp/ast.py create mode 100755 build/_deps/googletest-src/googlemock/scripts/generator/cpp/gmock_class.py create mode 100755 build/_deps/googletest-src/googlemock/scripts/generator/cpp/gmock_class_test.py create mode 100755 build/_deps/googletest-src/googlemock/scripts/generator/cpp/keywords.py create mode 100755 build/_deps/googletest-src/googlemock/scripts/generator/cpp/tokenize.py create mode 100755 build/_deps/googletest-src/googlemock/scripts/generator/cpp/utils.py create mode 100755 build/_deps/googletest-src/googlemock/scripts/generator/gmock_gen.py create mode 100644 build/_deps/googletest-src/googlemock/src/gmock-all.cc create mode 100644 build/_deps/googletest-src/googlemock/src/gmock-cardinalities.cc create mode 100644 build/_deps/googletest-src/googlemock/src/gmock-internal-utils.cc create mode 100644 build/_deps/googletest-src/googlemock/src/gmock-matchers.cc create mode 100644 build/_deps/googletest-src/googlemock/src/gmock-spec-builders.cc create mode 100644 build/_deps/googletest-src/googlemock/src/gmock.cc create mode 100644 build/_deps/googletest-src/googlemock/src/gmock_main.cc create mode 100644 build/_deps/googletest-src/googlemock/test/BUILD.bazel create mode 100644 build/_deps/googletest-src/googlemock/test/gmock-actions_test.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock-cardinalities_test.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock-function-mocker_test.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock-internal-utils_test.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock-matchers_test.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock-more-actions_test.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock-nice-strict_test.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock-port_test.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock-pp-string_test.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock-pp_test.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock-spec-builders_test.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock_all_test.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock_ex_test.cc create mode 100755 build/_deps/googletest-src/googlemock/test/gmock_leak_test.py create mode 100644 build/_deps/googletest-src/googlemock/test/gmock_leak_test_.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock_link2_test.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock_link_test.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock_link_test.h create mode 100755 build/_deps/googletest-src/googlemock/test/gmock_output_test.py create mode 100644 build/_deps/googletest-src/googlemock/test/gmock_output_test_.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock_output_test_golden.txt create mode 100644 build/_deps/googletest-src/googlemock/test/gmock_stress_test.cc create mode 100644 build/_deps/googletest-src/googlemock/test/gmock_test.cc create mode 100755 build/_deps/googletest-src/googlemock/test/gmock_test_utils.py create mode 100644 build/_deps/googletest-src/googletest/CMakeLists.txt create mode 100644 build/_deps/googletest-src/googletest/README.md create mode 100644 build/_deps/googletest-src/googletest/cmake/Config.cmake.in create mode 100644 build/_deps/googletest-src/googletest/cmake/gtest.pc.in create mode 100644 build/_deps/googletest-src/googletest/cmake/gtest_main.pc.in create mode 100644 build/_deps/googletest-src/googletest/cmake/internal_utils.cmake create mode 100644 build/_deps/googletest-src/googletest/cmake/libgtest.la.in create mode 100644 build/_deps/googletest-src/googletest/docs/README.md create mode 100644 build/_deps/googletest-src/googletest/include/gtest/gtest-death-test.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/gtest-matchers.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/gtest-message.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/gtest-param-test.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/gtest-printers.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/gtest-spi.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/gtest-test-part.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/gtest-typed-test.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/gtest.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/gtest_pred_impl.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/gtest_prod.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/internal/custom/README.md create mode 100644 build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-port.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-printers.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/internal/gtest-death-test-internal.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/internal/gtest-filepath.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/internal/gtest-internal.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/internal/gtest-param-util.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/internal/gtest-port-arch.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/internal/gtest-port.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/internal/gtest-string.h create mode 100644 build/_deps/googletest-src/googletest/include/gtest/internal/gtest-type-util.h create mode 100644 build/_deps/googletest-src/googletest/samples/prime_tables.h create mode 100644 build/_deps/googletest-src/googletest/samples/sample1.cc create mode 100644 build/_deps/googletest-src/googletest/samples/sample1.h create mode 100644 build/_deps/googletest-src/googletest/samples/sample10_unittest.cc create mode 100644 build/_deps/googletest-src/googletest/samples/sample1_unittest.cc create mode 100644 build/_deps/googletest-src/googletest/samples/sample2.cc create mode 100644 build/_deps/googletest-src/googletest/samples/sample2.h create mode 100644 build/_deps/googletest-src/googletest/samples/sample2_unittest.cc create mode 100644 build/_deps/googletest-src/googletest/samples/sample3-inl.h create mode 100644 build/_deps/googletest-src/googletest/samples/sample3_unittest.cc create mode 100644 build/_deps/googletest-src/googletest/samples/sample4.cc create mode 100644 build/_deps/googletest-src/googletest/samples/sample4.h create mode 100644 build/_deps/googletest-src/googletest/samples/sample4_unittest.cc create mode 100644 build/_deps/googletest-src/googletest/samples/sample5_unittest.cc create mode 100644 build/_deps/googletest-src/googletest/samples/sample6_unittest.cc create mode 100644 build/_deps/googletest-src/googletest/samples/sample7_unittest.cc create mode 100644 build/_deps/googletest-src/googletest/samples/sample8_unittest.cc create mode 100644 build/_deps/googletest-src/googletest/samples/sample9_unittest.cc create mode 100644 build/_deps/googletest-src/googletest/scripts/README.md create mode 100644 build/_deps/googletest-src/googletest/scripts/common.py create mode 100755 build/_deps/googletest-src/googletest/scripts/fuse_gtest_files.py create mode 100755 build/_deps/googletest-src/googletest/scripts/gen_gtest_pred_impl.py create mode 100755 build/_deps/googletest-src/googletest/scripts/gtest-config.in create mode 100755 build/_deps/googletest-src/googletest/scripts/release_docs.py create mode 100755 build/_deps/googletest-src/googletest/scripts/run_with_path.py create mode 100755 build/_deps/googletest-src/googletest/scripts/upload.py create mode 100755 build/_deps/googletest-src/googletest/scripts/upload_gtest.py create mode 100644 build/_deps/googletest-src/googletest/src/gtest-all.cc create mode 100644 build/_deps/googletest-src/googletest/src/gtest-death-test.cc create mode 100644 build/_deps/googletest-src/googletest/src/gtest-filepath.cc create mode 100644 build/_deps/googletest-src/googletest/src/gtest-internal-inl.h create mode 100644 build/_deps/googletest-src/googletest/src/gtest-matchers.cc create mode 100644 build/_deps/googletest-src/googletest/src/gtest-port.cc create mode 100644 build/_deps/googletest-src/googletest/src/gtest-printers.cc create mode 100644 build/_deps/googletest-src/googletest/src/gtest-test-part.cc create mode 100644 build/_deps/googletest-src/googletest/src/gtest-typed-test.cc create mode 100644 build/_deps/googletest-src/googletest/src/gtest.cc create mode 100644 build/_deps/googletest-src/googletest/src/gtest_main.cc create mode 100644 build/_deps/googletest-src/googletest/test/BUILD.bazel create mode 100755 build/_deps/googletest-src/googletest/test/googletest-break-on-failure-unittest.py create mode 100644 build/_deps/googletest-src/googletest/test/googletest-break-on-failure-unittest_.cc create mode 100755 build/_deps/googletest-src/googletest/test/googletest-catch-exceptions-test.py create mode 100644 build/_deps/googletest-src/googletest/test/googletest-catch-exceptions-test_.cc create mode 100755 build/_deps/googletest-src/googletest/test/googletest-color-test.py create mode 100644 build/_deps/googletest-src/googletest/test/googletest-color-test_.cc create mode 100644 build/_deps/googletest-src/googletest/test/googletest-death-test-test.cc create mode 100644 build/_deps/googletest-src/googletest/test/googletest-death-test_ex_test.cc create mode 100755 build/_deps/googletest-src/googletest/test/googletest-env-var-test.py create mode 100644 build/_deps/googletest-src/googletest/test/googletest-env-var-test_.cc create mode 100755 build/_deps/googletest-src/googletest/test/googletest-failfast-unittest.py create mode 100644 build/_deps/googletest-src/googletest/test/googletest-failfast-unittest_.cc create mode 100644 build/_deps/googletest-src/googletest/test/googletest-filepath-test.cc create mode 100755 build/_deps/googletest-src/googletest/test/googletest-filter-unittest.py create mode 100644 build/_deps/googletest-src/googletest/test/googletest-filter-unittest_.cc create mode 100644 build/_deps/googletest-src/googletest/test/googletest-global-environment-unittest.py create mode 100644 build/_deps/googletest-src/googletest/test/googletest-global-environment-unittest_.cc create mode 100644 build/_deps/googletest-src/googletest/test/googletest-json-outfiles-test.py create mode 100644 build/_deps/googletest-src/googletest/test/googletest-json-output-unittest.py create mode 100755 build/_deps/googletest-src/googletest/test/googletest-list-tests-unittest.py create mode 100644 build/_deps/googletest-src/googletest/test/googletest-list-tests-unittest_.cc create mode 100644 build/_deps/googletest-src/googletest/test/googletest-listener-test.cc create mode 100644 build/_deps/googletest-src/googletest/test/googletest-message-test.cc create mode 100644 build/_deps/googletest-src/googletest/test/googletest-options-test.cc create mode 100644 build/_deps/googletest-src/googletest/test/googletest-output-test-golden-lin.txt create mode 100755 build/_deps/googletest-src/googletest/test/googletest-output-test.py create mode 100644 build/_deps/googletest-src/googletest/test/googletest-output-test_.cc create mode 100644 build/_deps/googletest-src/googletest/test/googletest-param-test-invalid-name1-test.py create mode 100644 build/_deps/googletest-src/googletest/test/googletest-param-test-invalid-name1-test_.cc create mode 100644 build/_deps/googletest-src/googletest/test/googletest-param-test-invalid-name2-test.py create mode 100644 build/_deps/googletest-src/googletest/test/googletest-param-test-invalid-name2-test_.cc create mode 100644 build/_deps/googletest-src/googletest/test/googletest-param-test-test.cc create mode 100644 build/_deps/googletest-src/googletest/test/googletest-param-test-test.h create mode 100644 build/_deps/googletest-src/googletest/test/googletest-param-test2-test.cc create mode 100644 build/_deps/googletest-src/googletest/test/googletest-port-test.cc create mode 100644 build/_deps/googletest-src/googletest/test/googletest-printers-test.cc create mode 100755 build/_deps/googletest-src/googletest/test/googletest-setuptestsuite-test.py create mode 100644 build/_deps/googletest-src/googletest/test/googletest-setuptestsuite-test_.cc create mode 100755 build/_deps/googletest-src/googletest/test/googletest-shuffle-test.py create mode 100644 build/_deps/googletest-src/googletest/test/googletest-shuffle-test_.cc create mode 100644 build/_deps/googletest-src/googletest/test/googletest-test-part-test.cc create mode 100755 build/_deps/googletest-src/googletest/test/googletest-throw-on-failure-test.py create mode 100644 build/_deps/googletest-src/googletest/test/googletest-throw-on-failure-test_.cc create mode 100755 build/_deps/googletest-src/googletest/test/googletest-uninitialized-test.py create mode 100644 build/_deps/googletest-src/googletest/test/googletest-uninitialized-test_.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest-typed-test2_test.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest-typed-test_test.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest-typed-test_test.h create mode 100644 build/_deps/googletest-src/googletest/test/gtest-unittest-api_test.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_all_test.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_assert_by_exception_test.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_environment_test.cc create mode 100755 build/_deps/googletest-src/googletest/test/gtest_help_test.py create mode 100644 build/_deps/googletest-src/googletest/test/gtest_help_test_.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_json_test_utils.py create mode 100644 build/_deps/googletest-src/googletest/test/gtest_list_output_unittest.py create mode 100644 build/_deps/googletest-src/googletest/test/gtest_list_output_unittest_.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_main_unittest.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_no_test_unittest.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_pred_impl_unittest.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_premature_exit_test.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_prod_test.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_repeat_test.cc create mode 100755 build/_deps/googletest-src/googletest/test/gtest_skip_check_output_test.py create mode 100755 build/_deps/googletest-src/googletest/test/gtest_skip_environment_check_output_test.py create mode 100644 build/_deps/googletest-src/googletest/test/gtest_skip_in_environment_setup_test.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_skip_test.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_sole_header_test.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_stress_test.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_test_macro_stack_footprint_test.cc create mode 100755 build/_deps/googletest-src/googletest/test/gtest_test_utils.py create mode 100755 build/_deps/googletest-src/googletest/test/gtest_testbridge_test.py create mode 100644 build/_deps/googletest-src/googletest/test/gtest_testbridge_test_.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_throw_on_failure_ex_test.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_unittest.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_xml_outfile1_test_.cc create mode 100644 build/_deps/googletest-src/googletest/test/gtest_xml_outfile2_test_.cc create mode 100755 build/_deps/googletest-src/googletest/test/gtest_xml_outfiles_test.py create mode 100755 build/_deps/googletest-src/googletest/test/gtest_xml_output_unittest.py create mode 100644 build/_deps/googletest-src/googletest/test/gtest_xml_output_unittest_.cc create mode 100755 build/_deps/googletest-src/googletest/test/gtest_xml_test_utils.py create mode 100644 build/_deps/googletest-src/googletest/test/production.cc create mode 100644 build/_deps/googletest-src/googletest/test/production.h create mode 100644 build/_deps/googletest-src/library.json create mode 100644 build/_deps/googletest-subbuild/CMakeCache.txt create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/3.28.3/CMakeSystem.cmake create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/CMakeConfigureLog.yaml create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/CMakeRuleHashes.txt create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/Makefile.cmake create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/Makefile2 create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/TargetDirectories.txt create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/cmake.check_cache create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/googletest-populate-complete create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/DependInfo.cmake create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/Labels.json create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/Labels.txt create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/build.make create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/cmake_clean.cmake create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/compiler_depend.make create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/compiler_depend.ts create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/progress.make create mode 100644 build/_deps/googletest-subbuild/CMakeFiles/progress.marks create mode 100644 build/_deps/googletest-subbuild/CMakeLists.txt create mode 100644 build/_deps/googletest-subbuild/Makefile create mode 100644 build/_deps/googletest-subbuild/cmake_install.cmake create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/download-googletest-populate.cmake create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/extract-googletest-populate.cmake create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-build create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-configure create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-done create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-download create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-install create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-mkdir create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-patch create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-patch-info.txt create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-test create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-update create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-update-info.txt create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-urlinfo.txt create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/verify-googletest-populate.cmake create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/src/release-1.11.0.zip create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/tmp/googletest-populate-cfgcmd.txt create mode 100644 build/_deps/googletest-subbuild/googletest-populate-prefix/tmp/googletest-populate-mkdirs.cmake create mode 100644 build/cmake_install.cmake create mode 100644 build/lib/libgmock.a create mode 100644 build/lib/libgmock_main.a create mode 100644 build/lib/libgtest.a create mode 100644 build/lib/libgtest_main.a create mode 100755 build/main create mode 100755 build/two-sum-test create mode 100644 build/two-sum-test[1]_include.cmake create mode 100644 build/two-sum-test[1]_tests.cmake create mode 100644 src/two-sum.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 8399768..306c317 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,11 +12,19 @@ add_compile_options(-Wall -Wextra -Werror) add_executable(main "${SRC_DIR}/main.cpp" "${SRC_DIR}/two-sum.cpp") -find_package(GTest REQUIRED) +# Fetch Google Test +include(FetchContent) +FetchContent_Declare( + googletest + URL https://github.com/google/googletest/archive/refs/tags/release-1.11.0.zip +) +FetchContent_MakeAvailable(googletest) + add_executable(two-sum-test "${TEST_DIR}/test.cpp" "${SRC_DIR}/two-sum.cpp") -target_link_libraries(two-sum-test PRIVATE gtest::gtest) +target_link_libraries(two-sum-test gtest gtest_main) target_compile_options(two-sum-test PRIVATE "-fsanitize=address,undefined") target_link_options(two-sum-test PRIVATE "-fsanitize=address,undefined") + add_test(NAME two-sum-test COMMAND two-sum-test) include(GoogleTest) gtest_discover_tests(two-sum-test) diff --git a/build/CMakeCache.txt b/build/CMakeCache.txt new file mode 100644 index 0000000..c4cf002 --- /dev/null +++ b/build/CMakeCache.txt @@ -0,0 +1,590 @@ +# This is the CMakeCache file. +# For build in directory: /home/user/CppDevCourse-hw3/build +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Builds the googlemock subproject +BUILD_GMOCK:BOOL=ON + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//Choose the type of build, options are: None Debug Release RelWithDebInfo +// MinSizeRel ... +CMAKE_BUILD_TYPE:STRING= + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//CXX compiler +CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-13 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-13 + +//Flags used by the CXX compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the CXX compiler during DEBUG builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the CXX compiler during RELEASE builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//C compiler +CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-13 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-13 + +//Flags used by the C compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the C compiler during DEBUG builds. +CMAKE_C_FLAGS_DEBUG:STRING=-g + +//Flags used by the C compiler during MINSIZEREL builds. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the C compiler during RELEASE builds. +CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the C compiler during RELWITHDEBINFO builds. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= + +//Value Computed by CMake. +CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/user/CppDevCourse-hw3/build/CMakeFiles/pkgRedirects + +//User executables (bin) +CMAKE_INSTALL_BINDIR:PATH=bin + +//Read-only architecture-independent data (DATAROOTDIR) +CMAKE_INSTALL_DATADIR:PATH= + +//Read-only architecture-independent data root (share) +CMAKE_INSTALL_DATAROOTDIR:PATH=share + +//Documentation root (DATAROOTDIR/doc/PROJECT_NAME) +CMAKE_INSTALL_DOCDIR:PATH= + +//C header files (include) +CMAKE_INSTALL_INCLUDEDIR:PATH=include + +//Info documentation (DATAROOTDIR/info) +CMAKE_INSTALL_INFODIR:PATH= + +//Object code libraries (lib) +CMAKE_INSTALL_LIBDIR:PATH=lib + +//Program executables (libexec) +CMAKE_INSTALL_LIBEXECDIR:PATH=libexec + +//Locale-dependent data (DATAROOTDIR/locale) +CMAKE_INSTALL_LOCALEDIR:PATH= + +//Modifiable single-machine data (var) +CMAKE_INSTALL_LOCALSTATEDIR:PATH=var + +//Man documentation (DATAROOTDIR/man) +CMAKE_INSTALL_MANDIR:PATH= + +//C header files for non-gcc (/usr/include) +CMAKE_INSTALL_OLDINCLUDEDIR:PATH=/usr/include + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Run-time variable data (LOCALSTATEDIR/run) +CMAKE_INSTALL_RUNSTATEDIR:PATH= + +//System admin executables (sbin) +CMAKE_INSTALL_SBINDIR:PATH=sbin + +//Modifiable architecture-independent data (com) +CMAKE_INSTALL_SHAREDSTATEDIR:PATH=com + +//Read-only single-machine data (etc) +CMAKE_INSTALL_SYSCONFDIR:PATH=etc + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/gmake + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=hw-3 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION:STATIC=1.11.0 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MAJOR:STATIC=1 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MINOR:STATIC=11 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_PATCH:STATIC=0 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_TWEAK:STATIC= + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Path to a program. +CMAKE_READELF:FILEPATH=/usr/bin/readelf + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//Path to a program. +CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Directory under which to collect all populated content +FETCHCONTENT_BASE_DIR:PATH=/home/user/CppDevCourse-hw3/build/_deps + +//Disables all attempts to download or update content and assumes +// source dirs already exist +FETCHCONTENT_FULLY_DISCONNECTED:BOOL=OFF + +//Enables QUIET option for all content population +FETCHCONTENT_QUIET:BOOL=ON + +//When not empty, overrides where to find pre-populated content +// for googletest +FETCHCONTENT_SOURCE_DIR_GOOGLETEST:PATH= + +//Enables UPDATE_DISCONNECTED behavior for all content population +FETCHCONTENT_UPDATES_DISCONNECTED:BOOL=OFF + +//Enables UPDATE_DISCONNECTED behavior just for population of googletest +FETCHCONTENT_UPDATES_DISCONNECTED_GOOGLETEST:BOOL=OFF + +//Enable installation of googletest. (Projects embedding googletest +// may want to turn this OFF.) +INSTALL_GTEST:BOOL=ON + +//Value Computed by CMake +gmock_BINARY_DIR:STATIC=/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock + +//Value Computed by CMake +gmock_IS_TOP_LEVEL:STATIC=OFF + +//Dependencies for the target +gmock_LIB_DEPENDS:STATIC=general;gtest; + +//Value Computed by CMake +gmock_SOURCE_DIR:STATIC=/home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock + +//Build all of Google Mock's own tests. +gmock_build_tests:BOOL=OFF + +//Dependencies for the target +gmock_main_LIB_DEPENDS:STATIC=general;gmock; + +//Value Computed by CMake +googletest-distribution_BINARY_DIR:STATIC=/home/user/CppDevCourse-hw3/build/_deps/googletest-build + +//Value Computed by CMake +googletest-distribution_IS_TOP_LEVEL:STATIC=OFF + +//Value Computed by CMake +googletest-distribution_SOURCE_DIR:STATIC=/home/user/CppDevCourse-hw3/build/_deps/googletest-src + +//Value Computed by CMake +gtest_BINARY_DIR:STATIC=/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest + +//Value Computed by CMake +gtest_IS_TOP_LEVEL:STATIC=OFF + +//Value Computed by CMake +gtest_SOURCE_DIR:STATIC=/home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest + +//Build gtest's sample programs. +gtest_build_samples:BOOL=OFF + +//Build all of gtest's own tests. +gtest_build_tests:BOOL=OFF + +//Disable uses of pthreads in gtest. +gtest_disable_pthreads:BOOL=OFF + +//Use shared (DLL) run-time lib even when Google Test is built +// as static lib. +gtest_force_shared_crt:BOOL=OFF + +//Build gtest with internal symbols hidden in shared libraries. +gtest_hide_internal_symbols:BOOL=OFF + +//Dependencies for the target +gtest_main_LIB_DEPENDS:STATIC=general;gtest; + +//Value Computed by CMake +hw-3_BINARY_DIR:STATIC=/home/user/CppDevCourse-hw3/build + +//Value Computed by CMake +hw-3_IS_TOP_LEVEL:STATIC=ON + +//Value Computed by CMake +hw-3_SOURCE_DIR:STATIC=/home/user/CppDevCourse-hw3 + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/user/CppDevCourse-hw3/build +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=28 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=3 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER +CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_AR +CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB +CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Test CMAKE_HAVE_LIBC_PTHREAD +CMAKE_HAVE_LIBC_PTHREAD:INTERNAL=1 +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/user/CppDevCourse-hw3 +//ADVANCED property for variable: CMAKE_INSTALL_BINDIR +CMAKE_INSTALL_BINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATADIR +CMAKE_INSTALL_DATADIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATAROOTDIR +CMAKE_INSTALL_DATAROOTDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DOCDIR +CMAKE_INSTALL_DOCDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INCLUDEDIR +CMAKE_INSTALL_INCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INFODIR +CMAKE_INSTALL_INFODIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBDIR +CMAKE_INSTALL_LIBDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBEXECDIR +CMAKE_INSTALL_LIBEXECDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALEDIR +CMAKE_INSTALL_LOCALEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALSTATEDIR +CMAKE_INSTALL_LOCALSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_MANDIR +CMAKE_INSTALL_MANDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_OLDINCLUDEDIR +CMAKE_INSTALL_OLDINCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_RUNSTATEDIR +CMAKE_INSTALL_RUNSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SBINDIR +CMAKE_INSTALL_SBINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SHAREDSTATEDIR +CMAKE_INSTALL_SHAREDSTATEDIR-ADVANCED:INTERNAL=1 +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SYSCONFDIR +CMAKE_INSTALL_SYSCONFDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=4 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.28 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_TAPI +CMAKE_TAPI-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/usr/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//Details about finding Python +FIND_PACKAGE_MESSAGE_DETAILS_Python:INTERNAL=[/usr/bin/python3][cfound components: Interpreter ][v3.12.3()] +//Details about finding Threads +FIND_PACKAGE_MESSAGE_DETAILS_Threads:INTERNAL=[TRUE][v()] +//linker supports push/pop state +_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE +//CMAKE_INSTALL_PREFIX during last run +_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX:INTERNAL=/usr/local +//Compiler reason failure +_Python_Compiler_REASON_FAILURE:INTERNAL= +//Development reason failure +_Python_Development_REASON_FAILURE:INTERNAL= +//Path to a program. +_Python_EXECUTABLE:INTERNAL=/usr/bin/python3 +//Python Properties +_Python_INTERPRETER_PROPERTIES:INTERNAL=Python;3;12;3;64;32;;cpython-312-x86_64-linux-gnu;abi3;/usr/lib/python3.12;/usr/lib/python3.12;/usr/local/lib/python3.12/dist-packages;/usr/local/lib/python3.12/dist-packages +_Python_INTERPRETER_SIGNATURE:INTERNAL=4c8bfa8951e99fa32e4000a94f8c04a2 +//NumPy reason failure +_Python_NumPy_REASON_FAILURE:INTERNAL= +cmake_package_name:INTERNAL=GTest +generated_dir:INTERNAL=/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/generated +//ADVANCED property for variable: gmock_build_tests +gmock_build_tests-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: gtest_build_samples +gtest_build_samples-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: gtest_build_tests +gtest_build_tests-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: gtest_disable_pthreads +gtest_disable_pthreads-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: gtest_force_shared_crt +gtest_force_shared_crt-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: gtest_hide_internal_symbols +gtest_hide_internal_symbols-ADVANCED:INTERNAL=1 +targets_export_name:INTERNAL=GTestTargets + diff --git a/build/CMakeFiles/3.28.3/CMakeCCompiler.cmake b/build/CMakeFiles/3.28.3/CMakeCCompiler.cmake new file mode 100644 index 0000000..b11488f --- /dev/null +++ b/build/CMakeFiles/3.28.3/CMakeCCompiler.cmake @@ -0,0 +1,74 @@ +set(CMAKE_C_COMPILER "/usr/bin/cc") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "GNU") +set(CMAKE_C_COMPILER_VERSION "13.2.0") +set(CMAKE_C_COMPILER_VERSION_INTERNAL "") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17;c_std_23") +set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") +set(CMAKE_C17_COMPILE_FEATURES "c_std_17") +set(CMAKE_C23_COMPILE_FEATURES "c_std_23") + +set(CMAKE_C_PLATFORM_ID "Linux") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_C_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar-13") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib-13") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCC 1) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) +set(CMAKE_C_LINKER_DEPFILE_SUPPORTED TRUE) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "ELF") +set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/13/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/13;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/build/CMakeFiles/3.28.3/CMakeCXXCompiler.cmake b/build/CMakeFiles/3.28.3/CMakeCXXCompiler.cmake new file mode 100644 index 0000000..3ee6cf0 --- /dev/null +++ b/build/CMakeFiles/3.28.3/CMakeCXXCompiler.cmake @@ -0,0 +1,85 @@ +set(CMAKE_CXX_COMPILER "/usr/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "13.2.0") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") +set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar-13") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib-13") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) +set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED TRUE) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/13;/usr/include/x86_64-linux-gnu/c++/13;/usr/include/c++/13/backward;/usr/lib/gcc/x86_64-linux-gnu/13/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/13;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/build/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_C.bin b/build/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 0000000000000000000000000000000000000000..d9c91474412bfe33853305c9ad4197bc507cc2e6 GIT binary patch literal 15960 zcmeHOeQX>@6`woj!y!)Y(#BwtkSvgtxWyYMPD~mUa{f4H5B!lP4zxVP%ZSNqeD45G<>RSy!6wV#KvnQl@3)7xijjpDMNH1p6zp3s#)oDLh`Ebo=HF*-T5;$(P1k#<#Y&v~Sjn1$~q38pox55( z!Z!AaJ{XTBH{@s_~ZbT5f=#` z2*u+PZxT%b{AR%40b5Yg0BAMZIRyAJjIyQ}7;}_i*lvR8C1~Q@B2ghuf{u%(8^(!o zM*rqz%JF05Z-B=3HBAAHgbUMz88u`UJ}_XnsWWv zHF@sC#^fK2qc2SF8cc31Z~UooV*Agafl6Z$T(1o4u{EER?E(G}AjXOL51_hz#%qMG zKZs@MdQoL6w&n;ro+SM%8@Hn4C7A{?iWQ>6tns@{DornztMpSVs-iSEkgs zn2+N9)Pb(d|(z8j~-24aV{93&6P8T&YwpW?=Ws{8! z?`zdG{xQ(f)%|C&Yk7{UX9c?sC5%8AfiMDL1i}b}5eOp?Mj(tp7=bVXVFbbm{Ob|G z=QOV+ss5gUZNBGC`&zf|_xty!271!lyb05G3wCCoo9Z-o_9s)_{T)L3Nq&05v(17F zkF@snrUnOllV-BNJJrz-9rcXiAH-L|b^ti?Szh--`Q&IVVE6!QJ>U{p8t+-! z^#0i5`|6K~9V>3XwQVgvwvzn2LC4t-K@e=ygY6Z-h) z-b%9h)@KFToVSPfODJ6bmur;*+K*APoy^Gwdz1>8w^s6xHv`)^Ek@nk2$j_+}>(sR>%8~iW)D(Nm8$oeJ8aCPlo03a2(;*RNC!S z|2MLET-5x3PH}$tzu6+^PwwpM+NQ1Fn=a+OlD4r8GCx~eHno+cy}6l?*XRr5Fi*Tv z3A$jMBT(}h3WP=un7>=gAJ0P+@@vOv9+JDz2tO6T+X&}*&HgDUM11+Xe4a47Is$k3 zJWtvG5EQUqzD^iFCjD=&=BYCNO(@hF{|}^pTqHE*$@A(t!VeHmN?alQ2mz1_8Q>Afljif!_-cv6)fJdu?*be%oH=iw{kKs& z!F=u>iN9I!^~nBr10EG{H3!aP8t__q=Z68;nC#QvmH3VM;$H^5Rvz}FfY-`9|2E+w z;cFaM`$AK7^mQeEC)>F(PyI>2Yvq?;Apc<8E|Y&Szx)c|)TQc}_DkV! zJpK-!Rk3Ht^)~7SNce_-*-XzG5daju((tf8B(5i!n_kWw!Zhwg`ZX=eme*BvW=Lsi!CysSN|7LFD=?b+SYC;x3UAq^e} zh+{7n%uy?!foyuS`>y_uzEl^W@WO?eG>Bky?*<4G@9~dHr0(n;=;rzd&Mt!j~!k-%jOMFBZ(1&p-Q>gX%yryk6!O14wN3G(h&@&Tx=t60DaY5F6)OL$b zAwSD7q0Y6l77~PxQ$^@wS+&zg3Q+LuaoEe#sk;UF{)29h(hM8T0G}dv};-k^c&BDhrHJ5EXPJvUw#QML5tGU|82hHDq*&-FeR z`l9fcO+TN1w^?iKNIJ;>5a54>wGWS<*L$pciO1`` z;P@@5$F&~w;YU^p=}`L?^*t~c+z;7i2>(}FdE5J_>fpsQu!h-ER9^mu3hc(~VfSVMa zUTmL%0(Qai7aG-&{w$fS2xe3K5K4YNua{WkGcLab`^Wj|=a)6*&HD3xGL-rJGyEGU z;2M(eJNSN$--8VLv(5SfaAQ6`uajq500dz_WnH%!zYG;P_qhM+I#O4RG9DZV&VLl< z@p=3PVCcepUO$#MptleSxxc<+KI<8%^7E^NR>k3dxCQ31eGLkTasRwNixWTSPlv;F zQ3n8Guev8NMql+oLQ37cWG|v61 UT3kEV<}bn@7LbMjAz+Gs0!6h%P5=M^ literal 0 HcmV?d00001 diff --git a/build/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_CXX.bin b/build/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 0000000000000000000000000000000000000000..3fdc4082b34ce180ff2c6b532c20fcf8cf585743 GIT binary patch literal 15984 zcmeHOeQX>@6`#9&xor|((xfp-X^zrV3E+zzC&md4ImbR{4>@*794Lgax$~{z9JN|Kjr&ghc{NNdvN=wfUVei?O%*>iOY6D__4@-Dq-xYJ4_Osk@|p$C&z@p zT@ueAwn;I-px>DI1+iEBfLsTsV=s8Qf2Y19;&(2ti%~&*o1qmD^}U| zD)lYZ4>5^9P{ONr=G|=P?w$EuYu+tZCt4@EI$Jw;Cn}}HE?qUZD^6b?Q-=nQD=KD& zISHeRP8k{Hv2KIt+5Xvk?tkXTKbbmyKucpFY@Q?@H`S?5XEFb}KtQblA>0WoOi_cuslfa8JHe zbcQn7yhCM;7D`1a-8QBT4LO1l{V_ciA(`8Y@lxIF-oR1k@yFbEKKDfmbCiDZOu}`H z>nFa>@bhwggP)ZGo03Kk9`fY_hUY%yK0%uG@&10l;^Q&K*k{hi^Y}rU_wn+R2vvw- z1i}b}5eOp?Mj(tp7=bVX|Hl#dbMtL~wN77cvd*md)lQ|XPtADI+Rv@iKWe(Dqf*=R zFwwPbkI=DsYf`a&ZQBzhjWloVRa$QUV|x112d(MfTBm(=y~ z_2i!pSWnI`vm#Gfm#%vosDN!!KvQkjv+-l_epR@Jv2w@&Yma@LxD!CP&e*}sy6 zD?4hn+Las~o?7vDy6cXdB;R`d?Em|FNy(YxQC9Jf!=iY09j~# zChMM{bqMSb*|O{%{O*n4Wu1GmRy##_p724!#|SOLhvsUv^MsuEohqlueMePfA{N=Q zdR5aodZETVuN^o=K6kP~?<)O9?heZCrtfy*HL*6Y?@Ppggo)JJ*r%gCYgR_fR5KG{3L_9kAdEm5fiMDL1i}b}5eOp? zMj(v9|3(C`UJ>gPvG!2k^iUI5qnWaPagE52$U4V2h>UfRTSUgK&t{Ra9+K~uI6?o) z^;(JL$7B&B)+Ube4Id@5rd6rSqQBA5>OsMq1X~0*3Ieb;az@rat`bF?RD^cS2v3VW zbwYW!i442H)l7RSPMW$dvRO<{FSr-<+LLZg_4&=o`MfGJ+9k#R_W#mNfmUr(E<~8c#@w8mMR12DLoFk<9j07Ss2E1Olkv;cA zRIOFxG7iOD#f3i~;5&rJxQ2b2G7;6HVoAebyz}bn2t6ghI5k?O?xzgbi|YhDkH3hz zSz+9R{|03mwf~3OKBnSvV~KJ4obXBEG2UJg{*>?ns)ZUHQ86_o1g#FxX{oqv)AsAt zkvEB<4;reIn~=oFru&>Ss)(x+3-%Z}56q?03lTsD5@t%2$c!_5|%$MC(mK5gNA= zfBPcF2>Xa%AEjT%z;&UH4VS(4M2S|&(^EFv%Zw@_DqeMDBr&WOR@2*F!5-%I^cAwq zmF&@cDVxdLIj>Z%*qQ2t8ZH&a^N#1_5^aqwcqPAUXUgRaJq#>*CzSy6>41H(eA_gsiaMt2YTN((0w@FLp1Heuv3<3 zt=^-`KGZ*Wu)E(L?CU$08nTDF57NU-G7Ri(NMZ}a>up!k||+nh!hWid!l!5^U0yoqUEJRDws4N{r{tAu(E_jOR?yk%u8! zmULtj&X^3mu^jnBGX7=+8V}^D@JzuSrsiztEfr?Z-S2i25-P#5@eeW+=mRK=@;x2s|f-+(wQa{4u|CiQ_2<{4wtY^8dU) z1>^rAQu3S+{+QZ4^ zJ)aZw_5Ta`-@trciqUl;&-fMk`u*eL2NbdH0vY&lz`sotK-i%G$iPPf{z*{)bAb+n zAIf_?;E(wP5cfN<502jp;*a>NxL68)Rz!f%5S5u1F7)3yF#z(rFMkTw|5H-(DWd+F zxUmL)!HD%E`X9tEDZ_I}+>c;Bi~W&7d&t1&$+y|(kNNX_E0L67XQTxg{EMXEv4{HW z^Uj3vnBkM7#N(e6{LqhICyq_vk9p|KPPSGmsgDZ>_ygxj<@c{Uv>6}NgA(8e`8s8o zL;aYy#l$~oFQ)@{wTuYn#JtYK|IRvNGVu2!`rdEaB?W#{8phZ0E%Zfu@cYO2VQ9PG ef0l2cC?x}hqh6!sIdWtFIRCLwS{-l*i0U7@Oc@;j literal 0 HcmV?d00001 diff --git a/build/CMakeFiles/3.28.3/CMakeSystem.cmake b/build/CMakeFiles/3.28.3/CMakeSystem.cmake new file mode 100644 index 0000000..9f73b3f --- /dev/null +++ b/build/CMakeFiles/3.28.3/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-5.15.153.1-microsoft-standard-WSL2") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "5.15.153.1-microsoft-standard-WSL2") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Linux-5.15.153.1-microsoft-standard-WSL2") +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_VERSION "5.15.153.1-microsoft-standard-WSL2") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/build/CMakeFiles/3.28.3/CompilerIdC/CMakeCCompilerId.c b/build/CMakeFiles/3.28.3/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 0000000..0a0ec9b --- /dev/null +++ b/build/CMakeFiles/3.28.3/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,880 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif +#if defined(__CLASSIC_C__) +/* cv-qualifiers did not exist in K&R C */ +# define const +# define volatile +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + +#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) +# define COMPILER_ID "SDCC" +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) +# else + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if !defined(__STDC__) && !defined(__clang__) +# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) +# define C_VERSION "90" +# else +# define C_VERSION +# endif +#elif __STDC_VERSION__ > 201710L +# define C_VERSION "23" +#elif __STDC_VERSION__ >= 201710L +# define C_VERSION "17" +#elif __STDC_VERSION__ >= 201000L +# define C_VERSION "11" +#elif __STDC_VERSION__ >= 199901L +# define C_VERSION "99" +#else +# define C_VERSION "90" +#endif +const char* info_language_standard_default = + "INFO" ":" "standard_default[" C_VERSION "]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/build/CMakeFiles/3.28.3/CompilerIdC/a.out b/build/CMakeFiles/3.28.3/CompilerIdC/a.out new file mode 100755 index 0000000000000000000000000000000000000000..8a279ac6d60ee201d940119108c7619465ecd1b6 GIT binary patch literal 16080 zcmeHOeQX>@6`#9&IW&nKx4|YU%~Fyoq4mWdN$RFbbFqES8rexm91u#wvi7a*6Zc{6 z_NZOaCMc!Eq>)lUz#kx06{6xJ5(re(NEAm!ftErWfz8`iDUpx&X5R0- zUd}|%ln)6oA=(#zM0*d-JLm}>hF!mVhU-Ax=*o`Y%okx3eMgw8G@whRIBOu zes!x_PV!RCnewCoDmCeHd?D5ezl4zOnmJPgZ#6X4U=mu$$aagRF>Vkgppx@oyJcJ; zau|Ov6#!9QtGPVgXdB4eNVvz&eHP$HWCeEtCJB#r7MfjVEzrBVZJ}nLIJW6RtCo$-CLigP!7Ij_*#jufMOW+i6d&OxPGj)hM$$|8~hbA;2}4Jc*`<+%^|)hycOcVApDjP|7GD@L;N}6FYi%0 z@z~+9fOI9m^B6BC<0Lg{wE^v z*ZSMuwohKGvrjL3b(>Q5=coO6MbKlgZPuNp`uur}=b8s-#Hr@8TeP;IyaO_%n`Didgz)xRlf3z)OBvAeR|ys^rU_|bt

*GMG=T15Je!0Koo%}0#O8_ z2t*NxA`nF&iopMK1o->cjZ)wK-UGXa3%T)3)+-*Ruad_WYA+~vKI0WjnL_?(t4?hl z36p7UN2c|d(iY=c*B>bqb4UC6>#C4$ad_;glD|kiW%piamHp#U>hJ z8&<8TJ4+wLnCCSITS)&7R_IxwzvOMA>~{K}d81O%#F~cQHO(Kczv+Rx6Kc=;dp^{$ zi9aK1d#?8~^q8c?K7IOshWvhqiPV~gN8{bAm&c!=nwf}F6oDuLQ3Rq0L=lK05Je!0 zKoo%}0#O9s-3Va4BGxBj4WNE_p{iD)I$6KCTIAo!I>+~kjCGJ3M8+e`dXcdnlAn7x zq5SW2l>*B@ki~>pBRIwnZIpOjBB#qz{vIQ$Q-U`MHVdv31c;fMmUW0Lq@YzQLOVL; z#A&goPVje|$k6*|#k7~yH8m%)SxinJxaZ5YB|Tp1^P7?L`G?5xC+^=p!20la=n?Bu zEz3BKw(#kx|gBi+~Cz02BiWT>3?%N9N8(-VG6dq-Kz+qVjHgEn#am#V*1!YbS! zF)DdXI?@saURPX8pZhDW)~InAucEFj;hzZc9l~S$L%)wQG1aU(lZN5;apG0jF?y=U zc-ABxK1=^xFRmx>rzjIsH!EBp;Gd#Qt@bZ=Ugx!+Ms?}~@Gy_H{QOeu)720f50|vr z+Uh!cczI3hzqfjwfPb4ZjSvFZL;!OW#j$6_)n(bn6pXQsCl{5s-OC26A`fZ52fYNNhSfwAx(dQYWINqDX+U*-e2~mscnwaduZ=K z%1Q0-acHMN&&T)g9q8*OnqF=?DO*bIo7s@)t@4Z@J5Ct z_AC6SJqljh^3BZSxpciG0EL5~KNYV!T)w_lo{xfEp@iXpc@N zE!5twz7`&fT7Aqdjj2R>GEY?)^oynh?a*o>I8;{jvMw8_1dk+@7|)tRVzfXRp8~8B zJRC{0pgS|+jmZEUOOrh$V{b;Hu|S@jySdCTHHXJSg1SN_sB3aGvgL|WBB&VLpahST~qHNCMB9=(5*ov3+DxT%FfJ-btCDeRx0FCMXKx{tTLbhlBQ*2LLT7 z3Wn`JM*Lee=R*52&jg}=%rmR^Gx6sV@*ETPn1=$-iXOL-V+VW8A2Y=9)CKmK*8)#b zSulm;|7j}ZIVJ2dj|5_Vj`l+j_%PY?92GL=slZmLJluY?=?rB!rm)An8Hjl^>JOj) z*T|O73FXz_8Tq}z^8%^p6z;!o5*xI)#11H;SkM2Afqyb&-zo(_=)nPG;P*oINhtt+ zDb!)GgTEh!>@m*);&}@C;q(8A*dzYR5>3J9MFa>9QT>c^+(g*FCoB-2*p8F@Nf%l-uauuxish8j_yt7J9&3$w;ly#N3J literal 0 HcmV?d00001 diff --git a/build/CMakeFiles/3.28.3/CompilerIdCXX/CMakeCXXCompilerId.cpp b/build/CMakeFiles/3.28.3/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 0000000..9c9c90e --- /dev/null +++ b/build/CMakeFiles/3.28.3/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,869 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__COMO__) +# define COMPILER_ID "Comeau" + /* __COMO_VERSION__ = VRR */ +# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) +# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) + +#elif defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L +# if defined(__INTEL_CXX11_MODE__) +# if defined(__cpp_aggregate_nsdmi) +# define CXX_STD 201402L +# else +# define CXX_STD 201103L +# endif +# else +# define CXX_STD 199711L +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# define CXX_STD _MSVC_LANG +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_standard_default = "INFO" ":" "standard_default[" +#if CXX_STD > 202002L + "23" +#elif CXX_STD > 201703L + "20" +#elif CXX_STD >= 201703L + "17" +#elif CXX_STD >= 201402L + "14" +#elif CXX_STD >= 201103L + "11" +#else + "98" +#endif +"]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} diff --git a/build/CMakeFiles/3.28.3/CompilerIdCXX/a.out b/build/CMakeFiles/3.28.3/CompilerIdCXX/a.out new file mode 100755 index 0000000000000000000000000000000000000000..4e346b850a19817a02746e705aaa6ae38b0dd302 GIT binary patch literal 16088 zcmeHOeQX>@6`#9&IW&ncX+uI%lA|<{1NFvsKI#^QoMWG}Ms|`WP6?!8S^L)ZiTf~j zd(^Hd4Wxw_H>d>!{i8@#g+PEJK%gQjH8>QtY86l-ArS;Z;iDo*No&N1Oo?*5H}ih$ z^KuRX`UevGEbp85dml6VW_E9OcjlpVZ+AQvQ=kRv-HN4D!XPP8JaMNKh^17!T29Be zs$11!k{4>s=u?J~*3iZHT;3q~0^;nqmJ464?;RX?bD>)DLTf_>H z!~EA$0XXzQeMxpEO6p_49~D3FT0d^ebhELa-Zhuol9vO*;m4vr1+bm$d7^PkjrK>W@nbr==qcNkcKqrQ8{Pr6nt zZp_fl2c^FG`XM3t2bc7!t-0*L&h1-sndV%!P#J3;Yv0+tbGub8T5Y;wZda22c}(ry zcUV!FDaIs?Dt_F^h{w8HM9=mwe&@lfrtq{~kB?JH#y0T_-cRxxnCHNLtLo@F2}{<&oq6!WJowFo-&QA%avaL&pi}nU zlJDf*Y=Mx$G1nQ&7TjF+0Z*}-^Se{+?d{pq>9kpG){daOZM$-M`um)WSMr9lW#23H z_jTrq1+U*7$axfNIA1JCbjO(1HRKG&^q=Xe7|GmTjF-x~>{8A;k3Yt~`}h|q&2hTp z8Nzjp>nFL=;4^Z41HU8z8&XCO9C9LrCzHl*Z3r(3o($oi61*vde@^h05Pn+li@TL3 z9y>f1K$mK89%G=(H8{pL>!xdP9=D*G8eHFRp@?{tfhYq}2BHi^8Hh3vWgyDH|3n7< z)VSew`^1$7dvejww<={nGUdms=j{_eYIt6^ue#%Df~%XpOvlEJDaH2HO=n0NYTVeR zwA^~NXX3&K?1|slCw@15pg-L@)%ucsYS+sYpt`zDrhgu?8aF-NO7efHJe_Su;QcI*ZF!gc=^3b086 zG*mB{cEO+9dwf?Psa55jhwT%);#{;RUh$XNle-p^aCu9$TD_d1!wWi0>=^k5^|SvU z?k6P|4wK)+gIDZ{%B2_6*SMMX^%6_>)|HA zsnw@fP@11vmV z2fF?HbgN?P7rd*9n#bRx`d_P7?<1Ze&Tk%k;`F*g9h5NiZS_@Rx6*CjGt6#biws7?yMN%&gftA&G!o0^h!h)YD#A{C(>?Q-I@ z*i#eYZ4eoDf3KSMlDUSii)6Q_Tn`eQY0!u=5= z&7;zhNipDc#r5pDzv60z8kO-X<|--pQz3kt;28g~@1a6WtyS$QgK+zpcolYxp6W54 zHAsh#(m&UW>k0TtD#X;y3fBkluTr62`_E|mgi0liWt(9Xp}zfj!eg|8`{diiu!hx( z|0``zS4n7`{9gO54A$Qx%?E@eIvFj8n}jX%M+Q)n_!mMupd1KPh;4 z9rbgBCup3cQiyE$eT1)~@sN`7rr#Zr>W301A@;ZroR>HlZ;19wiL*uSxB6WXDS2NC zpI6xas>E*!#a|W=P8Fdw-%R*za}XnR5WXr-ch}JMvX}6c)L+Szu|xaSp}~^hY87ea zy*rR~e0Nw8Q1&ZBL)M_0U8V2%d1sK<>6gheQ*?%N#Q`_xWc*^O?6{RN#qSn#p6_L> zmiiXFLm=z8rII`Dcm=;Su7*l(-g7dQe14oogOe#2oe_F1%KII9 z_LEg6TW~66FQfFS;GL?Ga&BR`;tqSxKffn#%8em9om?dEXr%?w1T7K`C3H{T`#rDinRs8ZK0<(Nb~L zEBWI!&_E?in{~1ofjai|H1nX;<|A%-L|K{f0##wSUoskbVLeB1NLTW5E;}fThm^8L zbLL{CGbD`%$`stqX9uY{-2E11Us==}c^cw% zF3*1(;&~a}8iKd`;eB?Pmmx6Q*3#Qa;JFiB{+j07PbTVMeg}Cc6>9y%`^xxzdM)98 z42*w|YyB}F08heDc-a5Fg#VT1UT8n&o8YJ)^UdJCCh=V2JlBLj=A+<`i5<6*a|eIS zBeR6@6bAm7--4ecT`h(4|6x+{+!FqnPl98fj`qV2{A1+Lb5+QguY$Ko<>B_DO{b{9 zIfXyw&)}FpqyF&uf02CooS+YWSLF8v&kbavDcpZwBDB^&DSqH0iudf#7VxJ-{w<;a zhaCby2LDFLKP3wA&xSe-eu($&kU!=%;CQZrefa#pC;rI4N{XfMmqY{;7^3z+EjMfH5%-aQJTy5L1AEEyviYHT|Fj w#C?#jV}4dadvO0-N*LN+>)*~FQHkye1xLL`%X7~9{uBJeLbNR85E9it0Bl)SWB>pF literal 0 HcmV?d00001 diff --git a/build/CMakeFiles/CMakeConfigureLog.yaml b/build/CMakeFiles/CMakeConfigureLog.yaml new file mode 100644 index 0000000..759159b --- /dev/null +++ b/build/CMakeFiles/CMakeConfigureLog.yaml @@ -0,0 +1,563 @@ + +--- +events: + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineSystem.cmake:233 (message)" + - "CMakeLists.txt:2 (project)" + message: | + The system is: Linux - 5.15.153.1-microsoft-standard-WSL2 - x86_64 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:2 (project)" + message: | + Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. + Compiler: /usr/bin/c++ + Build flags: + Id flags: + + The output was: + 0 + + + Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + + The CXX compiler identification is GNU, found in: + /home/user/CppDevCourse-hw3/build/CMakeFiles/3.28.3/CompilerIdCXX/a.out + + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:57 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + checks: + - "Detecting CXX compiler ABI info" + directories: + source: "/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-7xcOFK" + binary: "/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-7xcOFK" + cmakeVariables: + CMAKE_CXX_FLAGS: "" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + buildResult: + variable: "CMAKE_CXX_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-7xcOFK' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_ebb54/fast + /usr/bin/gmake -f CMakeFiles/cmTC_ebb54.dir/build.make CMakeFiles/cmTC_ebb54.dir/build + gmake[1]: Entering directory '/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-7xcOFK' + Building CXX object CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o + /usr/bin/c++ -v -o CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp + Using built-in specs. + COLLECT_GCC=/usr/bin/c++ + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.2.0-23ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-uJ7kn6/gcc-13-13.2.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-uJ7kn6/gcc-13-13.2.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.2.0 (Ubuntu 13.2.0-23ubuntu4) + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_ebb54.dir/' + /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_ebb54.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccoT8jW6.s + GNU C++17 (Ubuntu 13.2.0-23ubuntu4) version 13.2.0 (x86_64-linux-gnu) + compiled by GNU C version 13.2.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.26-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/13" + ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include" + #include "..." search starts here: + #include <...> search starts here: + /usr/include/c++/13 + /usr/include/x86_64-linux-gnu/c++/13 + /usr/include/c++/13/backward + /usr/lib/gcc/x86_64-linux-gnu/13/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include + End of search list. + Compiler executable checksum: 4e0f319cd9945d8f5a9eeeeec1481ba5 + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_ebb54.dir/' + as -v --64 -o CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccoT8jW6.s + GNU assembler version 2.42 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.42 + COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.' + Linking CXX executable cmTC_ebb54 + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_ebb54.dir/link.txt --verbose=1 + /usr/bin/c++ -v CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_ebb54 + Using built-in specs. + COLLECT_GCC=/usr/bin/c++ + COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.2.0-23ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-uJ7kn6/gcc-13-13.2.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-uJ7kn6/gcc-13-13.2.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.2.0 (Ubuntu 13.2.0-23ubuntu4) + COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_ebb54' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_ebb54.' + /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/cc9Yzg6u.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_ebb54 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_ebb54' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_ebb54.' + gmake[1]: Leaving directory '/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-7xcOFK' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:127 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + message: | + Parsed CXX implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/include/c++/13] + add: [/usr/include/x86_64-linux-gnu/c++/13] + add: [/usr/include/c++/13/backward] + add: [/usr/lib/gcc/x86_64-linux-gnu/13/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/include/c++/13] ==> [/usr/include/c++/13] + collapse include dir [/usr/include/x86_64-linux-gnu/c++/13] ==> [/usr/include/x86_64-linux-gnu/c++/13] + collapse include dir [/usr/include/c++/13/backward] ==> [/usr/include/c++/13/backward] + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/13/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/13/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/include/c++/13;/usr/include/x86_64-linux-gnu/c++/13;/usr/include/c++/13/backward;/usr/lib/gcc/x86_64-linux-gnu/13/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:159 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + message: | + Parsed CXX implicit link information: + link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + ignore line: [Change Dir: '/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-7xcOFK'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_ebb54/fast] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_ebb54.dir/build.make CMakeFiles/cmTC_ebb54.dir/build] + ignore line: [gmake[1]: Entering directory '/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-7xcOFK'] + ignore line: [Building CXX object CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/usr/bin/c++ -v -o CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.2.0-23ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c ada c++ go d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-uJ7kn6/gcc-13-13.2.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-13-uJ7kn6/gcc-13-13.2.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.2.0 (Ubuntu 13.2.0-23ubuntu4) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_ebb54.dir/'] + ignore line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_ebb54.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccoT8jW6.s] + ignore line: [GNU C++17 (Ubuntu 13.2.0-23ubuntu4) version 13.2.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 13.2.0 GMP version 6.3.0 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.26-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/13"] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/include/c++/13] + ignore line: [ /usr/include/x86_64-linux-gnu/c++/13] + ignore line: [ /usr/include/c++/13/backward] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/13/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [Compiler executable checksum: 4e0f319cd9945d8f5a9eeeeec1481ba5] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_ebb54.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccoT8jW6.s] + ignore line: [GNU assembler version 2.42 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.42] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [Linking CXX executable cmTC_ebb54] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_ebb54.dir/link.txt --verbose=1] + ignore line: [/usr/bin/c++ -v CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_ebb54 ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.2.0-23ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c ada c++ go d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-uJ7kn6/gcc-13-13.2.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-13-uJ7kn6/gcc-13-13.2.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.2.0 (Ubuntu 13.2.0-23ubuntu4) ] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_ebb54' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_ebb54.'] + link line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/cc9Yzg6u.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_ebb54 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/libexec/gcc/x86_64-linux-gnu/13/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/cc9Yzg6u.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_ebb54] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../..] + arg [CMakeFiles/cmTC_ebb54.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13] ==> [/usr/lib/gcc/x86_64-linux-gnu/13] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] + implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/13;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCCompiler.cmake:123 (CMAKE_DETERMINE_COMPILER_ID)" + - "build/_deps/googletest-src/CMakeLists.txt:10 (project)" + message: | + Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. + Compiler: /usr/bin/cc + Build flags: + Id flags: + + The output was: + 0 + + + Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" + + The C compiler identification is GNU, found in: + /home/user/CppDevCourse-hw3/build/CMakeFiles/3.28.3/CompilerIdC/a.out + + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:57 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "build/_deps/googletest-src/CMakeLists.txt:10 (project)" + checks: + - "Detecting C compiler ABI info" + directories: + source: "/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-1jlyd5" + binary: "/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-1jlyd5" + cmakeVariables: + CMAKE_C_FLAGS: "" + buildResult: + variable: "CMAKE_C_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-1jlyd5' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_422c1/fast + /usr/bin/gmake -f CMakeFiles/cmTC_422c1.dir/build.make CMakeFiles/cmTC_422c1.dir/build + gmake[1]: Entering directory '/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-1jlyd5' + Building C object CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o + /usr/bin/cc -v -o CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c + Using built-in specs. + COLLECT_GCC=/usr/bin/cc + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.2.0-23ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-uJ7kn6/gcc-13-13.2.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-uJ7kn6/gcc-13-13.2.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.2.0 (Ubuntu 13.2.0-23ubuntu4) + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_422c1.dir/' + /usr/libexec/gcc/x86_64-linux-gnu/13/cc1 -quiet -v -imultiarch x86_64-linux-gnu /usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_422c1.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccYwCj51.s + GNU C17 (Ubuntu 13.2.0-23ubuntu4) version 13.2.0 (x86_64-linux-gnu) + compiled by GNU C version 13.2.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.26-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include" + #include "..." search starts here: + #include <...> search starts here: + /usr/lib/gcc/x86_64-linux-gnu/13/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include + End of search list. + Compiler executable checksum: 35e51c4ef55ea8f6b448d85f0fac5984 + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_422c1.dir/' + as -v --64 -o CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o /tmp/ccYwCj51.s + GNU assembler version 2.42 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.42 + COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.' + Linking C executable cmTC_422c1 + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_422c1.dir/link.txt --verbose=1 + /usr/bin/cc -v -rdynamic CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o -o cmTC_422c1 + Using built-in specs. + COLLECT_GCC=/usr/bin/cc + COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.2.0-23ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-uJ7kn6/gcc-13-13.2.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-uJ7kn6/gcc-13-13.2.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.2.0 (Ubuntu 13.2.0-23ubuntu4) + COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_422c1' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_422c1.' + /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccIDkRse.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_422c1 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o + COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_422c1' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_422c1.' + gmake[1]: Leaving directory '/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-1jlyd5' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:127 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "build/_deps/googletest-src/CMakeLists.txt:10 (project)" + message: | + Parsed C implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/lib/gcc/x86_64-linux-gnu/13/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/13/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/13/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/lib/gcc/x86_64-linux-gnu/13/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:159 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "build/_deps/googletest-src/CMakeLists.txt:10 (project)" + message: | + Parsed C implicit link information: + link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + ignore line: [Change Dir: '/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-1jlyd5'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_422c1/fast] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_422c1.dir/build.make CMakeFiles/cmTC_422c1.dir/build] + ignore line: [gmake[1]: Entering directory '/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-1jlyd5'] + ignore line: [Building C object CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o] + ignore line: [/usr/bin/cc -v -o CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.2.0-23ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c ada c++ go d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-uJ7kn6/gcc-13-13.2.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-13-uJ7kn6/gcc-13-13.2.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.2.0 (Ubuntu 13.2.0-23ubuntu4) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_422c1.dir/'] + ignore line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/cc1 -quiet -v -imultiarch x86_64-linux-gnu /usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_422c1.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccYwCj51.s] + ignore line: [GNU C17 (Ubuntu 13.2.0-23ubuntu4) version 13.2.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 13.2.0 GMP version 6.3.0 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.26-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/13/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [Compiler executable checksum: 35e51c4ef55ea8f6b448d85f0fac5984] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_422c1.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o /tmp/ccYwCj51.s] + ignore line: [GNU assembler version 2.42 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.42] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.'] + ignore line: [Linking C executable cmTC_422c1] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_422c1.dir/link.txt --verbose=1] + ignore line: [/usr/bin/cc -v -rdynamic CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o -o cmTC_422c1 ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.2.0-23ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c ada c++ go d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-uJ7kn6/gcc-13-13.2.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-13-uJ7kn6/gcc-13-13.2.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.2.0 (Ubuntu 13.2.0-23ubuntu4) ] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_422c1' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_422c1.'] + link line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccIDkRse.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_422c1 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/libexec/gcc/x86_64-linux-gnu/13/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccIDkRse.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_422c1] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../..] + arg [CMakeFiles/cmTC_422c1.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13] ==> [/usr/lib/gcc/x86_64-linux-gnu/13] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../..] ==> [/usr/lib] + implicit libs: [gcc;gcc_s;c;gcc;gcc_s] + implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/13;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/Internal/CheckSourceCompiles.cmake:101 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CheckCSourceCompiles.cmake:52 (cmake_check_source_compiles)" + - "/usr/share/cmake-3.28/Modules/FindThreads.cmake:97 (CHECK_C_SOURCE_COMPILES)" + - "/usr/share/cmake-3.28/Modules/FindThreads.cmake:163 (_threads_check_libc)" + - "build/_deps/googletest-src/googletest/cmake/internal_utils.cmake:65 (find_package)" + - "build/_deps/googletest-src/googletest/CMakeLists.txt:93 (config_compiler_and_linker)" + checks: + - "Performing Test CMAKE_HAVE_LIBC_PTHREAD" + directories: + source: "/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-pCLGvw" + binary: "/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-pCLGvw" + cmakeVariables: + CMAKE_C_FLAGS: "" + buildResult: + variable: "CMAKE_HAVE_LIBC_PTHREAD" + cached: true + stdout: | + Change Dir: '/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-pCLGvw' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_82b20/fast + /usr/bin/gmake -f CMakeFiles/cmTC_82b20.dir/build.make CMakeFiles/cmTC_82b20.dir/build + gmake[1]: Entering directory '/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-pCLGvw' + Building C object CMakeFiles/cmTC_82b20.dir/src.c.o + /usr/bin/cc -DCMAKE_HAVE_LIBC_PTHREAD -o CMakeFiles/cmTC_82b20.dir/src.c.o -c /home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-pCLGvw/src.c + Linking C executable cmTC_82b20 + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_82b20.dir/link.txt --verbose=1 + /usr/bin/cc -rdynamic CMakeFiles/cmTC_82b20.dir/src.c.o -o cmTC_82b20 + gmake[1]: Leaving directory '/home/user/CppDevCourse-hw3/build/CMakeFiles/CMakeScratch/TryCompile-pCLGvw' + + exitCode: 0 +... diff --git a/build/CMakeFiles/CMakeDirectoryInformation.cmake b/build/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..0929168 --- /dev/null +++ b/build/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/user/CppDevCourse-hw3") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/user/CppDevCourse-hw3/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/build/CMakeFiles/Makefile.cmake b/build/CMakeFiles/Makefile.cmake new file mode 100644 index 0000000..2090c04 --- /dev/null +++ b/build/CMakeFiles/Makefile.cmake @@ -0,0 +1,90 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# The generator used is: +set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") + +# The top level Makefile was generated from the following files: +set(CMAKE_MAKEFILE_DEPENDS + "CMakeCache.txt" + "/home/user/CppDevCourse-hw3/CMakeLists.txt" + "CMakeFiles/3.28.3/CMakeCCompiler.cmake" + "CMakeFiles/3.28.3/CMakeCXXCompiler.cmake" + "CMakeFiles/3.28.3/CMakeSystem.cmake" + "_deps/googletest-src/CMakeLists.txt" + "_deps/googletest-src/googlemock/CMakeLists.txt" + "_deps/googletest-src/googlemock/cmake/gmock.pc.in" + "_deps/googletest-src/googlemock/cmake/gmock_main.pc.in" + "_deps/googletest-src/googletest/CMakeLists.txt" + "_deps/googletest-src/googletest/cmake/Config.cmake.in" + "_deps/googletest-src/googletest/cmake/gtest.pc.in" + "_deps/googletest-src/googletest/cmake/gtest_main.pc.in" + "_deps/googletest-src/googletest/cmake/internal_utils.cmake" + "/usr/share/cmake-3.28/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in" + "/usr/share/cmake-3.28/Modules/CMakeCInformation.cmake" + "/usr/share/cmake-3.28/Modules/CMakeCXXInformation.cmake" + "/usr/share/cmake-3.28/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/share/cmake-3.28/Modules/CMakeDependentOption.cmake" + "/usr/share/cmake-3.28/Modules/CMakeGenericSystem.cmake" + "/usr/share/cmake-3.28/Modules/CMakeInitializeConfigs.cmake" + "/usr/share/cmake-3.28/Modules/CMakeLanguageInformation.cmake" + "/usr/share/cmake-3.28/Modules/CMakePackageConfigHelpers.cmake" + "/usr/share/cmake-3.28/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/share/cmake-3.28/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/share/cmake-3.28/Modules/CheckCSourceCompiles.cmake" + "/usr/share/cmake-3.28/Modules/CheckIncludeFile.cmake" + "/usr/share/cmake-3.28/Modules/CheckLibraryExists.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/CMakeCommonCompilerMacros.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/GNU-C.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/GNU-CXX.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/GNU.cmake" + "/usr/share/cmake-3.28/Modules/ExternalProject/shared_internal_commands.cmake" + "/usr/share/cmake-3.28/Modules/FetchContent.cmake" + "/usr/share/cmake-3.28/Modules/FetchContent/CMakeLists.cmake.in" + "/usr/share/cmake-3.28/Modules/FindPackageHandleStandardArgs.cmake" + "/usr/share/cmake-3.28/Modules/FindPackageMessage.cmake" + "/usr/share/cmake-3.28/Modules/FindPython.cmake" + "/usr/share/cmake-3.28/Modules/FindPython/Support.cmake" + "/usr/share/cmake-3.28/Modules/FindThreads.cmake" + "/usr/share/cmake-3.28/Modules/GNUInstallDirs.cmake" + "/usr/share/cmake-3.28/Modules/GoogleTest.cmake" + "/usr/share/cmake-3.28/Modules/Internal/CheckSourceCompiles.cmake" + "/usr/share/cmake-3.28/Modules/Platform/Linux-GNU-C.cmake" + "/usr/share/cmake-3.28/Modules/Platform/Linux-GNU-CXX.cmake" + "/usr/share/cmake-3.28/Modules/Platform/Linux-GNU.cmake" + "/usr/share/cmake-3.28/Modules/Platform/Linux-Initialize.cmake" + "/usr/share/cmake-3.28/Modules/Platform/Linux.cmake" + "/usr/share/cmake-3.28/Modules/Platform/UnixPaths.cmake" + "/usr/share/cmake-3.28/Modules/WriteBasicConfigVersionFile.cmake" + ) + +# The corresponding makefile is: +set(CMAKE_MAKEFILE_OUTPUTS + "Makefile" + "CMakeFiles/cmake.check_cache" + ) + +# Byproducts of CMake generate step: +set(CMAKE_MAKEFILE_PRODUCTS + "_deps/googletest-subbuild/CMakeLists.txt" + "CMakeFiles/CMakeDirectoryInformation.cmake" + "_deps/googletest-build/CMakeFiles/CMakeDirectoryInformation.cmake" + "_deps/googletest-build/googletest/generated/gmock.pc" + "_deps/googletest-build/googletest/generated/gmock_main.pc" + "_deps/googletest-build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake" + "_deps/googletest-build/googletest/generated/GTestConfigVersion.cmake" + "_deps/googletest-build/googletest/generated/GTestConfig.cmake" + "_deps/googletest-build/googletest/generated/gtest.pc" + "_deps/googletest-build/googletest/generated/gtest_main.pc" + "_deps/googletest-build/googletest/CMakeFiles/CMakeDirectoryInformation.cmake" + ) + +# Dependency information for all targets: +set(CMAKE_DEPEND_INFO_FILES + "CMakeFiles/main.dir/DependInfo.cmake" + "CMakeFiles/two-sum-test.dir/DependInfo.cmake" + "_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake" + "_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/DependInfo.cmake" + "_deps/googletest-build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake" + "_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/DependInfo.cmake" + ) diff --git a/build/CMakeFiles/Makefile2 b/build/CMakeFiles/Makefile2 new file mode 100644 index 0000000..d6d8911 --- /dev/null +++ b/build/CMakeFiles/Makefile2 @@ -0,0 +1,299 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/user/CppDevCourse-hw3 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/user/CppDevCourse-hw3/build + +#============================================================================= +# Directory level rules for the build root directory + +# The main recursive "all" target. +all: CMakeFiles/main.dir/all +all: CMakeFiles/two-sum-test.dir/all +all: _deps/googletest-build/all +.PHONY : all + +# The main recursive "preinstall" target. +preinstall: _deps/googletest-build/preinstall +.PHONY : preinstall + +# The main recursive "clean" target. +clean: CMakeFiles/main.dir/clean +clean: CMakeFiles/two-sum-test.dir/clean +clean: _deps/googletest-build/clean +.PHONY : clean + +#============================================================================= +# Directory level rules for directory _deps/googletest-build + +# Recursive "all" directory target. +_deps/googletest-build/all: _deps/googletest-build/googlemock/all +.PHONY : _deps/googletest-build/all + +# Recursive "preinstall" directory target. +_deps/googletest-build/preinstall: _deps/googletest-build/googlemock/preinstall +.PHONY : _deps/googletest-build/preinstall + +# Recursive "clean" directory target. +_deps/googletest-build/clean: _deps/googletest-build/googlemock/clean +.PHONY : _deps/googletest-build/clean + +#============================================================================= +# Directory level rules for directory _deps/googletest-build/googlemock + +# Recursive "all" directory target. +_deps/googletest-build/googlemock/all: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/all +_deps/googletest-build/googlemock/all: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/all +_deps/googletest-build/googlemock/all: _deps/googletest-build/googletest/all +.PHONY : _deps/googletest-build/googlemock/all + +# Recursive "preinstall" directory target. +_deps/googletest-build/googlemock/preinstall: _deps/googletest-build/googletest/preinstall +.PHONY : _deps/googletest-build/googlemock/preinstall + +# Recursive "clean" directory target. +_deps/googletest-build/googlemock/clean: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/clean +_deps/googletest-build/googlemock/clean: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/clean +_deps/googletest-build/googlemock/clean: _deps/googletest-build/googletest/clean +.PHONY : _deps/googletest-build/googlemock/clean + +#============================================================================= +# Directory level rules for directory _deps/googletest-build/googletest + +# Recursive "all" directory target. +_deps/googletest-build/googletest/all: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/all +_deps/googletest-build/googletest/all: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/all +.PHONY : _deps/googletest-build/googletest/all + +# Recursive "preinstall" directory target. +_deps/googletest-build/googletest/preinstall: +.PHONY : _deps/googletest-build/googletest/preinstall + +# Recursive "clean" directory target. +_deps/googletest-build/googletest/clean: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/clean +_deps/googletest-build/googletest/clean: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/clean +.PHONY : _deps/googletest-build/googletest/clean + +#============================================================================= +# Target rules for target CMakeFiles/main.dir + +# All Build rule for target. +CMakeFiles/main.dir/all: + $(MAKE) $(MAKESILENT) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/depend + $(MAKE) $(MAKESILENT) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=9,10,11 "Built target main" +.PHONY : CMakeFiles/main.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/main.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles 3 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/main.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles 0 +.PHONY : CMakeFiles/main.dir/rule + +# Convenience name for target. +main: CMakeFiles/main.dir/rule +.PHONY : main + +# clean rule for target. +CMakeFiles/main.dir/clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/clean +.PHONY : CMakeFiles/main.dir/clean + +#============================================================================= +# Target rules for target CMakeFiles/two-sum-test.dir + +# All Build rule for target. +CMakeFiles/two-sum-test.dir/all: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/all +CMakeFiles/two-sum-test.dir/all: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/all + $(MAKE) $(MAKESILENT) -f CMakeFiles/two-sum-test.dir/build.make CMakeFiles/two-sum-test.dir/depend + $(MAKE) $(MAKESILENT) -f CMakeFiles/two-sum-test.dir/build.make CMakeFiles/two-sum-test.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=12,13,14 "Built target two-sum-test" +.PHONY : CMakeFiles/two-sum-test.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/two-sum-test.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles 7 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/two-sum-test.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles 0 +.PHONY : CMakeFiles/two-sum-test.dir/rule + +# Convenience name for target. +two-sum-test: CMakeFiles/two-sum-test.dir/rule +.PHONY : two-sum-test + +# clean rule for target. +CMakeFiles/two-sum-test.dir/clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/two-sum-test.dir/build.make CMakeFiles/two-sum-test.dir/clean +.PHONY : CMakeFiles/two-sum-test.dir/clean + +#============================================================================= +# Target rules for target _deps/googletest-build/googlemock/CMakeFiles/gmock.dir + +# All Build rule for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/all: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/all + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=1,2 "Built target gmock" +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/all + +# Build rule for subdir invocation for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles 4 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles 0 +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/rule + +# Convenience name for target. +gmock: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/rule +.PHONY : gmock + +# clean rule for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/clean: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/clean +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/clean + +#============================================================================= +# Target rules for target _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir + +# All Build rule for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/all: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/all +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/all: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/all + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=3,4 "Built target gmock_main" +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/all + +# Build rule for subdir invocation for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles 6 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles 0 +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/rule + +# Convenience name for target. +gmock_main: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/rule +.PHONY : gmock_main + +# clean rule for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/clean: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/clean +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/clean + +#============================================================================= +# Target rules for target _deps/googletest-build/googletest/CMakeFiles/gtest.dir + +# All Build rule for target. +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/all: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=5,6 "Built target gtest" +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/all + +# Build rule for subdir invocation for target. +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles 2 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googletest/CMakeFiles/gtest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles 0 +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/rule + +# Convenience name for target. +gtest: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/rule +.PHONY : gtest + +# clean rule for target. +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/clean: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest.dir/clean +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/clean + +#============================================================================= +# Target rules for target _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir + +# All Build rule for target. +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/all: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/all + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=7,8 "Built target gtest_main" +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/all + +# Build rule for subdir invocation for target. +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles 4 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles 0 +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/rule + +# Convenience name for target. +gtest_main: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/rule +.PHONY : gtest_main + +# clean rule for target. +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/clean: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/clean +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/build/CMakeFiles/TargetDirectories.txt b/build/CMakeFiles/TargetDirectories.txt new file mode 100644 index 0000000..e8bc65b --- /dev/null +++ b/build/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,34 @@ +/home/user/CppDevCourse-hw3/build/CMakeFiles/main.dir +/home/user/CppDevCourse-hw3/build/CMakeFiles/two-sum-test.dir +/home/user/CppDevCourse-hw3/build/CMakeFiles/test.dir +/home/user/CppDevCourse-hw3/build/CMakeFiles/edit_cache.dir +/home/user/CppDevCourse-hw3/build/CMakeFiles/rebuild_cache.dir +/home/user/CppDevCourse-hw3/build/CMakeFiles/list_install_components.dir +/home/user/CppDevCourse-hw3/build/CMakeFiles/install.dir +/home/user/CppDevCourse-hw3/build/CMakeFiles/install/local.dir +/home/user/CppDevCourse-hw3/build/CMakeFiles/install/strip.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/CMakeFiles/test.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/CMakeFiles/edit_cache.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/CMakeFiles/rebuild_cache.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/CMakeFiles/list_install_components.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/CMakeFiles/install.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/CMakeFiles/install/local.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/CMakeFiles/install/strip.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock/CMakeFiles/test.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock/CMakeFiles/edit_cache.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock/CMakeFiles/rebuild_cache.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock/CMakeFiles/list_install_components.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock/CMakeFiles/install.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock/CMakeFiles/install/local.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock/CMakeFiles/install/strip.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/CMakeFiles/test.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/CMakeFiles/edit_cache.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/CMakeFiles/rebuild_cache.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/CMakeFiles/list_install_components.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/CMakeFiles/install.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/CMakeFiles/install/local.dir +/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/CMakeFiles/install/strip.dir diff --git a/build/CMakeFiles/cmake.check_cache b/build/CMakeFiles/cmake.check_cache new file mode 100644 index 0000000..3dccd73 --- /dev/null +++ b/build/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/build/CMakeFiles/main.dir/DependInfo.cmake b/build/CMakeFiles/main.dir/DependInfo.cmake new file mode 100644 index 0000000..a2ff2c5 --- /dev/null +++ b/build/CMakeFiles/main.dir/DependInfo.cmake @@ -0,0 +1,24 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/user/CppDevCourse-hw3/src/main.cpp" "CMakeFiles/main.dir/src/main.cpp.o" "gcc" "CMakeFiles/main.dir/src/main.cpp.o.d" + "/home/user/CppDevCourse-hw3/src/two-sum.cpp" "CMakeFiles/main.dir/src/two-sum.cpp.o" "gcc" "CMakeFiles/main.dir/src/two-sum.cpp.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/build/CMakeFiles/main.dir/build.make b/build/CMakeFiles/main.dir/build.make new file mode 100644 index 0000000..98f540e --- /dev/null +++ b/build/CMakeFiles/main.dir/build.make @@ -0,0 +1,126 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/user/CppDevCourse-hw3 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/user/CppDevCourse-hw3/build + +# Include any dependencies generated for this target. +include CMakeFiles/main.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include CMakeFiles/main.dir/compiler_depend.make + +# Include the progress variables for this target. +include CMakeFiles/main.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/main.dir/flags.make + +CMakeFiles/main.dir/src/main.cpp.o: CMakeFiles/main.dir/flags.make +CMakeFiles/main.dir/src/main.cpp.o: /home/user/CppDevCourse-hw3/src/main.cpp +CMakeFiles/main.dir/src/main.cpp.o: CMakeFiles/main.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/main.dir/src/main.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/main.dir/src/main.cpp.o -MF CMakeFiles/main.dir/src/main.cpp.o.d -o CMakeFiles/main.dir/src/main.cpp.o -c /home/user/CppDevCourse-hw3/src/main.cpp + +CMakeFiles/main.dir/src/main.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/main.dir/src/main.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/user/CppDevCourse-hw3/src/main.cpp > CMakeFiles/main.dir/src/main.cpp.i + +CMakeFiles/main.dir/src/main.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/main.dir/src/main.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/user/CppDevCourse-hw3/src/main.cpp -o CMakeFiles/main.dir/src/main.cpp.s + +CMakeFiles/main.dir/src/two-sum.cpp.o: CMakeFiles/main.dir/flags.make +CMakeFiles/main.dir/src/two-sum.cpp.o: /home/user/CppDevCourse-hw3/src/two-sum.cpp +CMakeFiles/main.dir/src/two-sum.cpp.o: CMakeFiles/main.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/main.dir/src/two-sum.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/main.dir/src/two-sum.cpp.o -MF CMakeFiles/main.dir/src/two-sum.cpp.o.d -o CMakeFiles/main.dir/src/two-sum.cpp.o -c /home/user/CppDevCourse-hw3/src/two-sum.cpp + +CMakeFiles/main.dir/src/two-sum.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/main.dir/src/two-sum.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/user/CppDevCourse-hw3/src/two-sum.cpp > CMakeFiles/main.dir/src/two-sum.cpp.i + +CMakeFiles/main.dir/src/two-sum.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/main.dir/src/two-sum.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/user/CppDevCourse-hw3/src/two-sum.cpp -o CMakeFiles/main.dir/src/two-sum.cpp.s + +# Object files for target main +main_OBJECTS = \ +"CMakeFiles/main.dir/src/main.cpp.o" \ +"CMakeFiles/main.dir/src/two-sum.cpp.o" + +# External object files for target main +main_EXTERNAL_OBJECTS = + +main: CMakeFiles/main.dir/src/main.cpp.o +main: CMakeFiles/main.dir/src/two-sum.cpp.o +main: CMakeFiles/main.dir/build.make +main: CMakeFiles/main.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking CXX executable main" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/main.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/main.dir/build: main +.PHONY : CMakeFiles/main.dir/build + +CMakeFiles/main.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/main.dir/cmake_clean.cmake +.PHONY : CMakeFiles/main.dir/clean + +CMakeFiles/main.dir/depend: + cd /home/user/CppDevCourse-hw3/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/user/CppDevCourse-hw3 /home/user/CppDevCourse-hw3 /home/user/CppDevCourse-hw3/build /home/user/CppDevCourse-hw3/build /home/user/CppDevCourse-hw3/build/CMakeFiles/main.dir/DependInfo.cmake "--color=$(COLOR)" +.PHONY : CMakeFiles/main.dir/depend + diff --git a/build/CMakeFiles/main.dir/cmake_clean.cmake b/build/CMakeFiles/main.dir/cmake_clean.cmake new file mode 100644 index 0000000..4d5d104 --- /dev/null +++ b/build/CMakeFiles/main.dir/cmake_clean.cmake @@ -0,0 +1,13 @@ +file(REMOVE_RECURSE + "CMakeFiles/main.dir/src/main.cpp.o" + "CMakeFiles/main.dir/src/main.cpp.o.d" + "CMakeFiles/main.dir/src/two-sum.cpp.o" + "CMakeFiles/main.dir/src/two-sum.cpp.o.d" + "main" + "main.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/main.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/build/CMakeFiles/main.dir/compiler_depend.internal b/build/CMakeFiles/main.dir/compiler_depend.internal new file mode 100644 index 0000000..8db99d6 --- /dev/null +++ b/build/CMakeFiles/main.dir/compiler_depend.internal @@ -0,0 +1,198 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +CMakeFiles/main.dir/src/main.cpp.o + /home/user/CppDevCourse-hw3/src/main.cpp + /home/user/CppDevCourse-hw3/src/two-sum.hpp + /usr/include/alloca.h + /usr/include/asm-generic/errno-base.h + /usr/include/asm-generic/errno.h + /usr/include/c++/13/backward/binders.h + /usr/include/c++/13/bit + /usr/include/c++/13/bits/alloc_traits.h + /usr/include/c++/13/bits/allocator.h + /usr/include/c++/13/bits/basic_ios.h + /usr/include/c++/13/bits/basic_ios.tcc + /usr/include/c++/13/bits/basic_string.h + /usr/include/c++/13/bits/basic_string.tcc + /usr/include/c++/13/bits/char_traits.h + /usr/include/c++/13/bits/charconv.h + /usr/include/c++/13/bits/concept_check.h + /usr/include/c++/13/bits/cpp_type_traits.h + /usr/include/c++/13/bits/cxxabi_forced.h + /usr/include/c++/13/bits/cxxabi_init_exception.h + /usr/include/c++/13/bits/exception.h + /usr/include/c++/13/bits/exception_defines.h + /usr/include/c++/13/bits/exception_ptr.h + /usr/include/c++/13/bits/functexcept.h + /usr/include/c++/13/bits/functional_hash.h + /usr/include/c++/13/bits/hash_bytes.h + /usr/include/c++/13/bits/invoke.h + /usr/include/c++/13/bits/ios_base.h + /usr/include/c++/13/bits/istream.tcc + /usr/include/c++/13/bits/locale_classes.h + /usr/include/c++/13/bits/locale_classes.tcc + /usr/include/c++/13/bits/locale_facets.h + /usr/include/c++/13/bits/locale_facets.tcc + /usr/include/c++/13/bits/localefwd.h + /usr/include/c++/13/bits/memory_resource.h + /usr/include/c++/13/bits/memoryfwd.h + /usr/include/c++/13/bits/move.h + /usr/include/c++/13/bits/nested_exception.h + /usr/include/c++/13/bits/new_allocator.h + /usr/include/c++/13/bits/ostream.tcc + /usr/include/c++/13/bits/ostream_insert.h + /usr/include/c++/13/bits/postypes.h + /usr/include/c++/13/bits/predefined_ops.h + /usr/include/c++/13/bits/ptr_traits.h + /usr/include/c++/13/bits/range_access.h + /usr/include/c++/13/bits/refwrap.h + /usr/include/c++/13/bits/requires_hosted.h + /usr/include/c++/13/bits/std_abs.h + /usr/include/c++/13/bits/stl_algobase.h + /usr/include/c++/13/bits/stl_construct.h + /usr/include/c++/13/bits/stl_function.h + /usr/include/c++/13/bits/stl_iterator.h + /usr/include/c++/13/bits/stl_iterator_base_funcs.h + /usr/include/c++/13/bits/stl_iterator_base_types.h + /usr/include/c++/13/bits/stl_pair.h + /usr/include/c++/13/bits/streambuf.tcc + /usr/include/c++/13/bits/streambuf_iterator.h + /usr/include/c++/13/bits/string_view.tcc + /usr/include/c++/13/bits/stringfwd.h + /usr/include/c++/13/bits/uses_allocator.h + /usr/include/c++/13/bits/uses_allocator_args.h + /usr/include/c++/13/bits/utility.h + /usr/include/c++/13/cctype + /usr/include/c++/13/cerrno + /usr/include/c++/13/charconv + /usr/include/c++/13/clocale + /usr/include/c++/13/cstddef + /usr/include/c++/13/cstdio + /usr/include/c++/13/cstdlib + /usr/include/c++/13/cwchar + /usr/include/c++/13/cwctype + /usr/include/c++/13/debug/assertions.h + /usr/include/c++/13/debug/debug.h + /usr/include/c++/13/exception + /usr/include/c++/13/ext/alloc_traits.h + /usr/include/c++/13/ext/atomicity.h + /usr/include/c++/13/ext/numeric_traits.h + /usr/include/c++/13/ext/string_conversions.h + /usr/include/c++/13/ext/type_traits.h + /usr/include/c++/13/initializer_list + /usr/include/c++/13/ios + /usr/include/c++/13/iosfwd + /usr/include/c++/13/iostream + /usr/include/c++/13/istream + /usr/include/c++/13/new + /usr/include/c++/13/ostream + /usr/include/c++/13/pstl/pstl_config.h + /usr/include/c++/13/stdexcept + /usr/include/c++/13/streambuf + /usr/include/c++/13/string + /usr/include/c++/13/string_view + /usr/include/c++/13/system_error + /usr/include/c++/13/tuple + /usr/include/c++/13/type_traits + /usr/include/c++/13/typeinfo + /usr/include/ctype.h + /usr/include/endian.h + /usr/include/errno.h + /usr/include/features-time64.h + /usr/include/features.h + /usr/include/linux/errno.h + /usr/include/locale.h + /usr/include/pthread.h + /usr/include/sched.h + /usr/include/stdc-predef.h + /usr/include/stdio.h + /usr/include/stdlib.h + /usr/include/time.h + /usr/include/wchar.h + /usr/include/wctype.h + /usr/include/x86_64-linux-gnu/asm/errno.h + /usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h + /usr/include/x86_64-linux-gnu/bits/byteswap.h + /usr/include/x86_64-linux-gnu/bits/cpu-set.h + /usr/include/x86_64-linux-gnu/bits/endian.h + /usr/include/x86_64-linux-gnu/bits/endianness.h + /usr/include/x86_64-linux-gnu/bits/errno.h + /usr/include/x86_64-linux-gnu/bits/floatn-common.h + /usr/include/x86_64-linux-gnu/bits/floatn.h + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h + /usr/include/x86_64-linux-gnu/bits/locale.h + /usr/include/x86_64-linux-gnu/bits/long-double.h + /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h + /usr/include/x86_64-linux-gnu/bits/sched.h + /usr/include/x86_64-linux-gnu/bits/select.h + /usr/include/x86_64-linux-gnu/bits/setjmp.h + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h + /usr/include/x86_64-linux-gnu/bits/time.h + /usr/include/x86_64-linux-gnu/bits/time64.h + /usr/include/x86_64-linux-gnu/bits/timesize.h + /usr/include/x86_64-linux-gnu/bits/timex.h + /usr/include/x86_64-linux-gnu/bits/types.h + /usr/include/x86_64-linux-gnu/bits/types/FILE.h + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h + /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h + /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h + /usr/include/x86_64-linux-gnu/bits/types/error_t.h + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h + /usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h + /usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h + /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h + /usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h + /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h + /usr/include/x86_64-linux-gnu/bits/types/time_t.h + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h + /usr/include/x86_64-linux-gnu/bits/types/wint_t.h + /usr/include/x86_64-linux-gnu/bits/typesizes.h + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h + /usr/include/x86_64-linux-gnu/bits/waitflags.h + /usr/include/x86_64-linux-gnu/bits/waitstatus.h + /usr/include/x86_64-linux-gnu/bits/wchar.h + /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h + /usr/include/x86_64-linux-gnu/bits/wordsize.h + /usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h + /usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h + /usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h + /usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h + /usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h + /usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h + /usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h + /usr/include/x86_64-linux-gnu/gnu/stubs.h + /usr/include/x86_64-linux-gnu/sys/cdefs.h + /usr/include/x86_64-linux-gnu/sys/select.h + /usr/include/x86_64-linux-gnu/sys/single_threaded.h + /usr/include/x86_64-linux-gnu/sys/types.h + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h + /usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h + +CMakeFiles/main.dir/src/two-sum.cpp.o + /home/user/CppDevCourse-hw3/src/two-sum.cpp + /home/user/CppDevCourse-hw3/src/two-sum.hpp + /usr/include/stdc-predef.h + diff --git a/build/CMakeFiles/main.dir/compiler_depend.make b/build/CMakeFiles/main.dir/compiler_depend.make new file mode 100644 index 0000000..e9a21fd --- /dev/null +++ b/build/CMakeFiles/main.dir/compiler_depend.make @@ -0,0 +1,574 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +CMakeFiles/main.dir/src/main.cpp.o: /home/user/CppDevCourse-hw3/src/main.cpp \ + /home/user/CppDevCourse-hw3/src/two-sum.hpp \ + /usr/include/alloca.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/c++/13/backward/binders.h \ + /usr/include/c++/13/bit \ + /usr/include/c++/13/bits/alloc_traits.h \ + /usr/include/c++/13/bits/allocator.h \ + /usr/include/c++/13/bits/basic_ios.h \ + /usr/include/c++/13/bits/basic_ios.tcc \ + /usr/include/c++/13/bits/basic_string.h \ + /usr/include/c++/13/bits/basic_string.tcc \ + /usr/include/c++/13/bits/char_traits.h \ + /usr/include/c++/13/bits/charconv.h \ + /usr/include/c++/13/bits/concept_check.h \ + /usr/include/c++/13/bits/cpp_type_traits.h \ + /usr/include/c++/13/bits/cxxabi_forced.h \ + /usr/include/c++/13/bits/cxxabi_init_exception.h \ + /usr/include/c++/13/bits/exception.h \ + /usr/include/c++/13/bits/exception_defines.h \ + /usr/include/c++/13/bits/exception_ptr.h \ + /usr/include/c++/13/bits/functexcept.h \ + /usr/include/c++/13/bits/functional_hash.h \ + /usr/include/c++/13/bits/hash_bytes.h \ + /usr/include/c++/13/bits/invoke.h \ + /usr/include/c++/13/bits/ios_base.h \ + /usr/include/c++/13/bits/istream.tcc \ + /usr/include/c++/13/bits/locale_classes.h \ + /usr/include/c++/13/bits/locale_classes.tcc \ + /usr/include/c++/13/bits/locale_facets.h \ + /usr/include/c++/13/bits/locale_facets.tcc \ + /usr/include/c++/13/bits/localefwd.h \ + /usr/include/c++/13/bits/memory_resource.h \ + /usr/include/c++/13/bits/memoryfwd.h \ + /usr/include/c++/13/bits/move.h \ + /usr/include/c++/13/bits/nested_exception.h \ + /usr/include/c++/13/bits/new_allocator.h \ + /usr/include/c++/13/bits/ostream.tcc \ + /usr/include/c++/13/bits/ostream_insert.h \ + /usr/include/c++/13/bits/postypes.h \ + /usr/include/c++/13/bits/predefined_ops.h \ + /usr/include/c++/13/bits/ptr_traits.h \ + /usr/include/c++/13/bits/range_access.h \ + /usr/include/c++/13/bits/refwrap.h \ + /usr/include/c++/13/bits/requires_hosted.h \ + /usr/include/c++/13/bits/std_abs.h \ + /usr/include/c++/13/bits/stl_algobase.h \ + /usr/include/c++/13/bits/stl_construct.h \ + /usr/include/c++/13/bits/stl_function.h \ + /usr/include/c++/13/bits/stl_iterator.h \ + /usr/include/c++/13/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/13/bits/stl_iterator_base_types.h \ + /usr/include/c++/13/bits/stl_pair.h \ + /usr/include/c++/13/bits/streambuf.tcc \ + /usr/include/c++/13/bits/streambuf_iterator.h \ + /usr/include/c++/13/bits/string_view.tcc \ + /usr/include/c++/13/bits/stringfwd.h \ + /usr/include/c++/13/bits/uses_allocator.h \ + /usr/include/c++/13/bits/uses_allocator_args.h \ + /usr/include/c++/13/bits/utility.h \ + /usr/include/c++/13/cctype \ + /usr/include/c++/13/cerrno \ + /usr/include/c++/13/charconv \ + /usr/include/c++/13/clocale \ + /usr/include/c++/13/cstddef \ + /usr/include/c++/13/cstdio \ + /usr/include/c++/13/cstdlib \ + /usr/include/c++/13/cwchar \ + /usr/include/c++/13/cwctype \ + /usr/include/c++/13/debug/assertions.h \ + /usr/include/c++/13/debug/debug.h \ + /usr/include/c++/13/exception \ + /usr/include/c++/13/ext/alloc_traits.h \ + /usr/include/c++/13/ext/atomicity.h \ + /usr/include/c++/13/ext/numeric_traits.h \ + /usr/include/c++/13/ext/string_conversions.h \ + /usr/include/c++/13/ext/type_traits.h \ + /usr/include/c++/13/initializer_list \ + /usr/include/c++/13/ios \ + /usr/include/c++/13/iosfwd \ + /usr/include/c++/13/iostream \ + /usr/include/c++/13/istream \ + /usr/include/c++/13/new \ + /usr/include/c++/13/ostream \ + /usr/include/c++/13/pstl/pstl_config.h \ + /usr/include/c++/13/stdexcept \ + /usr/include/c++/13/streambuf \ + /usr/include/c++/13/string \ + /usr/include/c++/13/string_view \ + /usr/include/c++/13/system_error \ + /usr/include/c++/13/tuple \ + /usr/include/c++/13/type_traits \ + /usr/include/c++/13/typeinfo \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/linux/errno.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/sched.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdio.h \ + /usr/include/stdlib.h \ + /usr/include/time.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/cpu-set.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/error_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/wint_t.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/sys/single_threaded.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h + +CMakeFiles/main.dir/src/two-sum.cpp.o: /home/user/CppDevCourse-hw3/src/two-sum.cpp \ + /home/user/CppDevCourse-hw3/src/two-sum.hpp \ + /usr/include/stdc-predef.h + + +/home/user/CppDevCourse-hw3/src/two-sum.cpp: + +/usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h: + +/usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h: + +/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h: + +/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h: + +/usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/types/timer_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/time_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h: + +/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h: + +/usr/include/x86_64-linux-gnu/bits/types/locale_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/error_t.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__FILE.h: + +/usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/timesize.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h: + +/usr/include/x86_64-linux-gnu/bits/struct_mutex.h: + +/usr/include/x86_64-linux-gnu/bits/types/FILE.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/c++/13/bits/string_view.tcc: + +/usr/include/features.h: + +/usr/include/c++/13/bits/stl_construct.h: + +/usr/include/c++/13/bits/stl_algobase.h: + +/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h: + +/usr/include/c++/13/bits/refwrap.h: + +/usr/include/c++/13/debug/debug.h: + +/usr/include/c++/13/stdexcept: + +/usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h: + +/usr/include/x86_64-linux-gnu/bits/floatn.h: + +/usr/include/c++/13/bits/std_abs.h: + +/usr/include/c++/13/bits/uses_allocator.h: + +/usr/include/c++/13/bits/postypes.h: + +/usr/include/c++/13/bits/ostream_insert.h: + +/usr/include/x86_64-linux-gnu/bits/cpu-set.h: + +/usr/include/c++/13/bits/invoke.h: + +/usr/include/c++/13/bits/requires_hosted.h: + +/usr/include/c++/13/bits/locale_facets.tcc: + +/usr/include/c++/13/bits/locale_classes.tcc: + +/usr/include/c++/13/bits/allocator.h: + +/usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h: + +/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h: + +/usr/include/c++/13/bits/ptr_traits.h: + +/usr/include/alloca.h: + +/usr/include/c++/13/bits/stl_iterator_base_types.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/types/clock_t.h: + +/usr/include/c++/13/bits/char_traits.h: + +/usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h: + +/usr/include/c++/13/bits/basic_ios.tcc: + +/usr/include/c++/13/bits/nested_exception.h: + +/usr/include/c++/13/bits/memory_resource.h: + +/usr/include/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/time64.h: + +/usr/include/c++/13/bits/basic_ios.h: + +/usr/include/c++/13/bits/ostream.tcc: + +/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h: + +/usr/include/c++/13/bits/ios_base.h: + +/home/user/CppDevCourse-hw3/src/two-sum.hpp: + +/usr/include/c++/13/bits/move.h: + +/usr/include/c++/13/bits/basic_string.tcc: + +/usr/include/c++/13/bit: + +/usr/include/x86_64-linux-gnu/sys/single_threaded.h: + +/usr/include/c++/13/type_traits: + +/usr/include/c++/13/backward/binders.h: + +/usr/include/c++/13/bits/stringfwd.h: + +/usr/include/c++/13/cwctype: + +/usr/include/c++/13/bits/predefined_ops.h: + +/usr/include/c++/13/iosfwd: + +/usr/include/c++/13/bits/stl_iterator_base_funcs.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/c++/13/cwchar: + +/usr/include/x86_64-linux-gnu/bits/uintn-identity.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/c++/13/streambuf: + +/usr/include/c++/13/bits/exception.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/c++/13/bits/hash_bytes.h: + +/home/user/CppDevCourse-hw3/src/main.cpp: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/stdint-intn.h: + +/usr/include/c++/13/bits/cpp_type_traits.h: + +/usr/include/c++/13/bits/localefwd.h: + +/usr/include/c++/13/bits/exception_defines.h: + +/usr/include/c++/13/bits/locale_facets.h: + +/usr/include/c++/13/bits/memoryfwd.h: + +/usr/include/time.h: + +/usr/include/c++/13/bits/cxxabi_forced.h: + +/usr/include/c++/13/string: + +/usr/include/c++/13/bits/istream.tcc: + +/usr/include/c++/13/bits/exception_ptr.h: + +/usr/include/c++/13/bits/concept_check.h: + +/usr/include/c++/13/bits/alloc_traits.h: + +/usr/include/x86_64-linux-gnu/bits/libc-header-start.h: + +/usr/include/c++/13/bits/stl_iterator.h: + +/usr/include/c++/13/bits/functexcept.h: + +/usr/include/c++/13/ios: + +/usr/include/stdc-predef.h: + +/usr/include/c++/13/bits/locale_classes.h: + +/usr/include/ctype.h: + +/usr/include/c++/13/bits/stl_function.h: + +/usr/include/c++/13/bits/utility.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/13/charconv: + +/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h: + +/usr/include/c++/13/cerrno: + +/usr/include/stdio.h: + +/usr/include/c++/13/clocale: + +/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h: + +/usr/include/c++/13/cstddef: + +/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h: + +/usr/include/c++/13/bits/charconv.h: + +/usr/include/c++/13/bits/stl_pair.h: + +/usr/include/c++/13/cstdio: + +/usr/include/c++/13/cstdlib: + +/usr/include/c++/13/debug/assertions.h: + +/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h: + +/usr/include/c++/13/tuple: + +/usr/include/c++/13/bits/functional_hash.h: + +/usr/include/errno.h: + +/usr/include/c++/13/cctype: + +/usr/include/c++/13/ext/atomicity.h: + +/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h: + +/usr/include/c++/13/ext/numeric_traits.h: + +/usr/include/c++/13/ext/string_conversions.h: + +/usr/include/c++/13/ext/type_traits.h: + +/usr/include/c++/13/iostream: + +/usr/include/c++/13/initializer_list: + +/usr/include/c++/13/istream: + +/usr/include/c++/13/string_view: + +/usr/include/features-time64.h: + +/usr/include/c++/13/ext/alloc_traits.h: + +/usr/include/c++/13/new: + +/usr/include/c++/13/bits/streambuf_iterator.h: + +/usr/include/c++/13/ostream: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/c++/13/pstl/pstl_config.h: + +/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h: + +/usr/include/c++/13/bits/range_access.h: + +/usr/include/c++/13/system_error: + +/usr/include/c++/13/bits/cxxabi_init_exception.h: + +/usr/include/c++/13/typeinfo: + +/usr/include/c++/13/bits/streambuf.tcc: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h: + +/usr/include/locale.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/13/bits/new_allocator.h: + +/usr/include/c++/13/bits/uses_allocator_args.h: + +/usr/include/x86_64-linux-gnu/bits/long-double.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/c++/13/bits/basic_string.h: + +/usr/include/x86_64-linux-gnu/bits/endianness.h: + +/usr/include/c++/13/exception: + +/usr/include/wctype.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/x86_64-linux-gnu/bits/types/wint_t.h: + +/usr/include/x86_64-linux-gnu/bits/floatn-common.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: diff --git a/build/CMakeFiles/main.dir/compiler_depend.ts b/build/CMakeFiles/main.dir/compiler_depend.ts new file mode 100644 index 0000000..a3467f4 --- /dev/null +++ b/build/CMakeFiles/main.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for main. diff --git a/build/CMakeFiles/main.dir/depend.make b/build/CMakeFiles/main.dir/depend.make new file mode 100644 index 0000000..7e75fee --- /dev/null +++ b/build/CMakeFiles/main.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for main. +# This may be replaced when dependencies are built. diff --git a/build/CMakeFiles/main.dir/flags.make b/build/CMakeFiles/main.dir/flags.make new file mode 100644 index 0000000..7767e4b --- /dev/null +++ b/build/CMakeFiles/main.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile CXX with /usr/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -I/home/user/CppDevCourse-hw3/include + +CXX_FLAGS = -Wall -Wextra -Werror + diff --git a/build/CMakeFiles/main.dir/link.txt b/build/CMakeFiles/main.dir/link.txt new file mode 100644 index 0000000..df592b8 --- /dev/null +++ b/build/CMakeFiles/main.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/c++ CMakeFiles/main.dir/src/main.cpp.o "CMakeFiles/main.dir/src/two-sum.cpp.o" -o main diff --git a/build/CMakeFiles/main.dir/progress.make b/build/CMakeFiles/main.dir/progress.make new file mode 100644 index 0000000..eaef64c --- /dev/null +++ b/build/CMakeFiles/main.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = 9 +CMAKE_PROGRESS_2 = 10 +CMAKE_PROGRESS_3 = 11 + diff --git a/build/CMakeFiles/main.dir/src/main.cpp.o b/build/CMakeFiles/main.dir/src/main.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..f9ab0b036350eb54d97ceb9ed37ee35f515a31e5 GIT binary patch literal 20912 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 JsB;M7`hPARjz0hZ literal 0 HcmV?d00001 diff --git a/build/CMakeFiles/main.dir/src/two-sum.cpp.o.d b/build/CMakeFiles/main.dir/src/two-sum.cpp.o.d new file mode 100644 index 0000000..a33f1af --- /dev/null +++ b/build/CMakeFiles/main.dir/src/two-sum.cpp.o.d @@ -0,0 +1,15 @@ +CMakeFiles/main.dir/src/two-sum.cpp.o: \ + /home/user/CppDevCourse-hw3/src/two-sum.cpp /usr/include/stdc-predef.h \ + /home/user/CppDevCourse-hw3/src/two-sum.hpp /usr/include/c++/13/cstddef \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \ + /usr/include/features.h /usr/include/features-time64.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \ + /usr/include/c++/13/pstl/pstl_config.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h diff --git a/build/CMakeFiles/progress.marks b/build/CMakeFiles/progress.marks new file mode 100644 index 0000000..8351c19 --- /dev/null +++ b/build/CMakeFiles/progress.marks @@ -0,0 +1 @@ +14 diff --git a/build/CMakeFiles/two-sum-test.dir/DependInfo.cmake b/build/CMakeFiles/two-sum-test.dir/DependInfo.cmake new file mode 100644 index 0000000..66da9ef --- /dev/null +++ b/build/CMakeFiles/two-sum-test.dir/DependInfo.cmake @@ -0,0 +1,24 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/user/CppDevCourse-hw3/src/two-sum.cpp" "CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o" "gcc" "CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o.d" + "/home/user/CppDevCourse-hw3/tests/test.cpp" "CMakeFiles/two-sum-test.dir/tests/test.cpp.o" "gcc" "CMakeFiles/two-sum-test.dir/tests/test.cpp.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/build/CMakeFiles/two-sum-test.dir/build.make b/build/CMakeFiles/two-sum-test.dir/build.make new file mode 100644 index 0000000..d9be25b --- /dev/null +++ b/build/CMakeFiles/two-sum-test.dir/build.make @@ -0,0 +1,130 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/user/CppDevCourse-hw3 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/user/CppDevCourse-hw3/build + +# Include any dependencies generated for this target. +include CMakeFiles/two-sum-test.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include CMakeFiles/two-sum-test.dir/compiler_depend.make + +# Include the progress variables for this target. +include CMakeFiles/two-sum-test.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/two-sum-test.dir/flags.make + +CMakeFiles/two-sum-test.dir/tests/test.cpp.o: CMakeFiles/two-sum-test.dir/flags.make +CMakeFiles/two-sum-test.dir/tests/test.cpp.o: /home/user/CppDevCourse-hw3/tests/test.cpp +CMakeFiles/two-sum-test.dir/tests/test.cpp.o: CMakeFiles/two-sum-test.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/two-sum-test.dir/tests/test.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/two-sum-test.dir/tests/test.cpp.o -MF CMakeFiles/two-sum-test.dir/tests/test.cpp.o.d -o CMakeFiles/two-sum-test.dir/tests/test.cpp.o -c /home/user/CppDevCourse-hw3/tests/test.cpp + +CMakeFiles/two-sum-test.dir/tests/test.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/two-sum-test.dir/tests/test.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/user/CppDevCourse-hw3/tests/test.cpp > CMakeFiles/two-sum-test.dir/tests/test.cpp.i + +CMakeFiles/two-sum-test.dir/tests/test.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/two-sum-test.dir/tests/test.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/user/CppDevCourse-hw3/tests/test.cpp -o CMakeFiles/two-sum-test.dir/tests/test.cpp.s + +CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o: CMakeFiles/two-sum-test.dir/flags.make +CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o: /home/user/CppDevCourse-hw3/src/two-sum.cpp +CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o: CMakeFiles/two-sum-test.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o -MF CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o.d -o CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o -c /home/user/CppDevCourse-hw3/src/two-sum.cpp + +CMakeFiles/two-sum-test.dir/src/two-sum.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/two-sum-test.dir/src/two-sum.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/user/CppDevCourse-hw3/src/two-sum.cpp > CMakeFiles/two-sum-test.dir/src/two-sum.cpp.i + +CMakeFiles/two-sum-test.dir/src/two-sum.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/two-sum-test.dir/src/two-sum.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/user/CppDevCourse-hw3/src/two-sum.cpp -o CMakeFiles/two-sum-test.dir/src/two-sum.cpp.s + +# Object files for target two-sum-test +two__sum__test_OBJECTS = \ +"CMakeFiles/two-sum-test.dir/tests/test.cpp.o" \ +"CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o" + +# External object files for target two-sum-test +two__sum__test_EXTERNAL_OBJECTS = + +two-sum-test: CMakeFiles/two-sum-test.dir/tests/test.cpp.o +two-sum-test: CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o +two-sum-test: CMakeFiles/two-sum-test.dir/build.make +two-sum-test: lib/libgtest.a +two-sum-test: lib/libgtest_main.a +two-sum-test: lib/libgtest.a +two-sum-test: CMakeFiles/two-sum-test.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking CXX executable two-sum-test" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/two-sum-test.dir/link.txt --verbose=$(VERBOSE) + /usr/bin/cmake -D TEST_TARGET=two-sum-test -D TEST_EXECUTABLE=/home/user/CppDevCourse-hw3/build/two-sum-test -D TEST_EXECUTOR= -D TEST_WORKING_DIR=/home/user/CppDevCourse-hw3/build -D TEST_EXTRA_ARGS= -D TEST_PROPERTIES= -D TEST_PREFIX= -D TEST_SUFFIX= -D TEST_FILTER= -D NO_PRETTY_TYPES=FALSE -D NO_PRETTY_VALUES=FALSE -D TEST_LIST=two-sum-test_TESTS -D CTEST_FILE=/home/user/CppDevCourse-hw3/build/two-sum-test[1]_tests.cmake -D TEST_DISCOVERY_TIMEOUT=5 -D TEST_XML_OUTPUT_DIR= -P /usr/share/cmake-3.28/Modules/GoogleTestAddTests.cmake + +# Rule to build all files generated by this target. +CMakeFiles/two-sum-test.dir/build: two-sum-test +.PHONY : CMakeFiles/two-sum-test.dir/build + +CMakeFiles/two-sum-test.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/two-sum-test.dir/cmake_clean.cmake +.PHONY : CMakeFiles/two-sum-test.dir/clean + +CMakeFiles/two-sum-test.dir/depend: + cd /home/user/CppDevCourse-hw3/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/user/CppDevCourse-hw3 /home/user/CppDevCourse-hw3 /home/user/CppDevCourse-hw3/build /home/user/CppDevCourse-hw3/build /home/user/CppDevCourse-hw3/build/CMakeFiles/two-sum-test.dir/DependInfo.cmake "--color=$(COLOR)" +.PHONY : CMakeFiles/two-sum-test.dir/depend + diff --git a/build/CMakeFiles/two-sum-test.dir/cmake_clean.cmake b/build/CMakeFiles/two-sum-test.dir/cmake_clean.cmake new file mode 100644 index 0000000..1a3e8d9 --- /dev/null +++ b/build/CMakeFiles/two-sum-test.dir/cmake_clean.cmake @@ -0,0 +1,14 @@ +file(REMOVE_RECURSE + "CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o" + "CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o.d" + "CMakeFiles/two-sum-test.dir/tests/test.cpp.o" + "CMakeFiles/two-sum-test.dir/tests/test.cpp.o.d" + "two-sum-test" + "two-sum-test.pdb" + "two-sum-test[1]_tests.cmake" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/two-sum-test.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/build/CMakeFiles/two-sum-test.dir/compiler_depend.make b/build/CMakeFiles/two-sum-test.dir/compiler_depend.make new file mode 100644 index 0000000..280ffa0 --- /dev/null +++ b/build/CMakeFiles/two-sum-test.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for two-sum-test. +# This may be replaced when dependencies are built. diff --git a/build/CMakeFiles/two-sum-test.dir/compiler_depend.ts b/build/CMakeFiles/two-sum-test.dir/compiler_depend.ts new file mode 100644 index 0000000..670322e --- /dev/null +++ b/build/CMakeFiles/two-sum-test.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for two-sum-test. diff --git a/build/CMakeFiles/two-sum-test.dir/depend.make b/build/CMakeFiles/two-sum-test.dir/depend.make new file mode 100644 index 0000000..b67e1de --- /dev/null +++ b/build/CMakeFiles/two-sum-test.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for two-sum-test. +# This may be replaced when dependencies are built. diff --git a/build/CMakeFiles/two-sum-test.dir/flags.make b/build/CMakeFiles/two-sum-test.dir/flags.make new file mode 100644 index 0000000..85b9ef0 --- /dev/null +++ b/build/CMakeFiles/two-sum-test.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile CXX with /usr/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -I/home/user/CppDevCourse-hw3/include -isystem /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include -isystem /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest + +CXX_FLAGS = -Wall -Wextra -Werror -fsanitize=address,undefined + diff --git a/build/CMakeFiles/two-sum-test.dir/link.txt b/build/CMakeFiles/two-sum-test.dir/link.txt new file mode 100644 index 0000000..6ecc2cf --- /dev/null +++ b/build/CMakeFiles/two-sum-test.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/c++ -fsanitize=address,undefined "CMakeFiles/two-sum-test.dir/tests/test.cpp.o" "CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o" -o two-sum-test lib/libgtest.a lib/libgtest_main.a lib/libgtest.a diff --git a/build/CMakeFiles/two-sum-test.dir/progress.make b/build/CMakeFiles/two-sum-test.dir/progress.make new file mode 100644 index 0000000..cd34084 --- /dev/null +++ b/build/CMakeFiles/two-sum-test.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = 12 +CMAKE_PROGRESS_2 = 13 +CMAKE_PROGRESS_3 = 14 + diff --git a/build/CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o b/build/CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..907f5af1d538a9b6750ce6114f6e6f18c1c875db GIT binary patch literal 6616 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 T)4ZkWcQsl6KWO5^=IZ}1`i}1O literal 0 HcmV?d00001 diff --git a/build/CMakeFiles/two-sum-test.dir/tests/test.cpp.o.d b/build/CMakeFiles/two-sum-test.dir/tests/test.cpp.o.d new file mode 100644 index 0000000..1c41b9f --- /dev/null +++ b/build/CMakeFiles/two-sum-test.dir/tests/test.cpp.o.d @@ -0,0 +1,277 @@ +CMakeFiles/two-sum-test.dir/tests/test.cpp.o: \ + /home/user/CppDevCourse-hw3/tests/test.cpp /usr/include/stdc-predef.h \ + /usr/include/c++/13/cstddef \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \ + /usr/include/features.h /usr/include/features-time64.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \ + /usr/include/c++/13/pstl/pstl_config.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest.h \ + /usr/include/c++/13/limits /usr/include/c++/13/memory \ + /usr/include/c++/13/bits/memoryfwd.h \ + /usr/include/c++/13/bits/allocator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \ + /usr/include/c++/13/bits/new_allocator.h /usr/include/c++/13/new \ + /usr/include/c++/13/bits/exception.h \ + /usr/include/c++/13/bits/functexcept.h \ + /usr/include/c++/13/bits/exception_defines.h \ + /usr/include/c++/13/bits/move.h /usr/include/c++/13/type_traits \ + /usr/include/c++/13/bits/stl_tempbuf.h \ + /usr/include/c++/13/bits/stl_construct.h \ + /usr/include/c++/13/bits/stl_iterator_base_types.h \ + /usr/include/c++/13/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/13/bits/concept_check.h \ + /usr/include/c++/13/debug/assertions.h \ + /usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/bits/utility.h \ + /usr/include/c++/13/ext/numeric_traits.h \ + /usr/include/c++/13/bits/cpp_type_traits.h \ + /usr/include/c++/13/ext/type_traits.h \ + /usr/include/c++/13/bits/stl_uninitialized.h \ + /usr/include/c++/13/bits/stl_algobase.h \ + /usr/include/c++/13/bits/stl_iterator.h \ + /usr/include/c++/13/bits/ptr_traits.h /usr/include/c++/13/debug/debug.h \ + /usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \ + /usr/include/c++/13/ext/alloc_traits.h \ + /usr/include/c++/13/bits/alloc_traits.h \ + /usr/include/c++/13/bits/stl_raw_storage_iter.h \ + /usr/include/c++/13/bits/align.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-least.h \ + /usr/include/c++/13/bits/uses_allocator.h \ + /usr/include/c++/13/bits/unique_ptr.h /usr/include/c++/13/tuple \ + /usr/include/c++/13/bits/invoke.h \ + /usr/include/c++/13/bits/stl_function.h \ + /usr/include/c++/13/backward/binders.h \ + /usr/include/c++/13/bits/functional_hash.h \ + /usr/include/c++/13/bits/hash_bytes.h \ + /usr/include/c++/13/bits/shared_ptr.h /usr/include/c++/13/iosfwd \ + /usr/include/c++/13/bits/requires_hosted.h \ + /usr/include/c++/13/bits/stringfwd.h /usr/include/c++/13/bits/postypes.h \ + /usr/include/c++/13/cwchar /usr/include/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/types/wint_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/c++/13/bits/shared_ptr_base.h /usr/include/c++/13/typeinfo \ + /usr/include/c++/13/bits/allocated_ptr.h \ + /usr/include/c++/13/bits/refwrap.h \ + /usr/include/c++/13/ext/aligned_buffer.h \ + /usr/include/c++/13/ext/atomicity.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \ + /usr/include/x86_64-linux-gnu/bits/cpu-set.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \ + /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \ + /usr/include/x86_64-linux-gnu/sys/single_threaded.h \ + /usr/include/c++/13/ext/concurrence.h /usr/include/c++/13/exception \ + /usr/include/c++/13/bits/exception_ptr.h \ + /usr/include/c++/13/bits/cxxabi_init_exception.h \ + /usr/include/c++/13/bits/nested_exception.h \ + /usr/include/c++/13/bits/shared_ptr_atomic.h \ + /usr/include/c++/13/bits/atomic_base.h \ + /usr/include/c++/13/bits/atomic_lockfree_defines.h \ + /usr/include/c++/13/backward/auto_ptr.h \ + /usr/include/c++/13/pstl/glue_memory_defs.h \ + /usr/include/c++/13/pstl/execution_defs.h /usr/include/c++/13/ostream \ + /usr/include/c++/13/ios /usr/include/c++/13/bits/char_traits.h \ + /usr/include/c++/13/bits/localefwd.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \ + /usr/include/c++/13/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/cctype \ + /usr/include/ctype.h /usr/include/c++/13/bits/ios_base.h \ + /usr/include/c++/13/bits/locale_classes.h /usr/include/c++/13/string \ + /usr/include/c++/13/bits/ostream_insert.h \ + /usr/include/c++/13/bits/cxxabi_forced.h \ + /usr/include/c++/13/bits/range_access.h \ + /usr/include/c++/13/initializer_list \ + /usr/include/c++/13/bits/basic_string.h /usr/include/c++/13/string_view \ + /usr/include/c++/13/bits/string_view.tcc \ + /usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \ + /usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/c++/13/cerrno /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/x86_64-linux-gnu/bits/types/error_t.h \ + /usr/include/c++/13/bits/charconv.h \ + /usr/include/c++/13/bits/basic_string.tcc \ + /usr/include/c++/13/bits/memory_resource.h \ + /usr/include/c++/13/bits/uses_allocator_args.h \ + /usr/include/c++/13/bits/locale_classes.tcc \ + /usr/include/c++/13/system_error \ + /usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \ + /usr/include/c++/13/stdexcept /usr/include/c++/13/streambuf \ + /usr/include/c++/13/bits/streambuf.tcc \ + /usr/include/c++/13/bits/basic_ios.h \ + /usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \ + /usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \ + /usr/include/c++/13/bits/streambuf_iterator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \ + /usr/include/c++/13/bits/locale_facets.tcc \ + /usr/include/c++/13/bits/basic_ios.tcc \ + /usr/include/c++/13/bits/ostream.tcc /usr/include/c++/13/vector \ + /usr/include/c++/13/bits/stl_vector.h \ + /usr/include/c++/13/bits/stl_bvector.h \ + /usr/include/c++/13/bits/vector.tcc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-internal.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-port.h \ + /usr/include/c++/13/stdlib.h /usr/include/string.h \ + /usr/include/strings.h /usr/include/c++/13/cstdint \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h \ + /usr/include/x86_64-linux-gnu/bits/struct_stat.h \ + /usr/include/x86_64-linux-gnu/bits/statx.h /usr/include/linux/stat.h \ + /usr/include/linux/types.h /usr/include/x86_64-linux-gnu/asm/types.h \ + /usr/include/asm-generic/types.h /usr/include/asm-generic/int-ll64.h \ + /usr/include/x86_64-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types_64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/x86_64-linux-gnu/bits/statx-generic.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_statx_timestamp.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_statx.h \ + /usr/include/c++/13/iostream /usr/include/c++/13/istream \ + /usr/include/c++/13/bits/istream.tcc /usr/include/c++/13/locale \ + /usr/include/c++/13/bits/locale_facets_nonio.h /usr/include/c++/13/ctime \ + /usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \ + /usr/include/libintl.h /usr/include/c++/13/bits/codecvt.h \ + /usr/include/c++/13/bits/locale_facets_nonio.tcc \ + /usr/include/c++/13/bits/locale_conv.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-port.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-port-arch.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_posix.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_core.h \ + /usr/include/x86_64-linux-gnu/bits/unistd_ext.h \ + /usr/include/linux/close_range.h /usr/include/regex.h \ + /usr/include/c++/13/any /usr/include/c++/13/optional \ + /usr/include/c++/13/bits/enable_special_members.h \ + /usr/include/c++/13/variant /usr/include/c++/13/bits/parse_numbers.h \ + /usr/include/x86_64-linux-gnu/sys/wait.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum-generic.h \ + /usr/include/x86_64-linux-gnu/bits/signum-arch.h \ + /usr/include/x86_64-linux-gnu/bits/types/sig_atomic_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/siginfo_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigval_t.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-arch.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-consts.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-consts-arch.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigval_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigevent_t.h \ + /usr/include/x86_64-linux-gnu/bits/sigevent-consts.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/types/stack_t.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/bits/sigstksz.h \ + /usr/include/x86_64-linux-gnu/bits/ss_flags.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sigstack.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h \ + /usr/include/x86_64-linux-gnu/bits/signal_ext.h \ + /usr/include/x86_64-linux-gnu/bits/types/idtype_t.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/float.h \ + /usr/include/c++/13/iomanip /usr/include/c++/13/bits/quoted_string.h \ + /usr/include/c++/13/sstream /usr/include/c++/13/bits/sstream.tcc \ + /usr/include/c++/13/map /usr/include/c++/13/bits/stl_tree.h \ + /usr/include/c++/13/bits/node_handle.h \ + /usr/include/c++/13/bits/stl_map.h \ + /usr/include/c++/13/bits/stl_multimap.h \ + /usr/include/c++/13/bits/erase_if.h /usr/include/c++/13/set \ + /usr/include/c++/13/bits/stl_set.h \ + /usr/include/c++/13/bits/stl_multiset.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-message.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-filepath.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-string.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-type-util.h \ + /usr/include/c++/13/cxxabi.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cxxabi_tweaks.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-death-test.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-death-test-internal.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-matchers.h \ + /usr/include/c++/13/atomic \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-printers.h \ + /usr/include/c++/13/functional /usr/include/c++/13/bits/std_function.h \ + /usr/include/c++/13/unordered_map \ + /usr/include/c++/13/bits/unordered_map.h \ + /usr/include/c++/13/bits/hashtable.h \ + /usr/include/c++/13/bits/hashtable_policy.h /usr/include/c++/13/array \ + /usr/include/c++/13/compare /usr/include/c++/13/bits/stl_algo.h \ + /usr/include/c++/13/bits/algorithmfwd.h \ + /usr/include/c++/13/bits/stl_heap.h \ + /usr/include/c++/13/bits/uniform_int_dist.h /usr/include/c++/13/utility \ + /usr/include/c++/13/bits/stl_relops.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-printers.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-param-test.h \ + /usr/include/c++/13/iterator /usr/include/c++/13/bits/stream_iterator.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-param-util.h \ + /usr/include/c++/13/cassert /usr/include/assert.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-test-part.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest_prod.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-typed-test.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest_pred_impl.h \ + /home/user/CppDevCourse-hw3/include/two-sum.hpp diff --git a/build/CTestTestfile.cmake b/build/CTestTestfile.cmake new file mode 100644 index 0000000..3ee1cf2 --- /dev/null +++ b/build/CTestTestfile.cmake @@ -0,0 +1,10 @@ +# CMake generated Testfile for +# Source directory: /home/user/CppDevCourse-hw3 +# Build directory: /home/user/CppDevCourse-hw3/build +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +include("/home/user/CppDevCourse-hw3/build/two-sum-test[1]_include.cmake") +add_test(two-sum-test "/home/user/CppDevCourse-hw3/build/two-sum-test") +set_tests_properties(two-sum-test PROPERTIES _BACKTRACE_TRIPLES "/home/user/CppDevCourse-hw3/CMakeLists.txt;28;add_test;/home/user/CppDevCourse-hw3/CMakeLists.txt;0;") +subdirs("_deps/googletest-build") diff --git a/build/Makefile b/build/Makefile new file mode 100644 index 0000000..c4442ef --- /dev/null +++ b/build/Makefile @@ -0,0 +1,368 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/user/CppDevCourse-hw3 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/user/CppDevCourse-hw3/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test +.PHONY : test/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles /home/user/CppDevCourse-hw3/build//CMakeFiles/progress.marks + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named main + +# Build rule for target. +main: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 main +.PHONY : main + +# fast build rule for target. +main/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/build +.PHONY : main/fast + +#============================================================================= +# Target rules for targets named two-sum-test + +# Build rule for target. +two-sum-test: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 two-sum-test +.PHONY : two-sum-test + +# fast build rule for target. +two-sum-test/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/two-sum-test.dir/build.make CMakeFiles/two-sum-test.dir/build +.PHONY : two-sum-test/fast + +#============================================================================= +# Target rules for targets named gmock + +# Build rule for target. +gmock: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 gmock +.PHONY : gmock + +# fast build rule for target. +gmock/fast: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build +.PHONY : gmock/fast + +#============================================================================= +# Target rules for targets named gmock_main + +# Build rule for target. +gmock_main: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 gmock_main +.PHONY : gmock_main + +# fast build rule for target. +gmock_main/fast: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build +.PHONY : gmock_main/fast + +#============================================================================= +# Target rules for targets named gtest + +# Build rule for target. +gtest: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 gtest +.PHONY : gtest + +# fast build rule for target. +gtest/fast: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build +.PHONY : gtest/fast + +#============================================================================= +# Target rules for targets named gtest_main + +# Build rule for target. +gtest_main: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 gtest_main +.PHONY : gtest_main + +# fast build rule for target. +gtest_main/fast: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build +.PHONY : gtest_main/fast + +src/main.o: src/main.cpp.o +.PHONY : src/main.o + +# target to build an object file +src/main.cpp.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/src/main.cpp.o +.PHONY : src/main.cpp.o + +src/main.i: src/main.cpp.i +.PHONY : src/main.i + +# target to preprocess a source file +src/main.cpp.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/src/main.cpp.i +.PHONY : src/main.cpp.i + +src/main.s: src/main.cpp.s +.PHONY : src/main.s + +# target to generate assembly for a file +src/main.cpp.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/src/main.cpp.s +.PHONY : src/main.cpp.s + +src/two-sum.o: src/two-sum.cpp.o +.PHONY : src/two-sum.o + +# target to build an object file +src/two-sum.cpp.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/src/two-sum.cpp.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/two-sum-test.dir/build.make CMakeFiles/two-sum-test.dir/src/two-sum.cpp.o +.PHONY : src/two-sum.cpp.o + +src/two-sum.i: src/two-sum.cpp.i +.PHONY : src/two-sum.i + +# target to preprocess a source file +src/two-sum.cpp.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/src/two-sum.cpp.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/two-sum-test.dir/build.make CMakeFiles/two-sum-test.dir/src/two-sum.cpp.i +.PHONY : src/two-sum.cpp.i + +src/two-sum.s: src/two-sum.cpp.s +.PHONY : src/two-sum.s + +# target to generate assembly for a file +src/two-sum.cpp.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/src/two-sum.cpp.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/two-sum-test.dir/build.make CMakeFiles/two-sum-test.dir/src/two-sum.cpp.s +.PHONY : src/two-sum.cpp.s + +tests/test.o: tests/test.cpp.o +.PHONY : tests/test.o + +# target to build an object file +tests/test.cpp.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/two-sum-test.dir/build.make CMakeFiles/two-sum-test.dir/tests/test.cpp.o +.PHONY : tests/test.cpp.o + +tests/test.i: tests/test.cpp.i +.PHONY : tests/test.i + +# target to preprocess a source file +tests/test.cpp.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/two-sum-test.dir/build.make CMakeFiles/two-sum-test.dir/tests/test.cpp.i +.PHONY : tests/test.cpp.i + +tests/test.s: tests/test.cpp.s +.PHONY : tests/test.s + +# target to generate assembly for a file +tests/test.cpp.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/two-sum-test.dir/build.make CMakeFiles/two-sum-test.dir/tests/test.cpp.s +.PHONY : tests/test.cpp.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... test" + @echo "... gmock" + @echo "... gmock_main" + @echo "... gtest" + @echo "... gtest_main" + @echo "... main" + @echo "... two-sum-test" + @echo "... src/main.o" + @echo "... src/main.i" + @echo "... src/main.s" + @echo "... src/two-sum.o" + @echo "... src/two-sum.i" + @echo "... src/two-sum.s" + @echo "... tests/test.o" + @echo "... tests/test.i" + @echo "... tests/test.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/build/Testing/Temporary/CTestCostData.txt b/build/Testing/Temporary/CTestCostData.txt new file mode 100644 index 0000000..3a34ca8 --- /dev/null +++ b/build/Testing/Temporary/CTestCostData.txt @@ -0,0 +1,8 @@ +TwoSumsTest.AllPositive 2 0.0166297 +TwoSumsTest.NoSum 2 0.00846424 +TwoSumsTest.WithZero 2 0.00826265 +TwoSumsTest.MultiplePairs 2 0.00867511 +TwoSumsTest.MultiplePairsSameElement 2 0.00797275 +TwoSumsTest.LastElement 2 0.0087482 +two-sum-test 2 0.00796184 +--- diff --git a/build/Testing/Temporary/LastTest.log b/build/Testing/Temporary/LastTest.log new file mode 100644 index 0000000..141367f --- /dev/null +++ b/build/Testing/Temporary/LastTest.log @@ -0,0 +1,201 @@ +Start testing: Dec 05 18:20 +05 +---------------------------------------------------------- +1/7 Testing: TwoSumsTest.AllPositive +1/7 Test: TwoSumsTest.AllPositive +Command: "/home/user/CppDevCourse-hw3/build/two-sum-test" "--gtest_filter=TwoSumsTest.AllPositive" "--gtest_also_run_disabled_tests" +Directory: /home/user/CppDevCourse-hw3/build +"TwoSumsTest.AllPositive" start time: Dec 05 18:20 +05 +Output: +---------------------------------------------------------- +Running main() from /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest_main.cc +Note: Google Test filter = TwoSumsTest.AllPositive +[==========] Running 1 test from 1 test suite. +[----------] Global test environment set-up. +[----------] 1 test from TwoSumsTest +[ RUN ] TwoSumsTest.AllPositive +[ OK ] TwoSumsTest.AllPositive (0 ms) +[----------] 1 test from TwoSumsTest (0 ms total) + +[----------] Global test environment tear-down +[==========] 1 test from 1 test suite ran. (0 ms total) +[ PASSED ] 1 test. + +Test time = 0.03 sec +---------------------------------------------------------- +Test Passed. +"TwoSumsTest.AllPositive" end time: Dec 05 18:20 +05 +"TwoSumsTest.AllPositive" time elapsed: 00:00:00 +---------------------------------------------------------- + +2/7 Testing: TwoSumsTest.NoSum +2/7 Test: TwoSumsTest.NoSum +Command: "/home/user/CppDevCourse-hw3/build/two-sum-test" "--gtest_filter=TwoSumsTest.NoSum" "--gtest_also_run_disabled_tests" +Directory: /home/user/CppDevCourse-hw3/build +"TwoSumsTest.NoSum" start time: Dec 05 18:20 +05 +Output: +---------------------------------------------------------- +Running main() from /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest_main.cc +Note: Google Test filter = TwoSumsTest.NoSum +[==========] Running 1 test from 1 test suite. +[----------] Global test environment set-up. +[----------] 1 test from TwoSumsTest +[ RUN ] TwoSumsTest.NoSum +[ OK ] TwoSumsTest.NoSum (0 ms) +[----------] 1 test from TwoSumsTest (0 ms total) + +[----------] Global test environment tear-down +[==========] 1 test from 1 test suite ran. (0 ms total) +[ PASSED ] 1 test. + +Test time = 0.02 sec +---------------------------------------------------------- +Test Passed. +"TwoSumsTest.NoSum" end time: Dec 05 18:20 +05 +"TwoSumsTest.NoSum" time elapsed: 00:00:00 +---------------------------------------------------------- + +3/7 Testing: TwoSumsTest.WithZero +3/7 Test: TwoSumsTest.WithZero +Command: "/home/user/CppDevCourse-hw3/build/two-sum-test" "--gtest_filter=TwoSumsTest.WithZero" "--gtest_also_run_disabled_tests" +Directory: /home/user/CppDevCourse-hw3/build +"TwoSumsTest.WithZero" start time: Dec 05 18:20 +05 +Output: +---------------------------------------------------------- +Running main() from /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest_main.cc +Note: Google Test filter = TwoSumsTest.WithZero +[==========] Running 1 test from 1 test suite. +[----------] Global test environment set-up. +[----------] 1 test from TwoSumsTest +[ RUN ] TwoSumsTest.WithZero +[ OK ] TwoSumsTest.WithZero (0 ms) +[----------] 1 test from TwoSumsTest (0 ms total) + +[----------] Global test environment tear-down +[==========] 1 test from 1 test suite ran. (0 ms total) +[ PASSED ] 1 test. + +Test time = 0.02 sec +---------------------------------------------------------- +Test Passed. +"TwoSumsTest.WithZero" end time: Dec 05 18:20 +05 +"TwoSumsTest.WithZero" time elapsed: 00:00:00 +---------------------------------------------------------- + +4/7 Testing: TwoSumsTest.MultiplePairs +4/7 Test: TwoSumsTest.MultiplePairs +Command: "/home/user/CppDevCourse-hw3/build/two-sum-test" "--gtest_filter=TwoSumsTest.MultiplePairs" "--gtest_also_run_disabled_tests" +Directory: /home/user/CppDevCourse-hw3/build +"TwoSumsTest.MultiplePairs" start time: Dec 05 18:20 +05 +Output: +---------------------------------------------------------- +Running main() from /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest_main.cc +Note: Google Test filter = TwoSumsTest.MultiplePairs +[==========] Running 1 test from 1 test suite. +[----------] Global test environment set-up. +[----------] 1 test from TwoSumsTest +[ RUN ] TwoSumsTest.MultiplePairs +[ OK ] TwoSumsTest.MultiplePairs (0 ms) +[----------] 1 test from TwoSumsTest (0 ms total) + +[----------] Global test environment tear-down +[==========] 1 test from 1 test suite ran. (0 ms total) +[ PASSED ] 1 test. + +Test time = 0.02 sec +---------------------------------------------------------- +Test Passed. +"TwoSumsTest.MultiplePairs" end time: Dec 05 18:20 +05 +"TwoSumsTest.MultiplePairs" time elapsed: 00:00:00 +---------------------------------------------------------- + +5/7 Testing: TwoSumsTest.MultiplePairsSameElement +5/7 Test: TwoSumsTest.MultiplePairsSameElement +Command: "/home/user/CppDevCourse-hw3/build/two-sum-test" "--gtest_filter=TwoSumsTest.MultiplePairsSameElement" "--gtest_also_run_disabled_tests" +Directory: /home/user/CppDevCourse-hw3/build +"TwoSumsTest.MultiplePairsSameElement" start time: Dec 05 18:20 +05 +Output: +---------------------------------------------------------- +Running main() from /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest_main.cc +Note: Google Test filter = TwoSumsTest.MultiplePairsSameElement +[==========] Running 1 test from 1 test suite. +[----------] Global test environment set-up. +[----------] 1 test from TwoSumsTest +[ RUN ] TwoSumsTest.MultiplePairsSameElement +[ OK ] TwoSumsTest.MultiplePairsSameElement (0 ms) +[----------] 1 test from TwoSumsTest (0 ms total) + +[----------] Global test environment tear-down +[==========] 1 test from 1 test suite ran. (0 ms total) +[ PASSED ] 1 test. + +Test time = 0.02 sec +---------------------------------------------------------- +Test Passed. +"TwoSumsTest.MultiplePairsSameElement" end time: Dec 05 18:20 +05 +"TwoSumsTest.MultiplePairsSameElement" time elapsed: 00:00:00 +---------------------------------------------------------- + +6/7 Testing: TwoSumsTest.LastElement +6/7 Test: TwoSumsTest.LastElement +Command: "/home/user/CppDevCourse-hw3/build/two-sum-test" "--gtest_filter=TwoSumsTest.LastElement" "--gtest_also_run_disabled_tests" +Directory: /home/user/CppDevCourse-hw3/build +"TwoSumsTest.LastElement" start time: Dec 05 18:20 +05 +Output: +---------------------------------------------------------- +Running main() from /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest_main.cc +Note: Google Test filter = TwoSumsTest.LastElement +[==========] Running 1 test from 1 test suite. +[----------] Global test environment set-up. +[----------] 1 test from TwoSumsTest +[ RUN ] TwoSumsTest.LastElement +[ OK ] TwoSumsTest.LastElement (0 ms) +[----------] 1 test from TwoSumsTest (0 ms total) + +[----------] Global test environment tear-down +[==========] 1 test from 1 test suite ran. (0 ms total) +[ PASSED ] 1 test. + +Test time = 0.02 sec +---------------------------------------------------------- +Test Passed. +"TwoSumsTest.LastElement" end time: Dec 05 18:20 +05 +"TwoSumsTest.LastElement" time elapsed: 00:00:00 +---------------------------------------------------------- + +7/7 Testing: two-sum-test +7/7 Test: two-sum-test +Command: "/home/user/CppDevCourse-hw3/build/two-sum-test" +Directory: /home/user/CppDevCourse-hw3/build +"two-sum-test" start time: Dec 05 18:20 +05 +Output: +---------------------------------------------------------- +Running main() from /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest_main.cc +[==========] Running 6 tests from 1 test suite. +[----------] Global test environment set-up. +[----------] 6 tests from TwoSumsTest +[ RUN ] TwoSumsTest.AllPositive +[ OK ] TwoSumsTest.AllPositive (0 ms) +[ RUN ] TwoSumsTest.NoSum +[ OK ] TwoSumsTest.NoSum (0 ms) +[ RUN ] TwoSumsTest.WithZero +[ OK ] TwoSumsTest.WithZero (0 ms) +[ RUN ] TwoSumsTest.MultiplePairs +[ OK ] TwoSumsTest.MultiplePairs (0 ms) +[ RUN ] TwoSumsTest.MultiplePairsSameElement +[ OK ] TwoSumsTest.MultiplePairsSameElement (0 ms) +[ RUN ] TwoSumsTest.LastElement +[ OK ] TwoSumsTest.LastElement (0 ms) +[----------] 6 tests from TwoSumsTest (0 ms total) + +[----------] Global test environment tear-down +[==========] 6 tests from 1 test suite ran. (0 ms total) +[ PASSED ] 6 tests. + +Test time = 0.02 sec +---------------------------------------------------------- +Test Passed. +"two-sum-test" end time: Dec 05 18:20 +05 +"two-sum-test" time elapsed: 00:00:00 +---------------------------------------------------------- + +End testing: Dec 05 18:20 +05 diff --git a/build/_deps/googletest-build/CMakeFiles/CMakeDirectoryInformation.cmake b/build/_deps/googletest-build/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..0929168 --- /dev/null +++ b/build/_deps/googletest-build/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/user/CppDevCourse-hw3") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/user/CppDevCourse-hw3/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/build/_deps/googletest-build/CMakeFiles/progress.marks b/build/_deps/googletest-build/CMakeFiles/progress.marks new file mode 100644 index 0000000..45a4fb7 --- /dev/null +++ b/build/_deps/googletest-build/CMakeFiles/progress.marks @@ -0,0 +1 @@ +8 diff --git a/build/_deps/googletest-build/CTestTestfile.cmake b/build/_deps/googletest-build/CTestTestfile.cmake new file mode 100644 index 0000000..d27c465 --- /dev/null +++ b/build/_deps/googletest-build/CTestTestfile.cmake @@ -0,0 +1,7 @@ +# CMake generated Testfile for +# Source directory: /home/user/CppDevCourse-hw3/build/_deps/googletest-src +# Build directory: /home/user/CppDevCourse-hw3/build/_deps/googletest-build +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +subdirs("googlemock") diff --git a/build/_deps/googletest-build/Makefile b/build/_deps/googletest-build/Makefile new file mode 100644 index 0000000..37c58a9 --- /dev/null +++ b/build/_deps/googletest-build/Makefile @@ -0,0 +1,200 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/user/CppDevCourse-hw3 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/user/CppDevCourse-hw3/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test +.PHONY : test/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# The main all target +all: cmake_check_build_system + cd /home/user/CppDevCourse-hw3/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles /home/user/CppDevCourse-hw3/build/_deps/googletest-build//CMakeFiles/progress.marks + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/user/CppDevCourse-hw3/build && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... test" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/user/CppDevCourse-hw3/build && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/build/_deps/googletest-build/cmake_install.cmake b/build/_deps/googletest-build/cmake_install.cmake new file mode 100644 index 0000000..22c2980 --- /dev/null +++ b/build/_deps/googletest-build/cmake_install.cmake @@ -0,0 +1,50 @@ +# Install script for directory: /home/user/CppDevCourse-hw3/build/_deps/googletest-src + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +# Set default install directory permissions. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/usr/bin/objdump") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for each subdirectory. + include("/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock/cmake_install.cmake") + +endif() + diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake b/build/_deps/googletest-build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..0929168 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/user/CppDevCourse-hw3") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/user/CppDevCourse-hw3/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake new file mode 100644 index 0000000..2a39657 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake @@ -0,0 +1,23 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/src/gmock-all.cc" "_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o" "gcc" "_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make new file mode 100644 index 0000000..bf27cdf --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make @@ -0,0 +1,111 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/user/CppDevCourse-hw3 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/user/CppDevCourse-hw3/build + +# Include any dependencies generated for this target. +include _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.make + +# Include the progress variables for this target. +include _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/progress.make + +# Include the compile flags for this target's objects. +include _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/flags.make + +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/flags.make +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: _deps/googletest-src/googlemock/src/gmock-all.cc +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o" + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o -MF CMakeFiles/gmock.dir/src/gmock-all.cc.o.d -o CMakeFiles/gmock.dir/src/gmock-all.cc.o -c /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/src/gmock-all.cc + +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/gmock.dir/src/gmock-all.cc.i" + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/src/gmock-all.cc > CMakeFiles/gmock.dir/src/gmock-all.cc.i + +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/gmock.dir/src/gmock-all.cc.s" + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/src/gmock-all.cc -o CMakeFiles/gmock.dir/src/gmock-all.cc.s + +# Object files for target gmock +gmock_OBJECTS = \ +"CMakeFiles/gmock.dir/src/gmock-all.cc.o" + +# External object files for target gmock +gmock_EXTERNAL_OBJECTS = + +lib/libgmock.a: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o +lib/libgmock.a: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make +lib/libgmock.a: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library ../../../lib/libgmock.a" + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock && $(CMAKE_COMMAND) -P CMakeFiles/gmock.dir/cmake_clean_target.cmake + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/gmock.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build: lib/libgmock.a +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build + +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/clean: + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock && $(CMAKE_COMMAND) -P CMakeFiles/gmock.dir/cmake_clean.cmake +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/clean + +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend: + cd /home/user/CppDevCourse-hw3/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/user/CppDevCourse-hw3 /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock /home/user/CppDevCourse-hw3/build /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake "--color=$(COLOR)" +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend + diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean.cmake b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean.cmake new file mode 100644 index 0000000..ebe1b2d --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "../../../bin/libgmock.pdb" + "../../../lib/libgmock.a" + "CMakeFiles/gmock.dir/src/gmock-all.cc.o" + "CMakeFiles/gmock.dir/src/gmock-all.cc.o.d" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/gmock.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean_target.cmake b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..541729e --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "../../../lib/libgmock.a" +) diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.make b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.make new file mode 100644 index 0000000..c777df5 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for gmock. +# This may be replaced when dependencies are built. diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.ts b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.ts new file mode 100644 index 0000000..adc68d1 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for gmock. diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend.make b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend.make new file mode 100644 index 0000000..7a05e2f --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for gmock. +# This may be replaced when dependencies are built. diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/flags.make b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/flags.make new file mode 100644 index 0000000..1a47100 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile CXX with /usr/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -I/home/user/CppDevCourse-hw3/include -I/home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include -I/home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock -isystem /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include -isystem /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest + +CXX_FLAGS = -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wall -Wextra -Werror + diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/link.txt b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/link.txt new file mode 100644 index 0000000..79d0053 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc ../../../lib/libgmock.a "CMakeFiles/gmock.dir/src/gmock-all.cc.o" +/usr/bin/ranlib ../../../lib/libgmock.a diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/progress.make b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/progress.make new file mode 100644 index 0000000..abadeb0 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = 2 + diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o new file mode 100644 index 0000000000000000000000000000000000000000..fe081ee7d377b35edb227b651f0fdadd86f5b4c8 GIT binary patch literal 642960 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%0DfHiKOx`b_<2p? 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 NGt{5=2>p}K_kZS&69xbP literal 0 HcmV?d00001 diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o.d b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o.d new file mode 100644 index 0000000..8064e12 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o.d @@ -0,0 +1,328 @@ +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/src/gmock-all.cc \ + /usr/include/stdc-predef.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h \ + /usr/include/errno.h /usr/include/features.h \ + /usr/include/features-time64.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/x86_64-linux-gnu/bits/types/error_t.h \ + /usr/include/c++/13/algorithm /usr/include/c++/13/bits/stl_algobase.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \ + /usr/include/c++/13/pstl/pstl_config.h \ + /usr/include/c++/13/bits/functexcept.h \ + /usr/include/c++/13/bits/exception_defines.h \ + /usr/include/c++/13/bits/cpp_type_traits.h \ + /usr/include/c++/13/ext/type_traits.h \ + /usr/include/c++/13/ext/numeric_traits.h \ + /usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/type_traits \ + /usr/include/c++/13/bits/move.h /usr/include/c++/13/bits/utility.h \ + /usr/include/c++/13/bits/stl_iterator_base_types.h \ + /usr/include/c++/13/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/13/bits/concept_check.h \ + /usr/include/c++/13/debug/assertions.h \ + /usr/include/c++/13/bits/stl_iterator.h \ + /usr/include/c++/13/bits/ptr_traits.h /usr/include/c++/13/debug/debug.h \ + /usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \ + /usr/include/c++/13/bits/stl_algo.h \ + /usr/include/c++/13/bits/algorithmfwd.h \ + /usr/include/c++/13/initializer_list /usr/include/c++/13/bits/stl_heap.h \ + /usr/include/c++/13/bits/uniform_int_dist.h \ + /usr/include/c++/13/bits/stl_tempbuf.h /usr/include/c++/13/new \ + /usr/include/c++/13/bits/exception.h \ + /usr/include/c++/13/bits/stl_construct.h /usr/include/c++/13/cstdlib \ + /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/c++/13/bits/std_abs.h \ + /usr/include/c++/13/pstl/glue_algorithm_defs.h \ + /usr/include/c++/13/pstl/execution_defs.h /usr/include/c++/13/functional \ + /usr/include/c++/13/bits/stl_function.h \ + /usr/include/c++/13/backward/binders.h /usr/include/c++/13/tuple \ + /usr/include/c++/13/bits/uses_allocator.h \ + /usr/include/c++/13/bits/invoke.h \ + /usr/include/c++/13/bits/functional_hash.h \ + /usr/include/c++/13/bits/hash_bytes.h /usr/include/c++/13/bits/refwrap.h \ + /usr/include/c++/13/bits/std_function.h /usr/include/c++/13/typeinfo \ + /usr/include/c++/13/unordered_map \ + /usr/include/c++/13/bits/requires_hosted.h \ + /usr/include/c++/13/bits/unordered_map.h \ + /usr/include/c++/13/bits/hashtable.h \ + /usr/include/c++/13/bits/hashtable_policy.h \ + /usr/include/c++/13/ext/aligned_buffer.h \ + /usr/include/c++/13/ext/alloc_traits.h \ + /usr/include/c++/13/bits/alloc_traits.h \ + /usr/include/c++/13/bits/memoryfwd.h \ + /usr/include/c++/13/bits/allocator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \ + /usr/include/c++/13/bits/new_allocator.h \ + /usr/include/c++/13/bits/enable_special_members.h \ + /usr/include/c++/13/bits/node_handle.h \ + /usr/include/c++/13/bits/range_access.h \ + /usr/include/c++/13/bits/erase_if.h \ + /usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \ + /usr/include/c++/13/bits/uses_allocator_args.h \ + /usr/include/c++/13/vector /usr/include/c++/13/bits/stl_uninitialized.h \ + /usr/include/c++/13/bits/stl_vector.h \ + /usr/include/c++/13/bits/stl_bvector.h \ + /usr/include/c++/13/bits/vector.tcc /usr/include/c++/13/array \ + /usr/include/c++/13/compare /usr/include/c++/13/memory \ + /usr/include/c++/13/bits/stl_raw_storage_iter.h \ + /usr/include/c++/13/bits/align.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-least.h \ + /usr/include/c++/13/bits/unique_ptr.h \ + /usr/include/c++/13/bits/shared_ptr.h /usr/include/c++/13/iosfwd \ + /usr/include/c++/13/bits/stringfwd.h /usr/include/c++/13/bits/postypes.h \ + /usr/include/c++/13/cwchar /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/types/wint_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/c++/13/bits/shared_ptr_base.h \ + /usr/include/c++/13/bits/allocated_ptr.h \ + /usr/include/c++/13/ext/atomicity.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \ + /usr/include/x86_64-linux-gnu/bits/cpu-set.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \ + /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \ + /usr/include/x86_64-linux-gnu/sys/single_threaded.h \ + /usr/include/c++/13/ext/concurrence.h /usr/include/c++/13/exception \ + /usr/include/c++/13/bits/exception_ptr.h \ + /usr/include/c++/13/bits/cxxabi_init_exception.h \ + /usr/include/c++/13/bits/nested_exception.h \ + /usr/include/c++/13/bits/shared_ptr_atomic.h \ + /usr/include/c++/13/bits/atomic_base.h \ + /usr/include/c++/13/bits/atomic_lockfree_defines.h \ + /usr/include/c++/13/backward/auto_ptr.h \ + /usr/include/c++/13/pstl/glue_memory_defs.h /usr/include/c++/13/string \ + /usr/include/c++/13/bits/char_traits.h \ + /usr/include/c++/13/bits/localefwd.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \ + /usr/include/c++/13/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/cctype \ + /usr/include/ctype.h /usr/include/c++/13/bits/ostream_insert.h \ + /usr/include/c++/13/bits/cxxabi_forced.h \ + /usr/include/c++/13/bits/basic_string.h /usr/include/c++/13/string_view \ + /usr/include/c++/13/bits/string_view.tcc \ + /usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdio \ + /usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/c++/13/cerrno /usr/include/c++/13/bits/charconv.h \ + /usr/include/c++/13/bits/basic_string.tcc /usr/include/c++/13/utility \ + /usr/include/c++/13/bits/stl_relops.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/internal/gmock-internal-utils.h \ + /usr/include/c++/13/ostream /usr/include/c++/13/ios \ + /usr/include/c++/13/bits/ios_base.h \ + /usr/include/c++/13/bits/locale_classes.h \ + /usr/include/c++/13/bits/locale_classes.tcc \ + /usr/include/c++/13/system_error \ + /usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \ + /usr/include/c++/13/stdexcept /usr/include/c++/13/streambuf \ + /usr/include/c++/13/bits/streambuf.tcc \ + /usr/include/c++/13/bits/basic_ios.h \ + /usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \ + /usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \ + /usr/include/c++/13/bits/streambuf_iterator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \ + /usr/include/c++/13/bits/locale_facets.tcc \ + /usr/include/c++/13/bits/basic_ios.tcc \ + /usr/include/c++/13/bits/ostream.tcc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/internal/gmock-port.h \ + /usr/include/assert.h /usr/include/c++/13/stdlib.h \ + /usr/include/c++/13/cstdint /usr/include/c++/13/iostream \ + /usr/include/c++/13/istream /usr/include/c++/13/bits/istream.tcc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-port.h \ + /usr/include/string.h /usr/include/strings.h /usr/include/c++/13/limits \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h \ + /usr/include/x86_64-linux-gnu/bits/struct_stat.h \ + /usr/include/x86_64-linux-gnu/bits/statx.h /usr/include/linux/stat.h \ + /usr/include/linux/types.h /usr/include/x86_64-linux-gnu/asm/types.h \ + /usr/include/asm-generic/types.h /usr/include/asm-generic/int-ll64.h \ + /usr/include/x86_64-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types_64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/x86_64-linux-gnu/bits/statx-generic.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_statx_timestamp.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_statx.h \ + /usr/include/c++/13/locale \ + /usr/include/c++/13/bits/locale_facets_nonio.h /usr/include/c++/13/ctime \ + /usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \ + /usr/include/libintl.h /usr/include/c++/13/bits/codecvt.h \ + /usr/include/c++/13/bits/locale_facets_nonio.tcc \ + /usr/include/c++/13/bits/locale_conv.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-port.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-port-arch.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_posix.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_core.h \ + /usr/include/x86_64-linux-gnu/bits/unistd_ext.h \ + /usr/include/linux/close_range.h /usr/include/regex.h \ + /usr/include/c++/13/any /usr/include/c++/13/optional \ + /usr/include/c++/13/variant /usr/include/c++/13/bits/parse_numbers.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-port.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-internal.h \ + /usr/include/x86_64-linux-gnu/sys/wait.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum-generic.h \ + /usr/include/x86_64-linux-gnu/bits/signum-arch.h \ + /usr/include/x86_64-linux-gnu/bits/types/sig_atomic_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/siginfo_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigval_t.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-arch.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-consts.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-consts-arch.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigval_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigevent_t.h \ + /usr/include/x86_64-linux-gnu/bits/sigevent-consts.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/types/stack_t.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/bits/sigstksz.h \ + /usr/include/x86_64-linux-gnu/bits/ss_flags.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sigstack.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h \ + /usr/include/x86_64-linux-gnu/bits/signal_ext.h \ + /usr/include/x86_64-linux-gnu/bits/types/idtype_t.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/float.h \ + /usr/include/c++/13/iomanip /usr/include/c++/13/bits/quoted_string.h \ + /usr/include/c++/13/sstream /usr/include/c++/13/bits/sstream.tcc \ + /usr/include/c++/13/map /usr/include/c++/13/bits/stl_tree.h \ + /usr/include/c++/13/bits/stl_map.h \ + /usr/include/c++/13/bits/stl_multimap.h /usr/include/c++/13/set \ + /usr/include/c++/13/bits/stl_set.h \ + /usr/include/c++/13/bits/stl_multiset.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-message.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-filepath.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-string.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-type-util.h \ + /usr/include/c++/13/cxxabi.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cxxabi_tweaks.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-death-test.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-death-test-internal.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-matchers.h \ + /usr/include/c++/13/atomic \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-printers.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-printers.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-param-test.h \ + /usr/include/c++/13/iterator /usr/include/c++/13/bits/stream_iterator.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-param-util.h \ + /usr/include/c++/13/cassert \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-test-part.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest_prod.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-typed-test.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest_pred_impl.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/internal/gmock-pp.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock-cardinalities.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/uio_lim.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock-function-mocker.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock-spec-builders.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock-matchers.h \ + /usr/include/c++/13/cmath /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/math-vector.h \ + /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/x86_64-linux-gnu/bits/flt-eval-method.h \ + /usr/include/x86_64-linux-gnu/bits/fp-logb.h \ + /usr/include/x86_64-linux-gnu/bits/fp-fast.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h \ + /usr/include/x86_64-linux-gnu/bits/iscanonical.h \ + /usr/include/c++/13/bits/specfun.h /usr/include/c++/13/tr1/gamma.tcc \ + /usr/include/c++/13/tr1/special_function_util.h \ + /usr/include/c++/13/tr1/bessel_function.tcc \ + /usr/include/c++/13/tr1/beta_function.tcc \ + /usr/include/c++/13/tr1/ell_integral.tcc \ + /usr/include/c++/13/tr1/exp_integral.tcc \ + /usr/include/c++/13/tr1/hypergeometric.tcc \ + /usr/include/c++/13/tr1/legendre_function.tcc \ + /usr/include/c++/13/tr1/modified_bessel_func.tcc \ + /usr/include/c++/13/tr1/poly_hermite.tcc \ + /usr/include/c++/13/tr1/poly_laguerre.tcc \ + /usr/include/c++/13/tr1/riemann_zeta.tcc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-matchers.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock-more-actions.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-generated-actions.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock-more-matchers.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock-nice-strict.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/src/gmock-cardinalities.cc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/src/gmock-internal-utils.cc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/src/gmock-matchers.cc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/src/gmock-spec-builders.cc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/src/gmock.cc diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/DependInfo.cmake b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/DependInfo.cmake new file mode 100644 index 0000000..3bd2e9b --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/DependInfo.cmake @@ -0,0 +1,23 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/src/gmock_main.cc" "_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o" "gcc" "_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make new file mode 100644 index 0000000..0409db6 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make @@ -0,0 +1,111 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/user/CppDevCourse-hw3 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/user/CppDevCourse-hw3/build + +# Include any dependencies generated for this target. +include _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.make + +# Include the progress variables for this target. +include _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/progress.make + +# Include the compile flags for this target's objects. +include _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/flags.make + +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/flags.make +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: _deps/googletest-src/googlemock/src/gmock_main.cc +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o" + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o -MF CMakeFiles/gmock_main.dir/src/gmock_main.cc.o.d -o CMakeFiles/gmock_main.dir/src/gmock_main.cc.o -c /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/src/gmock_main.cc + +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/gmock_main.dir/src/gmock_main.cc.i" + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/src/gmock_main.cc > CMakeFiles/gmock_main.dir/src/gmock_main.cc.i + +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/gmock_main.dir/src/gmock_main.cc.s" + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/src/gmock_main.cc -o CMakeFiles/gmock_main.dir/src/gmock_main.cc.s + +# Object files for target gmock_main +gmock_main_OBJECTS = \ +"CMakeFiles/gmock_main.dir/src/gmock_main.cc.o" + +# External object files for target gmock_main +gmock_main_EXTERNAL_OBJECTS = + +lib/libgmock_main.a: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o +lib/libgmock_main.a: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make +lib/libgmock_main.a: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library ../../../lib/libgmock_main.a" + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock && $(CMAKE_COMMAND) -P CMakeFiles/gmock_main.dir/cmake_clean_target.cmake + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/gmock_main.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build: lib/libgmock_main.a +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build + +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/clean: + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock && $(CMAKE_COMMAND) -P CMakeFiles/gmock_main.dir/cmake_clean.cmake +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/clean + +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend: + cd /home/user/CppDevCourse-hw3/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/user/CppDevCourse-hw3 /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock /home/user/CppDevCourse-hw3/build /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/DependInfo.cmake "--color=$(COLOR)" +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend + diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean.cmake b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean.cmake new file mode 100644 index 0000000..91d0b2d --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "../../../bin/libgmock_main.pdb" + "../../../lib/libgmock_main.a" + "CMakeFiles/gmock_main.dir/src/gmock_main.cc.o" + "CMakeFiles/gmock_main.dir/src/gmock_main.cc.o.d" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/gmock_main.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean_target.cmake b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..1c127c0 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "../../../lib/libgmock_main.a" +) diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.make b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.make new file mode 100644 index 0000000..0809414 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for gmock_main. +# This may be replaced when dependencies are built. diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.ts b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.ts new file mode 100644 index 0000000..85535ac --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for gmock_main. diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend.make b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend.make new file mode 100644 index 0000000..4a18b61 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for gmock_main. +# This may be replaced when dependencies are built. diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/flags.make b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/flags.make new file mode 100644 index 0000000..f6cbfc3 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile CXX with /usr/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -I/home/user/CppDevCourse-hw3/include -isystem /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include -isystem /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock -isystem /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include -isystem /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest + +CXX_FLAGS = -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wall -Wextra -Werror + diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/link.txt b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/link.txt new file mode 100644 index 0000000..fc26c30 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc ../../../lib/libgmock_main.a CMakeFiles/gmock_main.dir/src/gmock_main.cc.o +/usr/bin/ranlib ../../../lib/libgmock_main.a diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/progress.make b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/progress.make new file mode 100644 index 0000000..8c8fb6f --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 3 +CMAKE_PROGRESS_2 = 4 + diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o new file mode 100644 index 0000000000000000000000000000000000000000..2045aa40252728f0ba4870a4588dc77b533fdeeb GIT binary patch literal 3320 zcmbtWO^6&t6t3Bg$tp3KMA1M*1`oOc)9lRbx>=Ply6N2+oGi=EjvE3}>FKSV>C8;` zQeAC!1dS32E=CA?@*sHk2aoY0fq>%8Q!Y7q5OVOKc#}YUue#n$Z>I-|KB#{6zV}mA zuc}`4WxKvKk;^fn96QZM5}}OUm>Tsfx?5pKSYF#602$SP9e(!jW_9XqN~yYJqs z?nZx9KY0X=tGhoAdq3UP$j41k+F*3Mx*J0pzy9+rR1fKXOqU7R6prd}B|^nRHRuV# zi6`_?DEL+&yQI?G^Ocak)8jJo`N)`Ug4Xl50y4hjNZ<3@Oh_3>0M{ZPg zEgAF+?S9~PIU<(pKE`sn9AzM0qFL8lx7hOH;>(5UW-IblR4A6Mk~MR(RF1Sfd%_@k z=zZ|bL&LN!uQb^NV>c0-gogBF%vkQ7HJ01S=Z+sdFm)X^>>0qZAw7*B`%wPs#Ny-o zSHJ*7)V+#0&@z5V|6Z&|D2wnc>|=l4&(cle>@sMQ?SBA03`j14^H{X67Zvm zebi?I;#?YI|G^mi`!P7%b4eIKzcP=P7p~GNx{CGUZ1=3Q^Sak=gQn&ydyLsa_YB_t zb+BsS-CycC?QypABim*umY@ubu`JDXVMtvQ;EoRmcp!GYxPY^4D97!tOUD&w#J1{; z2?{H!K{0t#$W{<~YB0`hzPl0EnSZsM>)Kd}vhC_cu19F7Qyhw#a=c!7hI34CTS%?~ z?sgm*axdhOA9`(HY}PK?5AD)_c$a~8X{b`s3qsyrxG(zS0uCTLh%CLW+!g>rb8fw-JBBgu1u-1SOm;|n* zsh%MJQ{ z;e)3iC}F`1cM|s0?Hal5N7l9swuMv!h=}8e4&RbaUofjJgJ^p=zyI0!6#OYy$xsy| z95nn8aLhZsC&UYYVXdck0J@s$hEp9iqPC?z^5f7jRs~v;D(0!8_Xo$veW7=V-n-`k z!}00A0J@q!qfUyWZIWID0b~AG|04Ke%spoYHKAljYCbD37s<> p|NHQsrTwu6rOzHf?1H&qcTx*8%R&=P7&FWNm>KAEV@E9Q{}1uS0D}Mk literal 0 HcmV?d00001 diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o.d b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o.d new file mode 100644 index 0000000..73ed958 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o.d @@ -0,0 +1,324 @@ +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/src/gmock_main.cc \ + /usr/include/stdc-predef.h /usr/include/c++/13/iostream \ + /usr/include/c++/13/bits/requires_hosted.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \ + /usr/include/features.h /usr/include/features-time64.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \ + /usr/include/c++/13/pstl/pstl_config.h /usr/include/c++/13/ostream \ + /usr/include/c++/13/ios /usr/include/c++/13/iosfwd \ + /usr/include/c++/13/bits/stringfwd.h \ + /usr/include/c++/13/bits/memoryfwd.h /usr/include/c++/13/bits/postypes.h \ + /usr/include/c++/13/cwchar /usr/include/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/types/wint_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/c++/13/exception /usr/include/c++/13/bits/exception.h \ + /usr/include/c++/13/bits/exception_ptr.h \ + /usr/include/c++/13/bits/exception_defines.h \ + /usr/include/c++/13/bits/cxxabi_init_exception.h \ + /usr/include/c++/13/typeinfo /usr/include/c++/13/bits/hash_bytes.h \ + /usr/include/c++/13/new /usr/include/c++/13/bits/move.h \ + /usr/include/c++/13/type_traits \ + /usr/include/c++/13/bits/nested_exception.h \ + /usr/include/c++/13/bits/char_traits.h \ + /usr/include/c++/13/bits/localefwd.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \ + /usr/include/c++/13/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/cctype \ + /usr/include/ctype.h /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/c++/13/bits/ios_base.h /usr/include/c++/13/ext/atomicity.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \ + /usr/include/x86_64-linux-gnu/bits/cpu-set.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \ + /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \ + /usr/include/x86_64-linux-gnu/sys/single_threaded.h \ + /usr/include/c++/13/bits/locale_classes.h /usr/include/c++/13/string \ + /usr/include/c++/13/bits/allocator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \ + /usr/include/c++/13/bits/new_allocator.h \ + /usr/include/c++/13/bits/functexcept.h \ + /usr/include/c++/13/bits/cpp_type_traits.h \ + /usr/include/c++/13/bits/ostream_insert.h \ + /usr/include/c++/13/bits/cxxabi_forced.h \ + /usr/include/c++/13/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/13/bits/concept_check.h \ + /usr/include/c++/13/debug/assertions.h \ + /usr/include/c++/13/bits/stl_iterator_base_types.h \ + /usr/include/c++/13/bits/stl_iterator.h \ + /usr/include/c++/13/ext/type_traits.h \ + /usr/include/c++/13/bits/ptr_traits.h \ + /usr/include/c++/13/bits/stl_function.h \ + /usr/include/c++/13/backward/binders.h \ + /usr/include/c++/13/ext/numeric_traits.h \ + /usr/include/c++/13/bits/stl_algobase.h \ + /usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/bits/utility.h \ + /usr/include/c++/13/debug/debug.h \ + /usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \ + /usr/include/c++/13/bits/refwrap.h /usr/include/c++/13/bits/invoke.h \ + /usr/include/c++/13/bits/range_access.h \ + /usr/include/c++/13/initializer_list \ + /usr/include/c++/13/bits/basic_string.h \ + /usr/include/c++/13/ext/alloc_traits.h \ + /usr/include/c++/13/bits/alloc_traits.h \ + /usr/include/c++/13/bits/stl_construct.h /usr/include/c++/13/string_view \ + /usr/include/c++/13/bits/functional_hash.h \ + /usr/include/c++/13/bits/string_view.tcc \ + /usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \ + /usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/c++/13/cerrno /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/x86_64-linux-gnu/bits/types/error_t.h \ + /usr/include/c++/13/bits/charconv.h \ + /usr/include/c++/13/bits/basic_string.tcc \ + /usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \ + /usr/include/c++/13/bits/uses_allocator.h \ + /usr/include/c++/13/bits/uses_allocator_args.h /usr/include/c++/13/tuple \ + /usr/include/c++/13/bits/locale_classes.tcc \ + /usr/include/c++/13/system_error \ + /usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \ + /usr/include/c++/13/stdexcept /usr/include/c++/13/streambuf \ + /usr/include/c++/13/bits/streambuf.tcc \ + /usr/include/c++/13/bits/basic_ios.h \ + /usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \ + /usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \ + /usr/include/c++/13/bits/streambuf_iterator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \ + /usr/include/c++/13/bits/locale_facets.tcc \ + /usr/include/c++/13/bits/basic_ios.tcc \ + /usr/include/c++/13/bits/ostream.tcc /usr/include/c++/13/istream \ + /usr/include/c++/13/bits/istream.tcc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h \ + /usr/include/c++/13/algorithm /usr/include/c++/13/bits/stl_algo.h \ + /usr/include/c++/13/bits/algorithmfwd.h \ + /usr/include/c++/13/bits/stl_heap.h \ + /usr/include/c++/13/bits/uniform_int_dist.h \ + /usr/include/c++/13/bits/stl_tempbuf.h \ + /usr/include/c++/13/pstl/glue_algorithm_defs.h \ + /usr/include/c++/13/pstl/execution_defs.h /usr/include/c++/13/functional \ + /usr/include/c++/13/bits/std_function.h \ + /usr/include/c++/13/unordered_map \ + /usr/include/c++/13/bits/unordered_map.h \ + /usr/include/c++/13/bits/hashtable.h \ + /usr/include/c++/13/bits/hashtable_policy.h \ + /usr/include/c++/13/ext/aligned_buffer.h \ + /usr/include/c++/13/bits/enable_special_members.h \ + /usr/include/c++/13/bits/node_handle.h \ + /usr/include/c++/13/bits/erase_if.h /usr/include/c++/13/vector \ + /usr/include/c++/13/bits/stl_uninitialized.h \ + /usr/include/c++/13/bits/stl_vector.h \ + /usr/include/c++/13/bits/stl_bvector.h \ + /usr/include/c++/13/bits/vector.tcc /usr/include/c++/13/array \ + /usr/include/c++/13/compare /usr/include/c++/13/memory \ + /usr/include/c++/13/bits/stl_raw_storage_iter.h \ + /usr/include/c++/13/bits/align.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-least.h \ + /usr/include/c++/13/bits/unique_ptr.h \ + /usr/include/c++/13/bits/shared_ptr.h \ + /usr/include/c++/13/bits/shared_ptr_base.h \ + /usr/include/c++/13/bits/allocated_ptr.h \ + /usr/include/c++/13/ext/concurrence.h \ + /usr/include/c++/13/bits/shared_ptr_atomic.h \ + /usr/include/c++/13/bits/atomic_base.h \ + /usr/include/c++/13/bits/atomic_lockfree_defines.h \ + /usr/include/c++/13/backward/auto_ptr.h \ + /usr/include/c++/13/pstl/glue_memory_defs.h /usr/include/c++/13/utility \ + /usr/include/c++/13/bits/stl_relops.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/internal/gmock-internal-utils.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/internal/gmock-port.h \ + /usr/include/assert.h /usr/include/c++/13/stdlib.h \ + /usr/include/c++/13/cstdint \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-port.h \ + /usr/include/string.h /usr/include/strings.h /usr/include/c++/13/limits \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h \ + /usr/include/x86_64-linux-gnu/bits/struct_stat.h \ + /usr/include/x86_64-linux-gnu/bits/statx.h /usr/include/linux/stat.h \ + /usr/include/linux/types.h /usr/include/x86_64-linux-gnu/asm/types.h \ + /usr/include/asm-generic/types.h /usr/include/asm-generic/int-ll64.h \ + /usr/include/x86_64-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types_64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/x86_64-linux-gnu/bits/statx-generic.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_statx_timestamp.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_statx.h \ + /usr/include/c++/13/locale \ + /usr/include/c++/13/bits/locale_facets_nonio.h /usr/include/c++/13/ctime \ + /usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \ + /usr/include/libintl.h /usr/include/c++/13/bits/codecvt.h \ + /usr/include/c++/13/bits/locale_facets_nonio.tcc \ + /usr/include/c++/13/bits/locale_conv.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-port.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-port-arch.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_posix.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_core.h \ + /usr/include/x86_64-linux-gnu/bits/unistd_ext.h \ + /usr/include/linux/close_range.h /usr/include/regex.h \ + /usr/include/c++/13/any /usr/include/c++/13/optional \ + /usr/include/c++/13/variant /usr/include/c++/13/bits/parse_numbers.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-port.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-internal.h \ + /usr/include/x86_64-linux-gnu/sys/wait.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum-generic.h \ + /usr/include/x86_64-linux-gnu/bits/signum-arch.h \ + /usr/include/x86_64-linux-gnu/bits/types/sig_atomic_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/siginfo_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigval_t.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-arch.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-consts.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-consts-arch.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigval_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigevent_t.h \ + /usr/include/x86_64-linux-gnu/bits/sigevent-consts.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/types/stack_t.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/bits/sigstksz.h \ + /usr/include/x86_64-linux-gnu/bits/ss_flags.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sigstack.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h \ + /usr/include/x86_64-linux-gnu/bits/signal_ext.h \ + /usr/include/x86_64-linux-gnu/bits/types/idtype_t.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/float.h \ + /usr/include/c++/13/iomanip /usr/include/c++/13/bits/quoted_string.h \ + /usr/include/c++/13/sstream /usr/include/c++/13/bits/sstream.tcc \ + /usr/include/c++/13/map /usr/include/c++/13/bits/stl_tree.h \ + /usr/include/c++/13/bits/stl_map.h \ + /usr/include/c++/13/bits/stl_multimap.h /usr/include/c++/13/set \ + /usr/include/c++/13/bits/stl_set.h \ + /usr/include/c++/13/bits/stl_multiset.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-message.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-filepath.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-string.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-type-util.h \ + /usr/include/c++/13/cxxabi.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cxxabi_tweaks.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-death-test.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-death-test-internal.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-matchers.h \ + /usr/include/c++/13/atomic \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-printers.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-printers.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-param-test.h \ + /usr/include/c++/13/iterator /usr/include/c++/13/bits/stream_iterator.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-param-util.h \ + /usr/include/c++/13/cassert \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-test-part.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest_prod.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-typed-test.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest_pred_impl.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/internal/gmock-pp.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock-cardinalities.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/uio_lim.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock-function-mocker.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock-spec-builders.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock-matchers.h \ + /usr/include/c++/13/cmath /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/math-vector.h \ + /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/x86_64-linux-gnu/bits/flt-eval-method.h \ + /usr/include/x86_64-linux-gnu/bits/fp-logb.h \ + /usr/include/x86_64-linux-gnu/bits/fp-fast.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h \ + /usr/include/x86_64-linux-gnu/bits/iscanonical.h \ + /usr/include/c++/13/bits/specfun.h /usr/include/c++/13/tr1/gamma.tcc \ + /usr/include/c++/13/tr1/special_function_util.h \ + /usr/include/c++/13/tr1/bessel_function.tcc \ + /usr/include/c++/13/tr1/beta_function.tcc \ + /usr/include/c++/13/tr1/ell_integral.tcc \ + /usr/include/c++/13/tr1/exp_integral.tcc \ + /usr/include/c++/13/tr1/hypergeometric.tcc \ + /usr/include/c++/13/tr1/legendre_function.tcc \ + /usr/include/c++/13/tr1/modified_bessel_func.tcc \ + /usr/include/c++/13/tr1/poly_hermite.tcc \ + /usr/include/c++/13/tr1/poly_laguerre.tcc \ + /usr/include/c++/13/tr1/riemann_zeta.tcc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-matchers.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock-more-actions.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-generated-actions.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock-more-matchers.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/gmock/gmock-nice-strict.h diff --git a/build/_deps/googletest-build/googlemock/CMakeFiles/progress.marks b/build/_deps/googletest-build/googlemock/CMakeFiles/progress.marks new file mode 100644 index 0000000..45a4fb7 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CMakeFiles/progress.marks @@ -0,0 +1 @@ +8 diff --git a/build/_deps/googletest-build/googlemock/CTestTestfile.cmake b/build/_deps/googletest-build/googlemock/CTestTestfile.cmake new file mode 100644 index 0000000..1ad31ed --- /dev/null +++ b/build/_deps/googletest-build/googlemock/CTestTestfile.cmake @@ -0,0 +1,7 @@ +# CMake generated Testfile for +# Source directory: /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock +# Build directory: /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +subdirs("../googletest") diff --git a/build/_deps/googletest-build/googlemock/Makefile b/build/_deps/googletest-build/googlemock/Makefile new file mode 100644 index 0000000..8342cc6 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/Makefile @@ -0,0 +1,284 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/user/CppDevCourse-hw3 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/user/CppDevCourse-hw3/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test +.PHONY : test/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# The main all target +all: cmake_check_build_system + cd /home/user/CppDevCourse-hw3/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googlemock//CMakeFiles/progress.marks + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/user/CppDevCourse-hw3/build && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/rule: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/rule +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/rule + +# Convenience name for target. +gmock: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/rule +.PHONY : gmock + +# fast build rule for target. +gmock/fast: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build +.PHONY : gmock/fast + +# Convenience name for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/rule: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/rule +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/rule + +# Convenience name for target. +gmock_main: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/rule +.PHONY : gmock_main + +# fast build rule for target. +gmock_main/fast: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build +.PHONY : gmock_main/fast + +src/gmock-all.o: src/gmock-all.cc.o +.PHONY : src/gmock-all.o + +# target to build an object file +src/gmock-all.cc.o: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o +.PHONY : src/gmock-all.cc.o + +src/gmock-all.i: src/gmock-all.cc.i +.PHONY : src/gmock-all.i + +# target to preprocess a source file +src/gmock-all.cc.i: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.i +.PHONY : src/gmock-all.cc.i + +src/gmock-all.s: src/gmock-all.cc.s +.PHONY : src/gmock-all.s + +# target to generate assembly for a file +src/gmock-all.cc.s: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.s +.PHONY : src/gmock-all.cc.s + +src/gmock_main.o: src/gmock_main.cc.o +.PHONY : src/gmock_main.o + +# target to build an object file +src/gmock_main.cc.o: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o +.PHONY : src/gmock_main.cc.o + +src/gmock_main.i: src/gmock_main.cc.i +.PHONY : src/gmock_main.i + +# target to preprocess a source file +src/gmock_main.cc.i: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.i +.PHONY : src/gmock_main.cc.i + +src/gmock_main.s: src/gmock_main.cc.s +.PHONY : src/gmock_main.s + +# target to generate assembly for a file +src/gmock_main.cc.s: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.s +.PHONY : src/gmock_main.cc.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... test" + @echo "... gmock" + @echo "... gmock_main" + @echo "... src/gmock-all.o" + @echo "... src/gmock-all.i" + @echo "... src/gmock-all.s" + @echo "... src/gmock_main.o" + @echo "... src/gmock_main.i" + @echo "... src/gmock_main.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/user/CppDevCourse-hw3/build && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/build/_deps/googletest-build/googlemock/cmake_install.cmake b/build/_deps/googletest-build/googlemock/cmake_install.cmake new file mode 100644 index 0000000..6ca5300 --- /dev/null +++ b/build/_deps/googletest-build/googlemock/cmake_install.cmake @@ -0,0 +1,70 @@ +# Install script for directory: /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +# Set default install directory permissions. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/usr/bin/objdump") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/include" TYPE DIRECTORY FILES "/home/user/CppDevCourse-hw3/build/_deps/googletest-src/googlemock/include/") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE STATIC_LIBRARY FILES "/home/user/CppDevCourse-hw3/build/lib/libgmock.a") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE STATIC_LIBRARY FILES "/home/user/CppDevCourse-hw3/build/lib/libgmock_main.a") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig" TYPE FILE FILES "/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/generated/gmock.pc") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig" TYPE FILE FILES "/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/generated/gmock_main.pc") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for each subdirectory. + include("/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/cmake_install.cmake") + +endif() + diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/CMakeDirectoryInformation.cmake b/build/_deps/googletest-build/googletest/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..0929168 --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/user/CppDevCourse-hw3") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/user/CppDevCourse-hw3/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets-noconfig.cmake b/build/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets-noconfig.cmake new file mode 100644 index 0000000..9c24bdb --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets-noconfig.cmake @@ -0,0 +1,49 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "GTest::gtest" for configuration "" +set_property(TARGET GTest::gtest APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(GTest::gtest PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_NOCONFIG "CXX" + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libgtest.a" + ) + +list(APPEND _cmake_import_check_targets GTest::gtest ) +list(APPEND _cmake_import_check_files_for_GTest::gtest "${_IMPORT_PREFIX}/lib/libgtest.a" ) + +# Import target "GTest::gtest_main" for configuration "" +set_property(TARGET GTest::gtest_main APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(GTest::gtest_main PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_NOCONFIG "CXX" + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libgtest_main.a" + ) + +list(APPEND _cmake_import_check_targets GTest::gtest_main ) +list(APPEND _cmake_import_check_files_for_GTest::gtest_main "${_IMPORT_PREFIX}/lib/libgtest_main.a" ) + +# Import target "GTest::gmock" for configuration "" +set_property(TARGET GTest::gmock APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(GTest::gmock PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_NOCONFIG "CXX" + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libgmock.a" + ) + +list(APPEND _cmake_import_check_targets GTest::gmock ) +list(APPEND _cmake_import_check_files_for_GTest::gmock "${_IMPORT_PREFIX}/lib/libgmock.a" ) + +# Import target "GTest::gmock_main" for configuration "" +set_property(TARGET GTest::gmock_main APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(GTest::gmock_main PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_NOCONFIG "CXX" + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libgmock_main.a" + ) + +list(APPEND _cmake_import_check_targets GTest::gmock_main ) +list(APPEND _cmake_import_check_files_for_GTest::gmock_main "${_IMPORT_PREFIX}/lib/libgmock_main.a" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets.cmake b/build/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets.cmake new file mode 100644 index 0000000..87d056d --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets.cmake @@ -0,0 +1,139 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8) + message(FATAL_ERROR "CMake >= 2.8.0 required") +endif() +if(CMAKE_VERSION VERSION_LESS "2.8.3") + message(FATAL_ERROR "CMake >= 2.8.3 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.8.3...3.26) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_cmake_targets_defined "") +set(_cmake_targets_not_defined "") +set(_cmake_expected_targets "") +foreach(_cmake_expected_target IN ITEMS GTest::gtest GTest::gtest_main GTest::gmock GTest::gmock_main) + list(APPEND _cmake_expected_targets "${_cmake_expected_target}") + if(TARGET "${_cmake_expected_target}") + list(APPEND _cmake_targets_defined "${_cmake_expected_target}") + else() + list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}") + endif() +endforeach() +unset(_cmake_expected_target) +if(_cmake_targets_defined STREQUAL _cmake_expected_targets) + unset(_cmake_targets_defined) + unset(_cmake_targets_not_defined) + unset(_cmake_expected_targets) + unset(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT _cmake_targets_defined STREQUAL "") + string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}") + string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n") +endif() +unset(_cmake_targets_defined) +unset(_cmake_targets_not_defined) +unset(_cmake_expected_targets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target GTest::gtest +add_library(GTest::gtest STATIC IMPORTED) + +set_target_properties(GTest::gtest PROPERTIES + INTERFACE_COMPILE_FEATURES "cxx_std_11" + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "Threads::Threads" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Create imported target GTest::gtest_main +add_library(GTest::gtest_main STATIC IMPORTED) + +set_target_properties(GTest::gtest_main PROPERTIES + INTERFACE_COMPILE_FEATURES "cxx_std_11" + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "Threads::Threads;GTest::gtest" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Create imported target GTest::gmock +add_library(GTest::gmock STATIC IMPORTED) + +set_target_properties(GTest::gmock PROPERTIES + INTERFACE_COMPILE_FEATURES "cxx_std_11" + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "Threads::Threads;GTest::gtest" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Create imported target GTest::gmock_main +add_library(GTest::gmock_main STATIC IMPORTED) + +set_target_properties(GTest::gmock_main PROPERTIES + INTERFACE_COMPILE_FEATURES "cxx_std_11" + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "Threads::Threads;GTest::gmock" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/GTestTargets-*.cmake") +foreach(_cmake_config_file IN LISTS _cmake_config_files) + include("${_cmake_config_file}") +endforeach() +unset(_cmake_config_file) +unset(_cmake_config_files) + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(_cmake_target IN LISTS _cmake_import_check_targets) + foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}") + if(NOT EXISTS "${_cmake_file}") + message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file + \"${_cmake_file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_cmake_file) + unset("_cmake_import_check_files_for_${_cmake_target}") +endforeach() +unset(_cmake_target) +unset(_cmake_import_check_targets) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake new file mode 100644 index 0000000..7e87588 --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake @@ -0,0 +1,23 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest-all.cc" "_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o" "gcc" "_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make new file mode 100644 index 0000000..1811c0b --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make @@ -0,0 +1,111 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/user/CppDevCourse-hw3 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/user/CppDevCourse-hw3/build + +# Include any dependencies generated for this target. +include _deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include _deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.make + +# Include the progress variables for this target. +include _deps/googletest-build/googletest/CMakeFiles/gtest.dir/progress.make + +# Include the compile flags for this target's objects. +include _deps/googletest-build/googletest/CMakeFiles/gtest.dir/flags.make + +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/flags.make +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: _deps/googletest-src/googletest/src/gtest-all.cc +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object _deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o" + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT _deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o -MF CMakeFiles/gtest.dir/src/gtest-all.cc.o.d -o CMakeFiles/gtest.dir/src/gtest-all.cc.o -c /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest-all.cc + +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/gtest.dir/src/gtest-all.cc.i" + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest-all.cc > CMakeFiles/gtest.dir/src/gtest-all.cc.i + +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/gtest.dir/src/gtest-all.cc.s" + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest-all.cc -o CMakeFiles/gtest.dir/src/gtest-all.cc.s + +# Object files for target gtest +gtest_OBJECTS = \ +"CMakeFiles/gtest.dir/src/gtest-all.cc.o" + +# External object files for target gtest +gtest_EXTERNAL_OBJECTS = + +lib/libgtest.a: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o +lib/libgtest.a: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make +lib/libgtest.a: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library ../../../lib/libgtest.a" + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest && $(CMAKE_COMMAND) -P CMakeFiles/gtest.dir/cmake_clean_target.cmake + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/gtest.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/build: lib/libgtest.a +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build + +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/clean: + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest && $(CMAKE_COMMAND) -P CMakeFiles/gtest.dir/cmake_clean.cmake +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/clean + +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend: + cd /home/user/CppDevCourse-hw3/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/user/CppDevCourse-hw3 /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest /home/user/CppDevCourse-hw3/build /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake "--color=$(COLOR)" +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend + diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean.cmake b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean.cmake new file mode 100644 index 0000000..82336bb --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "../../../bin/libgtest.pdb" + "../../../lib/libgtest.a" + "CMakeFiles/gtest.dir/src/gtest-all.cc.o" + "CMakeFiles/gtest.dir/src/gtest-all.cc.o.d" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/gtest.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean_target.cmake b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..e2ada84 --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "../../../lib/libgtest.a" +) diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.make b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.make new file mode 100644 index 0000000..71b2ee6 --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for gtest. +# This may be replaced when dependencies are built. diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.ts b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.ts new file mode 100644 index 0000000..32ab1fb --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for gtest. diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend.make b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend.make new file mode 100644 index 0000000..37ac348 --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for gtest. +# This may be replaced when dependencies are built. diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/flags.make b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/flags.make new file mode 100644 index 0000000..b7e525e --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile CXX with /usr/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -I/home/user/CppDevCourse-hw3/include -I/home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include -I/home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest + +CXX_FLAGS = -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wall -Wextra -Werror + diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/link.txt b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/link.txt new file mode 100644 index 0000000..f259488 --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc ../../../lib/libgtest.a "CMakeFiles/gtest.dir/src/gtest-all.cc.o" +/usr/bin/ranlib ../../../lib/libgtest.a diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/progress.make b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/progress.make new file mode 100644 index 0000000..3a86673 --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 5 +CMAKE_PROGRESS_2 = 6 + diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o new file mode 100644 index 0000000000000000000000000000000000000000..674fc0cb6a12d13c069bbc87a55e9d42a0231a42 GIT binary patch literal 2076024 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 QORcM@i6XM$l->jxndEF%c_C*PZBeL5}H7 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 ^2B%ANKygqG& z``ocZaX){167F-y&cU5;KfE#bdspB-?`Aq~ow>OA<+y$L5Vvoi;pS@|koCv=@TR!W z9lIlVJl}p0*44CxFQd)~K0o$l!hg%vc`ej0ePA}u^4zyq2_DC@Amn#Qcr<&Jx<;_OK|IamZu~dj zAC~o@8~43!aMwxygkOhS|7P6r+=iR4et0$>pX;=1!kgee*QqV;bDg^4KG&%aemtKa zz9x7)zs1*CZAd&wN_kD&nxjKJ`IzN$j zyXB6^`fr^o!DAn4*C~#F2lCe01NU{`k+}8S^XG@mm}B_}vfp_-&4R{GJ>L+?^^QK`5kv%ZPOy#U)J9~ zcK_x^t{ZvCrqkBf=Hdl@ z-{5ZdAKW@MT4sIr_^N|@JnoE}zZ|y@qk_lz?jHJl3wh^zC+_%{=jz1gyM035_c_ZP zU7T0kZv0$C#o+nZn~ih%_;4WkDGrXc-)Wi?*bN( zcfQ}`@^QYuCh~QT$<~kaZGbzTgK@{-3O9cWZvI@{{H?*`eBZfs~_)+9w%@8=W*-*l&e#=*sf9= z$-5ux9$yT^dByvp2Ep^!ueP~-{J!qf68Yh{`~61T@lV0sj}PJI=iuh&EpCz@VMR%i?6fDyFUBp^6~q1hb8h;bNSfM2NU^axc&SDcfQ}_&UXWDe(Mvm zKA5kGo8KKbe-Li|G~Dy~jlpA|fNhggS%BTjwg=K8#8DoP;mIeLrd??)z73aksnKDOum#@7v(!_rT2` zfSW%aH-9E>ejx6=hT+a@EN-3qako1gH@^rs{~m7s2i$S~fjiEvPtE#lot<&FyAN*u z7~K3RxcT0=;~a=P&XKrv?!?{h4BY%Y-2B_P`LA%t`2+4aH#=?9{j80<-92!(djxL& zc-(w9+;R5C9p@Feb#BMq?lj!|^SJqixcN_T$N3fRIM?IW+4l6T&u+IKZoVmQ{utc+ znF$|=JN{v~;~$G#|9;%@%*M?x!p(nxoBuK4<b49ska_^_$_=ISRMVDY$id z$idZvJcB{GYh_Z8~nc&oy!9wHI!k7P#9z0XN?RH$MnB zKL$5H1vft%cYi&PJFmsKb=Kf+_ZQrJg-%&N&DX-s?~9v15;uQ3?!3;%o!0=|Iyc~M z_YU0rwYc>sC444s{bzCO zzlfXPvP;$e-_|Am+({E zac*{2alUb0@qOJ&!SnB19*q0C`)J(poQ&Itb8z$haPwExIN$hO!j*~qX6I~rzLjyu zUk7*md*SAr;pUGDUKpppXYWbg=MoObo$oa2)Gw(OpG){yBL6<_{{0en{J-Lkzs$K= z-^^FR&DY2O=I^SG4j%VceE#4GpL!y~wTcosLm5I6rG?(aJ)o>%N!>`(lCN6p~*>s<@n@wdkvPZ!+rT!5Ru z6!-TIj|Pw9jK6o7L*D(e8h4yO;BNOH+;LVoKU-Jk560bYr{Hm%@qPaD6ZxBQ$2kRe zyEAadIR`ht05|^)?)&Y3;-1Gg@4o3i)WLmUy)o{1+9&)<+;QH4dtZ7N?tSbm-0i-R z@Xv9#`vY#B@;$OXn6HnUKNvUP3OC;cH$NCRKNdGX88<&0H~%JX{tMjvPq_K5dTzQu zJLBdL!L5HXZoYTIN8r}E8Mn@ZxcOIb^Y7#4*Wl*=!Ohp~mG#H`KDhZqar37nybo@j zOL6OrP5Aw|b!Ow%S%jPa3^)IK!Yf~}>Hh47dmd79+=^XK-#W1av1yghmAG|uJY=V_ZI@-1`u?%}?reInllf0X;}zW5{f zwYbl@yA}62YYzpF^Nsh>`y^lcaN z?w5mc_iu|_or^-9cI2&dHg26>xjI*eI)lht=X%^a<8yUJhB|kWx6W+bI&*V%ZVz=9 zlDE!s-2JjT;eX*iS8k^Zi~B3?m$-iR4qmt~b-PF5j=ycL&ZIE@)5u%ryj(tRw_hTE z3+{HOL$)JwIQCn}0ue z-0$)8v0sq)e)|{P>(1W&vOc(94hkOY$M+SFBJX}_huhCSxX+`x7I&Nv1drQ|?<>wq zcug!xsIsKA5kLo8J}p`?`+}9>*X5&gEqC&i69h_hGKX9nT%OpFDC>{otb;qwy>Z8RDDLyr&Ium-7XMD9H+jc% zEADvi#vRY&xZ_zGJZ?As{lZ7&-R@QcHrbt(mq(2@e=gpO&lxVm{r>HrgU9*C`;EWJJDzPW-gMu# z4<75p&mZne-a5zN_Wz_@op|4JCVA`h#9b$Y535$ao5#4+;#OMZvMC-#lFSkEv&~VY@!p>0$Cd*J&~N`X&EPe16mW^y>RnGaPv3e_HAPD*td8;d>?uH_AG9ldAU0Aet0o?>ukV%u2$JAvg6d( z^}7U*aF?s8^$F1KDzkvJROL3puH4%4x-h=zxt|xKxujAd>?#keCUh%&AbMnsX zSKR*pldBW&tGBu`>!)?91&`aE65emDo5=5lyWW~5ya(<&yb|~RWEAfG%p~0H&cdy~ z2sghPH@^`#U;V1AZ{{1}=3C+B&%(_Q#?9Y^n|}Z||0Hhy&4hn}TjwX-I^~9Eeb9GE zcoW?EN8;8w12^9nH$O7rQ*qbTbli3IFmAr=)y4V7<09TCR}P*(pVz@1|6#d0@jm%j z@*a=!-|h*?!Th;I6|xaG#sg9{0HbopHbC|0>+=-j?u3 zamOJ_53;R`u_?yzuWa$e?H;!E&Jiiwk}m_!#~BJqwyB3pWASs*Kl9(xF7Ed z_y3QRpU-*wRlE$6HdT&JEdot+Ri^k4gAhxc%&o+y9}s`4@1%_x0`I zv2XEvUq2%6_r89E`@OHfO7sdFNJ5#AF&faCODd;s}ZgXjCRguMOv0JlG1=IXQz{rQo+^DTE{HZSj^ssxYY ziO+r5fxLD0!>w}|Za+^=cpu#3ZV>KqItsV`ow#-G$F1`$Zk@Mr>%50s=R4f|L1X`W zoR%&A&r(MP&%bVJhkJb)nDEiK+Z~TP&I!2r#rRRI+xPKmtlQIX%GS>g`15!jyyDGS zemLG5zY4z^H~#`|{$sp4b+#CnZMO!#L-4{n->l?6EerppPwoeh<7m^;_ZQ+u=RP_r}c+#2x=Q-26n`@jru` ze+hT|AK~V|#2tUx@mb%@SHOER-v+q({qPIOpMaY`9q&W_V%+@Y_=V&r3-J0FDBmvw|;Yc0PDFUZvI?+Ao(kC^P})Vw zzZf_FF+PNR>DxBlpDOq;^84V{Z;D?+{tWzJyeEDcJ_<-GSr@WS{{VEjMh=i;R&X6s=x`@IG}j`=pgy^q~DcwxKssDB7Ph5D_i zGZjAte}L_F!#ATp190E}xf{1{a}xeKekbGk0(U$camQ1AQr1t$(-60BO>pnu4#v%o z!M~volks~P{{#5l_?rn|jl11-xa0g0H^1}b>^M4&^{`j)!f`YcKZbn$l7F^5ocB&3 z-<0{Diw|L57vf%bE}{O3Z1)=SQ}EH`r%`_@dFww-zA*k@!uVe#e;;)|z=z>wrey0! zuZ7#^`ndaLH{ATGct`p<7WeviCq9P$Jchge=i_d7v#HsGuOa_G`~& zc`)vJXoI^R&ct00eR0>rRk-Wn7Too4AMSd18h1S`#9a@oaM#1Pxa;8`-1SiT{;Y4V zhq}1yp)u}yI2?C9bisdPzx2gDe(%Bkz4i;i3+thN$$#SaG%g^&H|PJqa{2i8*PB0( z&DZ?y!DIdSxxW1p`P1;TI8M9b$8cPaO!!pX^*fHTW22b?`@ah z_Gf*_OcRUy4))|9)T;Ga&9+-%mUlF{p-_PMZu!g+vE0&*; z&G%Z4yWMct`Tn@;yc0f>I)f8_J^m8ooP_)P-1~9+HY?$81dr=KuIH8HUC(Q9*Yl6L zI=#a>+(6!SSm}|hpRVVc!Q*)1dfu75b@szuKgZ$r;jDyTin~5<#$7)XaM#;oxZ|0R zTjwp@I-ld_n>?EJ?H1O<5%?dR58LARavnP!|C9V#!3+KGNd3O#UFXAa*ZD|%J=?tl z_jSrN{4d7yBJO^99k*|-9?SaU=QGd1H&TBHUb;&5Ilu{c8T?s%GkiW?3V#Q89e#@Y zd6hDcXXAG~wehmlZ-j4-AA!4H2H-ETU#8*q?XlqTcx)IxhxRP_y*Q68z@6_3-1+YF zL^j_o82_<&IlL!c9v_ZxiBH3~!vBXaqz@nCuj5r_X5)1K?uI+x!*J(&D(-RJ1$R9U z#$Eq6;?}thx6TaQ@yx@mvk14&+qn7Ovx@yGtdn;+Z(J9=@P6rfj=LN2t=TUR;ohIm zr+)pCTAjl>T$1x)!Bsq`GbruINjK2$B=E-cnH{g}lK-#dr{1&Kc3sa+anJKd;9eIx;I8Lh zxOFbVtuq)me^cWVj ze3Q#p+$r>jynlyP?)j__N3;H`1drpa66)+gzB=RFEtiki{e8*TAb&_Mzf-8+iu`uu zPsfjAzjVX>e8^zj&kJ3RdtDe4JkEEoFrJ6WdmPOq?|OTdyz6Zq?t1$Qcb)u9{lXH7 z>*R0pu9NaF6!&8sf9(IZ!3+0$_J7A*KCY8J$h%IO;jWXGxjJ#3v?uR6IU|>k>$w|w z*YkzBd|W3($h%H%z+ES|h>uEW8(e2-9n zIQh*uzm3l2Uh)^Cnmzddf9^Kt83 zh+F3>+;QH9TmKQ<`cLB4Uw~WZW86AxaO?bqJI=~4XMMK*Zn*Uu;nv?DH{S#IzH|ic zd39{?xNe7q^U_4}|8T!F1NZOZU%_i}9$tz&-%oMZbNN>`-JiO+^W7b{KMis7w+8?J z`G))RDdfHHeKD7h=i&b)@>{=}jo*KZQPjh?+{9N4ceI1JX{=hig*Hic7Rd`)C zAFqtB!vDwhXg%)p4Xe$|=IeNN#vM=N;IaP|LjRkQ_kG=C6Zw-9`5Wv8+J)xxX~|2dxokMnvWY_~pnx4RGS^GT1))#)7O)h6e0UZ+#X z`rUEsUyeJkTXFaA6x`!|F79!?0{6K7GI*gs-Zy?n-uuRlxStoQ_4m zBR^MjU@qUNUU8iqnaE#)`?;EtxcATZ;$BA<;GSnzB>YR<^VM&73*J{L`^KjGP&s(M z4?E$`YhT=XwZi=zR4@E+em^w?ugCd(6mB0T1&_x|+%MC~yC3J^j(-8}_&>z`yi@5# z+40+(@o$6g%=qi#j=w2>3)kz`xZ~-JAIf$wz^#8N?)#kA;TzcQ9k_MoC;X#?|AxB` ztG=1_&HdW|ce_X7_Ol~y{-T6mk2~LcaO=#$z5c$8d%d2In?L@oY`%UT;B@>Vu1DK1 z&hq}guOYr0>*`qC@2NWvx6UBkI%9FK?|0%}-=Dy}zAwPt?o#|M?khgVJ^%lNd;Z^g zN!B0x+y=j#ex8aiVY?UOZ{uTe`}rpB??b=9zh=9C;*N8dx3ls4y-fSzlR2)B3|=_D z-MVGT_k9#EJEhu^_wPUl;LG^E{8Z?@fLR?(yD{eFNAcp*PIe~^4|2Dx3_5D2m4!ED^-z`_CcDaAcmfDxRpTj?d{3`m~ioBomKY@Hah*Ss@I}aV*MRL{i?wWy+64OH-8;&{?UZb$DP+(xcl)_-1>jw)+zmQwjZst1#Z4I-jw~= z8*h&H$M58Lxf*|r*STZyX4ILL@Yiw2`3~;9R^aA;#vSK+{0YWc@ssSlQNLsj?H|_3 zcDVOrb%Phyo9{z5An*Ope&jvB9Y((JJ(=;kS@+XyKl*yGN$|M-4-4Zwocu`M_c#;x zb0$M_bxsR)Mvxy%ojY;sJe8}{C)9bFyx$MD4EOUVpW?pW+~TvW5BiR{`+Zm3b&%&X?e>=U)?EVRg3t zU2oNJ*Lf}6d{f-_Igh|^tC;=0-f8#)-0z(oJg(>XIq+WO8{$WVMZ^m6e6L8ntRNVXrxaY%iUuJ!1Pyctu_hG(A}{y&4~$G^pztUr#wI_~)E29I^R zg+4SO@9Vzicsu&v4tKt%=jz`W>USk?{fqIR`8~yzxjK`=b0TgaZ=H#_eSQ$P&(GkV zSHHxq^EYmt8ee7oH{S?1-wJoTXW||g=iwely>Rol2QTd3aV5t^$^ZNJ=U(!j&mYG9 ze!r#Esb5lIeAtg4k@vju8*U%Ue4X{j^GQwI{NA|vqjBeZJZ^u^#m!H}?Zb5Z4z6o2 z;vHE3Z{v4y{wecKHs8tk9tl4jcbu(p=hYTBe_rsyem{kA_95?e?Z!m@Hu9%4{>6AV z>aW2)53k2PkJVk9^`|R!`X+o-!tYM_leptt7CfH!%7*p)DS6MIKj5A}|H{|dr+9pA z9^P;++z)$RsvJCSclVIrK9S!S|B!WfNUqK{#Wt2|Mc(b6f_whym8%o`Fqpi3xE8k$ zH|6TI4D*^q-tjzydmWjBdmVWV_x!L7cV3_4?)Pu-CamYbao6Vo-)8G`A^quFiL%&S&J^?vJ^Azpx)SB=TE- zSL{#h!>Ew25xlVet=|ZDKQ>EvtAwAD@NNkoknrINzZv(sb2skzr{jHCSFhmbaen&| zcioo%K3i{|&$q!n|L=@Do)WPNjg z)x{nEfw+A*47U$0aPvd(UhLm7xcR^E^T}8JF&qDWte@R*&r4_Go|lFPkH=#?FO4DZ zdFh^9KAx8zA@A|~N-iJIOK&Ff-{PK^{>jye=cTQF%KG4TYXy(<8XwLxyCm}a=koEq zbXX#PD(*TtH{lm1{IZ0PPWYsRKa}t}xa)i&?)cxrJuiKOyFP!xeLtk!&)I&l{tgM> zH{r)7{G5ajN%+kPe-O7nb8yGM1h)?>anA$gf64mb_k8Y(`+amxg2#3Hd|0=KlW$o$ zd*AFF-0!0si1+5aaV74&p2e;6CT^YgaO-SLc-3FCKA7J<;fLY&xfO1o+u-JJ!Mo6h zPjTNb`aXE<|LdXuf05su{#W=do7b7t-xc?BagBq=`tkWS&B*(H__6r8)E|?pvm%W1 z4)Pb0zbBXfIpiN9@4QywK3C-%-2J#QSHJAO#n(0E!v|vu_jNbYx2nNoAL4j+B=30I z;Etyw?s)p->NgDIxrBUQ`ZGM2kK-9b-tjz#JD%5Z$MYxNkL}j{BU?ZH@dNOS@D{;i z-#YJG>~lNv&g=AC{)Uk6O5S;0fe&E2H{;HCQm%en&(q1fo*&QU?+D|0j=baf8h5*Y z;P$!PpIJZk8u&owwP*0y&lzDnO~?--e^@U6amXJ_-tl+B&!*0mxbwO`S3maiR`T}q z&RjnB^C9w%XC>}-*WmW;w}fx~SFz8rZ)L;l#G1hi$Gh(X?2h|Bz`nUU>q0-9llOgq zHn^`-y5YXBJ^(+J{tw5U?;W`BuilTFUy<;i5?*orrq|~l2|ps?r{k{Yez@ZtmGHZ8 z`}quRoh7*a`3g7x5AJoj+=i?VUdJoo=8waDAGI^?`>1{K)7bArao=AZ9=x!gFDc2F zyrlZ~XHFu&1b3V(ap(0RZobyWtPkFw9E|s1{Ab`p@jke(`=;T(?pqi<9>4K*-!k&P z?)y5IkH`Bj~W=V^lby02BPPJG>WB6+uab}rv=zv6zpAd$Z` zmyfUeu1Vyl;I8ur6aM7?v3DonS5Eu?|1%dMGKA1Xp%g+(~^Lk6T`orL($lJMr$9Wg$(WU6UZcc%F-FyY^ zeeZYR_UkLS>-_KVlZkWrMJjpg%KhQCaMzQ41CRZR>&ap0T~AI*^f3=-qIX_TPV{j- znUc{z4R<|xJ@JX_$vpJ7`%R+n9@dlJGWt~(t>n%8H^}e}GrVnvcggTQGyGt<^?wZ9 zIFE9APHu*8%6;`m;qI?~f?Gdp zFHx?yw0_nPyvV2Zvvs16^|K>-$8qmOAM5AfjQ(`E^)oT?iS=_0dfUA-(H|A+=i!Wg zW}=V#t2Z#dj!4p|0>-2Uv{ZV{;mIw126uze(6tK zKii_W{<|moSpR*|TZcy``dI%XGx|&5*8k0kPptoY(cA7*iGFmb|CclR_fmbh@A^eX zzhw1FKCPb>GkmQKZo|%zH5dbmf@#l_$3*B2i!bA1~<;xaQizCZhyar>$CjQmAu(* zW4Qj!;re%g>%V)3ADZDOXZXYnzdgfe!0p#;xN&|1x4%Eb?eB8SRPv@z!wheg;oUNP zK!%@?;o~xVD%?CwgB$;AaPu$+ZXUjd>$6nNKhICy3~!m?T{3*X3?Gr<7r@QKm2l&~ z4{jbFg`0;b;p%HITgijh*~W0MvwOk4&W;MaaPvBQ7J9Fx_PPxZ~SD!w=8!<1+lr z44;_cH)Qy|aO?AFxbZ&^_c}Wp?&lNd!5b}Cd9L6m_|;s0YcF4^Tc5*h6?h!qsbRdf zL2n)Qhg)w$6Q8?-&j}g*MR4owX1MveFT(T0B*bWYgO`g4f$*aH=lb4 z9`iXp@;Tg}eVb8Seh) zy1u4gU=BOkN(5)c@>}I;5RTYZiC+le;(eI`+mQ| zoi7dQlmjdN>3nGxczR#DL!yuKr7L>tcHcxF=gVOk{h4s*%jCo-&X+0ZZTFEx-*}T! z2TQMKGx|^A*3VBFUSqX#-irLFuan`8GkmiQ-xhA2?+UlwJ>b^)kid&*i+YZA_%wR! zBtEfDu0?OV4 z&+BK^z|;C^n&@NwY>wV>?2_nX{p_C69}TyD#w0$mel9|9yEi8K`$PTQmC?TfcUcj2tMsVZr1a}?o2KWBJ0dRee%kT>`{H6?lJj374@bBREcgco-o}V@0_IDk){oN97 ze|u#3AsId@!zX0;Z5jRy-2T1^H_or&_V*{a{jJsL&-2zK!`o$euM8iQ;iEHr65Rey zh1=gJ;P&@#u?pr=V@BZQU zL?8DpOE;i7&lBg4mM_;ne6cZNR! zxBg#)8|Q4e`<80!Rq{NQb9ybfb+Q%QI_V#H%zu1NZyWK^P$b#fMZ$LoqjAM50% zjQ$z8b@E2y6YJ!C^tStLqFPU2W&gT? z7w0MU8z%brJJ+o<`kga;uf*rU(z6c5>!6JOqzpd`ZvMw-_|+MHM}|+&@Ru_DUAT4f zE8O|MO4D-wi#*FW$?*Px$MK5wFc7`Qc<9kJ-?-T0bri}j4L?7$nxs3jk z4F5gxX%*IorJGgqW1Q>5U6-~FJmx3*?1)~U1L67{mGL70{ z44<3fUuO7k8NTd>l{_0~-3;F#!?%E2|2x9<@15cMXZR5KMOn6`zMs!sl(c`fuRsS8iU;bF9z!xvhGEr}wX#!u{M2<1QqL2HWtuy+) z;m+S95}&xw8G+t);EY5cKaX%>Mt@bR51&Vvn$bTAcidmj@VOcOWrqKj;mdAR&VP|- z+pU}78^Eo@E#dmKgS%ha8}8@Aj)MC+h121FPT^AcWz_Q&xbfVd;U8!CZy8>D<3G>a z1{uChhVPl-gW=|R6x@D|hkG8M4EOwg2V9@0Gki{lf1lyYZ}R8)X`JC(!|m_RaN|4x zZhr^D?eB?jeJ;%K8#4US41Y7jzsc}rT2}I7e;dN>*9LI=wH4fc^~mr;GJI5qPss4w zGW?kge=oy-&hXlsR`O%NHh`PAE#c~WWcYv#9|d>+FafUrZE)k60ayP{hJTmg%Wd}O zd002Yx61I{GJGK1_>Y4d|AlbZ+neC(AJ6c&;MV#3aO?aNxcW|;SMuZi#=YR)ZyW+Y zi~EWr;ETa8gI~k>{m~467w*33=M1masvLju&*J{!7U6ufM&QMD`ElZDk?4B{{g&w6 zxAcO$|2Z)6sTIzHN21r~IJo=O)8UT$g&BTThTopyk7oFb8U88!D#oi?>q?y*$a8?J zz^_K%4DPrO2t1Bg{5`27;r^b~G5FZ-Xt=*KJ_+vkFWmw6`|X|XN- zSZ~LK`dJok{3{1u)S>Y=gd6{saO3X=H~xd*CldcjaN|Ea@S+#Sc_F-*N5_YLU5?MM z%%iD^etgj1hu->s0&e}k1h@X@WcVsuR_ajw1{uChhVPl-gERb$44({lUA-ReIy?>T zxV#9j&OG`UuK#?v{!6u~)#5le`mP)@0a06!}UKNuK&q!^$!GI^scDS zcz@stxW6m+JU-65U*Y~P=SpqMc`N>@Pu;+a`Rjd*P2rx$cZB=X+;Rq9H8lfcuwHHR1Dbz@i`w!p{rq&wXF^ntrh zo&h(`%ixolM>oLTm%a|S-T83GWvQ(zc~IW~UY&NgfZOgaaO=D`+Xde+Zp#d z?aFZ$|8%}=6nIh3f2dpduEgIPZhr^B&Cj`T_1D4GKMc2DPr=Q@b8z(y+W)b?4~F+m zngyQrcYCXm=3zhhT=F>vZl15q@CV@a z`5gC5ctiMXxOw;pZXOl{Ui7+H_hyCbPPJ_-d1!|JDsacKA>4L5!EJXhxcZ@R^E?vn zxSRx6KNoKPe}wmDT$b9d+~1goxE`(;c(EQ{&AQYS?t0h(?zrp(x4(O2_%OKV`qSXX zKQ8bX|C?bPuRw47)8L-dpHF;Z9^OE2f4|M}rMIutk9k-HZXOzB_=XwYHp9DQ_`Y!K z_IP+>>U<3RM8$5-H`EnTC`E?{*{iE@J;yaoIoe71xC#(4FCJMIU;&Ck#bKM`)8FNEuJLxxX- z>+>4iJkNnUF5ke_ciyp*PtRZd;Pn}=;c$Is!@W+;hwHO==SsVc@!u4#e^0pky#wIJ zKRLs{hVM+fb-PsJS%-Pu9KJjHE#Z#K_V9bDw|;Q-Lo<8~+&o+WcYLpftA8Hu@4vqb zH*fRd=DAbXN`9JkA&Oq z1@LM3yas<5{ux~Vm3FE0%Xk{W)o%uW1pgi2tI^+m;O1u-d=>O(Wca127|N5ZZD$#8w{ zg6lH_uFpL91p50k+Sx1Wrw-o>yy)GF zB_8L?V!KxQ>wH-S?s%;Se*^!m;jh9w!(WE)4mY3u;pTHRT%Swe`rHcF=V|y$#Pbf^ ze0~f!|6jn>x7e+cPxHTd;A#E`qIbTW2si&1z|H^laPxmB+`K&kH*e3u&D&dW>v`$j zEB)1fZMgm|;re%h>)!|NcnyY||6}2f*9ma-kH9~m9-a!k=-r$WkMreY^v;)G;Evbw zy(;=KmPD`9BA4{wKoC+qH1>c01g>Jqov;zk=((#2%GA=)XE#|Bd1L zcYr%yz2WA6AGqUn09^fjaL4PBz|-;i5&dV>Pt83m{dK(7hC5!H!X2;naP!#}Za#a% z&F28P`5X(^|9ZIo55e_+4X*!(aL4O6xcOhQPbF`T*D`SRJHfvr|GNfWxP4jTaeW(# z-t}!X-0_+K{~rHa;NQR>fX|0N1vj6sz|H4RaDA5VTgi_;jo|vUfqz9jJ>ceZPq_K- z2UkBCZvL+eJk9@H^saB;z|H@XdsX^t{_Dcce-pTQYY8`R?cnBZXSnq|0;E8J|L5S2*ZXku|2f?8`Wmi&`@Jjqbi8&7JRPr7(7V2kgF9X~z#XrL;f~j{aP#>( z+Qy(`|Y z{3yK7^(Ojud{60n@LyR67QnaV{^#$B|Chmk>3u5s9L;kJb>aR#X%o1=r?~^%JP(4a zKMihv&W4-M$#DJef$Q@yT%X6`>VJU$PCl#eTgi`nRrmz-!{LjrSovPr^We7o4P1TA z{*`vs?+9Oq`zQV3FZ265N5hvOo(lqx^|m0?!{z9gL_ZC_6#SRO=a=BK_I{Q4)pvzY zpgw!UXVI_2;Lev}fyelN5ABXZzX9Vi4({)pPfmPR+O#zJO0OyCtJB|y68)xi%KFC> z-YNLZO!!WL&%%F6=G{E_p5)=D#HUa2S!(}Ep5NpBg;n4m!5hFogl`CUer*AF{%!|v zi%)NO4e~Y+Zo8x4wmS}PyHnt{J00$PnE`hlcn7Y&;{oM-#=5#aGNZU!o7}+ zNqi0|{>9SkBJ@7Da4X#BBBp12o=30G2XLQ%_#xx7*nyS$@%e{ZaL1)?hBwLZ%`<#| zxOp21cU(?^JC5Vv#yKU!AIb1HGJHPVcz%Q%&u?(`0|xwgT^$#AT32Vn&CgA6&pVI9 zt)Eu{kM$hua4vf5=O?)Jv(!PAIx)|+Gkom~?+UkH`@_xKVQ}+&0^E4UX883P{xIBj zpMu-&b8z)d4*ui#J{;DKjS~J$;9Dg8mB6=2_?*Cd1YXpMzpJ}P;Om$8H>|_^qyH9u zG~C~*KQZuFC+$ktq~bLuqrVD1nd{draIatY!)^ERz+=1d^W!gM^l!l(_eBr+^ZHy3 z?s(OQJHG3})pvrM|D6L*^S=jr^M7dIMYLVnpA13&Is3Qa@GaO6Jc>_oUWogFndtpp z=Gk!L{~+->XR~6|t5uti-tk)O&`O@=%LX3DabobPlhHSV`}=nr!hO!aBYXw+6@%dV zoCbFs&xSkh*TSol=ZE0>JOS5d23-9LhgI^n67jDCuMOWAZam%L`X3T_(Ms_>>S4QB zZ795`ll#KBTmUch;r3LuOW}q7k)WRi*Z=##i*?C(8V@Y@H^vkFw+lSg9|^BR9*%>r z2A>LF6+R8_dFK!Z+{!+MkyBcm?-3M3yY2Y!> zq5P_SpW#ams`R%m=dYFEZ*#q90=M1m0#DoRk>UOD@$)Z-!L9RQ8J{WWT_0w^58-S}wr};k%%<_O8+RmzDDnTs>P42V{IxN+VI??k(E;Of7FJHEfct%nr`SMsUPx^UZV3)g>Jxc)oB z)lY=4&Ahk|?zlW2coA(;Cr^dz$P4JVBmeKg>*4=-;`4Iw`2l@>^otHD=O?zi;GD!pBVJ-X7qJOmg9{69cq-X7mWii_A~mQn&|tN zu06%;+>HK;L_ayib5lnDR-%vd{hJK0aoiu{kNSEEzbdrbGU3+*-YMbN1-``bW&a`% z>$6{K4sQzI4Zb0KSm1@*hg^S0p)c+||MGkJbtd{^|9L}*XB>LRWit8?@SlQS|9jzW zX?Hq&EBFiWw(K|Fgl~=hQ}|n4udh0>lFwG;=dzRkIF2`k{$3w=T8H;%_~VJsMoX2F zS9-mW(Jz3n&%9gwluDefiF5tHi@)tdzqUZH&kk^XPK9rY|5$h%_>1tZ;P1eisgvK~UPo%3R*6%-WrpvZ;RnK9R}Y7K z-5CN`e;fQJ;(r)E1^x=$_k%uyZ;$@#z>8iN^E$rY^ecMjbO|?aci`zfJt)zC5PXJY^rPTY>F-%^^D{Q^^nIvF z=zSmRX1M!=S2O%`xOK7sZe9HZSKs(wm2vFDI=M5v1M_Q8;BmY@3waxf-gCrBaNjSx z2)+&T{Z9B$;&}zWA@R%(yohJpl22)9s$O5A_xm${fVaYDiPI~2P`@g?HTtIT2dIb5 z;pTtWz|%PQL2tW9!)!k9|G(`!e?=u_>pT~2p!{J@1tBc`X;Zxu{!Jmci41YiHqSwWB zXN^{2{-XCe*d@-YIa|I(GTQ4OdEJN;@KO%3;giJzise82L0l!S7*bG z^Wwy(OYpf8{qM|++u+@a=Mi`h_`C3)@L%D(!q+^zlF!}X8^L#nZwGfA_X<4b|M1YS zgV3KwevXCfe=6L(os;;#xN^BpCZMm5|Ml=*#Qy-iH~cNQdH4>#2l|!HspQT3Z_NUa zd5Gt}R_GTc&dzY}CmalS|8^8y{Rx2=?fM+c>F{EHjSk~-kv{b63b^aZ_4w$2D|+wm z-39l$|1@0x*Wn+s{(J=Y{@(X+*X?!At&EH7IDdt!Z+u=QZ*{r8bb!A_o%DzAi~iui3%AD?saCB^=}+;h zcYej+=L8;udwrY-_xiZj1r?u5nMa$#9ruoK$E63{aX%NX&vkHp9)|1lF}ynYsW!F} zzxl5Ycf6K`t8WK)y!M1I%XMTB-1v`$+wNs>$M@>MgK=Nt;&PnDKa2H0-gjC#@Zwy&1NwT2{<6{>D_$F*?}EN9d|Bq>_KD9s#Y1YP zS9kO~;nOG47x$Wr*MaD5cR1X3&&cqxiT|3RUz5;xC!XsQ{k#y*9q5hcu|yxQ`_CnO zX1M;ogOBlln&@8%`tQ&mRJ(FNw)*%=9qO}U;Bnkz{?|lr{u?Ly_d~lIqqn~u;kLV5 zhWAVSV;vrX-grjBJ2Nh)!~ML;Wf^`a-1+h#-1+q)Tz$IH*iMZ{id4KLEY?KQhtB`85)~ z{XH9QyO+bw{|$+MoL_gMH=ZZq&aYSC&aY20e345k#(Z~692WS5pJIA1|Hju-a<;=hx}zjc0tKkMrw_gva@HCqBkMEz!sM^$dFF*IRIXK1_UK z{=Y_V{(njIaeggz`Ja#bYH-`#0B-&_4LsIEoL}wG8&7w*^J{Oo^J_?kp8;&lrCe|XlPZ`7Ze(Jy&zC4T)^2t4&aJ)<9+(Lb2zmk9S2pUUXpgpXj{KY$;?I`&oK ze{9Il&*&ZBrLL>w?M3q3Iq;ab80T*2^%(#+&cSfw9GUpXI7g$`{{r~y#5pVRiE+M% zUY`YUt7!}n>hDRd}5q~(Cc#&+&IsK8|Oude~fc7di`&L zze1eL+)&Ab`jrEZd5HU#dKvv5@MXEa4^Mpl73%Y3^tO9phEGa-Vmvow^z$?NUo!gk zH~x7ZItQNSVYiHaEPQ$LaC_nt^Y9RQ^YB83znS>NJbaMRH=R=MR~rB3fv4-+una#b z<8x+4|17)~dH5{xiFx=Qy?Ll{)1Qw^?ZDH1t(DRD&*%qc^fzbtJsF?r8U5lnSK?oR zJTweE#vk*rA$s%BF2i?Bd}2N9n$eHX=&#D?pFm%{)iI>pooZjgKcHVfX80mgD|t8o zea*m&zkLtBN`|kM@!1aEmFJ80!l$^t-yYVVL(u#E6-UGU{)!V5pGIxU`;al{9j^-$ zeV?GeJfpuY!yia|;`i!2nbFUJyT6(T_xmeWyQMNN@)mHesn+)KOKAxA?%jjDt`gmUMn9=u4^zppBcSe7BqL1h0V>0^F6MZ}{kIm?>O7!u(JT;?# z2<~}#7TojlqIXp4%JXuqz~i{Y^YR+#t&?@odtPpV-t+Gk=shoQo6+wIcb*;t_q_Zp z{>6GSHO!0GGkih9qL1_9 z(2RaWqL1_9w2c0uL?7qHvxyyzBq9QQac_C#-;?2q1gF$lf$;u!SKi&HZCv2f?by>REn(s!5h5aaK*b@_U+ zN``No@Hj8p2A;0ZT@!tr7riq20f|1&i@_QFs6-#<#aS8srHMYyi|aD_dlG$|7t=HP zmlJ)Q7jrWDFB5&77e8h6OW*Uy@rv_e<-pVYuaoHGyl9cpZw+@|><)KcoCtSboE>BtG%^*jecHsc~Pq-NIj=hJhDZ z(W7eBihmY9#|NL9ffxC=Un`>D1)qlS!so{DImBiOKPUKaivPOgZ3pz-@!ti#&&T$K z``qdN_>AVc`orP+4-dTf+@ke!BL1i2GajF!zZZsnO-66O?nJ*E{dy3+{dyX1zh1=0 ze$9sK|3TnszrMiVe*J_`(XT5*zZQL9(bE5`RxPcE>VX%3`#Swv3;jBb@A`1x&uxiM z(e9(6-8SgWXE*e{X}1@8^SK|~@f`#=&%^LH&nLlccTC`Eo-e@PJWs->=+a8Jc)i!d|rkZK5qt}*%_aA(fhgkFW`mGE#ZCV@9=3vJ^X^c zFY#1=aM9AgU0Iht2=UYkyr@HcRzbfPJ`LbSJf8=j_3<&!Ezs|cPaAmQvmp3%#K(Ac zMBfjeJ>i8&^1gfF#C=`TyK!|=EMPei{D{{KR6{f~uP=a=APonHgj|CYehI==^h z>-;f%ivHFK{dyL?`F{!hzVvGz+`N5}@b!ZKclevPr5~!))tmUQ7;=cO*i!p9?R>Yr|$$;a8iG@QuTGU4g&jbr<>`jMqcx9j|BLj@L{0n4h=c`hOUBI$mGm zZ+?Epr|9oCp2s4+rD3E1x?)61~rN4M%T0qu~0S8F(7cSp1FWVYqpC9qxVRci`Ta{uZuJ&4(-F ztItYseHz2vhqQs~-xIEXAGrR9!}U20uFu(UeI~>8xfia_BXE6Qf$Q@*T%QGSeX2iF z$+JH7;QBOy>(dObzH~IKdKIk{^KQQ|f5XSEtM7VfDeZIy^ck_7O!F* z(5H75E%WE`IVHm%fWLq~Y_tA{f6s-Yell0`HUXVS)Ec_=v#wOZW+a4@mgQfghUi(SZ+2_?WbGfhb8=iz(*u}T;L}pd}81yCwx-iqZ58*;A0YgZQ$o5{Kmj9Nchyi$0hvsz$YgB z^Dyp{5`KTsUzzY)fzMsDTt~5Pzua_@DljkM%WYQXA0@n5;GZRYMBrZ~yj$SkCj8LA zr-un2;~5;DGk!ARr-bKRXC(YzfzM3%nSsBY@N)y7mGH5F&rbNofzM6&+z{uyg#RA+ zM+rYX_aK!et+GBKOA_ygg+K|ql7;dc$0)b8+g-%zYutfgx3kY zWx_WPyj8-l3A|0hhX&p*;ZFzNG2#0L-YMY|1MiaX`GI#!_=3QDCj7_1dnNqW!22Y8 zk?@>Bzl1Ll_wSf1I4~ z^@4tM!kYy?CgB?eeon$S4g7+Hw+?(&2*75I#VuN3&qgzp)it9Uu# z#{@nr;hzLPJK=W+J~!dZhIZ#A{Hmb;DB*Jg|19AxgU?q9Zx#5r32zhl4+(D<_%8|X z7l^=l9~zc8T7Rh-Yf8x65c29ItlL=c-@5W7kIsd4+y+b z!Ve9+Ny6jvD@_wVBBoaH}I(m9~=1X3BNe-yAys%;P)r|^1!Dh{HnmG zC;Ym=pG^3az-J`RIxe>m{D34bi`c?o|i@Q)JyY~Y_I z{Dr{3N_ecpCgo#U)qSe3xbM_H@M69f_txTb*WTarx%WNr@wxZ?5}$p;|34hP&p{1O z^v8w&e{x2D0o>=BCc%AP{VMnZ`uhf4{d~ChA%BE>pZPbq`WEmXX}4?OX`aoec|HIi z^E@c=IXC?OW6_)Ec%M188}oclMn4H|o^OPkw}&%)7To;Ig`3X>aP`gLKa`_ksq_chFC|HLQUKCCt{@WRJ@4ombgpQAGR^Wo<6GPrq*<5{$8 z-h9923-YiAK0m;{Z@)z8&7}B#QXTY5mSD`=dT^gJ)W0Tr`EqdMl&^#T!f^d-HyD(mj(95m!p6IP}^V|&| zF_bJxL~kL!~8(ce6TxBIHjH3!qKb?fya z)=yE->W>KhD7f`wefs-KH=?(G9?0;IGW?eeUnw(B>%txP`f%&e^>!fnsYknm;nvB~ z89p4oaqx-rF@DcUTm0Sc^@p41qu|Hle-hkrcmH7iugvK0fvbN3Zr)tC&GY9O{ol#M zNcw9Yj)R+rvreRkEpK|^q$|M!^ubElTy)L*eHAb&bE4X>sCBp~6T@MGrZFeYKeO>zN z{vrIVTGjR1{f7F5;nv%2TeICp3=^6ecygB|e;NkXgRsNra?}Gk0xcm9%;b)_t3HLtC3-H^~TPOcpaeAM@ zIM1bBYGM=4i z*K>4S4-5TV{P#ou4&3$7etB;4{OCGqe=o=XUHqrOU9Vou@Q>k+<9xX5)pv09t{aZK z^F`hhALHB`Zo7_`d9Z%u-v7y+*S;ig-pBh2{#V;Io}cj9jDGzL-wJO0{|+Dh*P`9; zh)2G}vX%R>#-oq?@ATI^FHO7hW#HCZO}O^~a^qMVz5dnU`Y#IC{|oZ=cYLhFzvGkZ z?;^yne~z06_pxi0d`exedby8XJL6vup1Y2_A83fbaW+~AAM3CU`hnEB`_g0J?)N5T z_}y^Vy=idQtH>PNSw|&q%FAmD+k4Epj_!r#zKR4qO&$C7R z&ZArKabDb$@p&4(^Wtr|^WuYy&-dt^7uBgN=f!Gp=f!$(=S6F{^I}K1^I{LU^I{;} zd2v+W>G+<8-g$8`dgsLr8Gc`eKa=6kQ~f{9=o>OFo(Jp0KV@It6n+rvhWo}tN<8jM zbKHH=KzwrhQuPO;Uz_?lf_Bv(gi(hd8L?Q|!2N^!y;;Hk|8Fk zecahB)K66#crs#AAMTLGSfqK!$sN^#=UUL~nnu&T!v{nuO2e z=*@%oNsQn7$v5HC0UzV(p5c4JjmP@A8UI}U`2LaWXXoG_>ng6Fy=d3<)4Fo~9GLjb z3+v%09R}JyG1O57e7x}-Rc(y_B`*i)_H{x?B`~mnd_=E5Z;MGe>i2L3t@Q2Vp0>2yn zEZp&G9eAv(J3?J`MDKm<-Qkbm-yiPv<#4$7y~o1UUk_JrzpTTj(c7=*;p&^hrxSk% z_+#+6ABg#x5%SXq{p0BEulb4hrHg;v{+@=9{37@h_&)(+H_Nyagr%VPa(8^*Cmx!J0AUC$4KJH8{}j_+u=dGk6YpM>7^-1=1iCVKf-aDC!^ z)HI*gr}TAMgJ-?(uw4sIgMvxMt^&TdtNa9 zc^UnW8D6VMaOsuSVI8=2xF*~>bYA~Zv$Eey=k@Ua&g(y%I~HbMFUmY^S2bGY@tRMb z`@)^?hr;z40{;S^bKtH6R|OvDfCi;UAXgQ;|!1Y6ViFwEu-H%!w<>ui!%Ji44fOag5`40OLLtz30l8sejKMH=%c*=|2A<{Pl_Z=b{_+OMk8k^*jf?^&GD| zQ9mu{J&#z2YmJH97o_&FJVS%%+~;SXeZ?m9Iq zqhFl5GXC822^(efx#tk}$>@h?__-M#zDBU>x@nx@XDI&1_4F}(oJUW?ok#VkL(kFP zC%=k$v1!m3cJ)htUJiBDF7RRI8V>;$#CPj9&Y?M!__a|r2H2}{FlX>gQfpn9X<(O z6Mi|o7hIn{aDDp0^|>Fe&osC`)8YEm2{$Oye$|ERQxC3>Nhb;#!c)_?DR`nicl z=zU*oYxpwDRraer;kN6%aD0t(aeP90{>S=I5C4_X+pjtqzAAkA;8Wz;&jM`io zpPHhwJl1hCdG1X9irK=QDg}hQAEg z|4q35Z)f;h8U7wz|Lsdf5bvw&zhj2)km1&OweTt~&&74*qVPt2^@L9fyjH@m2|UIV zeWnIpFVWu-c$_a$|8U?f68#f_w@Uboz}qD}#vkiB`p5X=zBKX}f3L(R#@{dDG0p)A zk8uu4c#Lyc!e0&XpOEmk10S967|%Hg|0w9kB|OG6DdArR{j~}IDe$QYUvkAVxI5v? z1U@a{G5#kL9^;>x@EHHBgva>jCOpRfQNm;VUnM-o|3kuK{PF$kSP!*AzvBJ6$m2N1 z`*o2ITDxpquK=Z2@n2(WRQ=DYf5iLA1uxd_mf?3RTc9uak%7n0)kghyV~f8n-OEB> z_}8hTrDtN{g>rK6>6P%gf%i-J#PiDjgW!dKyWk(6gDU>IP}T~+2YCYeg6|dhX!yu@ z(JKA@Iq>7)X7wyjai~c|T4gY$yyG*S=zfLWe z;mc-tE)TU!`j`jb=UO4-(-Q7;KAXck6TkbJ4uQu!$NLz&p!a;?eL2q;zQ5+@)=xEx&cJ{DQfK3J|C&S}&pS7xA4b38`))-&G{cLyXMVt_xYvm&>u@4;`_OA9A|_)4?^$rFeBhT4|8hZ(dUA&{-2B9 z=Uc9T`~1?B#OI;lb2oZ@;`Ox1v!BC?_q7V{^DuMqaaz3`S&QlLix2~)A;2(~aRr>1a_3!r={qJ80 z|9Zsv5PIW$B*Pzu>+=L$pQkhYDY!n*!}WPF!(Ynq*E0N-44(xzp10w~^G=4po8ce8 zy$|4dzY*i&`mhPy_oH1;{QWiKwEnHD)}?r2-L8+ndY?=2c_;nrmG?BG2eTYc+A_*g}C%8^gYn;QANvq67A-Ex}fjM z{nDf1zF%;0;Bh^Fv3VI>iQen`ZHa#Ip!Ytf_w#2a`VWHM=LgjPK)b$=uxz-_#yGzS zK6SYM>Jz_@G3w_BeXERqd;E)kr{TOZ*bTkoyMKlc$#9>i)#vPtenN)(c?$O}cV+bV z!w;i=UW5C+QXjz2MgKG0>!$N}PwIAI=I=1--|O8T_~<_pp7U=>{Wy=dgFBCU!;i*) zf4KQMH1MKEP9Xkq8U4+0^L7{9ec=6Y^=;txYbUt<+6QjG4ujjTA%PeD8co0M%;=wm z8|N!<`{i>l>fPU-LH_Np`g-`EiQYOnC&SN%$Mv&VZ_kHsga26g0QiOQ;g`Zk!R@bgZhu>#Ux#(09o%+zgFC{GJq36F^J0mYx?J^g9eWAA{x8FG>zM7nhTeAP zWZIpJ-ge)CFHF1h(A#ct5Ax6Y`xScIoey7_cE3gM`@hSU?oG!1;SP-ZT(5r`_3?Rl>!B}t>nFY+ zQTRLVK2NKU=LmhSz+ZhQ^3aF*bs$`Q4|renN5a+DgL_W#{=h!?Y>j?j_-^q2aM$g< z;YXo25B159{LNe&axVn&KmO9gut7KNuhRA@J4k9|#YZldARM zaCk@bgW%oaN5D%ZU-c^L@Nw4X`tb8u&)a3V`)z+GVw0ec>qc=VEMDG^a-Mc6|8-Tr z^w}4#-seE9w=K|HZ*gA4crIvF7P_w3*D z|KU6fABo<1x(0k0`q1sFJe#+!=*`;^aQk~I-2PqyH=cMMDeBEU+>_B8r@vRy3;i+7 zQ{()Zx;+v7FYxO!d>Y*N(|oJlDY8pIisu5&uUs@!W{sc&5OO=UVuN_}>KA$MtjLjNUlayN|sY z|EBoJ&GS_Ba=$O#ed8_Y!`m}e`;A-S`rMY`e!sN);XBZ~AHEabk$xFZclcfCy-#}| z+~;cUhwp^X1Mmaj=0DDhVjVuPbTNqcJsP2Z3huZ+h`-~wN3DvF`1?L;`_2o``wNqY7s%UxS{^nbKh77=m2$7MFVZjf^YZiX ze+j+gXr6CGZ=N59AI5t16kH#lE6~S!eua2kKVOA={e2DYe#ZL`){plgTV&$g5Ap>#+0Jb@goYuB&%sc<#LX3VP@J8*uaE ze7AlaFY6~a-_3KbuHGTf^@!(PxZ{%3&qKcrK6Bu^!{@@CkMF^~-n|dM5TB)3x2M2A zK>q;zL%8#CMSSL<{|Nn}i5w?eIgEuk1@7g&zuk8U7RPF2eZQZv0;EqOKgr`siIZTEboDJHz$y^XdBZ%IHhC zj;db8IrnGcUzqEN_p$%C^j?pAj{1Mg-*vSE{au*-Qa$wUm*%iP>>Kh~jIaAf>r*}v zz2kT#+;O}Pu6|+S--h}1PmKR7=KDV}{*M3f{CE0?$N$SeeEwGFy7Qk_|Lz}tCC`mm zuYQAjzVkkh_fhxcJheYQec(sHy^k~+-WUB9aMw@Y$NZf*JqO9V<5R76WuI^WTz~Vk z2zuMSJJYWGueO`JZo0qvgn6yrbH|4CYf<7~1@8Or>%!e%dH+X#F#5&t_jw8RUQgxb zd2xJJz~4CQ!@UpOF2mh#FNwc=DY)ZX1Kt*Yx#KGzgxNXGH~zZt z9{A{Q{?|fp{?~?^|9WuqUmw0O`EQ8c_#44{5WoKBe_izEzcJkWH-Ve~_23JW{|(R^ ze^Yo5;@98v>4xY%pEiekKD~@}awq&ZLO&S(Wa)4f-yb;%uKs%X-S|&~Z;Zd|@FsBc z;QFvJKI-k4dau_l@pqls6z;s<4DNk{&Ee`>!8ak!*6?lM50alf;9Hqr~; z81&x%@$)Zj(LarTEBJeX7w71w8TT*HZ;k#pxbgV?sE*6}=-cCC-EISSd>`tQK`(RjL{xBh3- zuIqMp^zILPz`GGoPxwf<z~k$XtD=7ZuFn&JN1tbdkH16Io%rML7exJ+ zrN1j)AL8Ey{bGf%^eXavK73_(SNPh2NB`nGHHz2z=$EHo+rjnk1=s&DcxT!j3HS4= zV={aKye;<)u7~?Mta~#2Ww`Brmf?#pR?bI}Pur~vx80T*-Wl#Ww+Gz&+Xuqc?_Un5 zYJ8o)qu>WH?zDq-^PyBv>=o8lmzkkW~ z;ho?U^>Kap41d>$>V>fMO4o-j(N{I$eC zJpKW!xBqGR_x}80#OeDQhr_*p+lg`Ue*Tf@y`MZ7-lM!MRjo?{;SJ$K;NHjHX2r_B zRQ=G5{wR0@{EvqBf)9g_g!_Ktd2scYz=z{A1O626PrU|rzP|@Q2A?0{$HF&+kARzh z*A4H_t9N|Wn`ggA)N$X7dhqjZ#}SYIC&Kq3{*&NGz)yfXF1CARMt=`n{Y<$1odtJX z-h!)N6F!PKU7zLF+sWwdSFYaFUqZX5;PZFtZ6C(bdOH<=`|IaH?605uXiJ>xyTDsB zudRof%op{i5s&%wdGF)!mtP2X9501C?pMIo|EI)ZKn}Bb*_7pCC0dsU|0JMp(&??2dXyg!+?I}0D<`4Vp4zK46=T)Id~=~ejKuD_?O zzxNsR-y9$PcZBQj{Ym`~N3Z|UaQ#QX)w`}7T&QcYvsIM2Y0=_ z9{%s1?|*0h-awq+(J$-ycevx__lTOdicQ|_I(J652 z?R2>DkB8gt&4H)wPD5|I@jhWXkNh4{+kF=wxxagE-WH+Gt^bwa_O}6C|JHE*+r#zm z3Dewt^OyX*Z)+w`c0^}8>vtCZ&TpjhrbE#`SfPEpMRMOzk+s+XMOms=)FGP z4tKwO6W5nI_}qow{ruhV9_Vj_8_&IP`mE zJ`dxw6Z{eQV7TY*li=!agg=VUBk<{P*XPIJp1&T4|DE;r34H#$Un=jb|GQr*=i&cq zzhwRU{Zy@(FYB&Qxv%T`^Az>$`tuCj^`|E9GrAr=hu-z)d3X=vc^dBeGZXIm^8(!U z=S8^d&r9&Zw3}Oh)Vuz?jF0QjD{$ADSK;Qt>ygiUtM5mg>K)%%_?w^C;oIl~cYj-t zarF9IAAU4GZ{l+XJQwG}JlE~G&&J<=$<6ay=yQ4Am^js2&&F>&Z{u$~a_eml`oXlD zt2g!5+gyCCw|C&y!@}hG?_BTRrQQFYFUsruf6o`?Jp5msFM2V*-lIN8!ku^L!PQ>^ zpNG#3_+NcL@qK)Jf9C^uH~hEYy6pAzBlIoMcc@vpj(eW^82zs3KY@Fms*cYH^q%jU zz(2#scxvF&7X9bwcME*c(tp=4{fVC&?T_Byr#Kw$?^6s9Jo#jJU-v$?@By|{tNn>`#v=HU0(n%^%ht&P^j-(QgZCiL`EcX; z0d71$!Hwt1Ogz7$H=f_%J&5N=xbf@&UzpEbF0xXkuJl(+obg}Y9AUZ{({EBZCz2f*x;5zF$qG3kA|25qCQj_u8n0B{? zZvyxEaQET9@1s7Rr;7S%iO*B`Zwh}CZa%+&FGW2pUu+mlufl&beAa+(4sQr=1#bgy z4etcs0^S>LzXrqY*C}xOH4bjSZijD4yK~{zZS}>f(omHL<6IkVJvW9sf1AS9JMSFd z!R2PF+O-}|f~&s~ZXG@Xx4+Ii@1Ho|+mIjiZQ(h6W7^#c{g&{p;pU+o+;$h{zRf>f z@49Ur?nvIOAFunapI-On`g`Bob+s$cy&MtREv85P(w{hg;<>O`A3TSi9`ptG9C|_E z(WhqXGPn%A=g@erjQTBu{`QQ1I^6x$bAd;nUcu*e^tSskT%T_epTS{1|AtcYu zGZnq<`dooNPX~RBXV8k}1izB;c^|INmx)gtub&v5XecpiU^DbPU@8IhH>bkmfRW{4{>_C6_g!}#c z@%~lOeDUXw@PV__g1%sHlK->d^-KTz$`JR(@B$5(T>gtI;rhhuW}zznT=Pb`K&GKD z{9g_A{7m3Qo%lUD@myAT6#BP<{{4*p+rXoKZqWPOk^ak-!>Wq0@P9Ap{r+(E@%LV1 zzgmY0v<*J5mh$;?`L^`$w*_AG%jaI6P4w|TWPBbk#{Wx$a);)kFaGYk(C&haf6YQv zdKK+jZ!5vA&-LKyt+#FdTW?kQv>yIjZ{SEDs;aiUW)vm4eo?@sSBLU{Rn604 zi*SFad-rc0sn4T=zWCQ&Cr{4!j6pwoxyt?9ad7AFz3^t7?;e8t{PPp=pSkZk8?Jxc z7p3#}XY|hB+N=Z4-+xCwT?hUh`E33loX@{{z0T=9FBG5cj_ZF;-<)xGfAvq-*AD$E z=K5JRE5BR1F8w{F#AAMZKVm!P`+DfTPu>)MHa^?HJK@tEuK%zMKO646y9n+)od{Ro z3hw!(OW;L*>X-g}7WOB-(R+T`AMW|ZePH3!Gu*H|2EBE4D%^eVvl%`QZofW*n}_*u z^?$XVeV=Pb#?ki;yTH9(oW(k0UG0qC`?1~NJ&3}?|XX4bqKU{zNt4}@j=E3(LcO#zF(0iZRIQ>1KxF0C4kGtbz9y|v*uh*$r zSx@$*-AkwkpEtW49?wTbyOZIU<8uXk3cUM@m3Hre`};>T;RBbi=s$;>fAiCqeziyc zE7zBu;7g+)0$&gAI$%C8LEnq~-vZaie!0HIbtA5C@&3$wd|cmtg}c5jwMh9dqR)u1 zzO5K|FKWn-rqCrNWc8twCjxdACBJN*E%gD+pF@8a#($rT|D25f*uUuCKjZ&p#^2u!cl}?O_Yr)b;vm|! z&JTtU2;)=CUw@bFc(`>H?`su$>vlp$zcBH4E)8Pbe=dyPb>^??TZA}^`Yiq|2w$jX z-t^xVeNjvOL&0?mJYDzpMPK-Ddt33(YSji+{j=PrKF0>0`ka&Ki_ZcTFY|1iHi&uMlb;H_h@xn>U+Cz|==Je^g!Wt?e?af=t}ebv`7et2Jzp;$cx*R52e3MN+iecl zXFIrcxD(tu>rgEPOD0B;5V^aqw~IkB8q09}a&6egb?J{6zRS@RQ)aFE#?6 zyPs@-PeVTp|9`dh-dinWq=i^v-*iKdLyDo(H#Q!4re(<5hb1eL5_}TDr z_*@S6_nvNn>+gBfygA=5#y_`Sx$cce@A+|9&B}h>d|ry)e4dlhU-lRElm4Rq@`ccw zhbz&`uYud&>)_Vs9gJ^F#!IgM_4xEbe-}Qsdjop;jTx?g1N^S>T*w2gIh0hH1@^|3QFUQfm zRU@C~*?qNo^L#h)cpaRPSvT%QZ$9tK@cZFj7ralkG5vi2z5GFVNAwTDy-zg_J`DXQ z^y@*rJOp6H*3 zyWjA<;C{n%f%}bT@VOlS+mJODchJ92zdnb50C(MZ6TTJt58;lB-1#f_eM$3aJ$!_}`+<+) z?gu<~xPE?$UVnY$pP|?1OSt#bzJ`0B>U!qak>t((#yrG*a+|hg;fd(K!QXn&ryhFS zb$$2_AJ>QP;jRx0;JNj|diW8&>yemTv+bJaYAaXz zWu6y-o9Ex@S1!*xFusf7vnyO5>tPM@>~(($e9ZGwaPxfW|HC|+&+5cuK5M|ur@srI z%cphNko;^)K9|AY{45JMKR5qB%#Y)1yXLJHahkUk;O1?4crI_&VQuugk~e*fa|7~h z9j=Uz>&B|^xX#3N^02T@cBb7r=#Pcp!?=uvuZI3+`0DVd;TsYEFBx8ck@8;@=OeH0 zE#Ufegau=q zcqe#0cu#nJct5y4gW(O(d+ulmxBffRFWYT|-hInv=&h?Q;GR3y!RK<~%$+y&Uzl^p zy7)U^92eKO#^@cdCUEyZ>%rF`{>|yHJ{zESUN?igZfpqeg@1GS5%3o9k?@V+=fgLK z-v{3W{u11Lz6WoK-p`ZDo$uz~_k}%AZOFV+?>KHwyK50oYj_KI7sjOxd<*nF;9J5S z_cn0PH51vNc&?Ez%(+JW-NYmJ{kyirGaLO@@Q>hI!&|}I!(D$mz=xyX23`-|gFJ5v z?+#bLEk2(2w}U$`wuhVNPH^Y-j&SE=XLz_wR;}Az;I{i2*GK2$hwuaGZ&!Rqz;}X= zf$t3WIS~7GE&6Wg?eD_eXUOSW;_vT5=JdJy82>NzJ;;OCHMw=t6TNZn2G>Wf&+h2; zS(yCm|0VZfwkH3JEnhhwdEa18%?j^}{%yF=MaU_?mB!OTzxM74(P`)FWf&E ze?RobIXc5HgB#B^aO1xbu09vP`9GWZ|I_mCb+AvS4u?`dn~(>2$H3!xVN6&E?Qh?V z|4|u#`Cs+-x^pG>X8qSxnFxIU|K4$`L|{Bp)| zF8rxwD(l;)aDNA+!(!!x7I9un9rlD9=ZSFZXENM)?u1)E_rd+0lqcZ+?#A12eLjG@ zUVREz-;nz8{8D$3gI1JjYqj{~vqz1E$rS|BrtntKAJD z#D<9wk`O`|3_=JYgo#i#gb>0Y3_>UyLWm6^#D)-JW3ysoV?)SpY%Dg!X8rEhocH~? zAI^8r@0xz?ey`7U{r0}D{>)>Z^E$8dKIgp8x&IFNUs8X6d?0=_?(eC*w7_q{?Wg?u zjo2R?PmfdcO_>KyqEF|6W7yxUe=>RJfm3kj0e>ImrW{B5A-MBE`SWvPea-v%IsRVD z>!@=Y+iM(tG4AKy45I&c$y?`h+&X@afpvD}xITsDPR5-F{M;DlfmR$Zx3{Xy8|&fr zxj%k7%N>N<&oJEm=W^V6U=;2=FafvDB;5V>aooI*&kW%H=0O}6r?I{I*j}$_jxyeU!;#G zoI_qe7hjKlj^qBq=D4rZv!9{Vu^)e*n#(<(ynX?0KfbQ1s2{giJ$0J0z05addtFF< zx0i06VdVA8aGwYF_gi^9`unZ+W4ri!tlSS9sPA&!51aCM{^is;m*rl8kHW9SAH;{_ zFXR6Hro{#B<9nW`d_3Pe`*XhV_igpXucDu`@T>7_aO>QTTjw{pb>`vzzOXKwkK8Uk z?sp6Gu#XSu7cg#)&(*m3#|r!f{2IpLZF~g&XZ%{+{cR-faXJcb%5iGm`i`5&(GAr1 zIQkXtaWoqDIP&-G6fL(Y$I*?{_c-$R>5O7LZzAt;bTjU8^arjtJdX6H97pCoj{H4M z9!LIOA&;Xm^yzVA9gidHcpO>BHg+LihjnCcYnSMcYpTx9JxR1P1&E# zyFdH;FWjH+rXTm`U*qo2)^UHfj{CE9+@HVX_$}I>-Hzkwr)WDi<$mZr)VYG~buWG| zejo1knt*>s{zKMlTh4>}F}UY1$KU)#nz5tgx6X&S z_e1C7=GRaAPYj2@C&>ByVb*I;^6g6hFTcOW=LLL!OQHwnO6#Y9`3j;z#Zo=aPw{PNsOoC|7giurd-)$ z9DegJ^5K*5HL3q3zBN7tuf?Cj55%9w_r{+s@M*Zuq(UeV{D zaOa12@vZ6qJ>2ei8Z4sB<;G5p^Ce z@RxA=e+~CM_$F@N=ehnyKW<0e{q1w|#~0LhK75z!;f~}tXMLA6?|%Lc^^5lNrqs7j z&r=IoU(b(Q(f>ZI*H`4-AIx7v-s}Hcar4eg*7x;P->_V_Z&&)zN~RjXI7ueM~I_3iOy&2KL-&K|$I=MnuRmTP_Iv7*j1|>9ZGZ|9x@$ytKe?!R=>BUvID;b(UqE z-M)T~YkB*Y=acg1R3Awl?=KI)y}x{V@^YQ>=Tx6h-uu5-;9jr(zQ8}i9iLBex9^v@ z`MvR;#{CG(8*%BW_ zofYuQ@D=f!@dG$-K7%`M^Ki%K@3{GD=4b0~j^DU)<+$_n8&{&wBgnVH2jJHCb#B)8 zJYxNE)N#A`dbWcYAAcW{`=RsyD)i~~*k!9!*0+5cw>Z8oFL`OIY`pn;hCVFU>z`Gr z@4VW;eCu)TanzK4u3o}^R{Ib4bNv$bv&Mh8pV3R$&zeiokNcIMKhQhvFEJ0arT)qI z8>K$W=ihpKZSq&*>)_6B)_I-$chvX#*5hJJ^3~L@#h3K+TiQ|Q2I{PbKZN^vEcU-N zpWototfC@lA2B)BIexhsiq* z_HRG>X4H58-@L#($tqQygz7gy7_$rm-Yj@nw$MCw#ao8&5WB%Wo`sMqB zaa_Oh^GbbR-|qF^F)Y{mC*a#q|E%QY>$>v%FpRv{ha+&W56j!VTxa3VS%6FzuJ!F>f0Ci4h7z=z;`O} zoeR9Cz<0qtj&{Ypf3zIe8{WUzjl9JZTU%+=~xn5WA zfqz4OPkaToZ+Coc+|RSx5_i4!#jWq_sQ042ucLOq+J!zHXCHU9AMdC8d1yW^WS`~Z zH0BdO$7TY{-G@GZhxfq0#N95wZ`bvzCchtbw!!^8E6-EzS4}xj9YB50QwQRXgP$kX zl=GDRc>V0>Zh0K}xm%tW{M;>%$6oZ=h4Jz8#CF5oj($GI!PGg9{2{pe$)Wh2bQCD7dt-b^z(mw-dZpEKY~8X=ilhZ=Xr~^ zqw}HL-TCk+>NjOR^m%9JL!ZBPK6Lz@55M3##QD(AZF4?6nm(Nm>u~2oKj*C}^P%;Z zbUtj$_HsP;!~4?bnYjCj^NDquGM~6zoKM^?&L?h{rpzbybdwp*2~}jWu3do zTjxpKI`i?b7|(5EgOqOh^P2Y){hUD0BPY>kkE~2%os;o8-1*IU;}r7xskqlIkJ7*A zJAGT0dm44T4)OEA4If&vU6`{h_#ho`-MF_?(Yh=K_3b`s}o7W&Ewb7SCfkZWpp#^B3Vu)6X#KSpO2- zak~_E+%Chd(|~(Dc{%R&dB1+&@oed;Ohx=>pt3KCh(TMgCllQ?J9#mmepI zIXX~tw-%4J;4c~_RSbR(TcHHy6%Pn6Y#;~?4{rOk-kM5w3 z*O_!=llySbgA;K3*_A$h9R7at z$I{R4bkd9NQPlK1-IA>46ue0F8IJG87^ zCwm?KFm<*de<=HpuWxbt+UFzG*_1kyaQBBtar3(MA0xjN^?!p~e=_d)=+1kOlkZCX z0~oiy1wOREN8x^+#sdZZIPT-^USCb2Pmd!%|7~gR2U*ACLT}3bAoJc2vVZRf=|%U0 zIx#*+ar_p&?$_hxSn}=P5$?$KA!8M?CIy$7dSj z=5hA|emwp7xbYC&*U?>!`}p}p+&W%2zQ}U_Lf-SB$8}rs9@o?HI_ezA<47LY<~^>> z-$ott9@pkQuFZQ~oANykQ;Z4ZSJzhI!`=`*+^Zi{=f_?+u(En{s}? zioElT?s)!@ad!M?Wn*()#V#?th_<_4VD!&o9V-g4_RJ@uivPt>gC9o3ee)yM687?W;Fs z``*p*==Rkep9PGM1xcNhI>z|C9zW}%X9k|=&ZQMGa;x4y&Oq``#%wy(P z!(DC%-24u>^$*0&`}-iQe|kawQr!Bt;MTtnxBk<(`PXsxe~({3@519z_xXjk?9c5Q zM>!kkwQ%J)ge6LS_D6n(IUBczvQb<@&_@D~yBvdwrr8U7sxJc5!^F z88^qj9qzok9`3xVJFl)!zGzd~O-2Gt|zA5827q`yeaJQq!Z%69r-v9Od)rq|Gq@QcCE6d%SymdO` zO{ud5dFyP6H>J*2MZ%Uo5$-AF#gCE8?thQq1_&N=Dzdbv7dH($W`g`p?uWd^| zyRh8dm?sa#i{6)7P2PFi*T4BX*mmS6P`@kv_`FgN@?Vl~%KK8ipS2zJy??qrZoXTA z?}+<2@DR>}+tKGvTihehHs8r$MvlxukT*qdldMd z1>U{D_bTwc3w)mf?}590_r+bW{R_NjfggZ7{vU9jb^H$`?|yO+?tbENRJ5OXzH|RC zI^R{Z-4ABD+u(=bzrYX09Z%oS<$l$hyz}H?crEpd-dB4#d7r;N0zaQRzF+lv-1+Ab z+&Zt}zHasl{7B{>U%%~goAUbYKJ@SFw{>5?t^53!uLt(^+jaEm>$mN*DX-u5eXmRN z`fbO}*KgZTQ(nLA_VV@HdQ)D%y(;HfU%zcXO?mycK{XXN#~y(spGtH5bk#L{^?O17lX(< zKirCYz3~F>`@Y}7J&${T$MdZB3yx(Rwn}y4x~?C-6ZQZ9_PIcgL;3Na7@uv~j&CqN zUGXaJ7yqX}7w9;)m*>0Vaj&=ETcL7Yw=|ElS?6lTL2t_AZ05`39P^3&`#78aEz5QP z_d3@1S$qFlcic{3-1edV$y{F@i@RK}>-tkiAAoy3b0Y3>`ViOi9*=r2`q59v?bG@L zS?;#v_1y}*H*S6Rx09*we0~aU{#4xSy3_D=Snlb#*S&*rmwN{8a?iqD?hxGNo{hWQ zb8zc854%5{OTL=*TAt^*?0+bE&tJNa!|Oi(bslxxAI`_S(U0DU$oq z$Mp-{TK`htx^*XRA+xJ%L6kP|p9gD65i{>BCkK3|+-ES{r z`+B@L;66TSeoy+poV@4RD{<%HySaaK0(G2EPRENr_rN+{pXg1wJ~8k0iT%GvKYG#i zNhk8RbKU5C<@&n4e7~gIOLshnGtQ3xRk+tV_S2N>oU5tRh4s1yug0&%_s8#J92_6d zo1TBKr;g{}k+|pCQMmowfP0?$74E#Dd!E%j&yJ>!_m^+P-H!cNsLZ$ae-nB8zZtjx zF}VHf_OILjE!1&7xfOT+ys}_E(Y@~7k9pPlw^8457>irycHI1(1wO98@4~HrH*Wp$ z1%40idbvLrx%Ka*j@$h{-0eOAcf0FuciruNKXsfp9>kqzURtTL-!9F(Z5`)ry(#my zdFO5Wciz^UGH?67iKfikzW(3iU3WYuGR}_wL%8#{{S?jHP1)ZbroQ{zBe?t9B;5T? zcYo8}-yWsT`c>JjdFh|WaG!V3cPYs4kN<``eeub-$KB(2HTfrS$KgrbanKzH-Eo*g z9s79-x1XnR`*{YpAKiX*`ddXf4)*^Vo% zSedW9jy1n0`QK8<FzFu_RcRYQ)ljEs7K64o#$Mb#M{r^MUyzc%mk9-=Q#-|_tT=Md*Mfy*( z(!YPfONUhBEqp#+-k-xi##hSXRq;H?M@H$NvA0+y6qmDgA%(AMXEa z`mz6SaQk0`H>Llt{saB@W4~(3=frwG^>t;=tKZURdA(wP{;t5kFYtdB`1sPnSw0@E z|3g8(sucQH`DO*aOo1<3;LQtsxdQ)5fiGX+KP&K`7kJA8FS;IEfxPqEin#N?uV>hm z{bwceK9At@_(jhnlzz1F7W;|UrQPsW)c0{SU&p&Wd0&s=a_zr2d9SNIzuV8n3{*__&kf6| zIX=FB;aB8uC4VP=3;qD^=k}CZZoI|*)0+PEMci+y&f<-)=h=pN!|T=6sN?mj?zrh* zudYrV`&pyF+u+WtUO#yK{|oY4v0iQQgYdQSZE@?n|Exp4^xwu?jPpI*ue6_a$=gpg zZa?ktru4HO`O<&?r=JJtXMcQs^1gncJ>HMJ*JJzP8<6+7+Ym4PxA7L^FY4dtAMIba z|1Id>`F~4%UB+P(=54pH?&A#le$?5H^ZStn{!4r&^ML!$R`jWFQ{dYcc-I2op}@Q0 zZkPYWertWVyW{EkuGCuNt$FG19qF?=!lKzP_Rs zFS;%*MH+8$THy zhu|I;hvNOH^PkwStnYr+lzFc=eOA-wVYu_&;kfgj?!2cv?;SxM?`N6!I#Az*K6S5i z`cS_w`6Kam_)&Ogd>D^o`?%22* zQz#W*n^3lyNZMlyNZcIGjfRj>GAA z(KtAdEzRRRo@ZBNxjydg^BvA_gUOfv+jxuf;F$$}Zh;Ri@be1%f&#BE@Cysv*JC*U zTtvPD>*eD)z7E#Mt9LWcymuh(a!{o8D29{gL`1|3G{!D~}fq!F?QW81CbE?w@Yor5U%&>3>PLV^hZM?1FK- zg5}n+zD48K@jozbr4|}*ahzUBKf2Fjb|vrQf&K9R4fi9KbUWI=`@hHCRgBLrtnbzM z@wmtD8Myg+{2J<9jr;j0kKsNqZ=WNmW1rXJP3hCTeO^Z$`}FZi`}FZ)=acKHQ~Gb? zE%w7v1^z4C?e)K5e{;P?)2G|zM%?Xk6W)~VV!l2bw#LT;Z>Emh#m8sdF5B~Zs?v`( z-eUZVd<^x?-&Wvb@vhW&-muQ?Wmx5%{on4?m5(Pxxc|(?quBMTF3jdUJrDoPw(&e_?xf) z_kOzf<4!K9b3N{I$Kx*d5#0M(zsJ3w^%m~+>H>Tju6w`0z0Ut0_d35tv+NtOeZ9_i z{2yoh_oq%%9+z<3yxz0^6V!MA`E-TK{g+)>uJ?P~}*W08zv0k2MYw;QMQ~Gb?E%LA6O{wqs)cUVd z$NDqz>TI!%=e5^x`+ps8NJMkLF@mKI@X_!`}nZiMRz=P z*Gsn_m-{};UDElXALHYB#QEVJUMI5wdFOwx8=e0hH($4GpC8h{>-7=t@%3li$CKyd zgXr_o6)WevOYoI=JnCBfUh+O}yej!gI?ecmi@}(uCBm6|C;xB*L@yAce!4lAHs4M(r15sU+xzV z#`nW-D)9Souiu`--EUvU-Opde%{$+IMgMz}cO1-jZC#mXoL7skAHJc!^Qz}}=ha2z zomV}-IIq4%-afy>mu9)1zg+I0sPA$Y<6RifPODeOZMOnH8vmX;OVhvSS^Iy7`u6_= zzBJ4AJnnMeqrS^+wq|8~N|DA}oG+HaJK@XXK2GI+?(2Wd`#ih(&8gp<`ucLX-WB)$yW`;RYiLK_^G+Mw{c}xx7y8saj@BaIm;5hq zmphc}7MI(Wyvx;H?%L#C?mD>RurBWQt;WqC$#sSKcI5T-3VeP1AjZe@)G2uTCCqO? zzD26jtn_cc(m0oIt4aCO z2BOc+@zN%0yv6=vA(g~C0XCDEZ2UD)^|Jdu5b6!{n_%Z+)u3U zUU+p1gzt?zp4%7H-vPINH{ALUm!8Kg-yF}!N==t8i5qY3Kcl!#F4vFojO8xLcYRaN8XNIXdY9q@DT&iF}qSNxZF4L$&Od>Tsruf}I+$;;zV?mxyS z)~oDIIlgvfeI1|O@N)eapIW?{{x72c|C{4ezl7rx>$N1~vq!=DdOZH8*Vp55&n4`~ zKL1_&r~P!NANQZH%U_iC5%-^OaO><;)_DN8&fW!e_Q9>w19yKugZdrV&(Fj? zPERd8-}JAJ)021}s=VAdPNSbC*$?-l&vFZKJg(1iSFRu49_!f8z{D6Y( zbs+BcItZ_(&i5;&FG~M(!2gMN#(%)wURCs2Lw-Z%hwgYY@;&ioaJSd;cpdo`cz?VD z%N>L-OWy6(9Iq$89NvKc6d!^A1o!;-U1{9@)%kI~QlI7XV0nAR`7yR**_(15dobI# z+(Mkc4#CUy!wdJ|#bdI-lY7_O{b$0gYx4rBYeKRi!A?hn)O7W98O zb*l06$h)7MkGr3E9qxWIzdQ(~+AjA9mTUi0%3qZ7_Wu-apU0G*A1vRj->0DdNaO*$IJn43vj(1K2`0uZ$BV9qXObU6eo3#dUZ&0n>O7BoyiX~4c~{>gNpOMvs}mF3A{R*FWsX5|K1yWHLdURU7#@uKV1jalvx@-DZ&z#9tO@wbl0%Lz>w zfAjs9Fh8IP`3?pBFX{HR&l6d0E9!s2;}6aQU*gr|e@Pwt9EiKzlW>=NGtWD?+%fpl zEcfJs<-X5)x!ezMmwO6zT;D;s>w7Bh`rg2Lx!hmjOS9b53YI&I^>Vpy;4b%c>bSmx zao6_@-1WVd^>Vq_;Y+jJGYghGrhKtc_2cX0TX2_q8sp&lo<)7vcL?tK4rjew->dMY zS?<{d%iW{&x~%fe~-l|pqjS<>aYAG&?5Q=R=- zQUZO{ap2Ls&nXy6S+su^^*NS0_F1&t+sV6J?_XP|Xt{S#rz!b63-U#Mjw5fM-p_Tpca`$xob$}x z)bV=5>vQWA_48}$l$X=2^n>0HwN6n#CEBn4egXFWL_uBJX-Vj5npvN6437QXP-~`~J=K zQlaokrF{8$fuj6oCV) zq3C>3eyK~G*On_i{#kwqw3_qF;@BQR`zv@HyLDZi{9bZS``r7Aj z$@@Br=B2?Y_h~`eJScx2b6B{4^K~3)!?PW;(u;+I8Vz|)#K%B z{`jG>czK@>pNhMi%*D%}VHo+UWgGvlif@;Hw{J)_UY=XRYw+@C9f#N9>jb1*Jzk#E z;#*_!>XeOteuw{!9bzuN9{G>)_3;*Ir;qh&kFShxfOp2r$9{Z!JG}ha9pSz44gu-b z7cb8_@vWhFc}@!-gKrv;Zg=4w%UJq%Dqg;?7vG+XcOqYv4)Pd>&GBlyGhTylf!E<% z;`R7e_*lFPJ{8{@pNp60_Qr3g$te2YmV7nd6|cd!!|U*L*R=7w_4p3t$Ku`asd)Lb z)Z*K7@$zS_H2zqcG^79W?=lOo#%lu7tp?wvjHQ3;@LlnGd^db7UW-q~cgN@Ad*J2C zJ^J4hZ<{9l@bWc7e7hUIH~BvJKKM|)2R;Vh7rzVN51)qbkH3QV#24TP;9ubf;;qxk zEY|lRybIn7-w{6;?}HzL55*6~$Kbv3DfnUd9Q<&6F@6NzHl2)Pz53wY@FVd)_)+*! zy!;t2@$E5q9r-DEUwjUJ4E_;*EZ!oWBclI)cnADAygPn8-XA{!Z@~NG_#*ra zyiK}ji}gAaFTX}K{4BgT`SNF8#kYsxL&=ZE&%-C<=i{^S3-CpFJ>Di=Tt=T4;$88J z@ZR{vcwc-NJ`}$MAA?_tPr)z4=im+aV*GM^xpZ+H>vaX*9={T=#fRhl@T>4)_|^D0 z{2F{3J_4VIUyGOD+ZFv^hqrH)eGz^=UW<>!`{ASTVfYRBIQ&=mG<-BZ55Ey_zH;_O z^m!9revfnb&3G;OF?c`x7JL|fD?Sdt4WEXO#pmI7;LTUbzKA~W#M|TJ@LK#XydQoy zeiHs`y!=|kSnhay0{MIJ8Th^U0{lL_<*L~iQGWs+zXK(1;rBQGFZ-(p{s4Y3{vbXW zpNNmdAHpZ$5971&NAQLCB)oO&?2G9CQM?QO7~Tv24L%s3jE}@0$0y-W;Ir^2@rC#l zy!C3?7t#Myco+O>ychlqJ{X^hkHnwFC*jZGv+(Efh4?hQ_3GId(f(2k(Nvi}%9c z!w2JY@sarZ_$2%Td=~y8z7U^>w_YpzBKrRb?}Gms?}h&bAB@k(N8%sjlkiXQS@>V^ zh4=!z^)Iq7qW@3vF8F77FZ^%#VEl7@B>n|H3I7tGh5sF2h%dxjx6QtY{=dT4#=pk9 z;osnW@J0Ag{9F7I{5yOs{ttXAz8Ig2e~(wKoqZAO^-sJSU!_^)8#VZ<_+EHxyg$Ag zek#5?J_26@zY%YPPr}QeT^!xc!q+0d5dQ_UidorV0>MCBwmeA z!pom=-Pk|A9{Gj%`grSgEB&{}yWkt(z3>h3!T3h_NW23+3Evoh3f}~ugKvs2#yjF| zt1IiZ8Qu-=g!jQW$A{vb@iF)o_!N9gd=9=9z8EimCV5rq*0x>zon7~CO}-nx4c-Ue z79Wat#mC^=;ZyMK@j3Vo_+q>p-gdo8|2yK{@SX5J_|EuHyapeG?}Fcj?}|^ucf;r5 zwfLv_?s&`fE9n1#rMPK;``&} zCv}!7EvqM9-M%so2jCmy2jboF@@MHsg#++j>Isv{&e!bc+@FBHd>EIozXwb>RgUT{?3f6Cg71D^7HH)Gje`s@;C6P z^F*q%7>_z{rpHg0+c*n^MgE7BZ;!|Ku1t?t*5a3z^5t7UJn~Pc{7HD!Z2bGFc;w61K$Gyu&r6SIJ%vZUe2$rmH>71Y_PR;q-;MkD<@itWs8gPUI^b83?~X@5 z)6(Np{d4|#@>B7sAAjOD8o!$Qlksct+4u;25gz@lnC@@4*|c#njq4k}ee!mA^zv}3 zRf9+V#B{%RFFf+IQhp#F`6tr-%ro%Fe~|Jc@yOr4Ug@vWZBovsr}O=+oFA3WXYb%q zzi$*P-4^55r)7q>?HGS&b6Z3wr+HxmJn9Tjb!zdT&guBs7mxhtlplx(-J9~mbG}~M zFGt}~XI!c?5f2)f@-uTjE&1m;|1x>2%}PI9xDYvQro@oBkT@u0gqmHsN- zdguJ}&hJe=H|M`kUViaSxzEMPt2fV#R;y+79JDdnB*MN0s)6@~ym`BYy+lk9>S@ za;h^d=UukRDviteg~{*7V?X>fij{6N@Ss<=ZRDyq@W?k?HuHse4^Q>y z;8A}@x2&JVIbUVR%$H01X=J0$NvTeIJihly%Gc(6=bf@T{c=7s`AK-xADZe9$48gE ze4BvZh|j=p!WZDt=UzK!mA=AbxtFKqwob=WWaG~r-LrgGd<^w_otT^1gVC&%`u7_4uz@?pS<0J{7+QpNrp% zSEc!&-2WZ>Wc^p?ynT<%YjfVPZ|41TK4HJi8*)A;`GlO`yMLCSk@K&6X1*ZjTOW}5 zS9pxui{*Jbq?&?<~JN9{J_d{kwj6zC!f$D@9qRKIPSr=xcKIq$eEzX2Zk zGg7`5kNkw=v;4kz7V7#z$1T4%8$e&KXpKspOo{TotXKoocBt;Fz3^f zx9*z#T-1&~U4EH;-6iMalK0Aa>w#H*aL$J%ADQ!o$tUH!-$_}WS@<)haVXyw;?d`< zl>Z)&ahp)yj_G{ZIA+x8hChqbxvJ0FV4>Dc^uUSMu_0JpMdB9iN8J$78vBoS#){ zk*<%*>pMPqhn&w(-aY5LUXa!4pYt)v8*)B1`FQ*V`kanOPoJgyYj}*$73J-SNB&nA zW&M1MNB+r_Zb-wTiYhbiA5kNm}#W%*O_$bX&k zBk;&ycX^h-5s&<8>2bozc;xT6BFoRt`GVw&a{jX`vwWL$eHu05&*90t=6rJU-Z_6W z`H-A1KRl~HI_DcEpPcjF$!F*MoaBpgJ|=myowMac?=e0d)A&^5@xAJ+vRqBh4@_Q{ z^NW(#=lr_lV{?8-@~JtWmHZ_<`s|kaoR3GJ+gy|N`2`;Nqf@?BP4@lB#-9!&vai>y z$^H$C{Fy1=6_4-zd1RK`1&{olDPM;-*1sXk55Ob;Sjsoxk)N0HlXBi;bm^O=+pL<# ze;Rv_{J`W3b3QzI>s@}FpOAcQJo@=<>ZcZu`m=7%e!gGM&l!{XNqE%xKGhkCN1ge% zX8Bw2$giIsho6E+{^Z-U{G6OWm%PQU+4mcJY?l2${_cRs_ujrU``#9KEVp}FZcjY& zm)@1-2j%?XdpPT%4JjUU|G!9eo=;{55*>dORe8-0}ui7K~x7`1Y$*Xhzm*gAcvE0#Vx!v)o zwa+72-2?E*KbZ1^@W?MaDa((@`QFJV=KPGuvi!`PZ#p^i&++-C<(6-)_RRhl%lsJc zjDLdn#Q%y9!WZBp@K5oHcr1HS>hp0t#;5%Ly4iT-`#hQTy(s7RCU2G=XNqjpd3*UR zUyaB2$}e`V&H3P`vV6asPfmUk9`!#>^@rn8fABL|ol$t?o3+S%5+3>aQ!}5H^KG8Z z{2e^%tefgA#-q-d=d*mi5S#D|z|Wfd362kAIF& z$G^bm<6q(}_Rf|Rz5gBWfG@%&nWb&%?_-ncU z72iz#=e!|#P0pA3W9mQWmnN^ro5e!XZ7jYFJ{4aUpNj|oWOi2QV?6egr_+AYV*l*> zk&Qpcyp?^uG9LNa<>LsC`~z=i`R(w?e_cL~@W?OxQB;Fna{){KXq>ApXdB<$-l*;POns_P0#G-qDK6w{!8|C*PMTl zd>1_GypihE;Zf(rPqI1#@W_9c@(p<8|M^3fzZQ@DVL#7&A|CkGn7t`ORB4 za@A}+@`tRN<=@96KPBa>4#<8kvhinL+bsW6Jo1BA$Z{R<$dBJJ%Wr{4e!~^Bd`~>` z-8aqhhvAX0OZg#q5qRXs?UdEO5s&8I{=UTs;gzo8-z!Ge0s6i2)spnBi(Mq zqfT|IGa3IW`DgLScS-p%h>yr1$`E$vK=6rVY zF*)Dw+ETNn+mxJ7OFk#(e@?zQ=PRZc>@IgmW4XrOV;s7!mVMnGkM)|8^0hhtAbG!> zx41s*b6CzhB_EgbUdgBB{G8|uGYgOW;*@^}kNn7#uR1(iP-NrJHt9t%)j98zyf)`EllRYg?X6j#!*f14 z`GlOmoqR^l7bkxMkN$t1`d@@c|99V(Ew{}PKVGke$-CyfeR}cEE_l?RlIqvtQGZU# z55Ob;O3F9jE5r|^+jx9Md^)}oJ|Ay|x9F1<3|blQfUkmg$5+MsG-<%e7qWOaa5)Mc6bMTJ-j;} zd}(@7*a3L#KkugfXD}Z5$L`AZ=kxH$|6=v5kI{JK_ed}Dnw;}9lRt|`opn>4xp?Dp z%P$H$I$KUy{P`~VPw}YJDb?wSNB-XXvi`TmBY$Gb_r@dt_5E4CFCO_(DL)L~Abud- z#^D>{)A5b)`FQZ#4`j>z0*~d6Ps?pxmn|r=@#n*bvwWAFukc9by>i|)`H^_k|3j)j z6p#8BK9SWKlk>Hn%=|7q>U@^!Ov9tjj_Jiaui%kCV2#o@OSc7ejsG;RQ{=ZvFUn}y z_s8Bl`D%F7IX2blf=8WCUMzjHbnAt08sA8_!FWe}B)%Cw3Gal@!h_HGZL`KDyn{!d z7o|QIP*P_-N|Rr1w86(n(B1KBmc&ntWJ-d|B!rO z&NqH1%MZ`_LCGiN{Ji8da{ia(Z{X4A{;AJ}c-Lq&-C7@){U>NUybB)O`n{~r9r37t zY^vV}kNgKIe;gk9Q&YYkkNh%ov-)FmUYmSs&g+uT&G}8qtBx-fjk@X2W67&?zA*X5 zc=UNj>a#l@wYq+g_1Qn?*Csy|k2(#h&Iml}Y&0*cQ+{1)xz7d3A0;1kZccS(;qfyQ zKFaF6gGYXR$}h$vKR7*Ey4(q+FG{zt$j?ss_IP}6V0sdDGd%KtOZgsn;i zBz#|d7QP?85Z@nfJ)qKmPrM6$0Nx7^zBP^ik$8;fPtte}#UsDp=cR9!ZewyjI{96A z)aje*Ou?hhoWEyvUce(?{@q&h@W>zjRhIu0k9>TVecW1}nEe~sgW|7r>xc)ho}LWc z8jm{Lt(E;i`SsV4jX(2K{>WT@&y*jE_hPwY@PqLw_#yZUc=U5gsy`2p_#Ta2l^(Cf zBY%C$xBO+c9+5qi`m5oQZ}>%)E5Cj`qP@xYB7Yb@7(W~zi64Pa!u#M);nB|xsh>Ic zk>nTSN8!~2E9-kSUV{g}o*vBD3yohkNjupPHIEWd!#$5<8yv<@`v!K-=%HV z-%LE}k4<+D-ohh4VC^iw2#@@C+r;0c*HfI-_|N~$&yTH>ecc|9 z)ydg<#81bcw&|p?CLZ}KQ@$%6`H|^lvI`#hu_<4NM}Am3ISjxf|8B}R;E`{hP7dR9 zUY~q=&by_P#{8ULk-WtzrJ|)<)Q&$-Ctn$le!frrbjBn9SUUOi%6WA<`5cKyoz~T* zA1d93;!)?KbW$3V^Ouv~g-4xE)lsGNes?_TOiw4V`S^hNM!K~al>H~@M7#t3OT0TC z{B%0$9e_ta-Kw*?gYd|&l1>_DliBJCzEEUmA)w5!Xp1|b$nG-RgIq(-%Pg}{B*nyAB@-I!KOEPUCPhIBfmJEtlq*Se^|;d!XtlsUHn~|=TC3^=YPiGoRqJ|BRMmD zkio`y)W0s}Yw^ghb4*shU(QD-AC~h~j?MB{;ZgsFRDS{<$-f?#qCDoaXN4!4u`79p!gHnDT9{E3|NvOpcS;JxRr!GxG9ddqo z^6oi*IC=k^H%pUNL(Y39AD{DK$sfX_|3Rt$nRxX1QktAT&-s>Va%z3%kJszsn zSVoNto{k6CrTqMyzmmMgkgVUx#-9(9cgXp-$-C!#rSr3e_s{u;$s2OMee&@+-!J*} zoYyCxpYunOw>bO9{eO_WL(W@XkoDO;=i4OjpYtP=56}76$tUEzLw#0%M$QjUz98qr zleawQ$NfK@ykpMiC-0H-RW8hyJ225Gx=i!lT zetDK}KJ>@y)hT)VoZp(fHs@24?~BKB4@}D)h{qCly&_xg8F=K6O8F6ZB(F&Mi8+5F z`OKWJbY)im^PKOJ{98PhdrVqxoAZ7=4*iE`b=u*PKPTmD@Vl~TV}UySZoD42zr|m`qyFlt{#<-I`KpU5>-7>|jlYa< zj7R;oQvF)|cjWuwGw@;fEBIA-)L$pnACLc@{B-n;IHFb;L*=| zsh=MBAIKk!M}EVUAB4{$KLURPzY&i*o1{9E@Hfdng-5Kv2$slmS`Ux$B(*W>@d$Ks3esrdK!Jp7+{^UEv!|A4p0tCr0&@pmm={%pVSeeqb| zh z#W%*s;G5ug;jvy{rS+PIZ%Y0ZJn}!;AnSVp-jV!Qc;wee`PNrg)^{`VYvYmckn-K| zPULsTBfnkB_ro_Qe-a+~y;FWT-kJO;Jn~1R{3Lt}^0V+Q@rC$Sc$;e~XlHUxE{Lqx|j_*$X06g;bDL)9`gZ$ZepgdC#QTzd>`^X@E-U; zd|!Mxz8^jT-yffW_rw?A2jDHQudLUBct`vod}}<`cS>5{o_H_vgYkp$k@z9_B>Yf( z7Tz0Qh#!Wx9$8th@@EoeGp?Cv+9zGsFAD@n2fX~P4@fJ5$`o9qGfM0}n z$1lbYz~gwCk&c%^_%QNklz<;%bHI_`B{P5!4hSH>;!m!*6M{2KCG;E^Al@;&hp&d@{N51@fn?A>5j7E*l?w@{(M}C7; zzs;D+xJ7dAO>K;=jRL-(J;ti=%%s-UWXg?}a~s55}LwN8(fP zN%&LvEc|JFA^r^B`i@HfQ}HhNvv@E3IeakwJboS?`{$Ije~!VYk)MLUfX~5S#H;SC z^#5DD8lR5W;4k5O;n8RL_viJ;UnV~s{~bO7pMlT7U%}tNW4Zl0Wb5-e{(JJ@;*sy4 z@~y{J#^F`+UGSOsj(F4=nCkS#UnAcakNlvNABrziYT?n_%W>1nwO@Hyna z!Xsb)J&3LDu8c#B@L$t7cgEkLPEY(@d@%kVJ`$gcPr~2FXW<{<3-J%}*1xXwKM(JU ze}wnO|BMg8|ALRk=i`&{kMY^~C-@@#uXvmBmHrptUGY!x-uP$uQ2cNB82od53jPH? z2mccP2#@_|W{0fr=J!*%yz%_mg)|0($u@W`K%@*VJ)Z&$w~JFj)m z`7X)(<3FQ*1O9V-Jl+zYj<0~v$5+H#++SI*mGG7ESg+I5dUeKIk?)DGj1R(B!AIb$ z;uG=K_)L5?{4G5CyfXE<2w$Ci+XpJ^y9VA3Z-e*2*Tn1bweYd{FYu{&TYN6QHeU5$ zrO$QnYJ6S12Cv5J@OF4Tz8*dnUmw2*k8!>&jq`N8J^A@~?D+%Je%@kYWxX~azcL>6 zpDFKe_=e=S!z2HC%J;@MBHtH}{6{HYk9Qz{IUe~%DL)?HnEZ5n6MR0tDc<6t$~bhy zJK&q)-SP78FpmoT@y*FM;GOaD_!jtdy!^ZGqW*k*EAn69F+M-vB+{k(Jr8I9#y0Ol zeoZ{`ZBo7~zBT#Y_%`?ud|UiNJnCW{&@lD`X&e5aJ3if>1LF1|fp^+;uXcfhOh zZg>s8BVLE^gxBLc<74p}d@8;RJ{R8=ubNcpe>c1uuf=Qe^6xy13j5+Qo?E8z9Ek5h zoip&r?~(E&@jb~;!n@#LH;w=N&+EqyN^fdupYs99Yjb{H@_zVXEcYZl)@yKDui^L+ttF!XrN><>%nBrdOpt7w3G%^k$v5lYcx8*C+3m^EJ|&c>3i0=H&G`?~vZaGcMCHn6@MEdd@`+0S{qTczhs!0zMq?k59k{;4||k`X7jQ#81L| z;3wk)@l){O_#k`&ekwi#KMh}ipN_YjQt5v%z8W6K(ZqBdb;i#i-xEI*AB3NUkHClE zH{!9}N#)}mKb!nhc;qLSk9YhW@{93v@wQJ@#$hPl4L=X>gP)HN#V^3e;Pv+#F*v3LVM6~7#xi(i3PJyYrPO1v5$j@RH<;dS`c zcs+g%J{BK=PsOjr=i=AlRZ}bdUyoPgBk>x16kdnlfY;-{!pGvH@u~QY_+0!Zyz1Gi z##_wUH{;d#7`zt01@DL7iVwqY!^h!c@oD(&_&od$y!msL{_n)wM>Iutze%{Fc1s$Tfx^f?%R0w0M#iBH0(;Ir_j@P+u( zcW_$&Bw(<}YQezIEHPukG-$!eEd7SQHN2cvE82<_Rk@)iXEqK)Fo9ax#TacfF{}f-0{|s+Cv$DQF z$GhPz@jmzp_)vUBd;%)JM_}cg|d>woozAiouug2%$?eOM*sPw-c-X32cuf^Nr z{qPO&VfcplID8}gemstg)6;P=1Mfio4LtJ0Qhp&GSB$Tw>&DizD(f5GJbhSE7kp#t z?}$hJQK^0(d=v6R@lEkDct?B+z8O9T?}RVLH^+ZB(b@-O# z>+!Ad%kii)A=R0HcOgFm-x^;vMm>_||yzGc)zm3*V0XV0?T0JUr^m zOLfNLJCMHzk9>=cS>My~Zsh0VJK`<=SXtkl@DBLScz3)8KLC$@R!jX1#CIV-9N!h6 zfbWLSz-#dZ`0jYi*_HL$1Mi6MiTA*};{)-%@ZtF0_yl|(dRR#IDR-j0Y3tt zf%m}|;78&u|5WM!D7+(nG~N@h!w2Dg@sap3_$2&Td^X+>UxXirx0zGv|9HGBegfVb z?~f0`2jHXe6Y%h8vGQz4j+WqUXRz~WAO{|srW_sT>N6ZYHp>^VR$uu30{L=ir3+n;q`a}J{G?mpNe0B z&&99AtKP3_yu~%+aJ(A73a`Ph#`nTw`yP_EZ$JDR^26{E_&EGpd>VcoJ`cYhZ~j4L zy+-2g@lkj!egobQ{}p}`9_xE}THoRLXz~;A8}S+VP51)*X1vvhmGv5fcgAnQd*Zj^ zgYnz&k@#4A5`H^A3%>(jh~J5~o>%Gr{~_;P;3d7%dH)`QMutYvLl7oR5V5QFokn(g zSEnm|+xFg*=^1S*)m88AU6a~Xm8#l(nUg~fK@jKU5VUiGAZP?ZhDHzsjX@4UqY(s+ zpogH*`2U{uUe@n@*Lts2yE~JAK66QbyWX{)b$`~gp7pFJh<_Y$sn51opSy^EC;k2i z@$VvjKk@G-{uuEy#GfJlJ;W~%|6bx(h<_jP8~q+9fh<`uvBgB7z_yfd$koe=o zpCbM&@gE}oBJm$4e%)VaIe&!sEySNDzL)sBh_4g>QQ{8~|1sich@T~Xj`)ugzexNi zh`)!p^ph|4`pJ&J)aCj~`u!V-%kLlYem_V28T$QU;y*>aPF&LYHZPqAi2pSG{&C_z zL;P9d&k}!;_|FpGc2Sq>=ZN1#{O5@;5`T_(llU(Xe~|bu5;=fFM z`(J7Ke}(vm5tsV>5wAWci2o}6exA7e{%5@3A13~8`hA_a{Qg({_9Fgk^!u+QF2Da> z@Aqej|2qBt9P!^E{xb3RLDA;t6ApUORzfJsQ;=e=u`oB?PDL>5LC4MXM^ThWP|2^Vu;=fOPlepCXpLzBF z2=PCl-#lNt6MvNW-w=PA_{+p!ApW<+Um^Z?#BcaJ zE&tyWpCW#V_~#Ipe)5;My5Aom{vP`M{lx!)_+!NXk@z#jUm<>h_&*W9Lj0eJzu({M za*3S(=E->z@qeM;-%k88@q38>EAa=2{~PhgiT^wC=ZIe+{u1&3Ab#B?E&qQKzlHdJ z5#LLE+xxrU%Kxqte;x6Mh`$fBJmrDZ~I3r|3?zPiTFnmzn%C;6K@jVN&G?LZy^2z@sAoifPa^(2@i!9x zJ>nwg8$CH+A$~Lce&;{w@_sV$IpUu}{4nu15kE=%7UHLge=6~_#6OMrdE%c={4()d ziSPVpE&pc_pCf)7@x#PFllV#E6U0vwFA+aWyiEK&@k!#BiBA#V`7c`jY2tIlXNVsr zK1=*0@j2qBiO&;1OZ>BlpC|s=#4i)yMSSOFE&t~b-$nd$i60^UdBpE0emn8Uh%XR- zhWH)CFA(2N{0i|!;y3=QmcK%L7x6vBj}X6;`2EE95`Ua{mH4y7?;`#p@qNU%{hO9^ zKk=K1A0WO+{2=ir@k7KPB)&xa3F4nm{5j&w#4i$GA-?_Jwfw8ZZzcX_;`@o;O}tI~ zEyN!tewg@^#NSH%-NfHU{AJ=_K>YeETK*%%ZzcYP#FvP_op_IUjrb$P?;-va@jCJ6 zi613?iFkwf4gaC#ZxWv(?hs!kzD9gV{21{^iLVoXns|%&3&h_+{1xK&62IX;wft@3 zQ^YrjuM+PN9}@2pf0THS_|wGiBmM&MKJh;!F6-}`y!H1AbNc;_|E0?{Bz`;bP2%?u zKTiBX;wOkdLHs1~=ZK#o{u1$b62ER63WI;dO7Y)_-%R{|;)}%pJMkv*FCxA{Tft=`ucY5!CjM2#cfOA<*H;t&MBl)DDiuUe?9RBh<^j|$BBO<@n?yjCjKJv zZz8_!IxXk_A$}9_|4V$4_+!MI#J`#NgT%ju_!GpxmH2bSA1D42@oyu3-TP_zzn%Ea z#J_|1UgA#>Unl;Z#2+I5UBu52|8C;vh@T;Tk@)uzzyAHT{NGFbR^s1Bd_VCgiT8+q zKk-M1{{Zo)i2oq*=ZQZ>{1WjWBEI7TwERCze1iCo5MLtxH1Q$vcM*S-_>U4lOZ>-( zpC^8n_+{chPJHKfE&optpCkU0#19jHhWJV1KSlgB@t-DsmiW&QKTrHw;+Kj4Eb*Nm zsOA4T;&a4*p7>$n&k;XK{1=FyCjN`W&l3M7;^&ER%ME5v_~_>I?V`G24IF5-Vc{0Q+2#P28mhr}Nv{zt^0 zA^yk2FA#r`_!Z)RLj1{|DlW z#Q%}_0pc>g-sX+3b>gqk?;j%mPsGm<|7YUwCjKwPUnYK;`1Lz-t;GM0_i2owOZ*1n=ZSwL@yokCh^;ePY}O{c!~G}#LL8=AU;X_IpR~qUm`wD z{JNc5&KcsbCqBSW-tMhOw-TSF-|r_rN4!mZp7ud zBVHx`2=Tj!KSg{W@#l%}Cw__e0pdG8R?B~o_yqAo#FvOK5$_TIeBzG~Unc%E@fG4P z5ML$!3h_4+zu`tL|J}r=h`)vSD)Ga_PZEDC@zccLM*J-CFCcz__z~h)h<_pR8$V9V z|90ZLh}Vc8A$||>2Z+~+KTiB8@n?xQh`&U)ze)TS;>U^aC4PeVI`NalA0mE=_!;8wBz}(geW2zeN0D;yd1`<^LMu6U6@~@g?H_i+GRtBg7ve{=bPoP5f(#zd-!! zh+iiDDDj;)Yx%#P_#E+XAbyzmHxfTd{50{?#J`F7S>peP_<7?0m-uDkj}hPb$y)wz zCO${}TZkVa{;kCCC;m9`$BBO%@n?yDJMkBZe+TjFK1Iv<1o4}Re<$(1#J`L9I`Qu& zejjnsSMT%m)rX0nq2E7A{CkMMoA~zq#2Z;BG{~+;4 zh(AUAY2rUb`~~7aO#Bt%KSKP5TeSR76Q3gfF5;`if0X!;_>U2Pl=xZV-%MQEYtw75 zv&4U#et(|$PY}OM{3nU;{8U}8XNb=c|0&{!iT^b5lf-|9_-W$L5`TvH&l0~t{O5>o z`!p@*&lA6i_;bW>C;kh>?;-w+#2+C3OT?cbevbHa#DAIiOT>SL_;sJI<^NUUHxqw1 z@kQdlMtq(4uM>ZW_-_zDL;QK-=ZOD5;unekCh_gJYWaVQ_$|a=AikIQZxdf9{yW4U zBL2I?&k#RP{2cM$BYu(i?-Sqt8Cw27Abtz+3&i&l|3l*I#Q%u+L&X1>_!;6a5B5cg;yZ|6ApT**uMq!m z;x|rd`9FgAF5)*3KSKN?iQiBBqliC7{G*9KLwqOkUm!k!Xs5mYd6D=V==a;FwfrAL z{1)OLOMEZ!8;P$I|2X0g6aRSPPZIwG;_oJY6Y-ace;unMErT;w-CQX{8NeVnAP%s8u1C@pH6&<_^rfy#6N@hqr`6`{xtE= zBz~Uw1o6wnOT>51Y5B{<=ZH@dKTLdz_(|f^#7`5SA%2$lEb;Ti=ZIe>K2Ln-yq5p7 zh|dxKY~qKB?;?JZ_~#HmP5g6-KSTWUh+iOnJMk;T7l_~ZSz7)(i0>l4oA?ppi^T6I zULpP%@jb+!A$}+E3&i&lze2o9{Kn7L^4~>#7x8_>j}YHa{C?sGh(AXBAn|92A0mE% z_!9ALyR@92Py8n0%fxRdzC!#S;;Y0TApU0Jj}yO}__M^{Li|PIhly|d94-G_iQh#0 zZNzUU{sqMEA%2AT1H`|O_~XRiPW)NoHR3N4zlZp?&(-qRiQh#0DDm5gH;CUuyh;24 z;tui0iLViVmiRH^FA`rTzU}k0{4L@)5q}5q+lk*xyh*%G{6XRy#Lp1#5I;w}OZ+17 z9`WtBYx(aZehcwF@x8Ze_(R0M zjQAPiUrziS@vk6$k@!Qzx9`^SeGzk3 zpC-PuqRaJ7#CH+@Kg5p^|G&iVC;k}m$B2J3@n?vC3-JrYzm@nE;*S%*agUb&+lYTM zajBo@y!u%r{_XVpCh_ke{vh!uh(AI6JBdF>{JV(%8gY^5f+x?*#J`(i zO8k3>?c{AJ=lNc{S}TK=bq-%9+4h%XWUVd6vL zKSKOb;!hKQn)thjzd-y)iN8Yp$B5rh)$*SuK1KY;iLVm>3F1TIKS}&i;?EF&n)pu< ze}VW<6Mu#H&k(=iE-nAF#HWb=Eb+s{e~$P`;y+LPH1X$%pC$ea#LpA|MdFu<{}SLzf8ZsK>TlsUm^Z?#BW^E z<@$T#yNF*ReuVgYh~H2AABaCj{2z%wL;Mxu7l{88@himtnfOhgujT(2;hp%%T$_HI_`lNcA13~9#J`@nq;r#(&ROFBPQO1-{0i~Q#Q%f%&ShP$|0F&~{J)4F zCcfKY;i> z#J3ZFfcOUzf1LOS5r3BW2NQph`1QoMt!nvSPy8n0A42?g;vY)<9^yNQKS2D$h(AvJ z!-+pj{3D3JNc;xke?@$NqAYstzWvR*TpvllzlHcm5ib#!boP4bED`@``hAc1PU4Rc ze*^JvA};Cg_s0?OkD=e6C;qX-|Ae@tv*e|-?QUJ(8|n8q5&t;iw-f((;`b2$1mX`6 zzlr$c#6OYvv&27%_>08fNPOE{wEQ;{znS(AhB`)c=y!3B8tjl{V{eBnm&mew;_-(}RC;pklA0s|N{2AgU z;unaQiT^oqk^hT4`M1AS%RfoKzlHb|@x8>SiLVo%A^s5YS>k7i&k;XIe4hA4;-5wQ z`nPHMKb!ci#CH*2BK|qVd&EDN_@l%>kN8>Qw-Y~4e1Z5C;&%|g@e8#4yNT~2zDWEC z@e1+#iSHr)81XxaKSO*k@e9PO#IF#)i};O4wEX*s?;^gR_&vlA5PyL9LE?`SKScal z;!DI|B>wrtw|$|ObD8)}#8-&lPJEU4J;dKk`~l*36MvleTZlhP{4ntsiNBTjwzq5f z-$wi<;$J}gcH&2f-$VQhi9bO6?Zh7^UL*c2@q38BM7&OXdrixKl=v;g8^re#ZxU}4 zcZfese2w^1#E%hwp7=WPOT=5mcif}pe+Tgi;`b6?BHkw6BfdfW5#k-U2P zf%sYCuMn3unEg3-JZ`&faB5>%KZ^e!_TB$q_y4W$wClGGos+|Dw>9g-`nKDS4hGv4 zxUKfKm0@|ZR%;Dvjc#W!tapYr=XkxnSsyyh$xuzLnwp@Kn#iU#)egI`s`l@(zg_`iXO2WqF@S z;H57GDK*yX{o1f!mr^t;<@ON2X{?k*PQSXmGDm(o+vsle>V2oOq<#;%Qa+ezJDp?0 zb@_eDZ%p@&I?+Yl?nWgnw)|9E8B%R=s;xlQ74#s~?qsdn z9n|)04ANOwfX-|Y3AegiV2bb*LrQC5bN>(0sezdtxT zbOys#=NQKB(CK&T?YTQwLH2i#&EM$^SB8D3zQL7Y{JvDeZ&%S$O{d>C2A}!!@}BnQ zV7-dritmEoyAwiKc2l1;SaJTy_h#?_k-l5OH-<&DA}bkApg=q^io~dm9*xJ zCXqu<`=`kgmuFVj(Vd%+w%)!Q3!AgI+eWXI{*#6x<(P=wFCz@3-Etqnj9L|`i{;4bp$yG?d#YCU=w^+ZDe>%I`eY4DE z>E$ZTV@hiER9&X7*sIfLQ80zJXtE0%9zBVltAIZ-&Y%$c_WMVN*#-QCAD)- z_qv1D$(cQ^wsWvsS(>X=57qWm_hYJ9SN*Tk(EAyV+?d|}&TF$1NTE?7FX)PUpN47?peoMbKbnwBx%wM>IW$Y<) zXuC?k-|c7ZS~FP4E1lyOr8B0crWcNO`@>*DlZ`>C3_YgTcN(ohtJ`5EPZXRJQPJ_i zbZz-4lxoMRt)u>&zPrBp8kgkU!m^xIg&_9Ut|W& zU5ug`Wh{GrMLI@~vQMs{yLq4ZU2~r?DuSw-aaWZ)rqxno^wWedr`3v-=L@X$m5rXe zmrgEzX<9V)J@p1QRHw2kGv-H1gUOkb+nZB9D(~(#9Z|Z5m^#$hEz;ZcoMSF(CE2SS z><$;5wfbgzc&LAHv)!&N?KytDV(wp!<}HN;%%Ta-uiV?}?e1=D)U!;gO1h=Kv(`HK z=FYIyRv-F(NG)HP#!-4QDeX{NXrHK`8tkdJu?qUys%^V8vs~{qyBlaKEP4L0FsjY_ z)yy*HY^Nzd4duTwoT(4H8?8pQRY6L+`LHG3XmzR^7Q;8PSvFR5HxYk63Wj6QMdP!dTEkwzU;k-1 z+G5c{%nqQN_Mnj2dRFwurP)rmvxcL%cKcLq4K}r`-%XhxWh={!&L#ALm>6nzJFs_Mx?RXs{>mRiJa!fS*v zC+s&*YMm@Q$DoV$Pg#V^ora~a=1!wD=}P4ErP&5Xw>1(BZ*x(MOs0}aHEY|uiC-m? z6Ed^ge7z~`g*a_T~qjCJGQ7}DCMt{xoWM~M-e^Q#3`DnB6 z)M$<={IWJ|xn4YehqfkLn#M6%ABX<}lB<-Gh(sdXu>u76mHG`lep`KRHU zw0AuHdzubXf4V1rL!uMRFmKS0lV%M|jg{u=&Dwgm;f`kAx_*WDO+z_MsnOWNz=UJu zAT;=G86^DNmbjY3bk~KCXQ&p=JywbFrj;O$+ zBr`?gR65Oq!c1ymvL#Y3tCMJ>)=P74O3=8EK|!FB&Ec$TsD5wiS8=J8C*0JkutuoE z3Tt}$95K+PViQDl!SAKj?{-AD8mQ^anrIFo%a$~QS}aoRLVYZ*$VEC@Y+5C+x9NV* zGjnwK#3tj7A(#hzZAG?aHN&izy%FYJ!F07tPZL$xG8$vW%0HH3lN#HAD$j;{m%pBl z+G#QU@IdgB)fHG^xcY-X7_OGoatu~~7V}7WuB{)5~o;oXVz}bV!+Jht2bg$6TtawY|dY1lJ zKC)G>uhRsX#(W!UQ}ZMDs(?thQilr+1_q2Z+48e~nlC$dEEmcy(=?#eQQzvg&pA~c z6gE9Zx>c}Yr23b&E|giL?dpMH>u22FDM$%x%>e64<6ijEHyrc`K8tc&D7l&w6Ub6= z$qB^k|3MM31Q|teCHIHAr2@DkADBAl z@;^!yImUVusx~9%z}q)VA1;N9Sz2hSQ&gply8fr|>5JGjvdu&V687uGC{kF;@~pDY z`lr6WZOc90WGyNsoyp18u}&B6Uaq}2oZdjp(F2Q@OIo63ZE+5#*!K=#b4XY&i@mI| z+3$;O9rEA+K;)8}YPG~oe9YJ@my86((x=kn%~5g>i!{fivd|sub{3j@yA2s)o{^4D zG}61erIhr2O0Ab>L!YZM(buWDCx4!ndD)>|db;8huD;UjG1aiRzuj=;e8;^Pnx_RO z;pEkV^SI}LxUzY)*Y7sqbF;hK8TPwvHJbBI@8zHi$sq$D?8pV<+@+kOlOZ^gimN{l zgwz%)^_5R|P5Ek5)26h|jQd%xtY+Zp-&pr<<-!ygnzK{#D^I8a7EK_|&K=ZoX&S2& zuk0Brcor9_;3kY~g1#BCJh5;TJ|3vv6>LD9p}NV{&$JF?PRwe1)aA&Uj+_DEHXC|q z2hK^Tklva>}<1!*pmVHK=Byh6vtnpWKxP%KbnhYa0t93RSPb*uKwu);x zz)2Xian{@dpCoj|xLgu$k0h-H#pe(4(l6Q|qvdLCtE58umSxWr9Ao@0T9|C9=NH;P z=5Wu#toG}|B4C9BeRxN=+xBg3*ee&6Bqli}Ry57XQH5n+&*!1$>1cw|6etJdxO{N6@=;2X zd6#`-qvDOHVbk*gLJD?JVdfcm0R!jRCSDT6i1&~{0(}k`!jglK` zK59tBakPKGtUwSJzZjN;{UMopdo1DGpyN%i!qMJ4xeaw1KbOcaXDhBZzooeP-X21A zIr>&zkV0wFX|~`Ck29Zor{T<1@F%%pG{SW>b0no^VyP8sDx=uN(u>r^2AXrD$jwIY z!$g^relzDsYpNFN-Towp5w#(~E+=ZZ$OF4%X)vtfIt|cN8}@WH;-tp{RS+4}j}Rs9 zJJprlwf#p+728#Kaj)=xd-deA*5%|zy;n#Cct?h-AXH^)N;W5kEz8Y1sRkkRCR`5| zH9Gw@p&@Zfr0J%l>AYXW-n-47l(m-q&vE%fI*?aYArXpx=axMFq_nhqz1!R0J#hzu z0aupZVew!Krm6Bob@1llT4`nl2aH_=*uWJ?1j;)>;d+f(Vsdsj&K!oY+c%x1E`r*K z+fGa(p=s7!^Zc|Uejn0Cqu!2IZt1?0NpRoVTIIpol_HMiWB-ewLQAG64Rur%F&cG( z;L*3iKdcUquuu*8$weJYDG9&Xjmo4;#d7|t4*aAd%Y_t#q|_|+pjVaLA4Zms7G!P} zSw6fE6NQWajbHOYLzWRv2@XZ4`~x}nJll(SWXU970;Nee926SrpalHJ%%lQJ_^q2W zwL(tp*@{{&>@A)#{ZSlyvt<$N)f4QR)?uiVpSh#oa@LCXg@o_(cZHwl)|D352lNNUNvClv`R zv8xS)u6Zd{WYje|DP7CjWLuqcCSfc{^gV9xi9Q$!k85$~(U;!*PfBxZ-Tn#Ob%qB^ z&FQ$e4-;K`%rsmNIZHaQBF6XQslyv>>wJ!&SA&CMk!-i#De}B!UAzFZg)A?}rdpb> z4iKiG)kLm1&fGLLiKo@TxlR4MH31U z?6m5JWNRp)chS|LxD@`}qSgA{EW9B|_+cQV8S2h55d7qWuga5Nyw$*S&Wo;><>Sd| z@8dh$-J=o`lLLmiS6UH2(X^HsQe;aggO|r7q9v;Eu}eW#xfUYUq%FO?rvmj;R=B#SLT=FFlco?F;$|shye2&2*QWYn)NgtEu0gkB-7RFw zJmK>UxzDTHjbhKW^fp6Q{p&2Em7xE6S4QM6Au@nMkBdd425e5fx*5s1fUK_jslUOq z>^8$io5w*c?qy>VljGdXpUq@|1eL9Ls6eI zXQ%Gp1@WROKU2^dcrx7!OGYrJO0wA08tW~DY3sG{0#oYLXe5zoWSC!Nm{&^EcogiU z(+H%!nxlV1RfdoJYCv!Yu*^SrSe7b(T)2(=N%CVLzuV79suVlvKRoUt>sCn!##Eiv>j-KCsK2t4TW33!PJy`>akIh9INnnNYE#F1dI(D&Zl6 zAoW63l|}4g3CGVap?=(lH(HsVL)b!K>p1kWwjj<=i>wl^0OJ4nF2BF#|NPz`7; ziPu2z^rUhRkmHAiL8H~GEJo#>uhouqHr@9^!*74<=dq)f`M7T)?{tTb!t=XxVoh9V z!?~rl-olfKmTJqNeNlpajHw$Y309cS*aX#gU`Xk452G=wgx|e%mhudJ^oxQrY=j=v-nS)rG|dp;Df!6OwLpcUdo49ocrZ~1P>IU7Goq@a zFHP5Ko1NBuwcfB_6Hl&?6={wa5nRB>t^D{dBnIxOrh8O_unO|nva+j*^Qdwl-CZq5 zGIae*VfdPr?uFiE$~Pg>Z8{>~_(g-MtBSl)P1hoG%QPY@_tuu!(gC#s;XY^69#r8| ziq}^sYRmhUB)VK^xaaSU{!|AujBTz%p~q+=kGy6PHE@!9uNn~*F96;$+?<2?Wo6iL zL`NxW^KS$3GKP9mLbBt$J`xccvt1=x?blSCo*DP9P&Ysiz+h98k=GOa866#evQ~3n zrgR?~vOG^&KM61V)aNOE=d&&pBWNe;CC5Tfk-MQ4L!I9rD`p;eZnDTk9S+~d)|^Tg?2jQoCeB|He3#gI`dd4>UHD=6j^V>{aM#nWAG z92r^Gwk^sie)APmq9UWTK*bfxCV#aR%O-cF$!chyD|J(|dOr%{FUU5VmF_!5n-@MRN+R_o$%Joa8#ciWA?xRnf@$BcVBReF3}KcckCL0UH2!_3S7pM}M-d~_j0C5fa1^O0 zCB{|s7)Kiw#3oZH`QZ99t`^D>kX$g#VyBUvi?7vdF|2l)@yXTeg-*b)TE0!wo+B$| z+#WuwGK?f_rj*L$F~{7AZDoemjo+3PZyGN-p@0@+Otg%J!Zz4ybq2jUQ>~6Q$E#bd z?u6-&NmQlxL;#)>L-2rFPwu;7p{|*+{;{R4B}C)*Un7{1nW0jeQOOPPYMxWW%WRGH z(3lLeO-K-_=m!aWfrAf6mRE_1HS)n*0oY=VAm~GlOS`b65?vHRKsHq z<(mJFgAzpS1@rFxkXmc4dU(*s*J1_1%XYyN5Uc2)-rJG#x7=c|%dgxald}7qwrmL( zYgJf|l(jxwyp^GIU%ct|=n{6`Nn1)70sK>daJqr+5hx8RoOz|Kypj&}<=U&VBIwnm ztX31bE!0wBS^Q>}erdcVOdfc?AA0L#WkatpxjqUtxS>YQ!dIeFZ>-~DyA~uAkJ?`b z5kcHt4%L<)HIrH?CHLmSez_k_>8m6Ez!gsEYjP%3nN?%b@_Ko6Z7~WF|Gd4`J}=D> z%(~@hIij1wwbZy-_TS3~du7cnmhA}$*$-GE~%Zx8R@umtjhS*S3gVsCM z{vq!Y82u2ZQ5)UkPIb9R5i5uARS8ezN)mWdcg?}83=IcI#-3tfIr8`WhX43FjtmQB z?Hw{&&KSpfqX7>&%k%Xx@EAwTm?g%V6`oF3A*Z)KCx74Xb)NJy%R()L$ss(TMxSuh zWTRHoai=Uj)snD9nJ7!3AJN7nM87iql~7K99Qvobg~rpenca9U5X!OEjHvv|o1)_W zd$bBg_o?pRn5ewEWLI;{g*sioZqWDQqw$xz&MB;TgH0P#JU74Ym^y@H_Pc>k!d2l(+ahQw#SWl0ed8^_krwMT{o_P0lYQFI>Hu_RJ%wJFBrDG6W#D<7P>qUU!0m$b23D3xk~JEpOS z+CC`f`#o$CuCHgN#1UgOmo#FvRt2Vq##1vaMc;i^8%*5bbv;y3cPSFv63AAOwl9lx zyJ8|{X*#=vW2)ta(o}}_wTZAWned_I=5EL&E)PGZ#>0*|sq=?GFxpCml9rQ4Y#t5k zrIGyX?(QZI%+|<`A9=S@pA+C@1u3Gxw#0O2o)lneb07WQXweDW5I2ZVxvy>KIf28D zP+8+}L8QB}(e2da$k6j==*xz(Yg zY1Q4#QVE&9Q_S<20G0eED`droi1GDQPrqF zoT0ncrgrOIWy^-Csayh8R&I5hqrZsX3!>YH+eCuMK;@m@O!jxeHAulKVi*3hPMCEmcIY@D#` zna2BJqEp}sB0ah3$;vEu8L=6VbW36`Hjce@;^v2m`Ix4TQreRlo*+}vw$U;aNHkGM zl&L_HQgL2zD5D4GH`Xc0oz6@)g8Z2zcIyJwNy-d*v!VFw>Mf9V ztX<4+vI1%P7F%vTCrzzQaa*vFk;T@GoVKhAgL#O1Dl~~L%Mi2Lvd#5FPfNJT z?o_=wP}8iFmG@!d1eElf@kOT{`57nc+i(TUjDbU^&WnJC;8P{tdn)MICku=gp z{U?t6r<7E`@lUBkFCF>6i0wn!lQR1i6#tF-z3|PJHwqiexHlafm7{*j*x(=>L#wCV zb!sR2*b%rFuBMw#qkc*|@Kmrh5>pU1P*YI;Fr|y##M{gSe~AtK48nU@rgy&}3C})p zr6QBqYE4K&ub5huD|-)G#oWGE?IF56mT%b^?Z>lJbVnbCw<3bXEC88gQ95x>`Q5uK zp?-+sWXjGmuWL&|LS4@ci2aT=s zhjwGe>ls}j*N*1rx8>PchOEvLH!ZGS6~{C)OxNR(K@RUM4d#YqDor5{YgVSuSjHlxA`Y4r^q*RoyC-LPK7wXV@1f@LUhU8aX_${O$P=Wq=?5;}xL~YIV z%wm5W)!bTP|70k#G2&Q0wkcucCdcY6bD=d18puJsU6 z)pkH)ChXq|;^xKfOD=%OecsIG*l6bqx+iu{(v-@71QSZRmQ+j?R_zWk&th*M>2tcQ zqMODJ8J)4dqnjn-gGA2bO2{$7%>L!;@M-Zk^OeHfD5uCTUtc6Beus zIgyN+S;myQZQ6l3PzHJG2rn2i!k<#n(lY#|z0q{|KWHNr`49B-gdy(k@QYNa9{;#z zgq+2lEX(+hbu8eXFqK8Ee;{*}2gXyD$_yDO6 zLs%@tl(l5;7m;GfU(2ZUQbrln_3|nAdb!12V_dn!o=NC6b580k^bWnn7U`FhyYo!a zRA~Jm?|{LnK)SLY5-I2JC-X`)8QDaHda1R{S#~;Hgvq=g%w*XSg>uOIK{<;^!L&0u zy%!E_ZKraw;q>G(>Y&;=;0)Kh&Fb39X0O-n4@DpKFAYfa*NNKFYV82V+#bw7$1QJ@ zVAvTRgay|kb4I|TkUAq^`GBJ?W(13eP-v`;2^c%nypPwKyZuuVO|~NL>uPzza_@Jq8FViR=n=1E23cE{PDwF5RjMUokHsI} zvS=nvx5085noJB!LsAmjgpk$Bkd&IG`StRj`$H|8GHuY{x^Pi z)J<%Ujbv+LBQ%oVz}afWvYcl7Fuau%Ey2&2wgO&}<2sSAdV4>kBo9R&D>14l^Gr@L ztujsLMozOU>ziw9@J>e0IF6AvQJY!DBGTQ!j2r0i*epOvlns)u2>rKS0j-s-JDci) zx(k=|JN0tX?sP%)Q!mLtz|BfrMJDC|hJu)Tvy(ycR)Y-7J zi0QxCk_x)FKLT{aXG_4^FY*;9ZdE>{3g}|(ms%^A8Q#SMY7Cv`nUPZV@b{`k6DDa0eht>G!P%ZgUG3Y-$H@cFH) z@Qfl^Ya?VWR9(YtvjTyBt^F#Lm;2zLF|p>)E7cCR?951Av!RBUnW#V+A$WR~8Z zF?F0hoO0H>Ep+}f6Fg47$F)bsokERx0+c-;ON|;GG`#YY`T|o-L_bu{8 zjEQJ&F5^Y*8J0D4rl0+>6U*mQ2tI2*XJXctvSF`m;+5Eg^$n*gZ^7Ffl=N;lo0m^C z*%Tiith@-EtFB+_dndF>OEGb9`SqqPbmQ_MEDlBX2B*q}1`+=o5Ww4Oh zzt@dHgDQi8EXNb%IWo>?AIp)jWr8#p(z17$gcGD=mJ_8`E9Oio)L?$H+=a?nI%%-9 zmFEy2aNyk8?HA;$cjH6c9Hn=zr%ToraPEl^H5 zte>am&J{SF)AI!P{8MhHaO(59y@j&0C+AR}j$8-v%$?XOd#@GfZc`sN)^T|`$?G;g zP$_hi^fwG-?56kGq*+Nz8@!XgFqL%F;(ws~=G5Zm#>Of2kngfH*lZ8|bJQ%_d^!GW z^KDLBz{N2eKi5dpr(<%- zxgf@*Vp;vt?i4J=B(>2pE@`I}ZC_kcN_8)V50S;sIztm@*VADQ7A4v3I(}p57KLnH zkGGs8VUOpUj^(NOMq6%m;Xe`ajG1kIp?_>sj@JgI@QR`$(=&KSyDPuvGaL% z1cjEnt;#3r7p3!&yGF&t&!~!r%I9~6a^=2)olaa9@e-!f@6_A#mHWKaQo^WMRy#jC zZ$T`qx?nzt$yZ&!fEn3*IK$67khWAB!_r<~!Gy68H`0T078yulyd8Hb3(29%7=6)* zw%CCh3N2w42bZmeinG%>Ry*EuPS|1$NGQp;vL%VAHlEnk;Gbe`oI}ElrOuJ!H7Ror z`BaGwCvbn<@FrzC$y;BqK}k(HM7-_wdLJjN_0~{AFk`urmX%dYY&%j}dRDYr7A2sj zy6ADbe%L+)^Ji=x)@;LZ>NDY^`>y>*(PK zBpa)_Cx2ZZ>1)|<+wz8X;Rm&f+`U{Jpqqu-a}k@JdKLd$nUb@#$eYGRlJTGY3$0%X zBDD;WT1q5nHhDx!O2!w-*GfqJ3Z_TvT{zhmShUFTjGUNFP1;~8G*|<569Z31uDbk) zp(~eIFe*iZ#0_x_PI+=Uq7ILzv>Eng#nf0Sk+pcqdX_Y;6dR99!#oY+G`o^ty*9|V z8!S{q_S$JW#t}Y-#aLg9^j;vqY;S}a8FNnl<}oI#@jb*=3O%i8I3kf_kh&vA*SGz- z2SMqy<4jECze3F%%w&4W2@9*@f}@7)F<3G1jd5Q%qG_ru{x)1x2$_$JinC4^*Rt-y z1C=I-&~nHxF^>$kx@kDrqM)-~1w-s0f z;D>lX!rCLWCY}aB05v&vz>JR_JK`kbVDLn}kI)|8%Z9aK{aEGTOzqB1P`Do~!Rsg7 zKd!P2Rug25egZ>RSj+LX*8Fv#8`0J*Co(t7iKs{?q~Ak>GemN=x~*uIt&ky4vy3r+ z-7GW`EwTIxnrO7YjX!Ot8CQ#$f~LfM*jR_%p0?R(-B;@k`>s1H5BTxC2BQYGWnm8a zFuMMdw4WGH-ZPkrP&8Y~Lm?H$o^h#!7ldm~coSouqs>lmY9~*E1hY!M!e%(8lSuDD zk3us?U(FdIa~QLil%D0MFSEMu=3KkiIfc1@qgU_a)fdkM&Y5Km(W7(-xPE$>psu`y zqpG4f!YaEvN zS)6ze``uH<Cd#a4c+Nsk@cL?zx`q@CiC9|}%(HI1 zHlc> zEB$IuZ=xdQ3`?mU&w@cVIRU3FxL-q4XuZ>EirbcQ$(Hy?cZl958&~mwFI1~VGR#!p zMG_85Vzk6$VoQvaS6UmTX!eEj)`r3poU`VWp^%o>k+!ys(|t!? z%XPKs^y)2StV26Rb$?}(r}_=$d==X@ns3~OENc_niYi^n*ouWRmYy7~p+Xvfu`fc( z{$s!VPB2dJCu?_?OXWfKw{YcryHc7Nwl%)vdE2JJU>-m@+>4QvQyOb5qz3C&D66D|9O9==$YWU9Dd_7m!`*^l`Kg_YX zS{x)Sr)IV*aiy6%o#CPWZhSLz?yk2tm66AsF%6YB;c{q(snYNXuudC!GPR6C<$M>+ zkw&~q`w}#cJmcoZj5%h%6UwU`PfDnavU-|I%;>Po7xTozi9JT(OszD5z3Haozg;y` zo0ns1_mA*DhO?54RQzr#I0kV4GGai<*2bmT72J)l;|YvozE^g6V&N!uVz`;Q(rw)9 z4ByfhfAEgg1P)0`^z2L?|m0=ub&o#ra79$i*o#whYLZQV8 z*3zsprnb6XC$T{@mP)@U6#n@Y{F6|Qo>HD!cL&*wnsGa6J^jc2B`m4yfv_pVs%tpzm{W! zfq%*JQ5Anf>|KY9`@3T>`(~_7&ys8LK|mkBIt^-AXT2?+-=JcGjIrIt@6eV5vy3)a zOs(P_M7z;q**S)whW%5M6Y;-MfuFP7HZtD8lG&oBo^uqd3myYNJboeSIeHD6AM30)+d>Q^i!8lyYMSVH@t1=_f5=0=!_IDyP#!owD^-93R< zOOAFo5jJ62Y3jk^>mG4fr$YZksK~h5vS9@mv&htp3Fy79N#^{ML}TSfY24;4QtP6I zC>tF1se!UXr;CNsOgP=a`sD70t(o~s$e3r=1bMI_jmU!%$1m9a+*Qc-v}HZq-RRr3 z6NKoB^#1q4&R;4!xUOA?oo5}6;MKdJmSLxci7G}5!X%v7iun7*9(sjQGrr1Zo!x5H zS68!pir```QQ;d|+43iKRQgu+V5P>ShnkCZ4tNcf(bricJ0Oa(w-rbDV^J$Ak%Rw8 z5k}PcUp?JW-yhhTO>v>K;sQIFOsASf6acaLs_ngTsyWT4nqun+9|n(sJ7_-E> zyWv^bxvyjCfw>YE1O)nM)!TB04Z~&cRIQ$VW2;aN1ZHt~lStjWZ+k7tpX7Zn6$I!` zxoWYDzg@)z3{t*IrCP1tY~tu`(8cS5MY_=voO#qS16M+@RFFYwp_KHPZ<_UA9{-pu zi8lat+Cw+c#WK!)@RUuz+QI*ei^awcDtvk|K8eKWjR^>M zCR4oTns&9up8%Q|&3H%~18Sv);82ZwVexMbYi*~a)^bZ!oX9Zt69_aH@%6FZ#;||r zDGix3vL+oV4T7SHBi~vbv7c0VT(v`9iT2kh^wB_Kb#CLABTj9i57E=Yx1#hxyq8LH zov$FMwOj2nmC6Osxav1fwGFY2tR+cVr*!eMHb`tzUK82QT*Gx3n?hovS*l|W?I+Kl zhZ+xyt%S&-hRB#Z!YrnGVH#~3C~Sf8tu*O0F*KSuzo^5JmF3X5 zX*LEQ7cw?yF0%c-t`Sb#HlocOk_zirnO?{T7`zqbTkKYCjjo zlo4sgaUP;&9yG9&AE@!+uJ3s#tJAPt>b0DPbD}kHbOeps5JpqKJ;cCWS-GoLy$e${ z{w=n!iRZznjL6z%tm+$>XHli-arrOuZP>TRTK`mA89#@pF0hfbi}yb&wl5g#sUm8} zUe0T<7>Z`3yg=HOixWXVr(kW+w%2w4Hi55JYf2 zyiw$;b|@p*3LDEXoxcbODzDit#;>?K)y)8Ok~ti^IKz6Y4QqeUWO&LFH)SJJyqpNcH>*{d3OXb$d@+TU zEqxX*RwEj$wi3srEVVW>=(Sro;KM}j6(JhL3%@#~&LJ~yQ1%tu9T+>5&<(4UP0{Fi z1{YUDDvE!&$)~O5q|;W*2QZ802>Myh@_GX^^wb2JZqCizIX7XCvgMrK%vm1E zDNQd7IuwDkq~WIEszWT(VfyC z*!Xdbb*EHT4g&pd4~0FYHpkw1Lw>a_=w^{b?aNZ0^Okw4M(c>7DZ#gNGd$At9jiij7FdW2mA(M5?(&7Z2q+2=zO63L)-%E(F+f3r*K zUvyXr&%6&C9XD$Fq8~NgpRQ7xx{!rP3l0TVs^=JXSK7t-6U9ILQl|>Aq z#XQx$Q8nX^DoPD|POQRFy%tiq>`8kqhlWh9G_1>=?v5P?14oa3LlW!yk{m5u9?;_JXK52{?(DE?umFFj`r}wElWj)=~t{+>e~CaaghWD_ z7SANX$1mhY(1+uj!@a+sxHX)d+lv#!wzJ}_S57vZo@~Ab z)y@HDxZZ76*H$)r%6Yjd551_dB5$@}!dhCb9e|-|50ru96|6&seroogf-{#Uc2K{x~+Fxmf(R%QlOm6DlyT8#$U!Rh`&ayIDzt^)iE8yyB zx0+3r_Z-YsoK;`1&?}(r3+R%1KGDUtW}I_1%AT;h4*3Eb_7iJDP(zhtWsxHLS16Qn}IpzYJ^1dW2MHb60zM|w@XP`aw^C1?xr8IN*Pke zFd5jA&NMVKN*5hDn81?8PR3NT3@ur|eY0P-Wb-U|wtDktMcbe$IMA)x1jWJ#kvwIb zR0yI=H*QO{w=>C9A+jjNQh7W7UFKX$!hG0@{K+1A3}w&$st>7)#I}_ z)V>j)B=I{$cCC`8eLV@WLD}tX?3SI@+el|kP2Jwhv?SDXOO?*?R=?YkH=Tnu#WsOq zxwW*Y_46$m@*{4U%6KMVsC0c?4nugjOxt?Dz@`om33Vz9aZ06SN@J`w7n&K2>ML~D zdftuWinF9Gy3Adksp45Kx!j~;#qRC4n@-=`>AGXaIQNQ}LEMX%>BXJMa&^5lXNqC9 z`{8sTa3|eeEk|Th!N=tsLEOUSp-E%13}4c`2GYwJ3&exH>s2bBdu_&_iWBzBrMNjM zzrR7;JegNPwo6o8HMXZ0rxa(XGhR`~V`QKdbJiAp=_}O5%?!50GSn07s?qzkhR>?+ z`ycN@6MwL2E(T+Y_hYZ?@%j61mEai9p(`~AlC~0wi3n8DTB6O1*cMssHC6OL>8Bx` zp{o|@p3hl^yNkjtlcOj`i+IxvW@7gWgr#p=lFwk8<+HGCEp5w39jh4uDpHhZy^W1~vZDAV zCq3=*^r9OS#N1b)BV~#ylcRj4=#w1EQkZ#DgWXCn2gPk_@MiLY+SC|MQL?1FLEGhl zQ=1!MDefte(dAa#nFV({^D2|fa{u3M|FdfOxop(d6l`{iqSonf27!Sn-7ZZE3@%iu ztK-@^GtC01ry*AF?YWCL4kFV=6b5q)sUvmusNF$4bT>9n*=Vw`)5rVCUe!v0AEV*% zpbebRD#Z~v7+?dP%=Mw52A3n0kdGp(4RU)s z)ulLBw}d}~wIblyna7hMEl)b&*x2AeUAn2QM)n-(x@Ngz2PgLNOG4W%*;@F>F$bk5 zPr2yzm~HQs#np{gqum^?^=fYV?jI(+Kf%Q}{tQH}0m$Fqfyjo~u`c3|`XEBfWv$da zCVY!Fpi@U@YFEBm!-`99<~_p+3I8q+)YsAk=Ck+DO&e#KDW1PD0=GB zJt2~u*BR^@;mQ!c-`N$ZNYXKqrY%~LA#oMz&UMcVnMVq z$gwxRn)Cm*J{Yu)b?W|K;SqB+U%}JJ3lJ=NcqLu;opT?=lY~~g_;*~|tuEmnD$3#C zrq6t3XL;Xh!3=S=bW9oQu~Q^LS;*wl(R2_HA>6%8H8}J*d%=J-rRf9pVPky(Hy}^q zVU1Qtb}i!8TbfsY;ocDryuY;0fesPAdArn*638_TC?N&Tyc+g1g!o*HbF7JE7cVVe z%1Mk~!VrK0O_}WOXE_)S77m?d#N$uZle*6w@%q!smQ|HQCF?m7cRo?$>Vl}N4D%&~ zG{26xl4Fuh{cT%yC`EMG9<`P4S z(m19P=&Q=Ksq0V0WWv$Dsa&NHKXZ9rxMHV=#Q~}-6vbk3Ace>OR%E{*&O)?j z5|`l^jc2iCq|{O=!Drl-Qp);Ks9yDoLsO|S%^gge$H$j1Rf^-c@S2mSD~n4 za+H8Q(L?K3r?d#~cc8{^=q`z!XwqLryr7Dh4iyioTlbu0wUr2|@2}EkS*hV=+SqdF z5dg(Xmp>Z1&+ptkp=NzGC*uf}2C!6g^xT0oDY2rpVe&#~q77%`=;m4w-?7l%G=rSv zc0;2vtLh&FpboxG*>4pz9?ew;E9-ScY~rcc_IjJQp_V)2h333Up`3E<;tJ&;%S^^y zVkmtc&N7-8;fdAno~n|~JsLAb?MkAyrqH+gT}!EdV@Wt&oCFlXIFjqD-u zicFz4>D-o+YR}Vfws!O0MlAX~p!*~ux{?1#pnfA!9!->Y0w_e4itGF1*xYFHnxa;09!pXx#tvo~i zX!Muv0Ie*oA`T4OOAR4&h@hg%l~{z>S2AUpyoQc+7E>(*GPe{)Z6x^S+IqLT%O2T9 z#Ey7#R^tjk7I82;=)JHh&8&OU2Ro{Nl2o2pIEpn7v1C^8 z7OFFROJ4%liRr*tIaHs`z8l_(-1F~;ji)iPb>7m*HI=k_sn9|hhS2Czkp3DTOswmW zH6ZJnt@IVkgIR$-Ur4>oYL-JBZTC4n@6^k8Gw!PB(4kw^Av0f*m00c($cwVPZ@N0A zL>Sfu^*odW{1-E?`OeG8JJ76lP??y$$`)g(_`ik36J5Y=>Vei0V~asBNI5f8Ybtk6 zv{I67wNN7-6*C@o@JHo-U4Dx!aT#;pI^$YK0kYZ4WN^oranw0U z#FlflrYjtejll+1v?IsWNU(zN@Gq1}f~x^uUy2OYP;Q1&HlBOO2?C*u_yR>H`4Lx9 z-$E(N(H0d8b90tk$&e=vzm)D|{} zU3K6DUG=V@Uo5XwW3C*$W+oQQvO(D`*CSs`^FYGR)jVK)EiE40#-iQI8D;e7_%+nf zTwHN;b~n!z_}W$Dw!`~*pYz@{b7$D`Ld|{6%vN!Gv)51&&D|gRqjnZ>U!a8M5!02g zy064|b}<>%{q)^sXrpsA{TIel4@tpB!go!I>|TA}V|}4S!sCg3)9Q(=e})78VqObD zj^e1>=p*Ec18;KN@I2;3Ur<9An1eMLu_9aWG8t_7-U8~*c_YhQc>8@Kzj`0=}Y#=t`zW?3_exR?at9-em3MO0{c zjXL?lZlR|0{O92SjaT@f#%ROnc>8Pg{uWY47e<$KUDq*WqR~yl2a?zf)@qHDCrhQ$ znA~BDxJOu=QuQe%i5NBwBy7?osNvD%&XUnnm7;{(GKXFPEZ4qSbU#DoIcjHl4 z9G$GxHtHv9157b8?}=MMXwiVI;hEO|GN5|W%>Hru{3n$ZWT7TpKjY{vzh>m^NgN5F ztA*#zrW@<1)~VI2OU;d@1lTCa3t-Er2Qm7DODzgi;DH5SHudZ9PpB?e;J)uxC;nI6 zzB8)Thz(_w&S)A*OSvKhwV*3H>h)z-R(x_rsy;roXk$QRvpJ@s&9T;Mx81fdQriN=<=a5$6KU4zjN>jx(pIO%@CeP3nv6VYZux(i z%#CKZTvLlQyY7uS^A(RU$yXczb((tQTRa`~&(t(Io~+ZmM$()!N}-JzWv1wiQb39g zRJ_zZy6If8*{49Js`tuTZ8;Cuj}`_lys^_%($P7}WIgV*BggY5L}bw95zLz%Fe@CuC4jbEax->sH1`xsdZmVC z%S~Fvk5b)o8I=(9lJwh^##v-+&(WQLD?7MU8CpSgi%RgPJf*X@Xks)d^~R_8H2d2c zox3#}!pP#dvB_czjI+h7R$vwZu4C#EUlr9QZLe9Z3a~--Ry%e6DN|C&#dxdhJ^Z@e zI1QK^#_dx?6OCT6mFEzyhBY;_Fq!P0kowx#Ju??0-9qUPY;1_eeLr(UMS+Z|p~${~ z`uCXcc0mg1S%^HlrKe1po8+qbh-8*1)|*3AOzhG(du^vCDsXlG#zX}X@W2COQdUci z>I>>%)23x%pHu3!oQ89vHE>|o!qYDj?5Z|Q(y6dV@O3IPP3`_(RNkblDUM50*04<` zI7DGX?aR-r4Qh9MCuEsB0UuL}*8yx%acx3XtE{Rk`w-3yMTPMfQ9A54)@xj%E%qhI zT+3xY(3R&xy^g0O)s_5Br`ChhI_g{>u0?O+V!5%Lr;XJ$Aag;uyIhS!{6d0dJZ|5c zXxKuqTbo-PZ$s{-d zi%5)_Lavy3aTPpY-3BZbm5P)UVd^~9OlzWna^ZdI+11>;AnH@!AW;@000OVn4&r8v zZw=_$G`;L;D#Jo=)0J3tl28d?2MKxz^dSHGhVM%0mMme_$M-R-zAxfb8}$_gGzgVf zZA-j^Yt>=za_usrWJje8JA<;$mRhZ<3R)e6T9ad`$bmx0@DZ=9yA?sIx8J@PRT)Y; zjnKuk zVi*Uh=;;2s5?@eBL@o-zi0qH^81r|Y)MBEa>2ilG=oyPyz+k>0j|oJ~BbaW2Q%N=O zGgMAq`?y&mznaBK0VB*ehvSbp5(XTCo9-U~dg|OePwNwwXpm>o)ZO!gRt=?!jgF!H|Ljg8P-{FZUGJB0O4TX}@lTdhm*HsZ) zS$@||ogw0ecSsN{_x`MedJX2VtsmSGDg0999@??#Bn<3Oo$Crrk-;gqZjVDr~R(C;I@VDb9L+m!Mscm^1|3A)4n{G&e>vF=_Zs-@>wv@bD?tTJKj@Yc0M`x7M~YSZlpZAhCO2foJ~E z(9@+aseMl6IATuw!NOc^jhFrG6O}DFT~*xu^pwR?k`9BHt@!!7>?v2q>h(kuWp)w5 z9ydAW;_O*89kLYn{FPY3 z+%s89YGatw3UyWc^ro9fhGC)RNgst#OW2C{0y#|rR>df@IIv`4;c=Z?@z9oc-wwS% zRPey`6ddy`a|MPTJ(cWN)z*=I^HlRllCQlJE~X0ufbQ?e+2EoB@PSrZ$>&`8e8T7}W^A$#CtX7`OAxf`?;AXT8KdM`5b>Ack+Ze+pwN8dk*^LSl_m>O*8l+c_}ie!@ibkK4*n{*aEvxqoT>*_q( zRm`orqvsS?{4_d8He)Grrt|3RLPZZiL!B%|Q>INl)KYD^2m*&xN){E~>|JJu3agjJ z^2xt7DwxlBc14_dDO#DzPHL-6Yo8V;6}2C-1VYNxeL~x{F$*@PozR%28hsB`P@oLE zpWWIbUTF7IR5G>iq4*qWw*OcYy%vCNapl4;^s!-SrtiQV4Og54$N5!U>fDF8?^QVQLAB#$FXVb?{dm+eK>dSFSUfZF z&p~((SUrg+$&=Wu;6iSQ_PQ9gINT(az&^}XN;ydMl(aUcBeo19TFxqMhc(t*G9J?C z&6@8^VofcuX3x}Cad8R}P5YZ&{AOV6U#=+Ti=$e6VleSUJId)&c; z-Hm%s)cei27L&kcDo!doG})`j<-saYQX5ckflvpcBPnZ|K})0_Md?$tuzQ1jy5X*v zKL}G!uLc$&=b=$@r9^I$g#EI(o>zt#pEO#n2aP(f$f34AFbYixa5u0{qnLwn4I&u4 zW5||T%Z+H{kGnKKpA1E!wB5y+>n+&A%pSlk4#YKX532C3U&g)&t_!Q?xr9Hh;P@=K z9GKg!U+!Bv{W{jQ`cORuzhvlBVLNq0S)}Ru5D(Qx(zv8I$U^0&xu+pxP$E}ZJ?Yfn zr2Eq0XUa1(`R?;lkQbI4)1fZp{u%sqreVL`9i9;OA#L4{F>p{Qx%4IrbzY}T+m$k& z$O6%(8cs*O9UiJ%Eto8t@q(qh^T-w=lyvHNh^d5LyV8y%rE5#Kin>zk#oDNEo^-oK zdbnt>?cqus&O>Qr_2zL2PntSAHHr)=yqR1%zN~_OrQOL2)uU-4ncCgm=+*nJLAP@U zMy7fidA@R=_wak6S2+=yYz{9z;=E0mO?@lYMk+kpjM--uhm<#PAY_2`7rgXfAZH47RqZTnjXnX1w?GB#(KS9 z!=3!rP*yq2kWyZmC}m57*?+~00w7`h-3XbebKBv3#BpSlwJ_>j6RiB9!;&HeQxDL( zmI^OXS~Uv}s)XATu-^H%B|=lp)jBs)7GeLXS+v`@9-F-@_OV$6PKX9OgQJ7ii^dc< z-`$CEono++Ysw30-Dx8RfC{uWLe_U7!KiP7yUmwJcIBnnP)QF%0lo{)uZunP{$6y= zn}k~iBq~+z8bPFZiBQ9($)O4|hx6+V+%l+&Ksw48#1d`J>y68{+woiJmQX71MsS(^ za{C?6UtoTT9JS-kK6t3Kp>C^rN2VWn#xE3lF&btFKhWC^eBGcKIVgYl zkNavdMg#uDcezF$l!=}h1*;~8y^&>(49exDibLW{5lW|x!E)WADLA#yMjg2X)e`IAzn*UR6}z(Tg+lK^3-pyvqGcHT50OqGM+Swue61@RWofx&suv{ zxs=I1|5~n&?eh3}vL-%;!(h=QqOQAvONY`gjQQ%?xOCY2RWJhvvrB?>)^<}~9*O;F zCRcwls;gvrT#Q!`8M2|dL&XHP%z~xal_6eO+dxDx|JG=EV&N#Jdw9XDbQ||N!?*P1 z7|iNAAn$*O??A+ZJ!`vU&)ix&D))rpH5=DRtSXyrGkT5W_uRR|FkyKzB9imgw3^z9 z=F;fp{4>1ikY1LiFwn*<>s;zyTb@T|dVwEN@66~yCnsDs)9T22d*=LC)I+;Vvi3)J zBg(0e_oJx(t5YrdepO)6aPCw3i6t04q{@9nAr?!cYh~GPElWtvNJSMAU^&>e!PasJ znuH+^3{{>}y><&Il$GW23^e!EX-O;!3-TC?+T1nTt_jXkhhm0M#@e94gS)k;@Nv~d z(g_mTwXXIoa5Xo?87GD;d))C(4T+Y9t9lz^q-gB8EntbpKJsvT_0*0f)-d{%n6|8u zvr!-Rv(gdgpI1+XBwF;;<&nrhDZ0+!LCZp0SaW|ep5cU!?pq%7tYLvouE=7xWo5A} zlCQNv>m8a%fN(WbgAu4LuXwY=wm65bK0)7SAHXiYocat`G07jtF@J?#Epz-qQ-``JiA+hs5{NY z?um|sBwy_=G=>PMF0Znxllbuc2pkV(x=&rA%j)oEnW&X#=w3GcrE8$Az;9_uDbBvW zW=J}^9J4(MTMlbP#Nv?KWQIy8e#aNx)G(Eb4YFsL&Dgc5$ov|dlIQeOER>h_W5ODW z^D$*sE#Sw5aK%QiWfNuo{b5iI5zjm@S>PO{i zwYBQuK_6Y9RznDGyrrf7wbLEe@Cb-3TX;ypJs)qk?scj-8;8lXTmn_j(ZOqJEhMJS zp7GV3|F`wQ0Bs~SB?kA>F^ESA6W{Zxv9438<8qfS7)F+kg)O%V$O zPD!nLTTUf$47yg|Y~#t9>QZw<;yS~`&W|ssjKb%qk#oqVYun`bmWFhCmhnm{GmQ#A zTCBA3>7|rkj-aUY?sN3w|KNKgd-BO+^imu8CHjcUVyTzNxw4U_TTf9Zu#`qIcO$WH z`KsnqZ>&dpSz`0$$iOXtoF2z^VqNGQ=}KpqlDWlOpka(FG6cqx_oyAHK)L1Z@$kdr zBXqW$`MU~{gj=y(F1PGlOa*w-X~M^`={=h>SHYh|OSii>@N^VXB(tY0y+n@5<~Hgl zgNKGVT{Sd=XG3ara`6a`Ph$rWI-;L}yI+Cjbf&ia|8aLd@O4l3{||y72!fa($Oy7Z z(zHz{CP*r6gJ^@GBx#aLHEFIit&}3R%!(kU2x4M_Ac)BUYz_?`3loO|#2d_J$wy`R_3E&F}%W8bf>`ux1!=bZQX_dfr`_OzhahaC?Qi3v13 zN?6u|0yGRV`$eL3cU;#e;@BdOVMi|yUOT%!F`!*&>*z%f76=Z^c;A)hHyT3*(uD27 zGTw0^2=V-#9xTwB(u}gg>WV63f10rmGqRnv#%x~<8N>#4M>FyTWVth#D_7ZE9^DOY zy_6Ad(IYJKKk$lTMxww_;8%V=xPIpH@L5D*PEmBmxeokP+85%{Vi+hMHj&SB*43LY zx9Lsc7gNi!vV~3ZMl}@iv22Tz0THh2|R>yuIVt1dVJP>Uphqy>2u*5l*)=ycxFE2S>k+qbv7I^darmgG_jb$-g zd{dN&Y>)hV*sIFKo5Ty{48-=Vu3C&XtuoI)ig}6iv~z^tGw)Og_REpjRI#)me>L`+ zaM_Fo#G;Z0HeH3y;}Fj=`x6!Zan==LbXVQvt6wcn0+lTnNBd+jn!{JfJ*MKYjspi% zLhH-0D+;o*?T^it)StFeRP8F!h+W25QZ=)LNIdd{RE16mIH2KNANA)}ruF$iTQ@BR zVc=`wc5k|U8z1)2x{AQu+i_4t)>nB#K9Z1x^JC^Cck+8?1VXF`i6>8u2!y2#3idQ2 z10#GiRP2{?In*x}7qZH1`5){(IwF=Jz14i)vY^25R!db9 zy{)&S1;q1?9#=B`%~3EkY1e=U1w20a^g#i;w)nVx9Zs%{h#;4ZU?Q>x6_sfWT~scw zP+CuAYG*hC4?x;GXyerhf4^Yle8{yZ_(`K*wy&D0VXoDpl{Wd6)HGf^bO)#LT6cr& zlMRck5k%h)KVx35B)??#`l1;Y&jwo79fIvB>{wR@8$9*ao`?Cb|LMQ5n{gZ;_cZ?n zHbu~>c$)wEQ{r*{8~p3~D>5rZS&IK~^Iwq2$mYM`L)`oqd;rXUMMZQBxr08Li5^|F zZ9a^+Uc-;$8V>6n;%8I?;RnOlMWZb%tCOb)&Gi~RsDMVjq4PIbx%6c~7u&FfQ)iA@auP)7TFp#-7ggVO&7gn_N-j=8e8S);$3RCGv@-!pHylY573c8y?E>oQc5OI|XRXKdmMUSRQg=5@$>?Zb2dmP%|J zRf+DA8dn89%~~nV;g+X?UGNjy{h(1ZOaCVBilVua<7@|_a{@t>sF!zmM9=SGeF&W? zir)Ir7o7!igcx$wX$K_V7?prksMmHZ!;|2EUS4jmjmzX@#n|IVy=4-;aZ|JnhTgP#}gdlG{Ku%pLyLIg+`K6P#cBUjPvEOS#<(e@Jdf7NI&3xf4MmY%yrIbr7$4j-?F4dAjut4A*a(=`k)v^7ssfZMq8rU6uBULk2mY z5m){CpC`4bX~6^S9`LY%)nLvWuQ9k>J03yQRGh$d+A?qX0P_HOCNio&U+LkzKj& zD+=5tFVA_&Sk0`4`dKodRXeNf!VAH8%W{=?WE;c_=ATjBcwUKdGVd(W)MuKfqKoTm zS5~e!4p(cpwHu43#?V;w26Aor)UvrID-QC_TV?)NTXW}J()?etI;^p?E%%h#Geiu) z1KX0k-~Lqq9<6a^(+*LdrviorM#xOuPiMb{)xMp;X;(Cg&!d-_x6O;2mPI4GL^zvq zW0TR$MpQ#0DlJR>$RX=T&W!8F7ix3Z+F|j9h)m@?L0w$GtZrI%kw{(7S5-LBt+YzRG&3hYpMK`uHZB&RJl4D zA~7$tyelI2>IY7}irV8?JP}in8HVY-#;I+WE(&AhWfka@p7`@%CmzfYdlb_pCajIN zxJNKVrSK3Sj`;H~(PB}&_JkSN-A1e*GaCMp>F7Pm}! zV%Pp5-51HsT_kn@x^F%di`4!HJ^TeOJkz>9<-c7|H^S?98qACA?-GcodxcNRQ!~l} zQ35OK8;rLcjT=@2^(1&TS*W`^MGV6KCQaajqNKIRRKO_5j&3tNC1;b?QVOo+hhW!< z*p?Oa;A37h5;%q3yB0^qy}TM!;MuYCtaQnd=x(EwXH?7zw^+2#|g343to*8d2w9CW}CrwayDBLdPbuICOL9vPKLn%Mj6@8RQRK(={?ES%{Z`&Xmtri>+JQ;XnJ>AsRxV1{-4e%|F<%wO@fz zOJsMZcpcr#3mhuN8yaF;rEv~>kvS@G8Qy=smvA`!I651sLS5}K^LdqjxGOSpMrE@+7xC7a}Ref`YSU)`(qt#sRU0 z>J`-u)vGIw`^|u#+ ze`j1aEO+0{Hg6lY&2pT(wt@>N>VjUIY3896+h?2?GN}80jWST1PUQpbA+7`K(_(vNUC5iqkA8xkYUWYGS(-PS5DF%!w0M;8YnAsaDs z>$AnHMBW0w5}_5VUwJM%(js|8zRtMFM5O;zrkF_~Bk6`qI3r2Hcu3GCBKf@OKK?n6 zjEPux`;p(25uQvL5s`!N5}*H;s(R;J6++3;d=O#O_psQ;KP ziekCBv~+0u&E`NlCpLF z>u`&OqpPrvyqv`Nk8z=kcw$}~Nvghpu*ySo?+8ePaM_GTsiOISk+bNI=!J?o_6AQY zMsG6c`8HuO`uLpYr`}CMGfBD6hQ4qY&N^Lg+>K@g$#YU&?w|0xv79sqd?L8UD>wLx zL&)fn%}5_V6J80PDf2hNUr64BxDHPri|Er5b$ui;!>E%RzAF~Wk%RHFld)rZi9STq zcTF=_09tGm<>=^I#Gk1v0nKYdRhU5Cj%XdViasECURi*aMSD3W3HdE^?OuEH!2X3m zLv6b&jal@!-Z&-#K48h;e{W|{FI!%_Q(V!|xTJcGc*4VYK0)3ZCsJtLCZz9U4>2Zi z>|2nTV|;MtLjcFOBk1v+-w++V{nlMkJoXMgIA(BsK};L`i8OuKIK8vP;=|!i9Rv%+ zT8zPwoKi8CiL0s|v4P-Ubp4dSAR;YUn`QpbMWI}+Uyh_yZC{|v)XIk{QN39aev)II zU>Hy3MSfMEY6OjY`s@qE;JUeXoR0`^6gS~}*mB|${cx`P+HZM_ zbS2;Z9WAz@=QRk_xV!;x|DdeR{-8lsb!~N{cuUH*+rqI4QZSLO%iHCnw#@{WOho&W zJe5^MU*<|LA_-KU#vOIqJ`1~}do9n13<^`i?$5sYyW?Qzk`uTEPj)HNOC24tBjB8h#<63bapkrKX5eaGplbQ)GPn)qjg#2g}90Pqn5*LBrVVwniQi< z8;xpVF*KqIVf_MK6)gDYR0*^)3rt4>8)I!3nMBaZdHZI>r5Ez^-it8wXV`Lt*=JsD zAal^{WwiTVZM}>b&RTEHwLLT$+E}+6&747%(BH8IRg6pE?1rK>Vdw0_a#7BXxyNq? z7aB#+I=E@pypdTHxy!xXUap6B7S!jkts%m@5qCrw)S3S1>;M&Aux0a+*kiS{F}qe= zJY(#>kX@Ddqk<5@)u^S`<3`;Orr7JIZBLSD=J{(3WV7tp94)>ivQ58v4IeghGz6i} zcNj0LIcu@h^3=$L__iEqu`vapi>LHX*93Qzd78p|`Vu!~_w>m~vPUqHhFs?6i(Te5 za_YQ5yqr_tu)ZM7lzgUVd#p`maDW=Ed)n;bU642UFovb$iO??CUjxyt(2zrY)1WE&EJbOalig@rHoa1Sqbqu=oj!BlkYuHHp$mccp z(c(tIYpyJzBYzJM|7PH5g)NPuaTI?Nyrx`UGbM{o?EFxpe^K_LgVxubOeeNnVOJ?V z)_IIrZgUI94T2u4?yEEJv@&A^>QXD+JkTjvu6PNxJmI>iA-4^kSwNO9DdxJV{F2Jrs>aINH4PFDqVJXx~EY7^P%JB{#Cf46d?a z<#O>%Bb^QF40DT@)-Sh3S9XxCb46DB&25OlUU^GcS(aH&)eXTftrokuR#a40o7o>W zE!n5n*ZC?MR<5aEeOiTh-|{R`U9^kIMAOI*U<<^yEBT!{r>mfY3E! zrm|und$v#xo8%pG|Cb?dzak=Bt&b>o-RgXp3zS4Ww4lHk$%?AEBkR1_4zyT^6*~_O zgsDl9<%Ye^Gua^Pe2%b`t@DvtifTM#t(O|_!ToJ5t>^*0-mDa%=Y`5G(IcC;?|fdq zX?W(M@QuU_a*6avGJ7KRS>ftLNk`zTWIA?)H!~@8897Dw!mu6L&d!zX?3@TjS4=M1 zeL1?>BYjyuugtc;ObU=EM>iE-JlU}|TqMD<-!fDU5)rvdaiwTkV?%{_GFfbC^0%Az zJ^hw3){M8sdW?{Y`K9eD1H(7PNCTa!6)TzQRIPuWCvw9}a8nzMawp%!z$cSEYQ`xT zBP(rxjs5hAC|i3>)g`tWc_It+>&oOvAP^r39Gn%t8fFw0;Y?Hc8@L&BASssaWdL1?GNJFA!hISQ-Yn7DoRLwW3lbFGZA*Tkm8CoPY z!>hVzfr8q`j&_>h${6!gtqJHb&$Ei`1ZBo~)7s{0w`|mLUi+ z>ydYde8JClYPCSM*}}BIE>3ZOeYJQ4DT2|CTsyK4aKx9L%Wn~UTTGSZa+YvKwVb8h z8xpeP(X?hXsWBTUS1H^ZY2uy-ZCWp6scxqGSf8V>ax8rY3)FH5vC2FvXm?8S&5W|3 z-&cvdAl>{|EED_hu&Ao5l0|K-_o)jj!de=IXc1aATID?7eYCzox7 zE!p93RdBW`nXbqBMIBxuzG>~7ZJ9-U&s(+d9J5B0BG_AJ2vd(M` z9j%4E_Lhv-vc@GHk>@`O*QmNt0x zS7^iJH>{o5Od1DE)K$zUGs|XYTCWpXQthj65b>dftNq)y#7%zZRn)GnF08Mus%{8u z*Y>n}Z-E3>bm7?S40$s(&sJucuTsf zW6j-}kK(UIu;tM*ndh6Pmc5U;$M8x&c;PtNVr#ejfq>v~ z3CB2ByEE6g4$>M6(7=d?y2X{=$GYP0inx{Y6ooSqUMbIKh$eD=^=f&SXW7aX3rp8D zh*_){oqD-k5ggnG;vMRMkxZXh?hvC-{oXe)05c9! zR5uu#>m%G-6Y>d7vD~2c&dS3ZaM%B0r&*uJwtvSVl7%9WX*4&b2-0n`CjXZnlnZZ$+2o9T<%{x0MEfYnSL@?6ya1pWg zXok}O>rtzSY#RO&IU9i-SHJ&QnBh=Y7*-NDm2> zXc5)790>7uYIYww>x=3y>?b4T&9-nWs1cD6_fCS&j;{bz<~tofRE~==lRw9!+@PN| z!v@_gXB~UtMF--j>z1JHUnFi?%D2BEFaDx6T8VSaF{ca>zjTyP$eq|8^}O#m zcF4j99pP8=iafa{PoCT;u=Pda19;gsf;LqK z@YEL9P^-D3fl{xDiCs9wj=h*75HYu*Vs%x0U0FqCrMOtGOm4xi5cgh{HC9||?Ma38 z`u5LYuvqQUlzW=}i_2(Fv%zb|fO2%(V(Hw$7!|__3uIo)l>?bb=?^l`{fYb>YMj^w z=T8~o9&2m`m`4IFhPiONl9T*$F?%tLrbTmAzdv~C*n z_&Gh@BI`w9F1Yh}rW?h?@I$Nxs3#lzZe`S)2(B~Cv~TWmbnbe8>rExHjY;<5pX2fu zAucwc2X@#P+iN5gx|SD+UEd}nP9XRPS()gg%buMBqk+`4|0{85)D=6rTfw7=;QHBZ#-W0ue@K6sjK+$gM* zJCy_NW10U>J+BR=+{>)dT63u{t%FuludTue>t`w|S6xxjP*oP#59z)v47~UASXZ5U z?rLKZ+E`7M@nz>tTh8FPc^6xyyd02UbPBH93OV}$DrYXtbcri7(^!kGu9AzNjtz(Y zJ~7b2%v3JhFB9lJ1BYBhR5|K$Ay2tz7gOk7Dhka%6h$Ukm-HeXtU5yIMzPC{rwhdv ze{qSU(b~x~I?kh=qPYjLE|7cCF;y;g!v*OO7w|3&hPooo+DIx7Sewu?_B2_0qo1*n z85&8pp5c&@lvz#=?LR8nkba6~@otG_!N88Vy6u9!vDLr}90P(;`PSDDqVe6jL$6 z*kTiGh$TT-JB_7UM0;?r_7w?0Ufm-7US1DWc!#31iTSSKckbG#*l`Lh2~gb;}qElrq2lY;WX zBr}6-As}bd73m}>5V6;@e`eLPPR^hfEs?G%&J@V-Z>Dc$b!GJxE7w$u0EW78r>rqJ zLK188BBkQW^o5JWf0geS1j2Wk3kEU|tRcAH#TYn4Z}l+Oj~N+)>p+mPuQ|*>-twt{ zxLz8@upxM3OC$}xSnw)dES`nd7rb-{@l6!F&j=U0my_U%HEYBXwzB%w@(Lk;*Wnt# z_b+pXEZ|_MqeNURR=sfbiu#aIgus~ymof(5Gjdu#Lt^A|Bnve5Nc&8~{W7{-Q(aM2 zu*5k2J>vkg#lB!89zoz&vkU|`qw7HSkY>70ChMD$Ajh3x-DV>QoN7^VD-q!|QZ3`=Ngk%&$0fZU9(sajsz zFBM(dSbh0I@O)0ea?!eh5LAi0XGtDLlY0;3$&|8{Rn@B-S2nIUu3d8(%tYw^*aT!P zD5g+Zs0GIS(WXTr+_VD>w7i#1m23Bl zw@tcswnVhRh+G8CkgrO4@`1qMD=^%N;^b3gz9WQTY^k#w8dy{k>+a_CGSiq}>W_qr zZ6dbQuX6ApPQR|Htf;MMSSVX1aZ*e?3c9vhRAc|KIWe&_9^29O1A(KzYIZ6%>78ku zrY`Y`OBRf)tm>VcMxC?TIm@drUAfw^3g`Tbv#Z4`WVYKu#9T*=h{b)M;+epe;%bL0 z#mx@JlC8KrOWTJa(zd$3p{}Afuu*Se@#3oB*vvn{E|3#*kr^W4#>-;HNndfvR=_RA zF=8#3fdhn^DC-tkOJsGUJdy0ROiq^vgYD;)W|9+3Is!onZ7ZedKji-sF$gp7j4Qi> zd1q@*XApqWXSzjo;sNbN#*BA~eP+8v6rVA*l^3LmjLj-rxVoyk$$yTubd5RbEfBrd z!bS3b$sL$_DQjUEIgbkwgAm&r{oQt;CaSZUp=W0vcSqSWPx?q;PlDRWK+hV@F}Ldo z-#*?DyNl3pd#20cBFE*JIuI}q)$;GK(Y~$i7cWT!>be}JSr00BS;`1C<_NQV5Nz3< zv1#ILsMF!)cbH z_C~WlQ1?7_koOTe2j$j1q!nVsmQfJV=ZnR}L}Y}hzsAfY(7Ex(&%DTFQthkf!Vb$m zSC2`ZxiNC;;m?|IcLisNZZwhsntgBq%2~7n`cw62c3DyursPFRL;+hSBC>tazpGva zuvQY0_tvXcIPJJ*KoMxfEShn`(LTP_+_ zxyCBA!ezyLe^yxAJC}qKZd5ESP*o|%cB&_x@&THxG+&i{VF+DF$PA#)I;~W$Qo_qpmwKuQ}e)Vp((Y zt5;O4t!>m2=)YRo+E$0l%J2ybp_T8vKH0xPz$HdKGr5dFJEfPR7mo?A3$Ll3kpySAaa z(74K#t?pT~RrSrUu4t^0H>i89yso5|a&w1q{)cRkXBRY8R|f3&=YYR=aW(_izwgD| zOdAq`k#o+fC(X1Io(y$B*i@H>YVLyihE?LlMMq|OXyk+=DGyp$=d1OXf)0i(#H@40 zm|XfFL;D$8E$8etOB=;`M5FfELu~)+MnVj)oVnb zTimd6wPw24%+AU#t*ed7m$c1y;=Kjo0Kt6pY|Px#8dg@X2x*RMUCs&tdnuccd<11Q zued=t)A|S#6N>hfnvfsxoE&XK92j+2nvQH)WBoP9Yl+Vm7XuqZ#^UORl9~pw0TI94 zL4Vgj6g{K1etAXhj6OO$YpIAYR#z<$mjKV`L&4GKJjXp({sg+ZH@Jw)iyt7&bLodN zI5W%g@@_cq2=ytK$9z41GHaf*2@gK?0zL!U)~u|8I$z^@!-v<2-Dv)YhW+KDJG8~^ zwPw#V6aIY~V6;Uwn4Qj>96Yo01Kl)ACCH?Cfs3h$HA!F&_;fHqnfhJsBG}+@QAY+0 zy-cM8Y2cQ1y?xvz6+1#Ikd8<~xn48NB|SS*GLWvwg48oi+2E`gw zbK8++UX5Jc;J>q8d({d!sioD(oF9o|&l&%2@;hXx7{_>gzA9HTq9A zNiArqtoF&L0MJ)LwGdfz&5=TpjLd1#i4YbAACU}L3L~{+(&rW(ie|#xG$Kin zM-LAdS@fQ~C<*Ssw7O+))YIrDWJ??FAW&VjM!CY)C+AP(zaVXL|By%99Fg;o1~~q< zHx(vk7fPS`jz`P9M*TvX<@F=pY{~>7|FD(Ch4H2sHXIfz^iLw`Nz)HQ3W8;lvYKGjB_cloO!zi(X{ z0AIEKg^=G0tQ~;Q1pZyfF9hcGq1VH~_dSv!)jb7tfwm_uq;k;uP^ zLy2O-o0>Ij9ZJReH$#3s5OyRZ&OkoWPldEEP+ZolJ!fuhbUqx?_CSWvaqv*NOMfh+ zjV{?hivWwG_34oI2l6=L*gUX&<{u4dvrEQAGX>F>2$`NhcFkZFAyg^M;Ikp^cFCj} z$bnQuU&LFQLNB$1GBh+9Qa#Kf4Nwh3gj91~)&V-Me>bE;u<+0l5ReHCc+(2EW)w;` z9P8DB&?`-$EeOdjU$aJpM8Tp_R*AR~XJM7Og;U%kUuKSf3+7hI6+?LogXQ3X^8#q= z!dCdznh$^QtT518?$l z7Ff-hZ#{t`?-L0!E5%k|uwyN<&qDkBm%KV#RbUwSf+L66rqr@MfEVz%o@rMRRZ|{n zv~&xR<*K!?KmsEBEG%`Zu*@&`_eMr$Mdm!e_exJJllu|O6l$M!+Lz=)R` zdOE%*?$)aIM{7gdUUq3yQ<<;2L7W5-cYZalFI$%pGfUiRQ73k<#>`q>-&j5CjI+-D zia5koxk~--OINR*n&68tdG|2@Hv0R1t7 z9|QV-Aoy*7e~aL^1O9D-p9JaOO7Jl|nIF*W&pQMkuXw%v`Xj+70{&fsPX_jHBltAH zzen)dfPbIh^8o)Rf-eI6p9#KH@p}3FmEg;P{&s?|ReXZ-W7+?HK=2y?KSl7ZfdA1R z-uwR!z&}UuJ&M=s-vGh)1N|Qp{IKE^wfujc;KvlN`_CRCG5&Fr|DSH-r)_}Wli;^2 zUeCY12!0CidlP)@&d&C8UxH5nd;-BI1Aae(PXqk^1fLD~M1s!){9y!N1o$Hez7+6B z5_}clk0y8@;J-}p8x*hCzheo$1?Z;{d>i18C-@G)rxScP;AathAK)_xeh~0k1iu;Z z*#tid__+kX4e&VxKLPl!68yB{b^pyJ_}E>{_E+amCir;83&i-z@y829|Ca>xPa*VE z6t9ne1_}KPz%M5B^8o)Mp!?QoKI?8zS<*AL##-;D-SJGQp21UeEs(MEXa8{wsw3Ho&hW^d}Ur*Z)-n z?;mIjB+!1<5q!KFpzHZJOr$>%@Rt+%$%@zQf0fWr1Nv(T{S2VLj^J|v-$d|*ir35k zN`fy1{04%r0rvll$p1#g>;BV1=x2D?M?*;rX2>k)Y>-pD4 z=nsMPzeebf0{)i-za8)+1Rt}j*=~s>2imXK2|gb1ZxDQv;`RFXD}ql`yk33}5#^Tw z_=gET2k?&&d>-Jt3BFMAdj4%8@~;%=_YnH!iWf-0f1V)tTA=?V!8Zc^rwG0o@Vx}z z3haNH;5PyOdj#JB_-6>d3#7k~;Cli8Yr_8q0RJYz4+H);1iwY`djB^{@Z&)Lw*)^4 z_}>wH%x-4A6GaxNf4?XAc)*Vld=lXQK=7%6{}thX8GwI_(9Z?@+XP>zc)kA_CG0N- z`oAUkWq=$fREYR`}%bg;CCYUX29=E@Ea8`k{s~AT?l>?;A08C6Y#qcd=KDv zC-{EF>;4l*@Pj~q4}#we_&o`J6xhEv!EXipJ_J7w_;`Y!0Q|lLKLz*%f{#%Jub2OR z1RtkBz5eV^@QFY_k>Ha7e;~o90{agl_zb`wOz^pYPa^n2z#l^JC5l)7h>`2JUn2Nr zK>tvJuK|2A!8a;ipa1`n82@er{JR9-p?LKVBma&e?C%2nu>{`(_%wp=1N?CWKLGgS z34RFhClLH*z^4=Z7Qlan;Ku+zi{Q5b{zQV`4)_d$p9Fj+!A}D|i{N8LU6Vic8KeHp zCir;3XA^uP;O7v0GT`SDd@A7Q5qvt}a|k{g@bd{i7w}&t_*FnbpZWB zLca^>FCzF}#q0i4MDTL2nf&SepTwVeP5%hs#|d7>dgV{g|34G_cEHyV>7N4pUkLr! zJx%-d@!MYsK1uO<`emBD=6|Z<_4>btNPjxu8woxe*uR$G^8mk&;EMpip5RLXzk%SZ z0Dm>X`xLL2-?aqa1o$R`ZwB`Njqtx##p~_I*9rX&VE^?5-v#(@5quBeHxhgw;BO%K z0l?o#@I#8%+mD+Fegx>>Oz@+CzlGqp0{&Kl9|wFJ!A~e&&%fIUej4z%6MURFt0sTC z{+$G$2>5n_Pf@(y{@g?GX@I|%;4=WjPxrq`f|qAyF-76~VVFUj4&}pS?uzT|obNf|q*@?f&yqf*%6* z|C^{kBY^*i;N@N``BVQe@=wlbz0M!U0skL@mwPqr`u`<(xz=vyKPGs&R%z#_30|&M z+4)ZhJ{9nv61thegvNb z`27h!AMghdd@O)#2KX-%`~;1dCV9Kojm z{&<2<2mA>Hp9A=Gg3ky1R|vis@UsYh8Q@PO_!_`x5PT!xGYP&K@L2@k3i#Os-wt@W zr^V~|sSEIP2)-Baa|wO`@Slo5^J@Pv;O7zgTNJOipE(3S4*2;5KMm~vD#6F8OX2nQ z?<9gx1bi;Rrzl>}zmo|*Tk-n%>04zX|BSOX#-%{Y8X+JJA0Zq2C4g z#e{w@;EM=;0PwO-c&$Ifir2?4X#_t4^nWGxG}1V0Y=O9_4w@HGSdx+*9qf|4&uC-v9rS;L`#B8o_4+`+rC9d4T^t!50Dk9fB_f{C^3)3h*Bj zybtgz3IE-oc)k4liT0}n@INH@R={6I*uM#+zkry(bpn1R!S?|EN`mhP>A#BL2LXQ# z!4CubTM2#(;J;1qTLFIu!EXorT?9V`_`3-{_8@2b|1iNP0DcwW|H*)_CHOSJ*AaX+ z;9nuqp9lC?3BCyMzaaQhz{@@LUi;4~z`sWDKESUg@_&Qk_4fO1Lcay@?+|<|;QvPO zn?U;InEjl^B1-9_(zt-zE42!0#&d6npjGWWeu6@M(bGo#3+-ult`o)8f_sT%f-P!50F4 zKY}j-`~d`C4*2~Ez83J86aL!-_y&S+0sI<*Z&SQp{)ZFkZwLB$1m6Yt(+R#8@bXNN zSN|OVd;!4^1AYO)ZvlKE!EXipB7)xz_#%Rz0{oc-AFD3D5K~^`C*!wg5qtvR&nEa} zz@J0#X@Fls@Y#T`B=|hQR}p*>;8zfQDd4Xr_$t6(L-0Pu>+RRI1m6VouOs*tz_$>5 z8{jt*dp~|D_-~iJqdmg=*v54yw?BCfZv*T7X$tff?o#sLkYeH@JAASBjArB_-4ST z5`3%T_4emvg5L!6Zy?66oq)fQ;Cldn6T$Zb{yZZ6Lx8`4;70&|5y6iEUfxONwf>I- zemTKU0=|OaV-9n+pRGjs#RL9kf=>c`C1HOm;N_iOUh_W#@YMvLt9ZTst|0h)pnoaB z7X!YA;Fke@CBfGK{xX7Z1iZXc&1?BJ1AZ03w*tP7;M)Pen&7(tUr+G8fcFvn0N^ht z_+h{|5d0R!>-A?X!H)rc9l>t{_TNIZUlV}8mEflV-$w9phnwxUo_{Sw`V$nduYY`# z;FAG=J;A2|{#yi}4fu@&p9lCG2)+pLHxhg);BO-MD!|J-9lf@nKEU5h@EZVs3&C#$ z{H+AP3GkZ;z7z1b5%sSJ@ZTo*e!$;O@I!#_B+@?u_y-7n4Db&V{5aqrBlt+Rp; z1V0V*HxcR z|0uy10sb+9F9rPL1YZUC9)kA){t1HL0Qe^fek0(YBKS>!?<--+PI0RIe;{&B$f5&R_JcOmSLIm+37#u9uy;CChXB*5=R@Tq{` zo!~P7|9v9=a{<2xpmC{$mJ!9PlR){3PIK5q!+i&h|Hh z;NtC z1mCQ9bq%C(|LU_u|G5e1`w0C`z&8+l58&4ld_UlSK%{>N@cjfo0{9;i{21WxAkse$ z_`3;y67csCd`zmd{rnEW$17g1e;ov$2>5#lJ{j2m0KumL{zpXlX9NC0LO&0r{~>}e z1p4w#omjJ21OL4A)?H%6A3J^}fPb3c%K`rk!Pf%*hXmiGc-{YABKT&Y{{q3c0$#o; z6zehn+W{}%6!OY<0sc9{e|rJ{Dxp6B_yIzH81TO#^tS;1$Atb?z{@w4Vm+4McECSR z=uZKDlF*O+vT3Luzm;z)d9^qDS*G2;L`yA5|Muyfd2`>=O|w9KZgiDAMlMt`ip`6KPB`_0sk_= zmjnA>A^2Lrf0Iam6R>}n&~FC(rG)-QVE?Ox{wBb$CiFW2Ur+EoApJgq?*shh1U~@y zpAq>t1o$Q5O(w7H*Jj1*^>-a%|0v+s68tt`{}lwk9q7w9F}oo=AT(;BO-MG{CnJd^X_kAox7M-$U?4ir35U=S2N00sLly zUk2=dfUv&?=*u@%z51^Y@V_AJZvy;l1m6tO|0rR9E70#D_)UQSC1HOD;GZJ&y8yoj z(SG+RUa$YXgnmEJf12P2f&TXhely^oA^1_if1lvD0sdKnp8)(12!2}edi(Pn!N;aK z=RX4kpP+bMe}wS=B)~sU=%)btUm*B&zz-694zT}4g3kl`FA;nZ;D18!rGOtI_$t7^ zOz=LyzfSni2EcD7^fv%%a{O<_;alrqc;3pLyr}@u21V0V*|48t0$2r^oZ3LeP`1c4tMe%z2 z-zWGqp#LX=&j!4F)86a&HxJnV7lJPY{GSQF81TO${J#{We>1zt-vs!75PYZNb^rf0k$>HQf0N*Qf&Cv6_74F4DS{sY`oAIU9|8P-3H>o( z{~w9?$u^)rP3TVm{u6?q2K=W4A9uXj{_Fnt8NnwgUY|e45cAJu!0$xxX@K9E;Ije0 z3&H0BK9=B%06)5?_x`68@Ou*aRe=93q3;9y?+AVa;D1l>8x^nn?-;?i0sVc5{ObVx z9|-+!z`sTCeSm+P;0FPpK%{@O;`RJLfZ(?Pek)=B7_k2!LVq0a?-2Tvfd3=G$DH6C zf4@uc@qkYv(x0Swz5EU(_!PizBkWHD_8(5@X9NB{LO&1iDTICzNdM6UUjq2|3Hz4; z`;Q^?YXJWzLcbC4;{@Lf_&*bTE8x?J^tUTs_x}?Jz7z0&A?)u4_Mb@T_W?eO;0J;I zePa^mf zz~>TtI^eex{+9#N|2Klq1Nx^B_7?&D4+#Ad!2g}#mjU}vC+x2Q`U?o&2lxrX{w835 z5ux7#_{9X@2JAnR;M;-zSp?q&^#4KRUk}hPCiMG({!)S;1p5CZ?B5LZ&n5J?0R8g_ zek;)b7h(T6(7%Atp9K0B68tpKzlh-DzT%AkOcLo&0Q|*-ev;zjO*4%3vr7m*74T&Q zp8@!Cg3kqf1;G~remTLHC|>XXKP1X;8PKmH^lO0rzX^RG(7%+>-vIa;g5L=El?1;D z@Rt#MC*W5Re2?Pw^8bj)|31J^5&QtKzn-vv80a?;{0Pu*B=|AFuO;|#VE;OTp8)z- z5d1XYuO#@mS%{Ajo`C^{_6yv2lx?!F9Q4<1YZjHEd*Z$_+JyePx1QrWjCVyn*cvb=r;rV ze@pPKfd3uAw*&t71m6YHKSuC9fZv_S|31LKMd%NJ^lv5jVZgsb@LPcWelVj?@RDwfKMR!aljuyq<<3d2NC))S^6p9c6uBLA}ie;~o<0sbI@F9Q6*1YZjHBZ>U00(=U=`v89w z!EaE!#s7%(w*dV^2)+&QX@vb9!2T~0`dvW(P=fCT{PBeS1Asq);Dzm!FK@u zG=lF2{OJVW2l#w~9|U|M!EaW)UjL3H{BH~3k0SUnV1E%||2WV;o8Tt^e-6P<0sEH_ zd~CKe{(m%)fAN4XA@ma!ugCAtBlr}ce?Gyd0sT}W{n@ZZ_%wpA1^jUY-vs!}61}hgwkTe2e`*Q774UTgzX|Zi6Y1{&ypPcD0{rC!-=lcF z{x%SNKj7C8{1D*R68s3@PayJt4DjD3^v3~zJHbyXUiaU0!v1N%-%04l&T;l1cMyEM z;&uPIi{O(0-%jwU!2Yig`Iip#?;-Safc~t5ytiL@fd3AmUkLd73BDNcodjPB_y-8S zT=Ba9JhZ>}{Hq2069nG`_(uu*TLAwU!M6eaaf0svd=J5Q1O5qu?*sf(1V5;Fz5VMY z_+g;`G{J8H{4)f<74Uroza8-3C-^DA&m!8t*tyR5(T@oI1i(K>@X3H5Aow)Eze&{p zY{0)j=;tY3_uuCUz7X&y66IG6?0=EaUk3OLLca#spGojO!2gu6zX|ZK5PUP>vk3b) z0{&G(zYXxi1mCWBz5o0f!FK`v=LFvi?4M2KUq9e~LFf+x{xyOh2I>DL!EXWjBLqJN z^j|0ValrqI;3t9ozb5!;pr1{Yf80E0|1*c+69IqmLEguYDS$tZ;L`zLO7J;~*ZYsT zMEdgp|0Yp>g~0yb5PS*XM+v?h@V_JYTENdE@~;W-Zxi}0fPaVJ+W`MA!FMQL_n#ah z{arx+Jwm@1@b44+0I>g01V04y#|eG}@biiM8w31b3H@=v|C8V+0smFP{+JwR`}+~0 z9}oEd5PTBgKPLE8z$YHyz5UMs{3nEdF5pih^1l%9J00lV{u03NLh$8)-<9BN0iR6d ze-q$$C-hqYpG)L_8{qdK^g95*7r}P}K9$J7KEUry=nn$^WFr4I1Aae3e-!Ws5d1d4 zA4u>MfKMm#e_HW+|C>qhvGbknZxUgD0^koJ_+-F;iQv-!pG@%Cir4e+P=e0|`iB#I zA<#d9;ERF&Q3SsX@F@ge1MEMN;C+BUn&6v&{iy`s0{AZzd>gR;Yef6i4)l*D^t%9` zM)1AB{^JO~ALyS#q<;wLpGfF$2K+37-vaor5d0WOe;$$kaloHS@RNYgBJ7X(scDDb&B>Xo~@p}Fh z5&oMD^xFyh(}4b61fK!;I|)7q@V_GRFAt>uZbH8Z@b?gWDd6uV_$t765WG+Ey8nEK z;G2N{{RH0v_)dav1NOg7lz%(m&m`(kC$RrP!u}q>cM*I);2$FRA;3RE@FR-X{pVqV z9|iooMEPw6_Mb(R-*%vXHo;E<{YQ!P$9&D%{y#?W@qmAv;FAE~L-479e~REU6tDZw zlLVgw_$LTH57^&J@I`sy@k2%HJ{x2o!Z#>{%C-jp5Uqa}o0)7jjp8@z^6MQb<&n4_HRJ`8) zo=5P@fd2UeUjz8Ji1arC{%wM9R=nQ+ZYB7QfPaVJ+W=om;!f31K& zhR|;Z{ILYz1^D9#zE|;j`CUS!zaQ|&6Z(UIKY`$f0sj?(A5pyCew7jF9|L?B(f^JE z{zSt5Nx(ls=*OI9w%>aBXAt^vir4cmli(8ppGEK~fS*n9>448B_#D8`C-{88f0f{i z0e=#~F9Uoo!Pfx3oTxvIfIo%MZw7oG!M6hbRDy2@{AmQ=rFgymolfvQKtG@0`vG4- z@I%1<1q8nt=vNT_GYa@ZLVp|J7ZdyhNdH*`KLz-62tMX?XZyW`;Nujpx8LUzd?Mg4 zBKQ=*UqbNdfL~7dPY&SA3H^M)R}g%$;`RDpN${mW{|`j}Uj_JTLf;4Y6$HNlr2kTa zZvpx>1m6bu%Lu*$@T&;E8}PLR-v{_Qf*(}8?tiNZei-Q26Z{syR}%GiE8rUl{q2BX zL-13I*YmH6us89!M^=*I)TiQtnIuiL+#;8Or!O{6~!*uR0$&j$Q81fK`^YYDyx z@YfN1sp9qg|2n~!1AYaO|24q=ZxZ^Afd3Z3Hv@hn!M6hbU}F8C9q>00`dxs(iQsz` zua|!-!S@6Gn+bjh@V5~B2(Z76;70*}DdE3cf&H5Z{q2Cili;U-{dW<3Oo6lgZzuS8 z#q0iaH^COq_(ur7Pw~3{JWTKdK);*dhk^d11U~}w zA0zlN!1oaRIN&cM{C5)Ys|Y@3fiwQ{Bw>FX;Cl%^0q{=~d=lWFA@~%)_Yr&=;J;7s z8GwJ5;Bx@~1A@;3d_Tb#DqfGjEhGA$62SkE&@Tu40KwM+{&|9L0{kGswPYJ#Y@Gld5FW{32egN>p1V0S;TB7~j0{G2@{#L;Mg5b9UzK*be3h*O@ ze(V{}@&D@tp8)t4qWwr#yk38PMd+sj{cjQa89;vvp`Qcv-z4~az>gAqF|dC%;XkE7 z|96Cb72tnQ@IJtg5&Q{?K{Oc!#el5@+BJ`Vp{-=a~ zGtmEx;9CJ7L!7^92mDS1-v#)c3BDKbKEi(o6d$LR|K$Wf1oU?!>>mMq1ED_#_&o^y zalr3M@RNXFL)ag)(Aoa(Pw2-3{s4kcQhc0N{s$6#3eZm?_;kP@Lhw1j{$zsB1N>nG zUkL0!oZw3Ue+0po1O7;YuLbEpir^c8{?P>A4EWuc_8ZurO6YF_`d=paPQV{S@I8P( zmf-sVpGNRQir4FZBhh|s2K@1a{uW^W2?W0t=%*9>IM9EO;3ok;i{N7xIotoWME=JE z{?CMd65vlH_*B6Ejo>o?pF!}sfX^iOLcsrn;7b6XMeyZ-pH1+!fd7!-n*g6p@GXF! zL-1{YpG)u^fX^ZLZosc2>R+GY_4e}$f*%0-xrF`0fIpeww*dRUM(|^RKab$I0sb_C z-wx7$I>Ao?KA+%Y7dzYU0)kHf`~rec2K*TWp9c6sg3kv0LW0i&{33!c0{mivF9m$l zUf$0SS1Dev|LY097U-W%*xv;BVuEi0{5b^Q2KXfe-vRig1mCTAJ^#-o_+Fr2O7H`K zzkuL}f&CW}{0QJLBKT3jFC+M^ApI8;{C2=!Lhw_7FC+NaBD4M0{imGZ;{m^%;1dsYIo#Xeb2|hvbdj4NS@JT@bT7pjn`ppEN4)niH z@Hv402Epe8zJ=h60l$H0zn3XqFTZaQ`c**xCW7|?{$_&T0PMeo;9G$H<3#;y1NyfS z`t5+fo!~ox{hJ8B2k>_id_S=N4uT&9`adS}e>2d(i_qT!^xFx3E6~52;Kzafy#zlA z^zR|~X`nwu+kmneml^Ak0`$>px;O6$DHjP|9_w0 z;{pFH!6yO!2LzuA_#K3DO2`TvmM^MU?$qWp`2{&R$WDbODv_$t6ZPw+lq z|Bng23F!ZW$iEh#{{o@k3iJmFz8&x{5_}in|3##~7x32+{qF$ahY0(J0sm8i-=cWE z{=H1_V}O5^;I{$$hY5ZH=zpEa|0$sV8lfLs>}>zPLFgwaUeEs)f=>eaZxHsU0{&M7 zp8@!9687f;{!K!^5b(bt_!7nI`9DhV%YgoG3BCsC|Bm2&K!1$jHvs+L6MPHMPa*g= z!2f~ZI{^O{!FPl7zfJJHK>r{(7SQ zi8;sFet(PL;{m^s;FAFV0g?Vx!2g}#GXOt9@VS8hC&3p2{$B)N0{BUSF9-a;3BDHa z9}#>L;HL<_1@Q9-z76pIA@~l(>;2~qg#UK|{u4sK2iX59!S@6GE5sSLSQSt8|MSvY zcZu0g{h9ucLBKZ={4n6x6Z{C^uO#?Uz<);M-&V!z@#h#qe>>3MiQp#zzcay41N(O& z__!s`{v(#)6BV!5pIr$)8SuLid@A5?Bsu<3BVst=uazN_rD_uK6a_I{ZAqI1i&9j@X3I` zg2=x#z#m2EX9NBig3nXDp8qEhd?CYEGQi(T_B>0Vhe}(YhO@LoS=ywAC zXM}!_;`RDlMCkVc{x+ig1^{17=nsMPpF{8?fd4jO{}{0Uc7opq^v@;ip8))M1V0V< z^9ergT<7@z0)kIeyzYOc1fLA_w-WxJ2J|l^^fQ3|MFgJ<_+&;4dTiE@1yEg6{=F+yNbs8ge*?jH0{%vV?@_#7e{UlAKA?Xr!4Cp{6EXhY4D7#|(BA_1Hi91m_TNtM z<3Rrof}a5VT?9V`>~AOd*z=w7qq_+{9`JV%<(~-n`w9JI#p~@~C&8xy{Rap>1Mm+L zd=B96B=Rp0@Q)Dsg^JhnubbdY0RJe#mjnJWg0BVXf1KbOfqoCcHv|3&f^P-Q z^b`8=fWMc}PXc@g!KVWLK7!8x{C5aG7w|t!^1gqs5b$3o_!7Y1PuO1$_)dba1^kZ) z`*9_P1A~73H>6# zPZN9zu>TW+F9-Uc5qu5ccRIxT_{|6Soe91P@J|xu*Q|Iw{uN8;w*r1wf^P@>?gZZj z_@{{U_bOhmzk3q;{XjpS;D-ReH^GkpejkD#1AGF(j{|-`f}aHZ{sbR$ku!dO0Kvy8 zUibe*f=>kc2NHZT&_9Ua(}4cL1fK!)4{wRX)0{qbg->Z1N{ZA$Me!zd3;0J;I#}NEx zz#m8Oqktbh(EIpho8lAAX4ts@vX|(8r-1%m2Yc6#UFIDBf1j{FLGil%PZRd10{zK@ zyxX4v_=5et^SOY3Ho-ez2-5#OBK^yN{>J^h>(>DNX9)cbK);#L-w5>k2>lMA-$dwl z1HP2t`vCuEqWlK||2V;K2K?oFdoTY{#q0I&`$Yb42l{1%{ZoLSPw=r9JKLWF2tEPu z|J~Pn{v|73&%bAh{L29Pza#W>f&LE&{bHd1V?uu!;IAO~8o-zD<30Zy0e=C(Hv>MC z;9CJdK-9l>#q0jlPn2H|(0`23?+5$?1V04$RRli*_-6@z4Dd%2{5asB7n4!{y*K`U zy4`;>3HUn+KIRf<`}J*tj|cqUiT*1I@a@F-Cl&B-6Z#o|zn##}1^gR?ej(s*A@oZC ze-BZ9<$%9|(60sjErfm(;BO%K7Qla<;M)LSM(`bgKb)xl-GJYf(C-6$6)}GrRJ=a_ zy_T3i4g>u;#QbLq&~GO6$AEr1!H)y|>j-`V=w}lAG|>MB!N-<4+wa)~pP+cX{96b< z3Fzk#d@9iYCc&oz{jU*x4$!}z;PZg~X#`&c^uI;$B|v`x!IuO5jRao<^v@vpMxcKK z!EXTiXA%5HpnoI5w*mdL3BCj9-$d|TK);yadx3r{!S@6Ga|nJ2=-*86n}Pnh1V0M& zZz1@tK>reg-wyO|CHP68zntJ>%FX^mZ~xl}K2Gss$YT7a#M*f!!6zzS*T0S6lNGP) z7ZQ9L(Em2UX8`?+2tF6+-%jxPKz|v*7X$rG1YZjD7ZH3F(7%J=Yk__h!8ZZ@I|;rS z=wD3mtw8@Sg5L!67ZQ9Y&~GRBZlGUH@O?o4Zh{{G`YQ;280gY(0!6yOz`w2b;=wC|k=|I1e;Io1L zR|!53=s!U4g+RZC;7fr1cL{zO&|gXLH9-GCg7*Ra%Lsl0(C;Gn7NB28@NGceB5$p|I1iuXMFA{u>;`RCGO9bx&{7(qJN%8vrn<0X4 z1^iD5zEknK|37em_xjTV_)dcF2mJj6KLq%{gY>6}YQB^BzunC09{B$wieK>3&VfIZ z|Hb;hVqy*ze zborK_otM{i8Tn_^kJ(_7{(O@8w=c-QZwemSf2z_KLmtb|u7A4=f4<^{%UOPQ{=16b z*=GM`insrL`~MzN{BAaWmB;*h*M+}E@v|+~JN zDqfb~L7@CnUG#I0H9h)Ro4&MF|DEl^S1MlSul}?1i^Lxw`^%O6W<{Xvj_hXVZ`7yXMp>ObP5A9uA`|Mc=Z4Cw#LMgMlCFWWc$C;qzi zC;VRince?>sQ5M3zwOAsk6r99R`zEoUY1`9u>Uw0{q*C^@;f?={&_C^*@|xp!=EE~ z3_^c|1G7zB8>h+F8WhSzg+RM{4;?5TQ2(fCy0L` ze&PC`-@53RUgI3UWC8tH;XJ7PS1EltzSDnp|NqQI-v{)wfqtrse!J2S=YK~C9{K-9 zpg$Mrm$>LZq4dR&-SV@i{~IoRzl;5L{u&qiJAwW4f&I@YeS5v!s`T4Wx0oN3V*Q^n zPx|$3f8MY33snOu{r4oGKj@PFrh3zV<7^4G+xeVd-~KOdGlgpuFZE9b`rG~KxADzB zQ$Jk$f84Iv|G%yH&usZ(lZi`_EVU_VN2|mwU7SP8a*T z6mL{+Ee$p^V{UV?zh53U5I^1i(}DfZx!B*;;LZMjxY+-!;(w&sF8{0D{_QUI$K7Gt z@Ap6HKMR2U2Z@QdEFydU`_`ED%d*vfHg}FGQoMcq*r<5>_`z=f8G=XtlW?bLzcAbQ zN&6Q9`)_s8e^}`sr5i8)yIucA7yUG#zZmF0uk`KtH|#P0K6SBwv*Hg6WB-3#?9T)C zp9Spy+U~gi|3&Ga7)F1-;8FRNDt&$YUkvouyXYSx2R7n&f=%DRAFcH5;|F{GSGw>8 zik}mv{4NnZ^514N~M2X82y`F^oK$I)dT&Xy68Ws^uzU^gD(18 zf&S${|05UuSCxLa_T!%}`cpuE4bVSPOpsCg^(UntE`D&lS`)L+pAznNwqI+3ewmB@ z0ZnH838#Odi+&o=zXIsXH$74MPf_~e+E4$RN zRX~5jMSrc*59fb>b;*Ap(7zh!9~qC+f4kBbN1iP|d;66vc+~!E1p3zk{Y5VNol0M9 zxw8E1`c*D`uSfn$7k*Ij$63^!^S`w&>F)&T{{~3^y)OEHQTnHZ(I0lEHv;R7yE~S{jI?M z@4DFk2c<9mwdH5G|MxET|3&e~TWF{KZ@Sp;>u~lzw*vd)#hp0PCVTlOZZPv-T_YN> z!tTGjt2=e<<-bwsmn%}1|7}2jrP8;T|7xWluKoFqi~ZLq{wo2?&HrMz{|y)W$3gyW z0`|v=4IU`}dX#>+^4mr5sQr$)&slzV0{yuz`fnv_XGVr7ySm0=|9OuzYV1S0ieIuMZZnyhg(1Ox#)KT z{Re^msEht9O8;0}{@dH{gG2{~%I^ckA7SI|<+q>UQTYu5`yU4O7rN;0eT`XvN^JUe z`%ib#9|iu?4fNN!=vOHHY@49%f5u$yq96Aiv*nu5{P!`S|FqJ#_aAp$Yo=c`@0Ook z{}UJcA5^@({j~E_F7{6;`$e@gezN{O0qj3k2*_{R``>4kzJ2~>_n$Le_%}TASG({Z zDBkY>cKs&7BmYgfU;GR4)6@SnNWTm-qVylwY?hzB{j=wPzYCwQczgeA=bv%0KMmO5 z2kifn*x-olU+q!GnSd?7u+i+wH&a>)z~t(#8Hh z#fKYzKI&qB%>$NZ^p6z|iu~{2NA$-FYytX}F8ZG;{c!F7 zB`*3IK>tmk|GbNS`Zv9`pFecbF9-UgK>rZopeX;BDgB%<^(RsADF54l{_lYP6)yUl zl>U-1`VB7ngGyigYvU*Tk1?SCHy8c)J*MCPCY?QgHVV@J7SKONoavPLZy&!Le!W@# zGH>;t{JZ*3p2O>)QDN+Fax@;?LU{|D%Q(?!2m>5G4D`Pu!q*+st)=zk3KUv$xbP3ealKM%O* zmn(gJ{P+pb|HMWAQ>7oy|E65@+d%q11Ny7P0t@oLV{SC-UpW6;A$U~&-9Ue*J)QI4 zpS$QU@TmW?i~boz`y*!i*QV+30rWp{(VtNIIbrmtT=dhro$c>l zK!0`$F8{PvGyPd%^k)ekm46=4-y7(6yXar2^uvvR-gM!8iZ2Xf|LZRHmn!?q6)*iK z0ocFCkvRYQmA$>mzoUN1szY*{=h<{l86KX{9A=kf= z_!Z(OOFlCHCcuADeE0psUys`TYd)TjdO78U4olws`cvJxHgCSYE$ZdwTeQOKe|o_D zl_cLPV15e8w+onGLh{LyzaXl6|Mhnh$&Z)3JO7%_?^i+c(i?Sf zP3E0&JZHue^>XJ|M*KYBCjkGH1ib%~#cv;_`}a?6lSlm*0>2ILGl@S|{N9Rx3-L?D zPm+9O{)xcPBmN5U&Bwb@FL(a$lYDW&{9h!$L-N}7zx~;G{SF7rhe^IkuHApy{rho} zKVS0h_usqo+fMR>C9j>oPfWg+St0lH$11S@lEC`Mm;xi$1o!-Bim#o&6HFfYu`l_b z-#P+6iTLxyzcOm~`On{Z#7`8z`uQoc|2qNydgAX6=np4;Ch$80e;)DMJ{IiyH=FoH zVE)O#e~tM4#n<-#=OjN`^5)~=sF%C{W6U?Gp#67mz=Nxu62 zRsGwz^*>DV`y_8JZ&5Ed|DegE^HU1euRB=3_laMBzTH3O@(}fM@BbT#Ujh6c!2gH% zoy6C!A63K;t@K|%dI7&pBHlm4#MiDLElnQHKTdq_^`j5)uOj|Z@wNNs{Ul!``Ib?u z=ik5glKR77eyO1TmBimEeqY6Zf%sWqe*J*Ijrj48+x@FuKmH~8E|S;g-{D-mf6^qc zo&V7!pApc{CHZLq^BYKhf#kL4r$Z$FI?21&k6%n4ou6W`{|1BgKesKO|2FZ>{~h&m zub;z7{%FAb<0Ri^f!%-Z{&)MIYx1c7GO+)L)$xCRSxWo~0sRk&AOEtwex}OwBF{hR zz^{KEp8snB{gX`|^`8O!;lRI=_*LRx7Pb1eR`0*+OZ-CdtIuzw|B=9-NBoPPz}Fvl z{kM|*K*_t$?{5ABQhy1k|9VjWspsSMn-I{iWAbSI%7K3a@COlpw)ooj&-5dHmH6KG zuaQ6N9V3fhy{_|!UnIWv^`F_qPh4fskJrBm_@5BJLVWY(ov4?4{n|qObn&bEjO^c= zf&UNjYcI6>SL?ru_?e*palmh57C5q}-S>~3#n(PRn@IBg0_NW!`B4G$f0O*AfcX^j z0TJqdX2AShl3yfw?fK;!k}nMCUuZT6s((|!{6i#P7BIh!WG(3z&b5GE zUqnaUNc{cccXsM`_s_>9-)fQFKZBgS+kXkE zzZld%57b}V6d3tE-RG~{#UJT_&QC)%OdidzO#BiFME2if!0#-+yZ=7^kL|yq(*Iqg z{&LArbO!GHG&G6SpZ}^oKLxgoP^A6^p#J5g{((zuFjlF5FR6c& ztv}?c|4C4PHjCU~s zu5$k#K>XOX_WY&GhKbyN-UR+L;=A|nZSfY zhWp%~l5ZvX1f~CXO&-lZPv&2}|0Cyb6PW+W-SPbTif=xi zh$fvtei+FglDu~Q7La`17wrDmu3tMzzP;p64@JM6+fnFqlSlh6_8tHArxeV; zUJpFKzT%%1&HFw-i!piRr-)y@ev$LH4fw-}KSq4*`a6{P>7f7Zz+X!I1>&Eo^nZ-x zmr4FDCI1(xKS$~>kbGo*Ux50vd)oDLpC3lZ2Op<7ehug64SV7BpCEZ{{p*`NTK}Z= z{`Vg{LH%Lk&lbPbsnfSHySc_wP&AclWtv-%htEQ%l~$OQ%>kdQh$=<-TvMBza#aR z{?~v0_ksEwUykQDP<-w4pIDPe^Q#cwyZ`nBKb83R2K0LoKW>xl-|HU${yoHBA-;D0 zrVu|B_?5t4Mf{!O@BH7^IsQ-X`oBp0Eb%KPA31-AfFEZ*Ad2iscmJ+lW%sXk{e4{W z?)m#j@?R?T&oz0pe=^>)>*uZi4^aOPr2gk$vGr?T|46+8@Bbpn*LM!AJO5rLkLpj~ zZ0q;_`NJwuf1dd6{5KZ{oBv;={@s%QUYY;zr2gFZZT&IQe`Nps4eB4*5AUCMUkz6O zYRS9%r%dwgoPj$(4ZULWX#RO6w*DLmMCv~V>Obj9T>puyZT;2PkLocx+aYv|%;=B9*iMN8y{{vG0X31;w-$d%K+UlSGNud5l1MvR&p(xn=GbQit zpJS50*crI<)6gv@kLI6RYU}qtf7Jo?7m@ledOO(sPaBB$&sfQCcM5iX8mepZsQ%Dr zw*FLG#__Ko*8}xui0|&7F6(XZvZ&o}YxVxCQc{1G`lKeYL{cA}5 z8DH4>6-z!czs8{c8fp0aT~lo9ujlyg^>1i(-uZQ7B!5GP=>H=!Yws(~+|D}Gq=k@?31KWQ-Tf0g*o z_Va!Icb>_k{wu{#^7yTQUq<}h;wLKoe@6WHoehpBz56c#_~GI=!r9N>2W{<*~88gTvz#LowQSKxm@{KEnJ-$eW(;CBQ5RoCG8H~B5t z`Ri};X#SU)V z9|!!tz<-PQO9J|@5kCp|slfl0`0E4u`-qc1buC{1uf^}_+<)EoPXkH5#qaj~ zG*uNPf8Fwf+0P$)o)n2J;&P=GS~Up5F}dwddC}Odk1Jz`qLkqlv#X zpno0lbAf*~@Sh?6#(@4J;uipaDDZcPZ+Dw#v;1NIO@Xsv<2}D5@{gZZ`_8{F7QZmE zIOY|3e!K?w2T1<~hppes#{d6+owwp;{>{X1^r!7#+yA49Ukd!|fd2yVI|cNY62AiYk^k0ojLf5YF6G1@ zBEB~NuZSP|&VT>B0r+Q(#Or@=!2TPVJX-%a;NJ-R-o#%V(C<$CB;el!{0!o+6Th9T zSM?9hF$>*D{8aJ1pP$?e{1=J;llYyhVfoRy9EFwaVc9QQBFrRn>u76;_{B)8Z z9Wehr$xjKG?=u?LKRaOlIg(!@dF}qU#N^TWi}~Jv|GN+D|G$a9S^O5t{yj|mc;HV5 zexDoh{PqU)Q%oN9pA7u_fuBSC+DGj9G2dPn^{N^5vry;(;-`t9D!)GR{PzIx*Alg!d2RhJAA{$AzvSKPzkC0En&ekWzLPUAH=k$nX#MiQ`sIN69U%U9;+u~b zqh7B66Y&eh_ddVO2L2s4;rS*1ZTC+P2Xyz(M3YDTmy4e*`N;m61N_&BKlP~f|BmY3 z|Ml;ei68#KUOzHC{#@YyO8hDRSYP}4+dkr#?6tmk{<*-98;j?^Tzu{8KMhSD&A&?g z>h~#;`OgRbK;mx_-#tI>`d>l(*dP7&ku#f4^{Y|AC>_B zqzpX&9pY>EpPD9*<{t;P!d)|us?<>A`{khEKQUCG4e-rqh6MtgB z{!59U4E!SCr%lBD&kg8bY4WK5G~llV{%gcv70`c~_!+=o2mD62;r_RZ-&WcGr~GX;QyESX*D8U>F0kv@ykK~8-ZU%{7msLllrTF zaG(EwBYqX=e-rRKXX5o=C4Pr$SblW<3rrrZf66}p`;X1QpG^GS0sFs=_?hB+*S`e# zuM@vnO}qYD|Eq{!1p40s{6oa=FMexf{=X2vLVWN0&yRo~e>-0P%z*xxCXd!X^t1o| zvlaLQiN8Snr-z6l!JD@+2KUe%R z&-HgN@ZTf;>XYpL-J|%$#LxJ(!SSTmuK<3}DR};QG1l+v_|C`iq03Aj%|E5m`bnPt z_W^$~@pp@_z5jZW_?hB+@BjOOUq<}eC)@tD>+fg8&jJ1c;Mcwj&%aGTzlO=9`R4<_ z68PN0LVc>5fe%vY6*Peej5I;|R@BXg>{vX8eD!#V=D~VqS{3F1hmWB8K$bkOc zCXe=i3Gj~s|2yK}E53IB`iN__A2H&oaE{ew>tzf64X z{=0zqiNE=;|22Vsi1;ye?f%#1{|oWc#gFrx|60HwI2F&ob3p$JlSlK<1pU_r{xifM zBfd8OMa0hsehly{iN7FV|34GI6wJR4@O$5b=f5$a-`(WV{3}5Jb%Fml@hbz)e=hOk ze)sSH`oRB=`0@3E?fna{Jo!lH3I%(;*S;oRi*zYiJv8Y_1}vY>Awl^zbF3br`i6` zcKUb93B}!q*RQMO&6fwFUheueGFb{%HaH*3Bz_w3&jbFs z_v8L!8`<^O`~;In{bvBb9q^YEzl-=8q3D;p{?8IWTl}!ZBj>*Z@SD!S{Vx^Y{rtxD z8=E}pzg&Fp`MUu4^N3#|{)FiEeSd$*Y~m*#wdc=!{kstO>xn<4v0eWH#a~1GeDRAt z^S=oAr#^t^e^h+)e@DG)M*S=ls$+funt%8o+kaSoePsPF2L4jwPj6!TZ{v71oS$Fx zAg+J8_Qor~5(FN519`Q@W|F7Z~6TeLS>h+JzuPg8yJ%sz8b9$t! zQ0Pp>?@aP9NZx(_=Fa~blHVcu-Hz|(2b(;afA%rEe~Kj^=|2VZ|2FYg$Jzch|4rhj z{Ok970>9}@JpcJ;Sl|9G{~Lna{}7U2CVBIJN4?zrJIMS3G`~=&;qhEp(vkV~0rhVn ze%q$De)s<4*1wkcVe!4^=W^h;pM~c)MEt_2?)}f-=bAj~KTG^#Pybf{e>(ANof)kE zsl-pNVdwAd|4QH=AbxxC&r96bO2;$NcpEleKGKSO-)=XZmE|0wZi z2J~}?pC^8*XZ^1N{$b)5i|=0l-1B#k_~oGgtAT(0!+8Fc0s9|r@@W3CHSPZM&VMNI zHxs{YGrRw_^?#T6DdKzQe+}^4&BpzY5nr2sqRFHFb3p&s0)GMV7X<8o9`TESKLYr_ z5r1ny{{ZnT!2GWR{@_RO{A13t>#xm!fXSozC!OHmf7b*5RpKX$ukF8;#18}i2H@A9 zgZrNp&_CJaQUAH(d-wm1z`up~D+A7dEb+@g|2F}@g!o^H-`2VQyZ8V95~}{}$l?OZ{HGJY9L)cA;2$FXH1V%e z`u~OaRbc*i0Dtg2JpWShwfPS)c{KmT6Ycr)&i_u}zeN1D@pk_GmHw9#KT~|~`MV4F zF}b+^DdMLo{s|_J`p*ac-N3(*_?yMoK7SoW{8HfG1N?o&uietlKSAmLhR5*y+Dcyg z{B<|Ur%1lJ;(uxKX#Szv{_FpA(Ep(Mxc*TA{eC8o{5as>5B&ASzgPS&O8;w!pCo>g z3%x^B3-(>R*c9GxH{qvsJo3{{YIr>9{rn^s_#Y9!tM~&I z|9#?Ti0?hW^MT*wN!^1UBCV$zbasUCdqG;e1FGx*Z+Q#NAu5<{=Lr+3qk+i z62EzZU4QNVv5WZSVEyxee`y|`e^>Ff>vw09NBviU^#jlindF53F9rVXi}3un1oS7EJeq$P_{)G_N&Mf%*Y2M`6F*D*uxI|ufj{;?xc`xD?EJO! ze}l=R{>woB1;GEB_*2DyL)m|2#IF>;*wg)^DuHS=-f0oH3Kfaz_zp&&Z_m4HepF{ll;=9kUZvV50pDn&& zkG~@R+rU3e{B`0tmwfdPu78mDdBA@M_`~w?{CA4qrW%$X-Tkwkou*KY#xE5!HipH0Aj zmiQCJZ?E_xmg4y>mb|w9!%QB{FLbJ%pZEN~59;sq9QHQ`^gEb5@{@r70r2ZB!+wSM zD{4d!&|SY6lSh77eDB}i_aX34dLH}p+ed!aP)NJ})HHeIm&e-qd-u=B!2gW+>%`Zt zKU;}k1^iEdzi>J3f2a7`{=4=CoDX%d^J^Kse7^7B8)EWkezB+d=eG^ie?|fJTZymD zuaU_kKN0xbf&V@6Q^Y@C>3=uzQ-Hq%_)A~J{Z9xu|EEnJ^`8#>GT@J1f&IDSU!e4V zoyj9V6ZkuUUrPL9@vl<+4~d^6zW4gM3;0Pd;r<&WMY;-wZdR^e=b1d}zes%V-~YKA z_&LO%dV%#5l>WaZ`6ZG+&B;6Mgm#ho;~VgUqJtI;%5N=2jJgJ{Dh8n{kk~wckh395kC+3KLYFt?*C%RN8W$@0{jugpLwBOf6X68{0iXz z3j8OC-=$M9KbQCgjs5)}1pYDN9|-9GMf{8=e*ZV%U%U#h|I&+s_21Ft;rgHM_x}KX zHt~mb4(8uO{0iXz3H-IhuXAxQ{|(|7#QFRG3;4egf4%tH^VGs!p|5a_1NBt)@wet^q{2KNAe}BMg;-7Pg?cZI0xBpj&pCi6^{Z9b?b+6+7`-fXP9R}ep@S;OPWR8Rl0z;C`9_uo(awu*m-$)o<$#P{~! z0Qg13pB&JCo%k8RZv^}f<_kQLYm)o@7fZyS;`HxczuKBS>OWiju;e5AuLaw?!TM($xi?7{(r#aQU6uIZwmZF#GfL*_Vu5pZ{hlvNPe19 ze`AwJ^~auN&rgdKO6W7MR@;h7hhZd7ABAOUrY;s z|K|XIGV$AYxBYADe;e`B#Lx2V|8s%=CGl5_ul2v3_$8qK^MK!B4W57f6x)ACW&dAC z@+p#Ur{rgm{6xtoDEZ|iKR=*jZ^Vj;HNAgLMzd)Ja zY?F^jDb9^4Hr}3}ILSxuzn#GT`JMQq#lK4Nek|e^c@;o%M4r6QL$1kLu3?_4fhwKScbpfb+{HelGAY2mYVLKP-N{ zvtix-4-vmW{OWw<`gsNLGdAG)H|b-~k9PgO(d5zmOIrD_-&X?vS>mUPuU)?v6Te)1 z@AYE<@INB{BJqbS`|o|?$F}xA{|y3uCGme3zlY-gO#F25z5QPW{M=%^{+;{U^}kH< zA2E5f{yCuktAXF}UF=U5KSA+tCHXwbU!>$SOdi!=3g$Nq)W3-MTgBJT&lAKCCHT)z zI`DrWe&}+$e(wFxy?&GvKTdq_{uvJZgpGLp&J%x@GyfXS&s&&0nt!VJVfpou>(@x& zuOj|y;%m=8FA~2%eDC}BQNTY){A1z|a{8_5{Cq$0E5ZE3z)v)P!BS+V?&n_vQ|ZGUweM2Ao=ek-&*Ov)h0Z@+E)ad-&rP) z`cISoz0Z#~gZ{50exmr=^*5dP8DRe7fd2;Z$BM7Lf2{Q$p5I)_Cn)nDO7gEsUfX|Z zCSS`K?)%3)(EqKV{}sePCjMBZ{^yBb0{q*6-(oYK-I`Cg4{t)rC`7a}WlK9@|xBG#= zllXH3`kxa&4EzUxf65lT{v`qZ+9r?IKNt890lzEpYYwpMug(8r;uiyd7VvK+e%FA0 z2JtI_|1j|Lh<~T}?&t6B{$E4#1(JW=IX~|8V>PKiKGB|^V#!CI|L1`EepKOgu{6F)00 zSpRv%k3Y}vF97~$#6SP4VE$I(mjizx@aukr*S|cVf0D_=^*`U=e;)Ar5`V$qVEy+X zez=|AUj+PY;-_96%)f{D@$LQoV&K0`{G$Q=H;G>k{3XCYO#H$j!TLW){QM67{_}yK z^fBIlV}=Iv&olYRuXNu(g_HdLQs9px{^`T4pLK#-u^bB$n}32 z@YfT6-nBM(pW?3}e#%9De>w0QZpHJjd!6-Pk8VHY-v8>GeB@X9=6{KQ{sq7vK>Xr> zek$?fyZHSTz@J6@$)kexKZE$?z+Vacb;LjCdh6RR{~J@ALnwz@JY1_2O$^|Cmbr3h`5A^pW%XI`G#K zKQ3(7uj~Jo?)X2s=jScrCv~;+_xAq=@c$wHkbr&_@x#D>3;112@%rbAf3DL1#U_u| zKUaM3{#yh5>BL_v{wdCZapymk_yyt@OZ}1ce;fE)h`;#;yZ-%^{@){h#%2EXe+T%d ze2VAaV6^qq6u-8~qxt6ne*^IQ5r4G!Z56){@k_+_uK&Bhe~9>V#BZVa*~Bjg{(phL zi}){z|D)qO+cES7@vFqIlze3Wy$Af;x8e1lf1_Q0?eo70CXd#?qMLvJy$}3viN8&J z?fmT`eq49!7km2u0QhHrhWp<=#`dp${yLN7f0O(@%KF`J@@Rf#Qh%1G{*OTYyNN&X zCR_ijivK0?(^489Pv(03t-v3?9nY`D*kJxplSloR1HTmbUl6}keC_kAZN$&)Vf#<= z^uG=GCw-3luXD5QU%P(SG(@Hs zhkE+wUk3akJMjF!6JNW24KjH&|0Lk=1pc?gZpdsOZ@TU?D}_f zeE0dWMHybd#gacq$%jdPljODMrx7NP)<2_{J%8T$?*;w;MEnB*{XN9b27U$b2Yrd> z7dPI{KSP;cKa)rO=ZPPdeB}9QAMjrwezy1tivKOiFO&QwN`4oqze?)&-oJhU^*7jw z=eIkcU(e*x{1SWnuiw7{zZdc2Zn5j9_1}&7>A*h-{K>>09MHdw_&LD;4fxB5KPRC7 z4DpMA{|E3tC;sMuekt)Qfd41(Yk!6JUuZ(G^{-*_X#d6a@$bLCfPXRZy9D$*5%+rHxfS!`2PU^DdMjR=r16C0r39?{ubg_1oYn{ei`s<)c61S|G$af@>aY5 zW;!=)_xbfO@nibh{pbDfho1oa@GiXn3vRQ%djB?gwExRe{rB$^f&Vx0w*~YM6TcGp zCjtMCuW|oJ#nSi?|pth z4fsvI!Sio4+4|b^_thldRq_`&^*iGX4K#VQeu)G8=eH54|5@Ts6#pv4UrhWI@xA-E z3GlxqezEw&6@M4;GsX9Q{Ui?fP0R86HNDfWpEm!-CXeP{1m@oq_*WCZzxdkx2NJ&& z%)c4%rxAaN_}cvMCVpt3-GAQsHwXSw;#Z09e*Wd2-=~S63jBEB|4IDbQ|$UDgrZ;W z`Ahm1@1G3Ge;gh6ef|18lSlg}SL)A_eB}LOYfyhC@jKsT>({P7c_cqd@)s%fKThh8 z8D!Vrd;Z&i`rjk| z-%b2{@t;uqFNq%-V)tLJL`qwJw{}hu){TE$peeeD6THs$x{E^~6toTESUn;)${x<^nZxVm6_~nZKD)Ga^ zZU1TVh9@%r>wtgiemwupGwuAf_aAjk9?idSgn$0m1OEo%SBbB^{}@U967jwF{~Lh+ zJn{R@vi)oCKk|uRC4Q=`Uu6C_0{=VWFB4yz|JTG%8R?(@O~Ak47rg#E#MkD3zR9EY zPZ!@i|C@n7iTH^*!RCJ}@pHuY&VL;6R}z1Q_&t>K_X6=tLI1Y^f9U}{|4rgwrua{r zJeq&#I=lYf{%-|-_OIBl`LLb8*8e>wkNi~ez3YD)@EcZQzqj~W|Mg8C`B|X<+kroq z_%prUkUuXfd41) z_luvQ_=kueGs^D&u;e4x-@Ac7>JaXK$ZWg+wf?U)dDMS~_}=xu2lzh`e_B9)5Am~s ze;@F#`VIGAAig&L{w9z5&ja(H4*Wvm$39}`f4{Q+FA={={9Moa-w*s+zvKSri(jtz z{}Mmv`i94o-si6efS*qMNpo!f{T*K(=l=iSUTyMd{$*k7d$0cw0sl?nuNOc0|0Vkm z?&nXh5nBM*a{guk{}19H4(L}BKMnW~1Ha=Rc>UWyYUi(=|8^#i=ASLT_xwKs z{9A~hF1~jE8B6>;;6DodV&dN=esgETIX?}(P5eUfy?_7WJm8N#jOYKvTs!~so&D$f zH<&z{f9Ytu|Ge{m4ETG9zft@lj_>aOZ-`$ZzW4k+4*cPN;{Kb=v;Dj0-}Q%@JnBE` zM*sPH0{D5vA1(e^rT@o?9|r!Dz&}j<67kz9{z2mBitk%0+H+Ae}MlP@y~zUuK&l;yzlGJTZx}L)~BKJu{;R-$kNEeBpP=-A)=@mae91Rf^7oMZ8_aFEAGsWc5{6pjH{+IuZ+VQ_X z|0`1`{y;{$4v3>->tx}AbuC|wfAq|6F(XFrND1v{`SGhnz(=e zV21b|ob_{VC!v-mjpm;L{B6J=L;O7Pmn;7D#LpAIK=P6IZ`*;tgZSN^v+HjjZ=zmq z|DO^+xuYu>^Wm&NOce%-<`KM<2_g@+C?<4+X@h^z#-v8g9%p!i4 z_@?dSuSowpfxm|M%f-J+@mCW+7xcdi_&*ZAO8nu9{~hs*#rM8{-3|QuHSzine%`MC zMT&p2$)oj;x!b?~<-kuNevbIs=VzA^KN&C|1_5P8NlBI`~}2MSZ?Rv z-I>38|C&eqJmBvI{!hdoBYuM8yVsxgC*b{)BYExp)7>P$MDpVlf3nG={Z|6|-v|2N zMEsZ+?EJO+-v;7WiSNDs><519T6lh)#n+x+o0~l9KX$7B{2c)P6yi@3Ut9mDNq(W^ zyD96JN9s?J`n~fz2F{|Ko6YvO+*zIOdBBYqO_j{<+_NqBzsSK9fx z*B^KPq?tVGKP;+KK`YXQH_$+-WvFWdFk`fq9SsQ>uscK>_Vzc%o5i9bht zZT%l1ezN%9^^XC5LLJ=ywt)S&FnQE}Ht4?&@MjXg(<(cEt^fOpp9lJ{3;a0q4cch` zPZeKV|Ar=y`Y#9l*9U$U@pp-@eSUWb@vFr5e*Z`;@Lwc;lUMBgpI6TRGU6v@+x?#_ z`N;jN0q`%bi|4;ie69bECXeP{B)+%*M!+9S{KEnL8;D;4{3gJElK4r5cK%xb^NAmK zzyJOl2mBJ^j}!k^=Z5F}H1uEMr;1-Cfynwd1%B;%c>Q<0YWvsx8YYj{Kji`2zt?XD z{NBXx^}6+Mb{ckm8tP8`{v>(@D; z|CCel{O5@8KEJxp|CgFPntv{s|GB{bl=y4KPgCai5%CK^|K|b!{8-$7oj2|JY40D- zF?rN~8SvWye-rWhiJzeK-}N+H|3t}apWmz{`3EKcfa1Sl@~Hoq9DDr;OFnY_z5w)p zb^~00%v*N;cPW0n$s<2QeDCw?g}~1xezy49_45(p7mDw_eqIFp77cO#OT=%f^#1|L z7YD3=lgXp`m4Nz_LH#2d;re%r?|%QNd;J(@^2jd-eiz{XK>RvIcK@91%+J05Hf)UR z?;!csO1=ll50<d2Rmpm^|vgLi+b! zKl+0HYs6tcVXf_dm@@yP#1GB3^Y?y!nhN~eh(Gmh>ucAq9VEY4^6uCF-Tl+kY_Ld+ z?&nXdB!6kt>GOYnd6~(h`NuzE`}aOS^#}d0C;mS1wf(b(_-W#M*MA`JyEeuB$E>sS z*Zhl39`&CA{50UdN&GhAyX)s{$57 +3xcTmEB)d)6E}nLHQk$Z{_6O^=n}AXnr|TzxVu%0QKh+ze;><|L!FDI_vHHwS1!%xc_DW z^H-C6d&#?he#)KyK$A!F%LnrdgZXVCe!BQ!W&PeGei7Jzqk(^kxj~`*QxwqeWb&y0 z3gC|c{&M2SZLsUF_5UpK;~w>&zp=nSr6uk^E1+N7Mxf1!;+7@|C0A-?zh*9_q26Mu>L+UK7Q&&Bn>PUh#H-})wx>dyo7dkECO zhWOjW*YUNBtK{|K87E9|rwzBz~6o zH#(qu|9pq|RpOUOK63qd1o*Aa!}I%UlkMNV|2XA@=8*gW$!piYStgI>SDb6FKh^V( z)IS&0|1a@}y=Uuh`M;$*{!i}wju1coG5_^17x=fIkLQ;a(4S!PsQ+Z(&j)eI^1kg~^T(My>OT|si-5n6_?^Vp&hMxWxcJo59w{>umcSmKwG`MdM`lH|XW{3*_X zb@SUv{iRaB_xwHw>YsN3p5K8IyMMJmKQi0o(fkS?x98V;|9c+zZ8~B<=XX`?<(NuU4;F0;-BmI?)iD#(|=k(fVb|{JhuCwP1cdFU9^* z@h?~W%S;~mMdEwkf35@m>0Pnk`y;!5wd;2SlSh7q_}=UHdf@*}{H7mUU%P%ECVufk z|Mj~V_+MRy`yVg9d;N3w&kmDE{a1?bz5Z?l{*rFkpA)eEr%WFCF;DvY-vs=7x?_Kr z_#Kt~_Y=w2-)h&-kWnvpetlA~-(2#8qtgD*zf(*e^`9*Ld*@#Q`hS)9nc}`|lvBKT+!U?*A`9{aL;7{H`dq`!8GZ?=X2ZzZ~(s z_wO%(e`X)-ZxLVn^Pf#j9{Hu>d+(oL0e>FxH-2jSpYHVUUcY7&zu+mmf3hSWx&C|& z{L}j4{(Ek-zV`f8*W^+E@r(TX_Z#5n5`T>N+UHk~5I^y;+sg+%U%CwSK#`4N&dO0wExdfpKkJ~{t~Ib`uZC=zxzS`!-&6E z{6xoh>%WTl>HqPc-vhv(NBsKR?fPlYPqT@iDSlY$kMv&&{0+pPEWY;n*;?Y4itoLC z90LA6;%^qew=(}9h#y*P=kN7@2Y&N@c>mS;+|J*9eskCV8j^1&c|%6M+ci8pUKL5Cm_{mTE_unz#KSTT?@vo5jtAB9!&m!Vy06!G#|MUOl#IN~9 zu>F5tf4qK;ByU=ddb#yaBl*^n*Y^M2CXd!XPx|-n|5~8`J;dKEzPA6qA%5Z#yZ&M6 zKC=I713zT|p5OUpcK*GirsseEf2ql%{&U1n^7t{p&nJGS_}caF#DTc}8Isr5e>}-Q zCV6fBZ!&q*f06W`>*>EP=>IF?cly%KU%US8Ab#pI{`-G@;13>z=QmP(ZT}50dDMSc z{IIA0Sl|~Ef1~)?_3v%s7mJ_d@f!gD+%(*O^PP77+VwBNY)7S<|mmv>OVf;zyIPu|KAY*nD|{C(D`X-C-IZT z&yx?lBGTd(;uV?;%Ut~|Z zfBx-8@wKnNP9^!-l2kPaKl~azzmLS%KK~eM z@~Hn3;I{+*o5VjHu>X{FTz_1-JwN8ln^7_K0zh;vBOv!7{f3J}ILdk3QzZE8r`j30wfB)+Q`rkwR3h^66P2d0geb#V1zas(r zf0E?ud}rrBUh(IfJnBD5`VUJ!vi`}S|E?o&{gcJlzW#Hu$s<1(%)blpHxqxp`0o6j z;}AMwB(8s%ymfQXB z{rXJ`sDA_TFW6)2*XDnWarn ze}BOGpCc17#KZ*ET1NyfTKM(k~0e=ng+w8aNpP=;rC&~Ad z{46DZh}2&t^(T4eHwo0AdJ|s1ZQ`dXelL?p>zDYl-G5$xGVmWJeyd;X{Qf;5x&Zh2 z?Lp$Fi(e#x$o`oE{5oTC|E&&MUwi(XNbLw5aEEB)U>{37uSJpE4x z{+SuL|IOlS*U#xBUncpFmHj`}*spr_aN{yh~NKD>ucxlCz8Ka^6uaN>+b(OCXePYoMbpEMrNZ;klw^MmW( zYVyc06W?66j=v(;uZMx(>K5$p7hl_d&yoBw$xji#`UiLYmzX@NzY@%E4ygYS@h4Z= z^>^3L^?xCL{2TuJ&s^Ylo`C09EPh&bIe=qUV#7}U1xBuR^;`vRMy!QS31tdRP^4j-LKWFl2{)M3bg`od>6LI~U#n(Rn zi!piRmy7Q`zj?r)O#D3o{o9CN1^h+8|AP26kJ$a^UO(LZckyj_evKrr{rxo^O&-lJ z_D%o!eHzrCP5go4PjL3HTYm+~ua&&E|Gp>nr-1tNLH*Zf;`tpGU)z7fO&-lJQ+)6K zTMGO#;y3!+uD|AgM*JM$F9ZI7+j0LL#n<-V29obBd2Ro#HF-3@e6W5mfcl$G!u3xR z{}yHc<&pe8$!qt&$4ws9Ukd790qWmD{LV-1`lmVdyVw6ui645)e|}d2zrh`Nelx|_ z?tk@69`&CD{8hl8O8m{@Cn)`IBl&%j*Y1DkO~(C){;~6SpC8@%-%auzC9i${^ajcI zl>A_&|3Z^T^AF4Xz1N@BVE#4k#QiT2-#!0s|AR<=dBFMQkbGId`MpZ=6#?hB(&W+n zvcUY-fcfnuewSl*|7i0|n1biuU-DsR{oVU#3zJ9n=SuzFuYa!t^*>GgmExy4zPtW; z#4iKqe?9Qah<{Z4ZVu@DH1rwqV~Xtc&-?wC#lXM%E(`#Y+GpYZ3nbrBsedNP@07fD{riaI_ep-R z;=gb5Xnx_fc7ERLUkR9BtGjXkT~EO4@9w|pBtKB{+VjIylSlPuN&QKl_5Tpm|32{- ziJzv-ZzJ&wfd4V@>rKV;+b4e5@!j(iWAdo~GV#6FuTOxVOZW$?_rC=GQQ|KV{};!1=l3V^Q^ogw z{{0p3Gw#FlpA!@8`c+EuOC+!DpLWx*UmVb%NAlYwpQg-jw#lRYQwi3u9L#Sk@mrm2 z=ck?D4~QSX-tHgo`TY*~1E%Bog-@}*_WpGP$$unyZGLM_9?h?4gMa`30O~&>8`s~g zuC4#5^7WHr#IF$F`}LC_fj@`%ak19_+u1+v`JZL-sQ>(pwtw^GmE*6-_4g;>|3dsm zr&&M6@!j)ZLHw9a{`vn5{IU1r`416a`}*e%CXf107T^2)^b7FMoq_#n0sRD%M}8Xc ze+B*r#4iv(Lz(|3;%A5-mV9LW4+4M01GxX#26p|m=jWG6zNh51=jUHYez4@V=jRHO zNAoWM^Zx_%f7ye$|7GH9&kyrR{>^~%+fDKn0q1w-L%9B`fb(l&@@RhLV17ry{4$8& zuc6&P+Wg)k`H_;>_Rp-Dxc>=~*Z%y)43kIwSAp|$4D>%^7WQ|DuYLY~pUERX{XKjA z^j^P0r}_W<|L7d-{~mCDpOSp7Mt1$Q`F&*asQyf;-+TQz0n|V4VO;-2@wNGlF?r;d zg87{Y{GW+GM||zi-|Z!S1@KP-{t1B#{vHo z;CFol_g^8t_Vt&GO&;~1Bz}_T{#Ot93y9yUvEBdL*YD;LKMed+f&Vx0M~ScP|HH)3 z1@k`*_+#ea`QIDRzux50{0o5J5cnSuf06j^{lk6!ZSyFuf2HI*$og0R;6A@jA^EQ) zuRVX?Zt|%AV(H)e{Czs;e;e_4G_m_n`}>bSCVpax|M~k2;P;q|=U3}=>ub;7T}>YK zpDw=l{&gnsj}gCpK>sh|X9E8$;OEW5{ilnsJ%2xL@~HnD@xAxI7QjC@7yHHHtDira zJn}2R`nLrBEyS-IXV*Wi`rycq?)e!@{J0PN`>!?dUn2fU@vG-oU50!9mlHo#eDCM4 zX9K_WV|f1S#MiFBi%5Q_35B_WdjU zOdi#r59+@J)c-N@8#J@)uibx2h+hi)OMzeSN!?Z;yg1JqxaWV1$)okJl>Uo7^X~)t@B0+)e`|9)f9>lhJxm_?g&*7f zXUaSNirhah2mVIl*KKKi?fIkYB3yr4$!q8LVv|Spr+(r;Km9=c_Yr@J_~*;~tAB9U zKa2QT;+wG@e?{ikANa?Jzf}BI)v)~N?w`Mip9}nfz@PFTJpWDN4^jNvO&-m^Kz#4> zYZ~x>C4O8hyMOL*e0To)h+ipwSn`qi4+j3i#kl`R#D7EaA2WH>e_E;Cf5jeu2=GsO z8v7}&ZU04zU(@7~AN#4_9|rs^;#Y~U{rzKi5WiG>@BU8*{^!JRm0h$mK|5D;t zh#%v*ehmlyO-u0no1bm{j*9;*$)`zP`~3eyk`GIMu;Onvd9?nO+wA&#=RXScf8sN^ z|JTHK?|<(6dyxDll6TMVbduj8`9n(oQ%xTAAM=@i|BnX!uOog*8@v8375~J1JimRC z*XDOM$sd*cug<{S`42RC)PITeU+CHYV?qC~5PyH7?O*%;?RL-N{%f9V^V<90M3YDL zXMOJ9zvDptxx_zTe0ToNI72O$;`+Nu{tjjRo0&YSKUeDaK0i+Y^*=}a*8=)Wh#$Yh z&d=*l1b*x1aQ|)E+V#`=Z*KCa|3ctr0{hwIb)PEK5X953&m#|+P(0`ib zcS~OT{3dlJ_J0qUKTPsSt!u}rOyZ!fh1?Ouf+4;HkyZIE8NA(wh`X2-J?;w7>_}cSp1M`3!Ig{?^ zhn*##tgQbulAjnbUqSNA1Lpg^itFDUF#ih4H@U#BpZomoUcXkDJX*g}uzq=9{eC8X zN3l-!}A+2zPo?j{=1qy>Ob_AJ^$YGw;1@}5I=|b?)lkC{5aq*0shF> zasSJS@AiL<$)o<0fS(WizlpyopnsV7slZ%f0v4emdM`0oDCHF?y3 z1@PYhe$%zsA0>WE=lbRPjZGf;q22!T_ZIN~L;UIDYtIi0i6002HNZbe{1xJxFV951 z-2V3yKS}&-$wxjvc^mi-yp8AIw{x)T=NBYDQu6Npb?YC!4*OFjf4b8DbtaG2zwjHo z{$(<~NdFr^|HzzztH57pHpsq@8=Ki0{8uN|HYX+nqOGv=Y9Sy1@o)53Hv+5*S>zbkK})ly!QPYKbSnKzW}WN zXQ2L+_i+6Uy4d{}?`$}C{Vz3nV(qPx0(eLAYZ^>(a|NM0( zkLoY~&YmCd`j>(FN0nfIrTE&PpSjlLk)Qaz|NQO*e(DF<-z&cM{Lstfk)I-dwyb|- z{dNJr#}@3*xXi9!E9LxkHF@M0@A3D)8~7J|i2Y^a->dlNn>_N%#P{C6%YonZBkad_ z!`E;3{M7vz=etQ>yZ`-4@zuCYl%O*hxJ=3^FK!ND<$8fd3ouhxE3755=Fd9oPSa^Zo$-s{R{t)7yba}A-KZy8g;(Pah9pKL=evbIs{(qGC*`WWr!2g!`Tg4xv?7v;a z&jWsa;CCp)>)$ce&VR7tw>5dR{)NDg1^#`+e^C639N*plS;Q{^egoitLHsr1Yx{p2 z@ymhV2>5lr#Pk1NeC_&wqRFHASBdZ4|4o2Dj`(A)u8^nJpWq#Z2#Kz_ac)=^G^qUGvL2S{0qd__TMt%X9B-D@DCGzg!tP2 zJ4pN-@xA*m9{Ay}@ceg)ukF7PCXeP{1p03U{I7`L>Pox*W1Q=c`~0(m_@%&40RGTj zxc`~r4_5p%lSlnm0KX0JKOugZ_}cY%3-Lq0_|JbL@P~el`>)sE&R^UAX(o^Qj{|;N z;J-rri^VsQsF!>HX}TNN-%s)Jz|K$m^T&4* zKly-NKkxbN0Q}f*aQ_R$9}qP?|JSchF?rN~hWOR*6C(Xz0Q^bB|5p6Yj_)i-=vLxq z1OGzce@^_kfp-2T67_P|zkfNNUt7s*e}4XQlSlK*1MAlr)W3!J?C-%CGkP=gRyd=dU~Hzt$e?*G{wjYo8zeOZ-ytz30CN@Sh`o z0`cAR*Xjpcf6svVvrHb%uL9KH8`S?K@x$V4Uw@rX{7|J`KkxqS3;e{rxc@@&wXeSx zk$kb_-TSvY|JO|(%`a8z_pbjHp#H``;`;ZAZz54I_xz6|`J(~zdq}?iRrvbv`t2)l z{qd5Y9#y^n`g^X)qxpqpeqqT+&hJ1lztB(E&lg|&`s?4sF9z$E2K)uY-zk29^7mKI zGkMg1S#|%CkMutn_#^k>{$~ue>(@$||1~C${N&&L&%Z-}f0+2o#Mi$5dXV^O;(MRp zh5^6uXWW1MFx$U-e%<~1lF6g~vqAsqz~4&ze&W0LKi8kQAJ-oam~Ze4&QFp2Wy<>3 zGkMg19+>|~(EnS+Urp+Fub-(0aQ#~(pQhB`%j8l0C7}N6LH!en-}D;0f3&}UW*qUW z#LtrjkDT8dfd3is)33F@_Vu@|#Lqo!&u>`f7x8Zd{t@D@7hk)6{6YLm@eOW@pZ@D#2B`l_;$Je{uAf`Kd;SwDasT}# z-^dBL{kJfARDZnG?|uJ$3#k7=;)h4z>!<5)CHdKscb}i#{0F4|#47*%CxZIx9mMl1 z5MTTHYd?}Nk-YZ)zmLhI`KL(z-sjibLH*AVzsX2DfA{^rJHJK5&jIth1Ng^?-(P&~ z`TZ~A=Zo*Xf8PoG9*6MyEf(Lsf4cq8BKg-OudV;5B)?7aJ)*8Y{^!?^OdhR&Dd_)h z(0{$(aQ_Xjv+Li_@tw;-D8}TGANtFlAMgC{0schdk0QQ1|8c}m0{(r#UqSo=@dqpY zKTrHH@TUX+l;83EkBF~5Kh`#RH2+-jz4yQSfuBPBgi*onAB#x7v*iEl%+FoFCrJGT zQh%=GBlqtILH(PEe?rycK>_tf3raScN0H8Y<=zT z@0(2gl)wGw?_uDtBmM;OuX5(+p8vOqp9%a&fZyXVp8tCBwfkRJlSlK<7vH=89|it= z;-7MZoxgkkbNhdk_(i~<2mC$6?=*8c*@kCptzQM&*Bv()6# z{7b?5KMwj2RpI)d7Jr3Pu=CT<-^33cwfo=u{o_vn{{!M*eq*rfU(3I6{lg_cPMKdb zlSlK*{>RoImVD&;mj~(}Nc>IWYuB$Uh+i(g_xiO6`2QjP`(y0 z#rNKSmjZvl-+2BHji3@i=Ry6mkK+3KXW05%D)ZY< z@)IR*$f%cl{l5Ai>}N|}d;c)dXz{}v{X`Y!_htH6Jk z_)W(JJio**1^(;6?-HsRiuC0E{Xxm%Yv*qv$q$#jA){XI{`r&SCrDm<|8>aZ(flhw z|8If*+ttARFAV4>nmqDDHT~y*4e+ldeleM!yZ;uE{5HvJ>vx3Yf0w-W{PG9sKTi7h zKEJ#J`tMZ}&%bKC-T&JAuWlxf<{y88oxk_q6(?L>yAy~f>P=B*pcz&7UcXbMOei}O6P44}>Sn}H6ANUZ-e=d1ba@5Q1|9g_J zki2&P*lqG?e(|;K{`1~Hc7XYHJ_+~#b7rvX_XQ@8{KS*|_m48*ZyRC*6$lo z|CJ}>`JFV$uAlq$FL(dB=7Fur6hl^iEyk@4zo5e%C41*S>!BA@PfVe;D}b_3`}Yim#pDt4$uwze0TP`Kdu5^N$1l9|QfL z8H@YR5&ta3Z({PuPXd0(d`Tike!uE<$szvofc^u-PX&HW;QvAVP2zV@`mZE@SbXpM zms-FdeHxzs@8WC!{r2lj9?d@&__cvwqXG7lvh4nMKRgZak*e<|??2K1jc zdDMRy@aq7-dqdp+1o7ST@7{m6ll(NvYx`$pBkaE{dF}oGH71YxuLS+q2mLQ3{ucrL z$A}+O*MI$u1%3(fYus)3UlZs2x$|G&7|-wYfcc^(INx6K+V_9IZt`gU@zTHd{5Jyq zzkWLQCy@Hx^Y=s?&d(rucYcXy;Cx=d{05R=6>xrQO&-lJ4b1NhFu!Y>;`;ZK`rY|` zMe;SL+WmK)v;W-u4wFaqXM_5if%^NMiR*7CzI*+3*RPMsBfk)wzvjUIhWP!(*S>zc zllUdTj|YCAX1M=b0`{L`@~HoE;I{()Hsa4FzPtV(6Tb@h3BXS|3-@0jzV`fesmY`M zW9#{^ziohDK>W=C{pX0E2>e9g$2Q0P?-5_Sf1YCUsQ(o4z1QEiz|SInqkHW6*Pg%b zAbuwB&jjWP4d4=UiL2 z?du<3lKjn**VgZn*0}zulGna}vy;iA`GxBHKY!^0=9f$SSH+*;%+J05K0^E?@xzjj zeEqL0@Gnll{hxK8UB6wn9HIFnKSlDVI{U}X|48yPCErTPe`oS& ze#J7s>d#ps`>!vUU-CJ){{ry`IljC9E;M=Mmx=HF`b{eEvxxtv_}cn?Nb+^=xBE}~ z{CG2|KfZz8f8NiJuLSisPQ>%8H^chc_rJuNJepr(L;wCC0Q@J2KSX@(^V?kFr;G31 zKZAh(E%BcfU;F%a7x6QJe--dAJQvUZ3-Pt>+dZjKTYy(|E@pQ(tnnx|7$@1PZ58g_*0br7Z5+($iM%u z1%9pb@chCL+WBjrpZ!bxT=Bj8e+2Mb6Mwe&+V$&3l3y(OZq9-^KMjpCd9;27Qor~6 zpGJZDKOz3knRb5K_djhReo7O&eqqo42?PHx;-}2AzV`LE--(|uzW4p#XyCUwAMc+z z;%nFMmL`wpUkdy&z+XW8ZQ`dX=Vu=AL#O-C&sgAZAbzVHJAdu@Z7uPWfS&>UrtR?j zM~koRzs4qy<{t+Bc;Mee{1Wkxe{+~;4czk=CVsB?#h(2?0r(#<|KVWQuT8{Hi?i$R zy?#vu{^<62{)dR~_J5tpqxok5KNI-B62IAO+y51w*+>4-_4g4!TYT^H=Oo}y?tuFr z8_>VaWKUAG{^R@z5l$H zXIJoq3$ib^HHMRL0sM8E$bbF_jqm8e_{O%Y-tC91@eI<`y-Un`0l6rc#Cm zLzYR>BxS4}OPZ977EP9#k_?4O#YpOR9iQubf1kO|>w3K3=Z{Wv-(Edm*Xz38@6Y@5 znKNSr^X2nb5r?M+=@CDk`R@I97U1tx_&Y86*$O`q@aF*jkQTW9W6bYoSbqaakLvd` z-@X5&0DjGunBQoj)BomzFXwNVq94Y3xqf8->a@cAWJ~=?MZb{sa{WpFlUieb2J7n? z>YqS*lz$HB|3Z-ey9$3F^E(*$8x(#%;HLuq4Q+7!C0=y;FTejT`}eoPFJiv?{QolG z_gDC_%x__+zYpnA{?RqU_y0wJzg6K+U_METy=49M+v5CESZ~_DYLg!Mj|Ki01OK}e z{#r}^R)wDc_)7qPU^`s@K1=>Xq(}890siZN|GUEf(UN~&;imxpGQgkL9@pM^BYBa#Lou&m4LrV;kUQszpe0d0sjra??Mk~f;HVN zf*okd??8G~e*xgH0sPMtelqh-=ckVqzUTJv^V2%O@6i$0|AuA#-AIq>k72(1{PZT^ z7byJQmi&_nKMwHU0{jKBxc=`g`EyB+>h}Tu+koG+6XsuIzUlgT59tv<8T9`hz+bBH z+rH%NKl1z~mWii&XY4>KS0{-7s_^X+3dj7US;TMAZ zHUs|MU2y$>Fu%T`{udN|^_QLeL-mLLGcx}a(xd#mHN)5c7T~`|SL}Zn^Bac1{4V)b zNssvP%y+N;#4oDt%&(92 z!RJ4F0RL(n=2u$m@cRkA%>NSU5kH}h!w;>$Ab%g=|9L;=k6?aCAF?6mw~+LRpTT_h z{m*{D&+mcx8<}rfzsE?A__@q?uiqTNU-1CuA7%d8P~rS8>t9NG#4lieChLOv9{~Ih zdSd>*G^hV^{Yw6fURZyG_00|b|3`Y{KeetiKkobv0{_1%{4z@%|4js6&hKf3p9%Pf z0Do<7Tz@;}HxfYcrDrASQT+ktXR#pIzr%nZ-v{$YEp_Ub`={*R4n^;0z3KjG3+a*n zq&vd<_Z9HpKOXyE&V1A7SNf11@l%-Z{`|@jz~8CxSHAA#XZrqUw!%-X@6_+!fARo- z(1W=C)68#anBM`UNA(Ao?_NJg0so-FubJ-DZ~Fa*ISM}y)PEfCyYxcdCV7}@8^HI_xzL)v#`S}6xk0|`p%%5nOpTi12 zp7}o32ltdylF;9uz;!T-I`TrYhH^LH`7so=}~FHg}I zvflLluP;fD{6|KI&rbpHU*Tcw|K8VGzOw_D*Cfcg6y z@Y@f>^{-Oum-}}s(xdvL?hN05gTInk*1t^Q=P_SCf0Fz(g&)Iw_xkgYCCUF&;s3+@ zk;SGz{P|y@!uK)X$NJ#)y9D4r^eE1M#7bxWOy{pp6#Zn@KV$H}kMyX20pLIQE74?r zO9x^9=b7Knz<-tWi0{42nV&dUex(4v&0x&$yvoVXbpO0w(f4P)Jip5MEB_egk7NBb zQNPqjkRH{a$n__?>JR=%z0Cg)g@2Lx^5-Wc|ANBLXTE#=1b-w<^2ZFp^>=>5$=`JU z>+xZI0_)So1xNb7N_>=G$o%AUGLgr_>)?e@=eUe}4am-(|*6F`IKgj-Xx$_Txq(t&N zEBsHGPnXlf%?|yz3d?YFJ>!I+oGM)TP zKflmT;m0&~`0o6IkMtyeoWlQ``KIT0V->y+@Pm&eB>$+w@BF4yzv=$rYlWZ6eE0eb z9*HDBas=-Gi_AAYKP*dn)c;Jt4_?wFznj9}&wSJQXQ86cW4-D5<2=QG0Q4_7($fDS zh2MF-(?8Ssx5`MIe*)`G=eJ1Gqx=g&{!M`Y1cm=B^G(0Mp`XH!h#?rg-1FBA@K-7P zP0Tm_{mIJ|z8COY0RBaV|10wc81~O|3coerw*vf@iMan=-*V=sj)6Z}(T`xgY5i*f5* z^Uo?ppUC>=hWwY29_=6TV17G;`7KoV>C87h|M^AXConD67lgZ=9R z_@fnmpN-D^$ont3{zoYM0_MA~zYhZbDTP0a`KI%4zQXr3B^bTj^V1LTXFrAWKfrv` z=g<74NBPG9{zHJ@;Azai@f|0B)AwKNkRI`UfIk567byJ3%$Mgs+5fo;Kb86J{yzfv z6_arNy)60VNRR5z1pG$;6D!d3lx6oENA_hp8tHS=xeav z1n^(_8JypPmj1ga`r)iMUH>|e9_1g;{@wfUlfeHhg+HJ9rt`}*h3{v+ z@A?#aJi+VVXuv ze0lzr*Uz$~NB#E!{)!y_7A-&rc^5{o|}R^*>MXU&Q`>uKeZ! z|BWZ&{0>;=cNghVehI;co%C|&_dMWFRQQFK^^aHhDa`j>cj3(c3xJ=i@CSV0%#Z2! zpM9$E3z+Y|e!U3zw@kwM&tQHn_8)qa^HYZOD1T3DCx18pCBT1M;jd)A>HafQ;YR`f zD}X<4GOjP**Cs_@ zpY}ajx~h4EVo)D&~L2eAD;u zyOJL91I%~te=7h#ZW`v-$aeZ~s=o{A5x)@BzY_2Z6#gXUo9aKQ@LRVb7`@!}zXABO z{J8!D%s1_S(@2l%Ph`G(|62q2XBGZg=2z$W3BAevr^|Hg|HiFO|4jR52ht<|e&9b7 z`2RxT*I~Zt`Q<@{p9cE39`M`D!1edCtiL(wQT;if{tbX1Q23)Q`P&tKKHzTz{9ZG0 z{qvb`n%_9mqxy>gKMU|rDf~Ar>(5vCk!=Y^FZcS{1o*3G;reqFzFa>mNRR4|2K>!{ z-*GnP|IB=O|04OT6@3xwP2Yc5L3-prmi@c;zb(Lj-#OTS({0ZFQ75$V@VoTii}Z+} z1oGPo_lN))IUez|IB>T z{r_}@?`cOcdb#`mA>ijI{Bql!{+sUq_A2}s=KHR@aPEJ01Ae6xod0;{o1XtHRP^&$ z-;w#DH#tA^NRRrL3i8_r{QslybC_>B|6Wn}0p`2+zx{yUWFF4%8uLx(_c4k-a);A@ z)AQ?*q(}MXv48jT>ra6HHxz#5oetmh{CK&-&u>pKdb#KSQ^1d$kMkSIeADyevZP1# zN8ao3-TgZV`1dRPb<8(CKklmVqXGXA;LlX}-!Z>-XyNd?-2V?Mde1JWe{%np`WnyU z{423up8w_gtx9^7e=OJUzW@3X)PKLiAI5ys`So4amlTC%u-+^3lV5L8{HL&gAM1nH zk0ZeUgatUi0P{`zXA{jst%4g}DC4A3F0Nn!ivCa()|=9@QVm{E$A_|L*|*OXkb@^E2NY z0`t54`g4V!%6uQ|g8Y2IfAvLNe+KhS^Os6`RDU7!-TnU&@MBXk|9#8++mRmeBRUd{ zUhe#V0{j!qm-%}FPXE2v|11ChAM)!wg&)s+A4`Mz{|xwBU&8f!nQzK}GwD(NSkRI`qnD5U2Jm7z!@ZY!0|DeK8VScE8!TBo${JF2<`mZs6I_DR9ll`AT zdQ^Wd^WFRJMZmwH@Tcx})}QJA`K-eCbRrnN-26WPKkYSKe>U??&tG04J*q#3`R@K- z0{pUzF+Y#_rss$MRrD8GZ+d<>hV;mP9Poby_`js^BlkG{Gx2{@_&&hD3i$KVaDI)L ze_Lp9`CXo0$}YkBuB?~mUpfDS6#c`N`gBE~$a*<{lE0YrsDH^IKM!3@A~=W8Tz;+a z=Q7{azg&f%3iu@e|DmNg|23BUc+#W#GXeibz(1|<_geCQRQLhFzZvioU&rfg@(+c0S*IB={4eRGegI(F`*T1h7{Rfu$<&qxtFA?~!0{jnJf&G7F$sa&^#P4>>>b`t=g&QTo}qarR&L`MVC_cYg!(Js&yq zV>-XpTaER%S?Wu#!TN@l`iqLbGwZt;=IE*tD-wpWhWMcj*=9}hc1 z53oL4HD8QDg1oq`&{|A0Q>;QVF(`;s2jAA4VT z{;dH2gu?I1e0lwq{m)bQ34q@Q@O!+C>mS2>)A?^}nO=b3y%`0RO7O zAI*Hz??1n!@CyLH3*ZlW2lqdn`KI}KMbU3$y<9)Ce+x;E=Eu`LeEr@B{O?ux2bpi0 zpIr(+iuvyOi39vDSvbE&2khpj1L;xyK2U!T!2dwuk7mAUe%@91$$;Mz@VmT=>rZFC zX@1r!`i-nN&Cg2Gqx@2V|31L~HHH7V;$N=+#7(&VeAbT^` z;131-8C!7uB@W^BEBUpuvHn)po9-W~lOE+)2>cHR{vS~IZJBS{Kkifb-Upoi`8fFC z{EPtnX$pUpWqx}V{btrT4>g|OW&XPq|9Cyb8f%?aS`g0Wi-OQgZ@|X4RRrp!Vcd!4a0l(rloc{*q%j>7?|7bm`0u~pt@tkh{-*-})pz3j`hV%d_r!4sw6n;eS@cEes_!Bl(oR_gm)Ik@U!aYv6w&@V`&t|76MkP~pb|ek$M(*p2Hi z@wK!5OxK^jq(}89GT(juc^UARD*Rc@H=SS3EBe=1Z@T`RQT(T|fA{tORp7tz9-Q9| zNAUGiuKy<$eP!00?mvc;9_618`kw~;Usm{&m~XoOx~TArK>wEle%-w|zYNRzYmy$- zA07NkZ;6n+Zx-SfX3@ZVJUDa<#`f2n;qzoo1<&3_5f zqx`bjzkB{y0{?v#{!Mvy^Z%NnugZGU{J*65_r!-^zg7ePjXuKpO=W&`JF?B^SiA7FNGh+eE0mX2mERKasHLQ zwOfCaNRRSQ2K)_xzhB`mV!mnp)%+OyU(0&a`m08IBI zChNxw|5E>r;=eWfclUn_@L&HEoZrief4P32RP?J^KSB7H`r)KU`TK$YZNUE?gs6PkPKV0E=X8tV(ey*Z_koBhd`Bd?r0{njp{Kp-_ z`6V%5KL3~Nrwi#(ei?v&5b)P3{8Z+fo*!LS^y@A2yQuij2L5w_|B<;kzZ^^cFw&#^ zasmGfz(1?-e`daE|2w7d3z+Y|{(lAdGY{kXD}Lv!U(@_fB|WM?s$cm1#}UA9{{`kZ zw&b@WJ>tgzejeaoQuw`?FZVxr{cZ9k_CJL6ru&zMq(}bafd6B_zhB{}GGBgvLHZ9U z`n9Z|F7`jE->&%gv48jceFyyC_!Z7C`g^@=s;|?(^plz<-9q zU&DOU{ln`DKM(Z(B;Ysx8s}Fo-^tJP{OT^!qxuU$|4sq^BMQGM^Baiyk=LJDivAJS zoAR5c`1kgA_8%YfgWrEC0RFct`~dS!>;I&p|AO_V-@o;p;@{8ylU@FQ0siYA!Tpc@ z!Rf#J`5C!>Ymy%Izlizn`9BBvO}@eW1Oa}-Kd+G<)$eD%yZ`?J z{_Yc)KZ5z8{6cMz`R^b-;^%<+Z=l0e1pkLZ_w}>C!~FfsH|6gqJ>o|vgy&xp@Spr1 z^V^)V%YQiO5kH0b?)+~8{1@{ve>U??`Ohak;^%_;O9B3aKVbeT=9}{GNqWSOc_cjl z(tzLWN6b(7*~#B@{%k~g#7||uJO8qPzeM5hW4_$~%z;pYK<64xJj+Nt04 z{N#N_UyJpo^H;r}Fuw`wP4}<0NRRUO4h+BkRs{8DDEvN_{+pe`{)bxX_bK{kEcLy9 z#{Aiq`mYrIVoQC8)0qDz>rMS@LweM|)}Vh;pnsbc{>PU7s~2GZ-&*QtD*9h6>z_(` zRDV3EzXqtk>ly67bb+&eP5E~uJ>n+}$Fkm(|NW##`TIfs^+5iI75?*<{Ld7A8sOIl{6~Jp^{-d>^7_@E^r-$U zz>fy}eF{H^`KF)W`B35KFyHn_0WaSqpC?u@hkwuTO_{4VS7MtW3#5%UAA3*J98 z1pF%se?Rl({7L>F3P1bN@atzI!2jqxuKy?I|4-B}&+h@!qxy51?|yy~1NhMwFn`!t zC;!@lFYB*Mdc=<#6kdN*!2d|$&t$%7|EpDq{lCik3Bte3uR7_Ge;@mIpFdjw|ML}o znO~gzO#c5=^fg#-+J6&&!}T|0z3Ke@IO$RSnV|kQp#Iks{$k7ecPjcfS>Mpmzih>S zA(+4Rz<+_l|C;%x&mWvr_z{Dh`FHPs9RR=5McltizdG|XUeqtwUwP7_{x50W0$pUHgp`sok&vlRXZ z%$NO>_3u^mIjlEbe|IVV^Vq+8{S5&Ae^dC)3hnmKsLMG2Zmc(b|FJUZQT|?E`1%`O1Q25I(I`x}AzcE+g=Q2O^eS+Zie;DAGy@KoiocYG{ucAM}dbxh({t;00 z7g#T^A5y=a^eF!VQ2z)}{~dqf`YZhIs+a=~4ZjVd3k4 z6sUjFRa}2B=9~8a38Y8-DCWEO|1p4{sqjBn@{{}jX+@vUdei>(qvAh~{k!+Cr-A<} zf8+cf_``1hZ?EVFv);7-w<0~tKNa+U9Pt0X!r#Yy)BcmC@G}8_JmBAW4d?f#Wq#ci zeW^d~t{4 z8StO^2lubcB`1H==WqX3^z~S8+W#(-9`!E`_@4^=ul^VN?`+9mL3+f`0(?K<5Al?| z{+XnkMPq!-H=X|nk{iQl3m_FtFvru7p;depzj;oc59`)bzMEL%Z4*aiC z_`WMn{-*iMQ20@RzZ~#?Q1~w~pCrXzGQZLhIRAC5m-~;@uTb=RSU;o~-Q$t-x0LiK z{}`^{JwK~J{as6A|8@Ry@_*dG??`&YPiB59>x0i9Rs;Tz3V)6z|AfMi7~#yHo4*$D zlgr@x&oIBAs9*N)8PcQr)0pqhKNIi=l*Rn^SDpOj&re8xU(zFfKJ(rC-+I8WR1Wip zG2e9lNLTdZS#O&EnDUsvkoBhg?HLH*?`VEzx5`A3i*@e`Qu&OZzA z_bdETe>?p*e>(F`{cA{i#Lor%_W?h;BIbX^ zeAD`=OM1kQN_6JO-M=k>e^ufCW!b-Vm9YO?uQ~lU<+qCT$bTIBchCPe;6J@G=8t5) zDZj;}NBmTf-wwbZcPr*EWPUZV;mPaYSkfbYfcf#P4_<$E0e;OYn7{5HCx6ra_qw9r zYN@Y!8|Ht?dei+|CDNn%BS(dwzxIIo4=VgKmj3Upiv3@;)bCLA<^Q$I|IR4P_bPfh zKd&nKrmUBrUy}M%(xd#NIe+*1%K`b1s)qe%TKaEQ9qYHT-ZVc=Nss&|f%*9q`2R=Y z=P}>({ktm)KZW_3uJhwTz<>Hbxc=8YH(yr{HJsl@ksj3_Gdg_z90L3u3jc5Bn?66d zMd8OWKiO6PVZi@e;ZMB5uKvpkKLG0g67VO~!1*6#zN!8s(xd$IK>c3>{&9t$P{OHS z?%#6#_PZVXAH{mp`tMD8(kkP=uPqukRIiq#r3=QkMBVJ&1&KL4_NwNqUeuX z>TmO6{(07?gbL?(S${>+qxuuZhM!-51ogk9@SnZWuK%YLeG2PM-#?#H8`rpGeG|5K>jW7!2a)M{tCnTX+nC$&j#z~0^sjZ_y?G8dVaY@;TM4V ze*^p?g@2X#^7<#|=cW2MzX~@y{kuoxC+Bwo=}~^3r^3%qe*pjgDExNJuPFG^{}qKF z1^AZ$e{2I>e@{z(BI!~6F@RqL_=gn!VCI|pH!K?aPhx#vk)Q0}VA3Q1aqQoH|8f=h zFL@{C?_s`a{r{uzQ$c>$0Dq^#&$p~UoAjvuOi=&7fIsLiTz}J2cKhD|(j$H$sQ-ql z;XnU>>)n_i&;0g={@+4+#E*D7{QOW7@Run31oEB*RNXuf49QVvE=Vi_|br05%9aj;QB9F@;i_o z)gKG^l>vXR!mnG}ZvJ*D`~<+S0{A1E;QBi=-}L?Wp`=IkCo$i>|5OG1?-l+==F7i7 zMqYo9D*S9ve>K4G(G=HT!2E%R{l6ROQT@5h_pv_s{NO);e`7Pu?_9>N|NkodnE!^a zzuN)-BZco{ep6AuJU<3VkLr&D{91s2M&ZBAeAD@@ZF8L8YSxbwhUNUUAU*Q$WB-Y) z5B9GP@IOr9mo4Y?&y?R_g`YDnynpoof0M$$m-(jr8n?jt#k1a&-(93f`Q@{JcYY0k z|EUT;yS$TMZ83kce?KVtqpWXa&>vU)$Bhrq|1RKvOiP?!L{{ADWoO04fK@{{ZD z4br3jrMTuKzdYvKB&JPsDHk~f0y~D=WnwW zei8HC>*rp;zozixD?0OII{y?Y{OD($`SrQhPe;IC-wx-$p80je{K@sRhV&@^6z0>i zz5WWW-%fzvt3Bp_W?6q6=@CBz)ZYd0ixhtSN>2W!`hQpWp69~%k8Xg!S-yiuA=~4ZOT)+GJ z@i3_WcZI)z`SD`^kp9mr{4~H%0Q~A*aQ?@c-$L+Z{#8hi>dyiF9|-vK6@JAkPXA2& zdR?*q`z-afNRRyI1OJ18|4$YE6z2C4`N{t6SNKKDcklm006(c4uK!c!o7VqEMSsFl zA8{Y%UtqoI{8y6nDF4`r;rrj?p#Cumzs7CO{IoLUKT_c*FyFm?p8))G3cnxoP5D3D z9q0FirM^TQ)+e*xZ>awo@lpOMT)%t%o&@!GQTRoc{`V;QGF9>ZE%%>}_v89&Sn3Zd z`bMm;ZOE@`56thwdinfS`maQKlz%Rm|EEFz(-eM+C4Z8_F97`i0)Ev8aQ(ZPZ#q9z zB0Z|#Gbw!iKLhy76n;MQ<^Ci0-!z3E1^5#HzgACNfB7h9ejgC?Bl|y6(I>Fp^!bfp zq(}M10RPFre}TfEXURXQ@Z$h~65ucCh4b6SeAE0aB0Z|#2l!I}zgln1&tty4e#`#d zN_xakX1;s>oC^5k6n=wh&it78V-)RpCF&d{h3H6n@0y@bxH4`<(XVB_>F=M}OnTHmFZ)mC^&7nZoeligh{yhKt!{VyTCM2ov)<%?1?iFhG~ho4 z_;2+f_P>bvRSf&rN=5%B>*e)RuAg+$Bma?8!sq9C;QxxkKVX@^w=b^$IO|RO?|(>- z{6_=-3xWT>3cvh+ocW=T{1ki1{H7}Ux~wg168&-g%Ps4_rqrJV>R$}%Z=>)JS@N5c9_60`_)7pk zUEzCbIP;rQYt`dQ^WZ^L?xjUjNqs{%6dWzdtF!eAE5M#|poY`R@5&2l(w0@cf-; zeq&L;7!yxR(xdvlQ=R_1`ELULdgjad^VW3c-<1Cvg&z<2ZvlSPBe?%@mi)@3NA>%e z@9zKGfWL(Kvj0iUH}!v!!p{fwzXSLc2IBrNXTGWbrAd$KkDM0X|91g@Ci7+gb1n0q zs_09y#HGPf4{dP~GGDI$c;=h(e?#GCG2fm4 zUcf)2)St$D)BOLW@RMeQ=l>Dl*Bp%Z-~E>PS0g>@e+J-x4EX(+FY_<5%)ht7&t-n9 zYyLk0{1+8|Y;9-$O#Pp)@O?9#{N4Od0Y69Kr!e2k{zGqa{qI%yh0G8653c`%fPeF2 z%Kl@?zk&3q|E*^^^}G3p0KcWe&tZP({HE34MB)3HpUlEw{f7a667%K$SHyhN`kSEe zirOg6DTRf2S0F0`s%@flsjh zZvel=5Ilc{mi!pfqxp-N>(uY&e+&526n;uwCx27@lN5e-N;v-*;O|lR-gTdX#_Eg7EqK9`JiB{GXX`y8hp<@Z$jg2f$y*d^!J7ci81W zPvIvs-#vdP0soj%e-`si`5#gE(F?=#KLz+ThT{Hz$9z-%RY{Nfp8)u$0e>*_W&V-% zo&3Fq{U<@;r!e1r{W$~p3l)A0^J5MCc?v(5`N^yg?ti}k{$_=r#QbOj{~d)N_oCB( zpNoGE@XHOu`)`^hzZB_F|1$yq0^ko-_yJ4)AcY^18eaczfWKbh7ck$n|F2Q_iOhGe z|K9=s9P{P*!{5M}fBE-s$>(1M3P0*)r+)YR{|Wf@9>?o{7xPW)zZU6H|9#ANpMNd` z{-ey7>%WlsA$@2W$n(d;3O|+k?)7&C@HZ%YZ?u!YiN8+aN4yfA|5d>MSK-H7^8Zr! z@qm8~@b4Rr*T0|nrupwgder|k=DX+rU%;QO@T2auyZ-tWe%z~0{(jf_^9I_3L-Rxb zdi}Lk;b$@5wEu2a_&KjR{LuUa_y3ZBe^uellcz@>n{cPqZNKE^F#TCc#=Ot;b#DTX~5sF@RKb0yA^&^T6q0s z0l)DGoPUNT|1Q#_{8ItHJm4=-__>z+xe7mGNqGIY0RCl#@44G<|GlX2{eWK)@CS{= z`NvrD2aq1+Uj+D-0soM~_gV4}DEy?Q;rUkq{FaHh{!~kT6Vjvl3jn_=;J>Bt1I+h^ z7Cyhr^}kl(`(AhIk7HeM|EUJ}e=7WZ%lZoyekS1m2k@IbiSv(a=*+*V{)VJS`4qkBAF@pXyO*niYL z&itDEUsL=i0RPdz|8V9@|FO(}Q23Sp_bdL>EdB2$J<2}=_`e(YZ#l-vPx=oqU;h4i z>3=Qj<^7Ylk&}O!trR))TVWOZtC? z^vHkI^6>d@0{ov>{0Er-L@|2!{11N$&wq4dyZncc9{KmNe|P@Pf&VXp|0!ZVNs7HBzgLJa^l2-?``-re z=P+O9=Z$gtCqMt@E#}7K*{1l9W4+1$`-=a3;J-caU#R%^G5-$XSNgA?gy%QK(tmBz zqxp@_2+zMG@IRROGXD(b*EjfIr1;OV^#7vbKMDBn4E*OP{_~k{nxDTF{}D}``7_PW zWyOCs@ZSyiZ~tGse|woPpa04EnZkOxf5%(;e~$EMempC~=O+&M->&%gGhhDxAL;)u z#ebHi|34M~alrorz<<+mIRAX+H!#fqDAvpTBbwUH&l99a`KJQ^y@CI?6#ri4hpu0t zGGzY0D*odw{hwC+=K=o@0{@Mk!TI}{FF*e;{U@CY){@zvL^WPu%&s6;9 zGv72n`HKIDW_I&)O!1!x{0{*B>yO9zdzmkPeqQE3hV?T41lF6*zavSH^3P)bq4^Eo zzYYZcw<-Sp%$MK4k^UnlIQ2{a0ZacSNss*J1OJ18|8~rm*WY~R*YOm8N&inN{v(>( z&CipH|HwDO=idkXZ&&<#nJ<5Tuk;`BEY9C&>AxiDQT_?Q|Kq@aU*^mF{mhp?e=Yr| zEB*tP{ue9$Gl2gQ!2j2Z|9s|07ayOn=LZ#@!}&+FaOTIfeoK=cWp0KL2BY|6IktpZW6hBi>?eJe~^4IR7l${7H}U z_pyI>{!at{&6qFq4=~?J;s2YK^N^tU&$Gy`7fUGbj>@}B_wUr_wVGGG4uwDePRBAy=~>j_!xCH+?;J({10HR1E04E*bK6rkZ4E(QF{AV#={`|7^e?ak{W9k1R#lIi;p9=i{ zqWI5O_|kv5NqBw=Sx?AfFF8M@NRQ?x3(U`S;Qs;U%lYxPa@Mcu{&BwIKc4lnUg>|f z;=c&wKMVN(Sn=;;e#2tvg+IT%aWc+7mG!3l|5f})uMJlv z|Mz6Qynper-ZVemNssc+1@n^%{HH7a{mk!Z$p2Txe}MJTLNC|vX~loky72jb1^Dmr zKb*g(jWa*J1m7#Z&SbsJKc4lb{NErw%HIe4zXtsOrTF(VzmxDQ{r8-T_n#croAU2Y zdgMP7_+JA2Z(zQhe@|N{|2_u)<)&f(@vJxHUyAg|eB{{0630mXkV z>rMG@SNylm44?lMz<;z~ng4c9{sRpDQ&}(PKY{h8{GTU1%HI$CuLAymRs8#zFMofQ zod3A#cz$wOZ_2+5>5=~&;C~J9zlr&Bemw1+{2wvoUtazU4LIy{3oz~_xa&1;Qz4VKfwI@hWsOD;`|FN{g)&?%0C78 z-w6D-VZO}YbFVW$a^B_FqZI#M)|>KwLh+vs{J#tQXDI$-nQ!|3=@G?$BI^lR>?O|+ zhZX+?VE#7)|5az<{nO9<(ENo=ctiif?+L7z`)8JA{{2Xg<|k&ovwlPT;Qj9w;D3qY zKVa$qYtjcZmHrD^&mTYdzpCZeRc1T+$)CRn>E-u7#m5Xhk)%iU`#}BMLH#c)d~XM5 z{j~i*=gz-K{tF5}74UZgew8`6{(;QDYT!qb9@QUUzWehZ9|Ha~h5v9zr+yQElETk< z%b7nne>dR&rttg5+VOu?__-Ux`FjC>@LZgK?@o671k$7Y^WF~Ue+2l46@HJ-cKpv2 ze*VUA{>OmdEd|$qUl%)mEa_4G1@DCOKLPyR3cqt#JN^!ZUzion{}k{$&cpS0=;rWm zH>|(5q(}7^z3cD^dHogKe-8rwG=)Ei`SScJ_n%1$KXOwz{}A9GQTVf%FQ4B^{$Yh5 z4fuxvzt()5|7uHqb<(5!V*&q5z#ppc_c6b>q5p#veggC3T>bwV@b@VEO7}VQ7i-|} zRQMUpcVGX%0sMx~h~%7F|5DEpkJftr?6grenR#?gY>BX zK2ZM;p#Ga*!1ZrqzUlmT1L+YzllkuXKMD9F75-V~%je&+{$UC~5AaU`{y~Kw73cKd zRDX`bkJ#+YpS%9kfZuFkNlyiuk&P#tPklz?~7R<`a1L;(uKb6 zM*33pg%}@C8tc8GKgjQ)xexu%gPAY&*{qKY{RNzgK7sUT{bX@|X?Hn}gX`xK$S?T+ zN_G&HlNGFr*5PR9|Gh%m{bj>{{<<{%8M*ea3u~0Q{`SRyo36iy{vq?LNdE`Y$9?a7 N=lm(E&;646{|8IV8L0pO literal 0 HcmV?d00001 diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o.d b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o.d new file mode 100644 index 0000000..6bfddf7 --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o.d @@ -0,0 +1,349 @@ +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest-all.cc \ + /usr/include/stdc-predef.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest.h \ + /usr/include/c++/13/cstddef \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \ + /usr/include/features.h /usr/include/features-time64.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \ + /usr/include/c++/13/pstl/pstl_config.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \ + /usr/include/c++/13/limits /usr/include/c++/13/memory \ + /usr/include/c++/13/bits/memoryfwd.h \ + /usr/include/c++/13/bits/allocator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \ + /usr/include/c++/13/bits/new_allocator.h /usr/include/c++/13/new \ + /usr/include/c++/13/bits/exception.h \ + /usr/include/c++/13/bits/functexcept.h \ + /usr/include/c++/13/bits/exception_defines.h \ + /usr/include/c++/13/bits/move.h /usr/include/c++/13/type_traits \ + /usr/include/c++/13/bits/stl_tempbuf.h \ + /usr/include/c++/13/bits/stl_construct.h \ + /usr/include/c++/13/bits/stl_iterator_base_types.h \ + /usr/include/c++/13/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/13/bits/concept_check.h \ + /usr/include/c++/13/debug/assertions.h \ + /usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/bits/utility.h \ + /usr/include/c++/13/ext/numeric_traits.h \ + /usr/include/c++/13/bits/cpp_type_traits.h \ + /usr/include/c++/13/ext/type_traits.h \ + /usr/include/c++/13/bits/stl_uninitialized.h \ + /usr/include/c++/13/bits/stl_algobase.h \ + /usr/include/c++/13/bits/stl_iterator.h \ + /usr/include/c++/13/bits/ptr_traits.h /usr/include/c++/13/debug/debug.h \ + /usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \ + /usr/include/c++/13/ext/alloc_traits.h \ + /usr/include/c++/13/bits/alloc_traits.h \ + /usr/include/c++/13/bits/stl_raw_storage_iter.h \ + /usr/include/c++/13/bits/align.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-least.h \ + /usr/include/c++/13/bits/uses_allocator.h \ + /usr/include/c++/13/bits/unique_ptr.h /usr/include/c++/13/tuple \ + /usr/include/c++/13/bits/invoke.h \ + /usr/include/c++/13/bits/stl_function.h \ + /usr/include/c++/13/backward/binders.h \ + /usr/include/c++/13/bits/functional_hash.h \ + /usr/include/c++/13/bits/hash_bytes.h \ + /usr/include/c++/13/bits/shared_ptr.h /usr/include/c++/13/iosfwd \ + /usr/include/c++/13/bits/requires_hosted.h \ + /usr/include/c++/13/bits/stringfwd.h /usr/include/c++/13/bits/postypes.h \ + /usr/include/c++/13/cwchar /usr/include/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/types/wint_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/c++/13/bits/shared_ptr_base.h /usr/include/c++/13/typeinfo \ + /usr/include/c++/13/bits/allocated_ptr.h \ + /usr/include/c++/13/bits/refwrap.h \ + /usr/include/c++/13/ext/aligned_buffer.h \ + /usr/include/c++/13/ext/atomicity.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \ + /usr/include/x86_64-linux-gnu/bits/cpu-set.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \ + /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \ + /usr/include/x86_64-linux-gnu/sys/single_threaded.h \ + /usr/include/c++/13/ext/concurrence.h /usr/include/c++/13/exception \ + /usr/include/c++/13/bits/exception_ptr.h \ + /usr/include/c++/13/bits/cxxabi_init_exception.h \ + /usr/include/c++/13/bits/nested_exception.h \ + /usr/include/c++/13/bits/shared_ptr_atomic.h \ + /usr/include/c++/13/bits/atomic_base.h \ + /usr/include/c++/13/bits/atomic_lockfree_defines.h \ + /usr/include/c++/13/backward/auto_ptr.h \ + /usr/include/c++/13/pstl/glue_memory_defs.h \ + /usr/include/c++/13/pstl/execution_defs.h /usr/include/c++/13/ostream \ + /usr/include/c++/13/ios /usr/include/c++/13/bits/char_traits.h \ + /usr/include/c++/13/bits/localefwd.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \ + /usr/include/c++/13/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/cctype \ + /usr/include/ctype.h /usr/include/c++/13/bits/ios_base.h \ + /usr/include/c++/13/bits/locale_classes.h /usr/include/c++/13/string \ + /usr/include/c++/13/bits/ostream_insert.h \ + /usr/include/c++/13/bits/cxxabi_forced.h \ + /usr/include/c++/13/bits/range_access.h \ + /usr/include/c++/13/initializer_list \ + /usr/include/c++/13/bits/basic_string.h /usr/include/c++/13/string_view \ + /usr/include/c++/13/bits/string_view.tcc \ + /usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \ + /usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/c++/13/cerrno /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/x86_64-linux-gnu/bits/types/error_t.h \ + /usr/include/c++/13/bits/charconv.h \ + /usr/include/c++/13/bits/basic_string.tcc \ + /usr/include/c++/13/bits/memory_resource.h \ + /usr/include/c++/13/bits/uses_allocator_args.h \ + /usr/include/c++/13/bits/locale_classes.tcc \ + /usr/include/c++/13/system_error \ + /usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \ + /usr/include/c++/13/stdexcept /usr/include/c++/13/streambuf \ + /usr/include/c++/13/bits/streambuf.tcc \ + /usr/include/c++/13/bits/basic_ios.h \ + /usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \ + /usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \ + /usr/include/c++/13/bits/streambuf_iterator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \ + /usr/include/c++/13/bits/locale_facets.tcc \ + /usr/include/c++/13/bits/basic_ios.tcc \ + /usr/include/c++/13/bits/ostream.tcc /usr/include/c++/13/vector \ + /usr/include/c++/13/bits/stl_vector.h \ + /usr/include/c++/13/bits/stl_bvector.h \ + /usr/include/c++/13/bits/vector.tcc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-internal.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-port.h \ + /usr/include/c++/13/stdlib.h /usr/include/string.h \ + /usr/include/strings.h /usr/include/c++/13/cstdint \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h \ + /usr/include/x86_64-linux-gnu/bits/struct_stat.h \ + /usr/include/x86_64-linux-gnu/bits/statx.h /usr/include/linux/stat.h \ + /usr/include/linux/types.h /usr/include/x86_64-linux-gnu/asm/types.h \ + /usr/include/asm-generic/types.h /usr/include/asm-generic/int-ll64.h \ + /usr/include/x86_64-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types_64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/x86_64-linux-gnu/bits/statx-generic.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_statx_timestamp.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_statx.h \ + /usr/include/c++/13/iostream /usr/include/c++/13/istream \ + /usr/include/c++/13/bits/istream.tcc /usr/include/c++/13/locale \ + /usr/include/c++/13/bits/locale_facets_nonio.h /usr/include/c++/13/ctime \ + /usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \ + /usr/include/libintl.h /usr/include/c++/13/bits/codecvt.h \ + /usr/include/c++/13/bits/locale_facets_nonio.tcc \ + /usr/include/c++/13/bits/locale_conv.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-port.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-port-arch.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_posix.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_core.h \ + /usr/include/x86_64-linux-gnu/bits/unistd_ext.h \ + /usr/include/linux/close_range.h /usr/include/regex.h \ + /usr/include/c++/13/any /usr/include/c++/13/optional \ + /usr/include/c++/13/bits/enable_special_members.h \ + /usr/include/c++/13/variant /usr/include/c++/13/bits/parse_numbers.h \ + /usr/include/x86_64-linux-gnu/sys/wait.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum-generic.h \ + /usr/include/x86_64-linux-gnu/bits/signum-arch.h \ + /usr/include/x86_64-linux-gnu/bits/types/sig_atomic_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/siginfo_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigval_t.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-arch.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-consts.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-consts-arch.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigval_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigevent_t.h \ + /usr/include/x86_64-linux-gnu/bits/sigevent-consts.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/types/stack_t.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/bits/sigstksz.h \ + /usr/include/x86_64-linux-gnu/bits/ss_flags.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sigstack.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h \ + /usr/include/x86_64-linux-gnu/bits/signal_ext.h \ + /usr/include/x86_64-linux-gnu/bits/types/idtype_t.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/float.h \ + /usr/include/c++/13/iomanip /usr/include/c++/13/bits/quoted_string.h \ + /usr/include/c++/13/sstream /usr/include/c++/13/bits/sstream.tcc \ + /usr/include/c++/13/map /usr/include/c++/13/bits/stl_tree.h \ + /usr/include/c++/13/bits/node_handle.h \ + /usr/include/c++/13/bits/stl_map.h \ + /usr/include/c++/13/bits/stl_multimap.h \ + /usr/include/c++/13/bits/erase_if.h /usr/include/c++/13/set \ + /usr/include/c++/13/bits/stl_set.h \ + /usr/include/c++/13/bits/stl_multiset.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-message.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-filepath.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-string.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-type-util.h \ + /usr/include/c++/13/cxxabi.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cxxabi_tweaks.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-death-test.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-death-test-internal.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-matchers.h \ + /usr/include/c++/13/atomic \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-printers.h \ + /usr/include/c++/13/functional /usr/include/c++/13/bits/std_function.h \ + /usr/include/c++/13/unordered_map \ + /usr/include/c++/13/bits/unordered_map.h \ + /usr/include/c++/13/bits/hashtable.h \ + /usr/include/c++/13/bits/hashtable_policy.h /usr/include/c++/13/array \ + /usr/include/c++/13/compare /usr/include/c++/13/bits/stl_algo.h \ + /usr/include/c++/13/bits/algorithmfwd.h \ + /usr/include/c++/13/bits/stl_heap.h \ + /usr/include/c++/13/bits/uniform_int_dist.h /usr/include/c++/13/utility \ + /usr/include/c++/13/bits/stl_relops.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-printers.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-param-test.h \ + /usr/include/c++/13/iterator /usr/include/c++/13/bits/stream_iterator.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-param-util.h \ + /usr/include/c++/13/cassert /usr/include/assert.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-test-part.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest_prod.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-typed-test.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest_pred_impl.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest.cc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-spi.h \ + /usr/include/c++/13/algorithm \ + /usr/include/c++/13/pstl/glue_algorithm_defs.h \ + /usr/include/c++/13/chrono /usr/include/c++/13/bits/chrono.h \ + /usr/include/c++/13/ratio /usr/include/c++/13/cmath /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/math-vector.h \ + /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/x86_64-linux-gnu/bits/flt-eval-method.h \ + /usr/include/x86_64-linux-gnu/bits/fp-logb.h \ + /usr/include/x86_64-linux-gnu/bits/fp-fast.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h \ + /usr/include/x86_64-linux-gnu/bits/iscanonical.h \ + /usr/include/c++/13/bits/specfun.h /usr/include/c++/13/tr1/gamma.tcc \ + /usr/include/c++/13/tr1/special_function_util.h \ + /usr/include/c++/13/tr1/bessel_function.tcc \ + /usr/include/c++/13/tr1/beta_function.tcc \ + /usr/include/c++/13/tr1/ell_integral.tcc \ + /usr/include/c++/13/tr1/exp_integral.tcc \ + /usr/include/c++/13/tr1/hypergeometric.tcc \ + /usr/include/c++/13/tr1/legendre_function.tcc \ + /usr/include/c++/13/tr1/modified_bessel_func.tcc \ + /usr/include/c++/13/tr1/poly_hermite.tcc \ + /usr/include/c++/13/tr1/poly_laguerre.tcc \ + /usr/include/c++/13/tr1/riemann_zeta.tcc /usr/include/c++/13/list \ + /usr/include/c++/13/bits/stl_list.h /usr/include/c++/13/bits/list.tcc \ + /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_iovec.h \ + /usr/include/linux/falloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/uio_lim.h \ + /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman-map-flags-generic.h \ + /usr/include/x86_64-linux-gnu/bits/mman-linux.h \ + /usr/include/x86_64-linux-gnu/bits/mman-shared.h \ + /usr/include/x86_64-linux-gnu/bits/mman_ext.h \ + /usr/include/x86_64-linux-gnu/sys/time.h /usr/include/arpa/inet.h \ + /usr/include/netinet/in.h /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/socket_type.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_osockaddr.h \ + /usr/include/x86_64-linux-gnu/bits/in.h /usr/include/netdb.h \ + /usr/include/rpc/netdb.h /usr/include/x86_64-linux-gnu/bits/netdb.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest-internal-inl.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest-death-test.cc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest-filepath.cc \ + /usr/include/c++/13/climits \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest-matchers.cc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest-port.cc \ + /usr/include/c++/13/fstream \ + /usr/include/x86_64-linux-gnu/c++/13/bits/basic_file.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++io.h \ + /usr/include/c++/13/bits/fstream.tcc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest-printers.cc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest-test-part.cc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest-typed-test.cc diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/DependInfo.cmake b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/DependInfo.cmake new file mode 100644 index 0000000..d455947 --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/DependInfo.cmake @@ -0,0 +1,23 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest_main.cc" "_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o" "gcc" "_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make new file mode 100644 index 0000000..da501af --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make @@ -0,0 +1,111 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/user/CppDevCourse-hw3 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/user/CppDevCourse-hw3/build + +# Include any dependencies generated for this target. +include _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.make + +# Include the progress variables for this target. +include _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/progress.make + +# Include the compile flags for this target's objects. +include _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/flags.make + +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/flags.make +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: _deps/googletest-src/googletest/src/gtest_main.cc +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o" + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o -MF CMakeFiles/gtest_main.dir/src/gtest_main.cc.o.d -o CMakeFiles/gtest_main.dir/src/gtest_main.cc.o -c /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest_main.cc + +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/gtest_main.dir/src/gtest_main.cc.i" + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest_main.cc > CMakeFiles/gtest_main.dir/src/gtest_main.cc.i + +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/gtest_main.dir/src/gtest_main.cc.s" + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest_main.cc -o CMakeFiles/gtest_main.dir/src/gtest_main.cc.s + +# Object files for target gtest_main +gtest_main_OBJECTS = \ +"CMakeFiles/gtest_main.dir/src/gtest_main.cc.o" + +# External object files for target gtest_main +gtest_main_EXTERNAL_OBJECTS = + +lib/libgtest_main.a: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o +lib/libgtest_main.a: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make +lib/libgtest_main.a: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/user/CppDevCourse-hw3/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library ../../../lib/libgtest_main.a" + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest && $(CMAKE_COMMAND) -P CMakeFiles/gtest_main.dir/cmake_clean_target.cmake + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/gtest_main.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build: lib/libgtest_main.a +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build + +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/clean: + cd /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest && $(CMAKE_COMMAND) -P CMakeFiles/gtest_main.dir/cmake_clean.cmake +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/clean + +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend: + cd /home/user/CppDevCourse-hw3/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/user/CppDevCourse-hw3 /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest /home/user/CppDevCourse-hw3/build /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/DependInfo.cmake "--color=$(COLOR)" +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend + diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean.cmake b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean.cmake new file mode 100644 index 0000000..d2f799e --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "../../../bin/libgtest_main.pdb" + "../../../lib/libgtest_main.a" + "CMakeFiles/gtest_main.dir/src/gtest_main.cc.o" + "CMakeFiles/gtest_main.dir/src/gtest_main.cc.o.d" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/gtest_main.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean_target.cmake b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..f09930e --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "../../../lib/libgtest_main.a" +) diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.make b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.make new file mode 100644 index 0000000..9a6afc0 --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for gtest_main. +# This may be replaced when dependencies are built. diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.ts b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.ts new file mode 100644 index 0000000..033891a --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for gtest_main. diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend.make b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend.make new file mode 100644 index 0000000..1d67c1a --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for gtest_main. +# This may be replaced when dependencies are built. diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/flags.make b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/flags.make new file mode 100644 index 0000000..3621b30 --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile CXX with /usr/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -I/home/user/CppDevCourse-hw3/include -isystem /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include -isystem /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest + +CXX_FLAGS = -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wall -Wextra -Werror + diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/link.txt b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/link.txt new file mode 100644 index 0000000..792baf7 --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc ../../../lib/libgtest_main.a CMakeFiles/gtest_main.dir/src/gtest_main.cc.o +/usr/bin/ranlib ../../../lib/libgtest_main.a diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/progress.make b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/progress.make new file mode 100644 index 0000000..72bb7dd --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 7 +CMAKE_PROGRESS_2 = 8 + diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o new file mode 100644 index 0000000000000000000000000000000000000000..17c48ba4c861f44c6f4bb34d75efa0324b679664 GIT binary patch literal 3048 zcmbtW-HRJl6u+}ux2yCct;H595(KpcGf6h9-4!X(Y&Kbl%d**^2r^D4cPC?#nQ-S$ z-4tXW3Sv;9_~6HzkHx>h7iFPf@x@2+!OsUlK|~Q>q)^Y9xhI*OP9CZU?wosm=i{Dx z?!713uQt}_G>s8y>@u55gfe#H=yYBVr)74EWkOq2EyDQgf@j5*M7^4-?&{L z2Y=Mxy$_A+<1Z$&Tc0BGO9;Q+0*fkGeqA5m3Zd|G{mYxEM!FNxek3v0;il{wlKax| z<*3gICmz!WJ~wtf(IZvJ9anPUntekAt}!)c9c7j8dIO#ZSCOv_him*w#S4VbbKTcV z`F7y+J9+RL`gz;)>^{dla=x%)Vm=hZ1P7+$>XyZ}1J`w2JB#v#i`iY_4YH5<4=_#B zsAN$&R1IFa$!e9#GuaERcHqh&TP*2IdLg$|3PO4LqCzm`BQP>Bu*|j17Mo-20I_)( zNM|C(w5!`p+skO@j~!jS4hQ@&;5d-Z;-`8d^X6RT_`)U_fQY(h5eI7EhxBum$N;ev z!n<>X{dp%v1vx=>DKyU(?m|xjqQ!8`3F&DVh~u7-PDPBhfg@f}GVS{vg>NbRoZ_D= zysKoa8PPn8U3LZj1RUdkt7Lj3XJCT(cL}_v@b44&Rlq5Cr3%>xfIk{rH#`&2d@{rS zs~PyOfS-=lIXpXv^ZN|@zh~ggK6HhRmp3mV0M~eho=~H>+?d)~2a&}_J}%F@kN zdu#Y=cfhKNZ+5+J+OupgO>J8~Ux(*A!*c1V9xNHYWq4nc1@4O7D6V3bO=()a9bsC0 zjSpov4BC_{2E1lzI{i|?FmPWs7l!l+RZDEQLWar2$P~c)|yR~UN*Jv0!)#gqUq3O}IzzEA+EY>)jh%Zgo;?;DU z5|j;8*p%2%z~*=3p^D2J5UUn;IgD7{a<;ZC#vW3a7GE;Mz7ei?(q( z4+6$2$3d7ERKPujUm`=r zlm6ELPrHBLq|^`J0{K(@($>bMR#ZZi2ll4pDgM}ll6Mavc1}I8vx$wVZJ|j>_;%C$ O7u8>tkCYv;r2oG>hQ+u5 literal 0 HcmV?d00001 diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o.d b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o.d new file mode 100644 index 0000000..45d9b93 --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o.d @@ -0,0 +1,275 @@ +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/src/gtest_main.cc \ + /usr/include/stdc-predef.h /usr/include/c++/13/cstdio \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \ + /usr/include/features.h /usr/include/features-time64.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \ + /usr/include/c++/13/pstl/pstl_config.h /usr/include/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest.h \ + /usr/include/c++/13/cstddef /usr/include/c++/13/limits \ + /usr/include/c++/13/memory /usr/include/c++/13/bits/memoryfwd.h \ + /usr/include/c++/13/bits/allocator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \ + /usr/include/c++/13/bits/new_allocator.h /usr/include/c++/13/new \ + /usr/include/c++/13/bits/exception.h \ + /usr/include/c++/13/bits/functexcept.h \ + /usr/include/c++/13/bits/exception_defines.h \ + /usr/include/c++/13/bits/move.h /usr/include/c++/13/type_traits \ + /usr/include/c++/13/bits/stl_tempbuf.h \ + /usr/include/c++/13/bits/stl_construct.h \ + /usr/include/c++/13/bits/stl_iterator_base_types.h \ + /usr/include/c++/13/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/13/bits/concept_check.h \ + /usr/include/c++/13/debug/assertions.h \ + /usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/bits/utility.h \ + /usr/include/c++/13/ext/numeric_traits.h \ + /usr/include/c++/13/bits/cpp_type_traits.h \ + /usr/include/c++/13/ext/type_traits.h \ + /usr/include/c++/13/bits/stl_uninitialized.h \ + /usr/include/c++/13/bits/stl_algobase.h \ + /usr/include/c++/13/bits/stl_iterator.h \ + /usr/include/c++/13/bits/ptr_traits.h /usr/include/c++/13/debug/debug.h \ + /usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \ + /usr/include/c++/13/ext/alloc_traits.h \ + /usr/include/c++/13/bits/alloc_traits.h \ + /usr/include/c++/13/bits/stl_raw_storage_iter.h \ + /usr/include/c++/13/bits/align.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-least.h \ + /usr/include/c++/13/bits/uses_allocator.h \ + /usr/include/c++/13/bits/unique_ptr.h /usr/include/c++/13/tuple \ + /usr/include/c++/13/bits/invoke.h \ + /usr/include/c++/13/bits/stl_function.h \ + /usr/include/c++/13/backward/binders.h \ + /usr/include/c++/13/bits/functional_hash.h \ + /usr/include/c++/13/bits/hash_bytes.h \ + /usr/include/c++/13/bits/shared_ptr.h /usr/include/c++/13/iosfwd \ + /usr/include/c++/13/bits/requires_hosted.h \ + /usr/include/c++/13/bits/stringfwd.h /usr/include/c++/13/bits/postypes.h \ + /usr/include/c++/13/cwchar /usr/include/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/types/wint_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/c++/13/bits/shared_ptr_base.h /usr/include/c++/13/typeinfo \ + /usr/include/c++/13/bits/allocated_ptr.h \ + /usr/include/c++/13/bits/refwrap.h \ + /usr/include/c++/13/ext/aligned_buffer.h \ + /usr/include/c++/13/ext/atomicity.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \ + /usr/include/x86_64-linux-gnu/bits/cpu-set.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \ + /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \ + /usr/include/x86_64-linux-gnu/sys/single_threaded.h \ + /usr/include/c++/13/ext/concurrence.h /usr/include/c++/13/exception \ + /usr/include/c++/13/bits/exception_ptr.h \ + /usr/include/c++/13/bits/cxxabi_init_exception.h \ + /usr/include/c++/13/bits/nested_exception.h \ + /usr/include/c++/13/bits/shared_ptr_atomic.h \ + /usr/include/c++/13/bits/atomic_base.h \ + /usr/include/c++/13/bits/atomic_lockfree_defines.h \ + /usr/include/c++/13/backward/auto_ptr.h \ + /usr/include/c++/13/pstl/glue_memory_defs.h \ + /usr/include/c++/13/pstl/execution_defs.h /usr/include/c++/13/ostream \ + /usr/include/c++/13/ios /usr/include/c++/13/bits/char_traits.h \ + /usr/include/c++/13/bits/localefwd.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \ + /usr/include/c++/13/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/cctype \ + /usr/include/ctype.h /usr/include/c++/13/bits/ios_base.h \ + /usr/include/c++/13/bits/locale_classes.h /usr/include/c++/13/string \ + /usr/include/c++/13/bits/ostream_insert.h \ + /usr/include/c++/13/bits/cxxabi_forced.h \ + /usr/include/c++/13/bits/range_access.h \ + /usr/include/c++/13/initializer_list \ + /usr/include/c++/13/bits/basic_string.h /usr/include/c++/13/string_view \ + /usr/include/c++/13/bits/string_view.tcc \ + /usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cerrno \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/x86_64-linux-gnu/bits/types/error_t.h \ + /usr/include/c++/13/bits/charconv.h \ + /usr/include/c++/13/bits/basic_string.tcc \ + /usr/include/c++/13/bits/memory_resource.h \ + /usr/include/c++/13/bits/uses_allocator_args.h \ + /usr/include/c++/13/bits/locale_classes.tcc \ + /usr/include/c++/13/system_error \ + /usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \ + /usr/include/c++/13/stdexcept /usr/include/c++/13/streambuf \ + /usr/include/c++/13/bits/streambuf.tcc \ + /usr/include/c++/13/bits/basic_ios.h \ + /usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \ + /usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \ + /usr/include/c++/13/bits/streambuf_iterator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \ + /usr/include/c++/13/bits/locale_facets.tcc \ + /usr/include/c++/13/bits/basic_ios.tcc \ + /usr/include/c++/13/bits/ostream.tcc /usr/include/c++/13/vector \ + /usr/include/c++/13/bits/stl_vector.h \ + /usr/include/c++/13/bits/stl_bvector.h \ + /usr/include/c++/13/bits/vector.tcc \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-internal.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-port.h \ + /usr/include/c++/13/stdlib.h /usr/include/string.h \ + /usr/include/strings.h /usr/include/c++/13/cstdint \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h \ + /usr/include/x86_64-linux-gnu/bits/struct_stat.h \ + /usr/include/x86_64-linux-gnu/bits/statx.h /usr/include/linux/stat.h \ + /usr/include/linux/types.h /usr/include/x86_64-linux-gnu/asm/types.h \ + /usr/include/asm-generic/types.h /usr/include/asm-generic/int-ll64.h \ + /usr/include/x86_64-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types_64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/x86_64-linux-gnu/bits/statx-generic.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_statx_timestamp.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_statx.h \ + /usr/include/c++/13/iostream /usr/include/c++/13/istream \ + /usr/include/c++/13/bits/istream.tcc /usr/include/c++/13/locale \ + /usr/include/c++/13/bits/locale_facets_nonio.h /usr/include/c++/13/ctime \ + /usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \ + /usr/include/libintl.h /usr/include/c++/13/bits/codecvt.h \ + /usr/include/c++/13/bits/locale_facets_nonio.tcc \ + /usr/include/c++/13/bits/locale_conv.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-port.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-port-arch.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_posix.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_core.h \ + /usr/include/x86_64-linux-gnu/bits/unistd_ext.h \ + /usr/include/linux/close_range.h /usr/include/regex.h \ + /usr/include/c++/13/any /usr/include/c++/13/optional \ + /usr/include/c++/13/bits/enable_special_members.h \ + /usr/include/c++/13/variant /usr/include/c++/13/bits/parse_numbers.h \ + /usr/include/x86_64-linux-gnu/sys/wait.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum-generic.h \ + /usr/include/x86_64-linux-gnu/bits/signum-arch.h \ + /usr/include/x86_64-linux-gnu/bits/types/sig_atomic_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/siginfo_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigval_t.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-arch.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-consts.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-consts-arch.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigval_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigevent_t.h \ + /usr/include/x86_64-linux-gnu/bits/sigevent-consts.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/types/stack_t.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/bits/sigstksz.h \ + /usr/include/x86_64-linux-gnu/bits/ss_flags.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sigstack.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h \ + /usr/include/x86_64-linux-gnu/bits/signal_ext.h \ + /usr/include/x86_64-linux-gnu/bits/types/idtype_t.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/float.h \ + /usr/include/c++/13/iomanip /usr/include/c++/13/bits/quoted_string.h \ + /usr/include/c++/13/sstream /usr/include/c++/13/bits/sstream.tcc \ + /usr/include/c++/13/map /usr/include/c++/13/bits/stl_tree.h \ + /usr/include/c++/13/bits/node_handle.h \ + /usr/include/c++/13/bits/stl_map.h \ + /usr/include/c++/13/bits/stl_multimap.h \ + /usr/include/c++/13/bits/erase_if.h /usr/include/c++/13/set \ + /usr/include/c++/13/bits/stl_set.h \ + /usr/include/c++/13/bits/stl_multiset.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-message.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-filepath.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-string.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-type-util.h \ + /usr/include/c++/13/cxxabi.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cxxabi_tweaks.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-death-test.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-death-test-internal.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-matchers.h \ + /usr/include/c++/13/atomic \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-printers.h \ + /usr/include/c++/13/functional /usr/include/c++/13/bits/std_function.h \ + /usr/include/c++/13/unordered_map \ + /usr/include/c++/13/bits/unordered_map.h \ + /usr/include/c++/13/bits/hashtable.h \ + /usr/include/c++/13/bits/hashtable_policy.h /usr/include/c++/13/array \ + /usr/include/c++/13/compare /usr/include/c++/13/bits/stl_algo.h \ + /usr/include/c++/13/bits/algorithmfwd.h \ + /usr/include/c++/13/bits/stl_heap.h \ + /usr/include/c++/13/bits/uniform_int_dist.h /usr/include/c++/13/utility \ + /usr/include/c++/13/bits/stl_relops.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-printers.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-param-test.h \ + /usr/include/c++/13/iterator /usr/include/c++/13/bits/stream_iterator.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-param-util.h \ + /usr/include/c++/13/cassert /usr/include/assert.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-test-part.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest_prod.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest-typed-test.h \ + /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/gtest/gtest_pred_impl.h diff --git a/build/_deps/googletest-build/googletest/CMakeFiles/progress.marks b/build/_deps/googletest-build/googletest/CMakeFiles/progress.marks new file mode 100644 index 0000000..b8626c4 --- /dev/null +++ b/build/_deps/googletest-build/googletest/CMakeFiles/progress.marks @@ -0,0 +1 @@ +4 diff --git a/build/_deps/googletest-build/googletest/CTestTestfile.cmake b/build/_deps/googletest-build/googletest/CTestTestfile.cmake new file mode 100644 index 0000000..c81b47f --- /dev/null +++ b/build/_deps/googletest-build/googletest/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest +# Build directory: /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/build/_deps/googletest-build/googletest/Makefile b/build/_deps/googletest-build/googletest/Makefile new file mode 100644 index 0000000..bc59800 --- /dev/null +++ b/build/_deps/googletest-build/googletest/Makefile @@ -0,0 +1,284 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/user/CppDevCourse-hw3 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/user/CppDevCourse-hw3/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test +.PHONY : test/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# The main all target +all: cmake_check_build_system + cd /home/user/CppDevCourse-hw3/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles /home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest//CMakeFiles/progress.marks + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googletest/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CppDevCourse-hw3/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googletest/clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googletest/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googletest/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/user/CppDevCourse-hw3/build && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/rule: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googletest/CMakeFiles/gtest.dir/rule +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/rule + +# Convenience name for target. +gtest: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/rule +.PHONY : gtest + +# fast build rule for target. +gtest/fast: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build +.PHONY : gtest/fast + +# Convenience name for target. +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/rule: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/rule +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/rule + +# Convenience name for target. +gtest_main: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/rule +.PHONY : gtest_main + +# fast build rule for target. +gtest_main/fast: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build +.PHONY : gtest_main/fast + +src/gtest-all.o: src/gtest-all.cc.o +.PHONY : src/gtest-all.o + +# target to build an object file +src/gtest-all.cc.o: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o +.PHONY : src/gtest-all.cc.o + +src/gtest-all.i: src/gtest-all.cc.i +.PHONY : src/gtest-all.i + +# target to preprocess a source file +src/gtest-all.cc.i: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.i +.PHONY : src/gtest-all.cc.i + +src/gtest-all.s: src/gtest-all.cc.s +.PHONY : src/gtest-all.s + +# target to generate assembly for a file +src/gtest-all.cc.s: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.s +.PHONY : src/gtest-all.cc.s + +src/gtest_main.o: src/gtest_main.cc.o +.PHONY : src/gtest_main.o + +# target to build an object file +src/gtest_main.cc.o: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o +.PHONY : src/gtest_main.cc.o + +src/gtest_main.i: src/gtest_main.cc.i +.PHONY : src/gtest_main.i + +# target to preprocess a source file +src/gtest_main.cc.i: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.i +.PHONY : src/gtest_main.cc.i + +src/gtest_main.s: src/gtest_main.cc.s +.PHONY : src/gtest_main.s + +# target to generate assembly for a file +src/gtest_main.cc.s: + cd /home/user/CppDevCourse-hw3/build && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.s +.PHONY : src/gtest_main.cc.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... test" + @echo "... gtest" + @echo "... gtest_main" + @echo "... src/gtest-all.o" + @echo "... src/gtest-all.i" + @echo "... src/gtest-all.s" + @echo "... src/gtest_main.o" + @echo "... src/gtest_main.i" + @echo "... src/gtest_main.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/user/CppDevCourse-hw3/build && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/build/_deps/googletest-build/googletest/cmake_install.cmake b/build/_deps/googletest-build/googletest/cmake_install.cmake new file mode 100644 index 0000000..8f061f6 --- /dev/null +++ b/build/_deps/googletest-build/googletest/cmake_install.cmake @@ -0,0 +1,94 @@ +# Install script for directory: /home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +# Set default install directory permissions. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/usr/bin/objdump") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/GTest/GTestTargets.cmake") + file(DIFFERENT _cmake_export_file_changed FILES + "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/GTest/GTestTargets.cmake" + "/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets.cmake") + if(_cmake_export_file_changed) + file(GLOB _cmake_old_config_files "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/GTest/GTestTargets-*.cmake") + if(_cmake_old_config_files) + string(REPLACE ";" ", " _cmake_old_config_files_text "${_cmake_old_config_files}") + message(STATUS "Old export file \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/GTest/GTestTargets.cmake\" will be replaced. Removing files [${_cmake_old_config_files_text}].") + unset(_cmake_old_config_files_text) + file(REMOVE ${_cmake_old_config_files}) + endif() + unset(_cmake_old_config_files) + endif() + unset(_cmake_export_file_changed) + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/cmake/GTest" TYPE FILE FILES "/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets.cmake") + if(CMAKE_INSTALL_CONFIG_NAME MATCHES "^()$") + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/cmake/GTest" TYPE FILE FILES "/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets-noconfig.cmake") + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/cmake/GTest" TYPE FILE FILES + "/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/generated/GTestConfigVersion.cmake" + "/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/generated/GTestConfig.cmake" + ) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/include" TYPE DIRECTORY FILES "/home/user/CppDevCourse-hw3/build/_deps/googletest-src/googletest/include/") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE STATIC_LIBRARY FILES "/home/user/CppDevCourse-hw3/build/lib/libgtest.a") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE STATIC_LIBRARY FILES "/home/user/CppDevCourse-hw3/build/lib/libgtest_main.a") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig" TYPE FILE FILES "/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/generated/gtest.pc") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig" TYPE FILE FILES "/home/user/CppDevCourse-hw3/build/_deps/googletest-build/googletest/generated/gtest_main.pc") +endif() + diff --git a/build/_deps/googletest-build/googletest/generated/GTestConfig.cmake b/build/_deps/googletest-build/googletest/generated/GTestConfig.cmake new file mode 100644 index 0000000..771cb7e --- /dev/null +++ b/build/_deps/googletest-build/googletest/generated/GTestConfig.cmake @@ -0,0 +1,33 @@ + +####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() ####### +####### Any changes to this file will be overwritten by the next CMake run #### +####### The input file was Config.cmake.in ######## + +get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE) + +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +macro(check_required_components _NAME) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(NOT ${_NAME}_${comp}_FOUND) + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + endif() + endif() + endforeach() +endmacro() + +#################################################################################### +include(CMakeFindDependencyMacro) +if (ON) + set(THREADS_PREFER_PTHREAD_FLAG ) + find_dependency(Threads) +endif() + +include("${CMAKE_CURRENT_LIST_DIR}/GTestTargets.cmake") +check_required_components("") diff --git a/build/_deps/googletest-build/googletest/generated/GTestConfigVersion.cmake b/build/_deps/googletest-build/googletest/generated/GTestConfigVersion.cmake new file mode 100644 index 0000000..158aabf --- /dev/null +++ b/build/_deps/googletest-build/googletest/generated/GTestConfigVersion.cmake @@ -0,0 +1,43 @@ +# This is a basic version file for the Config-mode of find_package(). +# It is used by write_basic_package_version_file() as input file for configure_file() +# to create a version-file which can be installed along a config.cmake file. +# +# The created file sets PACKAGE_VERSION_EXACT if the current version string and +# the requested version string are exactly the same and it sets +# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version. +# The variable CVF_VERSION must be set before calling configure_file(). + +set(PACKAGE_VERSION "1.11.0") + +if (PACKAGE_FIND_VERSION_RANGE) + # Package version must be in the requested version range + if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN) + OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX))) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + endif() +else() + if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() + endif() +endif() + + +# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "") + return() +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8") + math(EXPR installedBits "8 * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/build/_deps/googletest-build/googletest/generated/gmock.pc b/build/_deps/googletest-build/googletest/generated/gmock.pc new file mode 100644 index 0000000..87614c6 --- /dev/null +++ b/build/_deps/googletest-build/googletest/generated/gmock.pc @@ -0,0 +1,10 @@ +libdir=/usr/local/lib +includedir=/usr/local/include + +Name: gmock +Description: GoogleMock (without main() function) +Version: 1.11.0 +URL: https://github.com/google/googletest +Requires: gtest = 1.11.0 +Libs: -L${libdir} -lgmock +Cflags: -I${includedir} -DGTEST_HAS_PTHREAD=1 diff --git a/build/_deps/googletest-build/googletest/generated/gmock_main.pc b/build/_deps/googletest-build/googletest/generated/gmock_main.pc new file mode 100644 index 0000000..b4c7ac7 --- /dev/null +++ b/build/_deps/googletest-build/googletest/generated/gmock_main.pc @@ -0,0 +1,10 @@ +libdir=/usr/local/lib +includedir=/usr/local/include + +Name: gmock_main +Description: GoogleMock (with main() function) +Version: 1.11.0 +URL: https://github.com/google/googletest +Requires: gmock = 1.11.0 +Libs: -L${libdir} -lgmock_main +Cflags: -I${includedir} -DGTEST_HAS_PTHREAD=1 diff --git a/build/_deps/googletest-build/googletest/generated/gtest.pc b/build/_deps/googletest-build/googletest/generated/gtest.pc new file mode 100644 index 0000000..1e7f6d3 --- /dev/null +++ b/build/_deps/googletest-build/googletest/generated/gtest.pc @@ -0,0 +1,9 @@ +libdir=/usr/local/lib +includedir=/usr/local/include + +Name: gtest +Description: GoogleTest (without main() function) +Version: 1.11.0 +URL: https://github.com/google/googletest +Libs: -L${libdir} -lgtest +Cflags: -I${includedir} -DGTEST_HAS_PTHREAD=1 diff --git a/build/_deps/googletest-build/googletest/generated/gtest_main.pc b/build/_deps/googletest-build/googletest/generated/gtest_main.pc new file mode 100644 index 0000000..f5c1e51 --- /dev/null +++ b/build/_deps/googletest-build/googletest/generated/gtest_main.pc @@ -0,0 +1,10 @@ +libdir=/usr/local/lib +includedir=/usr/local/include + +Name: gtest_main +Description: GoogleTest (with main() function) +Version: 1.11.0 +URL: https://github.com/google/googletest +Requires: gtest = 1.11.0 +Libs: -L${libdir} -lgtest_main +Cflags: -I${includedir} -DGTEST_HAS_PTHREAD=1 diff --git a/build/_deps/googletest-src/.clang-format b/build/_deps/googletest-src/.clang-format new file mode 100644 index 0000000..5b9bfe6 --- /dev/null +++ b/build/_deps/googletest-src/.clang-format @@ -0,0 +1,4 @@ +# Run manually to reformat a file: +# clang-format -i --style=file +Language: Cpp +BasedOnStyle: Google diff --git a/build/_deps/googletest-src/.github/ISSUE_TEMPLATE/00-bug_report.md b/build/_deps/googletest-src/.github/ISSUE_TEMPLATE/00-bug_report.md new file mode 100644 index 0000000..0f7e8b5 --- /dev/null +++ b/build/_deps/googletest-src/.github/ISSUE_TEMPLATE/00-bug_report.md @@ -0,0 +1,43 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: 'bug' +assignees: '' +--- + +**Describe the bug** + +Include a clear and concise description of what the problem is, including what +you expected to happen, and what actually happened. + +**Steps to reproduce the bug** + +It's important that we are able to reproduce the problem that you are +experiencing. Please provide all code and relevant steps to reproduce the +problem, including your `BUILD`/`CMakeLists.txt` file and build commands. Links +to a GitHub branch or [godbolt.org](https://godbolt.org/) that demonstrate the +problem are also helpful. + +**Does the bug persist in the most recent commit?** + +We recommend using the latest commit in the master branch in your projects. + +**What operating system and version are you using?** + +If you are using a Linux distribution please include the name and version of the +distribution as well. + +**What compiler and version are you using?** + +Please include the output of `gcc -v` or `clang -v`, or the equivalent for your +compiler. + +**What build system are you using?** + +Please include the output of `bazel --version` or `cmake --version`, or the +equivalent for your build system. + +**Additional context** + +Add any other context about the problem here. diff --git a/build/_deps/googletest-src/.github/ISSUE_TEMPLATE/10-feature_request.md b/build/_deps/googletest-src/.github/ISSUE_TEMPLATE/10-feature_request.md new file mode 100644 index 0000000..70a3a20 --- /dev/null +++ b/build/_deps/googletest-src/.github/ISSUE_TEMPLATE/10-feature_request.md @@ -0,0 +1,24 @@ +--- +name: Feature request +about: Propose a new feature +title: '' +labels: 'enhancement' +assignees: '' +--- + +**Does the feature exist in the most recent commit?** + +We recommend using the latest commit from GitHub in your projects. + +**Why do we need this feature?** + +Ideally, explain why a combination of existing features cannot be used instead. + +**Describe the proposal** + +Include a detailed description of the feature, with usage examples. + +**Is the feature specific to an operating system, compiler, or build system version?** + +If it is, please specify which versions. + diff --git a/build/_deps/googletest-src/.github/ISSUE_TEMPLATE/config.yml b/build/_deps/googletest-src/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/build/_deps/googletest-src/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/build/_deps/googletest-src/.gitignore b/build/_deps/googletest-src/.gitignore new file mode 100644 index 0000000..f08cb72 --- /dev/null +++ b/build/_deps/googletest-src/.gitignore @@ -0,0 +1,84 @@ +# Ignore CI build directory +build/ +xcuserdata +cmake-build-debug/ +.idea/ +bazel-bin +bazel-genfiles +bazel-googletest +bazel-out +bazel-testlogs +# python +*.pyc + +# Visual Studio files +.vs +*.sdf +*.opensdf +*.VC.opendb +*.suo +*.user +_ReSharper.Caches/ +Win32-Debug/ +Win32-Release/ +x64-Debug/ +x64-Release/ + +# Ignore autoconf / automake files +Makefile.in +aclocal.m4 +configure +build-aux/ +autom4te.cache/ +googletest/m4/libtool.m4 +googletest/m4/ltoptions.m4 +googletest/m4/ltsugar.m4 +googletest/m4/ltversion.m4 +googletest/m4/lt~obsolete.m4 +googlemock/m4 + +# Ignore generated directories. +googlemock/fused-src/ +googletest/fused-src/ + +# macOS files +.DS_Store +googletest/.DS_Store +googletest/xcode/.DS_Store + +# Ignore cmake generated directories and files. +CMakeFiles +CTestTestfile.cmake +Makefile +cmake_install.cmake +googlemock/CMakeFiles +googlemock/CTestTestfile.cmake +googlemock/Makefile +googlemock/cmake_install.cmake +googlemock/gtest +/bin +/googlemock/gmock.dir +/googlemock/gmock_main.dir +/googlemock/RUN_TESTS.vcxproj.filters +/googlemock/RUN_TESTS.vcxproj +/googlemock/INSTALL.vcxproj.filters +/googlemock/INSTALL.vcxproj +/googlemock/gmock_main.vcxproj.filters +/googlemock/gmock_main.vcxproj +/googlemock/gmock.vcxproj.filters +/googlemock/gmock.vcxproj +/googlemock/gmock.sln +/googlemock/ALL_BUILD.vcxproj.filters +/googlemock/ALL_BUILD.vcxproj +/lib +/Win32 +/ZERO_CHECK.vcxproj.filters +/ZERO_CHECK.vcxproj +/RUN_TESTS.vcxproj.filters +/RUN_TESTS.vcxproj +/INSTALL.vcxproj.filters +/INSTALL.vcxproj +/googletest-distribution.sln +/CMakeCache.txt +/ALL_BUILD.vcxproj.filters +/ALL_BUILD.vcxproj diff --git a/build/_deps/googletest-src/BUILD.bazel b/build/_deps/googletest-src/BUILD.bazel new file mode 100644 index 0000000..965c518 --- /dev/null +++ b/build/_deps/googletest-src/BUILD.bazel @@ -0,0 +1,190 @@ +# Copyright 2017 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. +# +# Bazel Build for Google C++ Testing Framework(Google Test) + +load("@rules_cc//cc:defs.bzl", "cc_library", "cc_test") + +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +exports_files(["LICENSE"]) + +config_setting( + name = "windows", + constraint_values = ["@platforms//os:windows"], +) + +config_setting( + name = "msvc_compiler", + flag_values = { + "@bazel_tools//tools/cpp:compiler": "msvc-cl", + }, + visibility = [":__subpackages__"], +) + +config_setting( + name = "has_absl", + values = {"define": "absl=1"}, +) + +# Library that defines the FRIEND_TEST macro. +cc_library( + name = "gtest_prod", + hdrs = ["googletest/include/gtest/gtest_prod.h"], + includes = ["googletest/include"], +) + +# Google Test including Google Mock +cc_library( + name = "gtest", + srcs = glob( + include = [ + "googletest/src/*.cc", + "googletest/src/*.h", + "googletest/include/gtest/**/*.h", + "googlemock/src/*.cc", + "googlemock/include/gmock/**/*.h", + ], + exclude = [ + "googletest/src/gtest-all.cc", + "googletest/src/gtest_main.cc", + "googlemock/src/gmock-all.cc", + "googlemock/src/gmock_main.cc", + ], + ), + hdrs = glob([ + "googletest/include/gtest/*.h", + "googlemock/include/gmock/*.h", + ]), + copts = select({ + ":windows": [], + "//conditions:default": ["-pthread"], + }), + defines = select({ + ":has_absl": ["GTEST_HAS_ABSL=1"], + "//conditions:default": [], + }), + features = select({ + ":windows": ["windows_export_all_symbols"], + "//conditions:default": [], + }), + includes = [ + "googlemock", + "googlemock/include", + "googletest", + "googletest/include", + ], + linkopts = select({ + ":windows": [], + "//conditions:default": ["-pthread"], + }), + deps = select({ + ":has_absl": [ + "@com_google_absl//absl/debugging:failure_signal_handler", + "@com_google_absl//absl/debugging:stacktrace", + "@com_google_absl//absl/debugging:symbolize", + "@com_google_absl//absl/strings", + "@com_google_absl//absl/types:any", + "@com_google_absl//absl/types:optional", + "@com_google_absl//absl/types:variant", + ], + "//conditions:default": [], + }), +) + +cc_library( + name = "gtest_main", + srcs = ["googlemock/src/gmock_main.cc"], + features = select({ + ":windows": ["windows_export_all_symbols"], + "//conditions:default": [], + }), + deps = [":gtest"], +) + +# The following rules build samples of how to use gTest. +cc_library( + name = "gtest_sample_lib", + srcs = [ + "googletest/samples/sample1.cc", + "googletest/samples/sample2.cc", + "googletest/samples/sample4.cc", + ], + hdrs = [ + "googletest/samples/prime_tables.h", + "googletest/samples/sample1.h", + "googletest/samples/sample2.h", + "googletest/samples/sample3-inl.h", + "googletest/samples/sample4.h", + ], + features = select({ + ":windows": ["windows_export_all_symbols"], + "//conditions:default": [], + }), +) + +cc_test( + name = "gtest_samples", + size = "small", + # All Samples except: + # sample9 (main) + # sample10 (main and takes a command line option and needs to be separate) + srcs = [ + "googletest/samples/sample1_unittest.cc", + "googletest/samples/sample2_unittest.cc", + "googletest/samples/sample3_unittest.cc", + "googletest/samples/sample4_unittest.cc", + "googletest/samples/sample5_unittest.cc", + "googletest/samples/sample6_unittest.cc", + "googletest/samples/sample7_unittest.cc", + "googletest/samples/sample8_unittest.cc", + ], + linkstatic = 0, + deps = [ + "gtest_sample_lib", + ":gtest_main", + ], +) + +cc_test( + name = "sample9_unittest", + size = "small", + srcs = ["googletest/samples/sample9_unittest.cc"], + deps = [":gtest"], +) + +cc_test( + name = "sample10_unittest", + size = "small", + srcs = ["googletest/samples/sample10_unittest.cc"], + deps = [":gtest"], +) diff --git a/build/_deps/googletest-src/CMakeLists.txt b/build/_deps/googletest-src/CMakeLists.txt new file mode 100644 index 0000000..ea81ab1 --- /dev/null +++ b/build/_deps/googletest-src/CMakeLists.txt @@ -0,0 +1,32 @@ +# Note: CMake support is community-based. The maintainers do not use CMake +# internally. + +cmake_minimum_required(VERSION 2.8.12) + +if (POLICY CMP0048) + cmake_policy(SET CMP0048 NEW) +endif (POLICY CMP0048) + +project(googletest-distribution) +set(GOOGLETEST_VERSION 1.11.0) + +if (CMAKE_VERSION VERSION_GREATER "3.0.2") + if(NOT CYGWIN AND NOT MSYS AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL QNX) + set(CMAKE_CXX_EXTENSIONS OFF) + endif() +endif() + +enable_testing() + +include(CMakeDependentOption) +include(GNUInstallDirs) + +#Note that googlemock target already builds googletest +option(BUILD_GMOCK "Builds the googlemock subproject" ON) +option(INSTALL_GTEST "Enable installation of googletest. (Projects embedding googletest may want to turn this OFF.)" ON) + +if(BUILD_GMOCK) + add_subdirectory( googlemock ) +else() + add_subdirectory( googletest ) +endif() diff --git a/build/_deps/googletest-src/CONTRIBUTING.md b/build/_deps/googletest-src/CONTRIBUTING.md new file mode 100644 index 0000000..da45e44 --- /dev/null +++ b/build/_deps/googletest-src/CONTRIBUTING.md @@ -0,0 +1,130 @@ +# How to become a contributor and submit your own code + +## Contributor License Agreements + +We'd love to accept your patches! Before we can take them, we have to jump a +couple of legal hurdles. + +Please fill out either the individual or corporate Contributor License Agreement +(CLA). + +* If you are an individual writing original source code and you're sure you + own the intellectual property, then you'll need to sign an + [individual CLA](https://developers.google.com/open-source/cla/individual). +* If you work for a company that wants to allow you to contribute your work, + then you'll need to sign a + [corporate CLA](https://developers.google.com/open-source/cla/corporate). + +Follow either of the two links above to access the appropriate CLA and +instructions for how to sign and return it. Once we receive it, we'll be able to +accept your pull requests. + +## Are you a Googler? + +If you are a Googler, please make an attempt to submit an internal change rather +than a GitHub Pull Request. If you are not able to submit an internal change a +PR is acceptable as an alternative. + +## Contributing A Patch + +1. Submit an issue describing your proposed change to the + [issue tracker](https://github.com/google/googletest/issues). +2. Please don't mix more than one logical change per submittal, because it + makes the history hard to follow. If you want to make a change that doesn't + have a corresponding issue in the issue tracker, please create one. +3. Also, coordinate with team members that are listed on the issue in question. + This ensures that work isn't being duplicated and communicating your plan + early also generally leads to better patches. +4. If your proposed change is accepted, and you haven't already done so, sign a + Contributor License Agreement (see details above). +5. Fork the desired repo, develop and test your code changes. +6. Ensure that your code adheres to the existing style in the sample to which + you are contributing. +7. Ensure that your code has an appropriate set of unit tests which all pass. +8. Submit a pull request. + +## The Google Test and Google Mock Communities + +The Google Test community exists primarily through the +[discussion group](http://groups.google.com/group/googletestframework) and the +GitHub repository. Likewise, the Google Mock community exists primarily through +their own [discussion group](http://groups.google.com/group/googlemock). You are +definitely encouraged to contribute to the discussion and you can also help us +to keep the effectiveness of the group high by following and promoting the +guidelines listed here. + +### Please Be Friendly + +Showing courtesy and respect to others is a vital part of the Google culture, +and we strongly encourage everyone participating in Google Test development to +join us in accepting nothing less. Of course, being courteous is not the same as +failing to constructively disagree with each other, but it does mean that we +should be respectful of each other when enumerating the 42 technical reasons +that a particular proposal may not be the best choice. There's never a reason to +be antagonistic or dismissive toward anyone who is sincerely trying to +contribute to a discussion. + +Sure, C++ testing is serious business and all that, but it's also a lot of fun. +Let's keep it that way. Let's strive to be one of the friendliest communities in +all of open source. + +As always, discuss Google Test in the official GoogleTest discussion group. You +don't have to actually submit code in order to sign up. Your participation +itself is a valuable contribution. + +## Style + +To keep the source consistent, readable, diffable and easy to merge, we use a +fairly rigid coding style, as defined by the +[google-styleguide](https://github.com/google/styleguide) project. All patches +will be expected to conform to the style outlined +[here](https://google.github.io/styleguide/cppguide.html). Use +[.clang-format](https://github.com/google/googletest/blob/master/.clang-format) +to check your formatting. + +## Requirements for Contributors + +If you plan to contribute a patch, you need to build Google Test, Google Mock, +and their own tests from a git checkout, which has further requirements: + +* [Python](https://www.python.org/) v2.3 or newer (for running some of the + tests and re-generating certain source files from templates) +* [CMake](https://cmake.org/) v2.8.12 or newer + +## Developing Google Test and Google Mock + +This section discusses how to make your own changes to the Google Test project. + +### Testing Google Test and Google Mock Themselves + +To make sure your changes work as intended and don't break existing +functionality, you'll want to compile and run Google Test and GoogleMock's own +tests. For that you can use CMake: + + mkdir mybuild + cd mybuild + cmake -Dgtest_build_tests=ON -Dgmock_build_tests=ON ${GTEST_REPO_DIR} + +To choose between building only Google Test or Google Mock, you may modify your +cmake command to be one of each + + cmake -Dgtest_build_tests=ON ${GTEST_DIR} # sets up Google Test tests + cmake -Dgmock_build_tests=ON ${GMOCK_DIR} # sets up Google Mock tests + +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 ... + +Next, you can build Google Test and / or Google Mock and all desired tests. On +\*nix, this is usually done by + + make + +To run the tests, do + + make test + +All tests should pass. diff --git a/build/_deps/googletest-src/CONTRIBUTORS b/build/_deps/googletest-src/CONTRIBUTORS new file mode 100644 index 0000000..76db0b4 --- /dev/null +++ b/build/_deps/googletest-src/CONTRIBUTORS @@ -0,0 +1,63 @@ +# 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 +Balázs Dán +Benoit Sigoure +Bharat Mediratta +Bogdan Piloca +Chandler Carruth +Chris Prince +Chris Taylor +Dan Egnor +Dave MacLachlan +David Anderson +Dean Sturtevant +Eric Roman +Gene Volovich +Hady Zalek +Hal Burch +Jeffrey Yasskin +Jim Keller +Joe Walnes +Jon Wray +Jói Sigurðsson +Keir Mierle +Keith Ray +Kenton Varda +Kostya Serebryany +Krystian Kuzniarek +Lev Makhlis +Manuel Klimek +Mario Tanev +Mark Paskin +Markus Heule +Matthew Simmons +Mika Raento +Mike Bland +Miklós Fazekas +Neal Norwitz +Nermin Ozkiranartli +Owen Carlsen +Paneendra Ba +Pasi Valminen +Patrick Hanna +Patrick Riley +Paul Menage +Peter Kaminski +Piotr Kaminski +Preston Jackson +Rainer Klaffenboeck +Russ Cox +Russ Rufer +Sean Mcafee +Sigurður Ásgeirsson +Sverre Sundsdal +Takeshi Yoshino +Tracy Bialik +Vadim Berman +Vlad Losev +Wolfgang Klier +Zhanyong Wan diff --git a/build/_deps/googletest-src/LICENSE b/build/_deps/googletest-src/LICENSE new file mode 100644 index 0000000..1941a11 --- /dev/null +++ b/build/_deps/googletest-src/LICENSE @@ -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. diff --git a/build/_deps/googletest-src/README.md b/build/_deps/googletest-src/README.md new file mode 100644 index 0000000..7d872a5 --- /dev/null +++ b/build/_deps/googletest-src/README.md @@ -0,0 +1,140 @@ +# GoogleTest + +### Announcements + +#### Live at Head + +GoogleTest now follows the +[Abseil Live at Head philosophy](https://abseil.io/about/philosophy#upgrade-support). +We recommend using the latest commit in the `master` branch in your projects. + +#### Documentation Updates + +Our documentation is now live on GitHub Pages at +https://google.github.io/googletest/. We recommend browsing the documentation on +GitHub Pages rather than directly in the repository. + +#### Release 1.10.x + +[Release 1.10.x](https://github.com/google/googletest/releases/tag/release-1.10.0) +is now available. + +#### Coming Soon + +* We are planning to take a dependency on + [Abseil](https://github.com/abseil/abseil-cpp). +* More documentation improvements are planned. + +## Welcome to **GoogleTest**, Google's C++ test framework! + +This repository is a merger of the formerly separate GoogleTest and GoogleMock +projects. These were so closely related that it makes sense to maintain and +release them together. + +### Getting Started + +See the [GoogleTest User's Guide](https://google.github.io/googletest/) for +documentation. We recommend starting with the +[GoogleTest Primer](https://google.github.io/googletest/primer.html). + +More information about building GoogleTest can be found at +[googletest/README.md](googletest/README.md). + +## Features + +* An [xUnit](https://en.wikipedia.org/wiki/XUnit) test framework. +* Test discovery. +* A rich set of assertions. +* User-defined assertions. +* Death tests. +* Fatal and non-fatal failures. +* Value-parameterized tests. +* Type-parameterized tests. +* Various options for running the tests. +* XML test report generation. + +## Supported Platforms + +GoogleTest requires a codebase and compiler compliant with the C++11 standard or +newer. + +The GoogleTest code is officially supported on the following platforms. +Operating systems or tools not listed below are community-supported. For +community-supported platforms, patches that do not complicate the code may be +considered. + +If you notice any problems on your platform, please file an issue on the +[GoogleTest GitHub Issue Tracker](https://github.com/google/googletest/issues). +Pull requests containing fixes are welcome! + +### Operating Systems + +* Linux +* macOS +* Windows + +### Compilers + +* gcc 5.0+ +* clang 5.0+ +* MSVC 2015+ + +**macOS users:** Xcode 9.3+ provides clang 5.0+. + +### Build Systems + +* [Bazel](https://bazel.build/) +* [CMake](https://cmake.org/) + +**Note:** Bazel is the build system used by the team internally and in tests. +CMake is supported on a best-effort basis and by the community. + +## Who Is Using GoogleTest? + +In addition to many internal projects at Google, GoogleTest is also used by the +following notable projects: + +* The [Chromium projects](http://www.chromium.org/) (behind the Chrome browser + and Chrome OS). +* The [LLVM](http://llvm.org/) compiler. +* [Protocol Buffers](https://github.com/google/protobuf), Google's data + interchange format. +* The [OpenCV](http://opencv.org/) computer vision library. + +## Related Open Source Projects + +[GTest Runner](https://github.com/nholthaus/gtest-runner) is a Qt5 based +automated test-runner and Graphical User Interface with powerful features for +Windows and Linux platforms. + +[GoogleTest UI](https://github.com/ospector/gtest-gbar) is a test runner that +runs your test binary, allows you to track its progress via a progress bar, and +displays a list of test failures. Clicking on one shows failure text. Google +Test UI is written in C#. + +[GTest TAP Listener](https://github.com/kinow/gtest-tap-listener) is an event +listener for GoogleTest that implements the +[TAP protocol](https://en.wikipedia.org/wiki/Test_Anything_Protocol) for test +result output. If your test runner understands TAP, you may find it useful. + +[gtest-parallel](https://github.com/google/gtest-parallel) is a test runner that +runs tests from your binary in parallel to provide significant speed-up. + +[GoogleTest Adapter](https://marketplace.visualstudio.com/items?itemName=DavidSchuldenfrei.gtest-adapter) +is a VS Code extension allowing to view GoogleTest in a tree view, and run/debug +your tests. + +[C++ TestMate](https://github.com/matepek/vscode-catch2-test-adapter) is a VS +Code extension allowing to view GoogleTest in a tree view, and run/debug your +tests. + +[Cornichon](https://pypi.org/project/cornichon/) is a small Gherkin DSL parser +that generates stub code for GoogleTest. + +## Contributing Changes + +Please read +[`CONTRIBUTING.md`](https://github.com/google/googletest/blob/master/CONTRIBUTING.md) +for details on how to contribute to this project. + +Happy testing! diff --git a/build/_deps/googletest-src/WORKSPACE b/build/_deps/googletest-src/WORKSPACE new file mode 100644 index 0000000..614f557 --- /dev/null +++ b/build/_deps/googletest-src/WORKSPACE @@ -0,0 +1,24 @@ +workspace(name = "com_google_googletest") + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "com_google_absl", + urls = ["https://github.com/abseil/abseil-cpp/archive/7971fb358ae376e016d2d4fc9327aad95659b25e.zip"], # 2021-05-20T02:59:16Z + strip_prefix = "abseil-cpp-7971fb358ae376e016d2d4fc9327aad95659b25e", + sha256 = "aeba534f7307e36fe084b452299e49b97420667a8d28102cf9a0daeed340b859", +) + +http_archive( + name = "rules_cc", + urls = ["https://github.com/bazelbuild/rules_cc/archive/68cb652a71e7e7e2858c50593e5a9e3b94e5b9a9.zip"], # 2021-05-14T14:51:14Z + strip_prefix = "rules_cc-68cb652a71e7e7e2858c50593e5a9e3b94e5b9a9", + sha256 = "1e19e9a3bc3d4ee91d7fcad00653485ee6c798efbbf9588d40b34cbfbded143d", +) + +http_archive( + name = "rules_python", + urls = ["https://github.com/bazelbuild/rules_python/archive/ed6cc8f2c3692a6a7f013ff8bc185ba77eb9b4d2.zip"], # 2021-05-17T00:24:16Z + strip_prefix = "rules_python-ed6cc8f2c3692a6a7f013ff8bc185ba77eb9b4d2", + sha256 = "98b3c592faea9636ac8444bfd9de7f3fb4c60590932d6e6ac5946e3f8dbd5ff6", +) diff --git a/build/_deps/googletest-src/ci/linux-presubmit.sh b/build/_deps/googletest-src/ci/linux-presubmit.sh new file mode 100644 index 0000000..6bea1cd --- /dev/null +++ b/build/_deps/googletest-src/ci/linux-presubmit.sh @@ -0,0 +1,126 @@ +#!/bin/bash +# +# Copyright 2020, 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. + +set -euox pipefail + +readonly LINUX_LATEST_CONTAINER="gcr.io/google.com/absl-177019/linux_hybrid-latest:20210525" +readonly LINUX_GCC_FLOOR_CONTAINER="gcr.io/google.com/absl-177019/linux_gcc-floor:20201015" + +if [[ -z ${GTEST_ROOT:-} ]]; then + GTEST_ROOT="$(realpath $(dirname ${0})/..)" +fi + +if [[ -z ${STD:-} ]]; then + STD="c++11 c++14 c++17 c++20" +fi + +# Test the CMake build +for cc in /usr/local/bin/gcc /opt/llvm/clang/bin/clang; do + for cmake_off_on in OFF ON; do + time docker run \ + --volume="${GTEST_ROOT}:/src:ro" \ + --tmpfs="/build:exec" \ + --workdir="/build" \ + --rm \ + --env="CC=${cc}" \ + --env="CXX_FLAGS=\"-Werror -Wdeprecated\"" \ + ${LINUX_LATEST_CONTAINER} \ + /bin/bash -c " + cmake /src \ + -DCMAKE_CXX_STANDARD=11 \ + -Dgtest_build_samples=ON \ + -Dgtest_build_tests=ON \ + -Dgmock_build_tests=ON \ + -Dcxx_no_exception=${cmake_off_on} \ + -Dcxx_no_rtti=${cmake_off_on} && \ + make -j$(nproc) && \ + ctest -j$(nproc) --output-on-failure" + done +done + +# Do one test with an older version of GCC +time docker run \ + --volume="${GTEST_ROOT}:/src:ro" \ + --workdir="/src" \ + --rm \ + --env="CC=/usr/local/bin/gcc" \ + ${LINUX_GCC_FLOOR_CONTAINER} \ + /usr/local/bin/bazel test ... \ + --copt="-Wall" \ + --copt="-Werror" \ + --copt="-Wno-error=pragmas" \ + --keep_going \ + --show_timestamps \ + --test_output=errors + +# Test GCC +for std in ${STD}; do + for absl in 0 1; do + time docker run \ + --volume="${GTEST_ROOT}:/src:ro" \ + --workdir="/src" \ + --rm \ + --env="CC=/usr/local/bin/gcc" \ + --env="BAZEL_CXXOPTS=-std=${std}" \ + ${LINUX_LATEST_CONTAINER} \ + /usr/local/bin/bazel test ... \ + --copt="-Wall" \ + --copt="-Werror" \ + --define="absl=${absl}" \ + --distdir="/bazel-distdir" \ + --keep_going \ + --show_timestamps \ + --test_output=errors + done +done + +# Test Clang +for std in ${STD}; do + for absl in 0 1; do + time docker run \ + --volume="${GTEST_ROOT}:/src:ro" \ + --workdir="/src" \ + --rm \ + --env="CC=/opt/llvm/clang/bin/clang" \ + --env="BAZEL_CXXOPTS=-std=${std}" \ + ${LINUX_LATEST_CONTAINER} \ + /usr/local/bin/bazel test ... \ + --copt="--gcc-toolchain=/usr/local" \ + --copt="-Wall" \ + --copt="-Werror" \ + --define="absl=${absl}" \ + --distdir="/bazel-distdir" \ + --keep_going \ + --linkopt="--gcc-toolchain=/usr/local" \ + --show_timestamps \ + --test_output=errors + done +done diff --git a/build/_deps/googletest-src/ci/macos-presubmit.sh b/build/_deps/googletest-src/ci/macos-presubmit.sh new file mode 100644 index 0000000..d6423fa --- /dev/null +++ b/build/_deps/googletest-src/ci/macos-presubmit.sh @@ -0,0 +1,73 @@ +#!/bin/bash +# +# Copyright 2020, 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. + +set -euox pipefail + +if [[ -z ${GTEST_ROOT:-} ]]; then + GTEST_ROOT="$(realpath $(dirname ${0})/..)" +fi + +# Test the CMake build +for cmake_off_on in OFF ON; do + BUILD_DIR=$(mktemp -d build_dir.XXXXXXXX) + cd ${BUILD_DIR} + time cmake ${GTEST_ROOT} \ + -DCMAKE_CXX_STANDARD=11 \ + -Dgtest_build_samples=ON \ + -Dgtest_build_tests=ON \ + -Dgmock_build_tests=ON \ + -Dcxx_no_exception=${cmake_off_on} \ + -Dcxx_no_rtti=${cmake_off_on} + time make + time ctest -j$(nproc) --output-on-failure +done + +# Test the Bazel build + +# If we are running on Kokoro, check for a versioned Bazel binary. +KOKORO_GFILE_BAZEL_BIN="bazel-3.7.0-darwin-x86_64" +if [[ ${KOKORO_GFILE_DIR:-} ]] && [[ -f ${KOKORO_GFILE_DIR}/${KOKORO_GFILE_BAZEL_BIN} ]]; then + BAZEL_BIN="${KOKORO_GFILE_DIR}/${KOKORO_GFILE_BAZEL_BIN}" + chmod +x ${BAZEL_BIN} +else + BAZEL_BIN="bazel" +fi + +cd ${GTEST_ROOT} +for absl in 0 1; do + ${BAZEL_BIN} test ... \ + --copt="-Wall" \ + --copt="-Werror" \ + --define="absl=${absl}" \ + --keep_going \ + --show_timestamps \ + --test_output=errors +done diff --git a/build/_deps/googletest-src/docs/_config.yml b/build/_deps/googletest-src/docs/_config.yml new file mode 100644 index 0000000..d12867e --- /dev/null +++ b/build/_deps/googletest-src/docs/_config.yml @@ -0,0 +1 @@ +title: GoogleTest diff --git a/build/_deps/googletest-src/docs/_data/navigation.yml b/build/_deps/googletest-src/docs/_data/navigation.yml new file mode 100644 index 0000000..9f33327 --- /dev/null +++ b/build/_deps/googletest-src/docs/_data/navigation.yml @@ -0,0 +1,43 @@ +nav: +- section: "Get Started" + items: + - title: "Supported Platforms" + url: "/platforms.html" + - title: "Quickstart: Bazel" + url: "/quickstart-bazel.html" + - title: "Quickstart: CMake" + url: "/quickstart-cmake.html" +- section: "Guides" + items: + - title: "GoogleTest Primer" + url: "/primer.html" + - title: "Advanced Topics" + url: "/advanced.html" + - title: "Mocking for Dummies" + url: "/gmock_for_dummies.html" + - title: "Mocking Cookbook" + url: "/gmock_cook_book.html" + - title: "Mocking Cheat Sheet" + url: "/gmock_cheat_sheet.html" +- section: "References" + items: + - title: "Testing Reference" + url: "/reference/testing.html" + - title: "Mocking Reference" + url: "/reference/mocking.html" + - title: "Assertions" + url: "/reference/assertions.html" + - title: "Matchers" + url: "/reference/matchers.html" + - title: "Actions" + url: "/reference/actions.html" + - title: "Testing FAQ" + url: "/faq.html" + - title: "Mocking FAQ" + url: "/gmock_faq.html" + - title: "Code Samples" + url: "/samples.html" + - title: "Using pkg-config" + url: "/pkgconfig.html" + - title: "Community Documentation" + url: "/community_created_documentation.html" diff --git a/build/_deps/googletest-src/docs/_layouts/default.html b/build/_deps/googletest-src/docs/_layouts/default.html new file mode 100644 index 0000000..dcb42d9 --- /dev/null +++ b/build/_deps/googletest-src/docs/_layouts/default.html @@ -0,0 +1,58 @@ + + + + + + + +{% seo %} + + + + + +

+
+
+ {{ content }} +
+ +
+ + + + diff --git a/build/_deps/googletest-src/docs/_sass/main.scss b/build/_deps/googletest-src/docs/_sass/main.scss new file mode 100644 index 0000000..92edc87 --- /dev/null +++ b/build/_deps/googletest-src/docs/_sass/main.scss @@ -0,0 +1,200 @@ +// Styles for GoogleTest docs website on GitHub Pages. +// Color variables are defined in +// https://github.com/pages-themes/primer/tree/master/_sass/primer-support/lib/variables + +$sidebar-width: 260px; + +body { + display: flex; + margin: 0; +} + +.sidebar { + background: $black; + color: $text-white; + flex-shrink: 0; + height: 100vh; + overflow: auto; + position: sticky; + top: 0; + width: $sidebar-width; +} + +.sidebar h1 { + font-size: 1.5em; +} + +.sidebar h2 { + color: $gray-light; + font-size: 0.8em; + font-weight: normal; + margin-bottom: 0.8em; + padding-left: 2.5em; + text-transform: uppercase; +} + +.sidebar .header { + background: $black; + padding: 2em; + position: sticky; + top: 0; + width: 100%; +} + +.sidebar .header a { + color: $text-white; + text-decoration: none; +} + +.sidebar .nav-toggle { + display: none; +} + +.sidebar .expander { + cursor: pointer; + display: none; + height: 3em; + position: absolute; + right: 1em; + top: 1.5em; + width: 3em; +} + +.sidebar .expander .arrow { + border: solid $white; + border-width: 0 3px 3px 0; + display: block; + height: 0.7em; + margin: 1em auto; + transform: rotate(45deg); + transition: transform 0.5s; + width: 0.7em; +} + +.sidebar nav { + width: 100%; +} + +.sidebar nav ul { + list-style-type: none; + margin-bottom: 1em; + padding: 0; + + &:last-child { + margin-bottom: 2em; + } + + a { + text-decoration: none; + } + + li { + color: $text-white; + padding-left: 2em; + text-decoration: none; + } + + li.active { + background: $border-gray-darker; + font-weight: bold; + } + + li:hover { + background: $border-gray-darker; + } +} + +.main { + background-color: $bg-gray; + width: calc(100% - #{$sidebar-width}); +} + +.main .main-inner { + background-color: $white; + padding: 2em; +} + +.main .footer { + margin: 0; + padding: 2em; +} + +.main table th { + text-align: left; +} + +.main .callout { + border-left: 0.25em solid $white; + padding: 1em; + + a { + text-decoration: underline; + } + + &.important { + background-color: $bg-yellow-light; + border-color: $bg-yellow; + color: $black; + } + + &.note { + background-color: $bg-blue-light; + border-color: $text-blue; + color: $text-blue; + } + + &.tip { + background-color: $green-000; + border-color: $green-700; + color: $green-700; + } + + &.warning { + background-color: $red-000; + border-color: $text-red; + color: $text-red; + } +} + +.main .good pre { + background-color: $bg-green-light; +} + +.main .bad pre { + background-color: $red-000; +} + +@media all and (max-width: 768px) { + body { + flex-direction: column; + } + + .sidebar { + height: auto; + position: relative; + width: 100%; + } + + .sidebar .expander { + display: block; + } + + .sidebar nav { + height: 0; + overflow: hidden; + } + + .sidebar .nav-toggle:checked { + & ~ nav { + height: auto; + } + + & + .expander .arrow { + transform: rotate(-135deg); + } + } + + .main { + width: 100%; + } +} diff --git a/build/_deps/googletest-src/docs/advanced.md b/build/_deps/googletest-src/docs/advanced.md new file mode 100644 index 0000000..8dff5ba --- /dev/null +++ b/build/_deps/googletest-src/docs/advanced.md @@ -0,0 +1,2318 @@ +# Advanced googletest Topics + +## Introduction + +Now that you have read the [googletest Primer](primer.md) and learned how to +write tests using googletest, it's time to learn some new tricks. This document +will show you more assertions as well as how to construct complex failure +messages, propagate fatal failures, reuse and speed up your test fixtures, and +use various flags with your tests. + +## More Assertions + +This section covers some less frequently used, but still significant, +assertions. + +### Explicit Success and Failure + +See [Explicit Success and Failure](reference/assertions.md#success-failure) in +the Assertions Reference. + +### Exception Assertions + +See [Exception Assertions](reference/assertions.md#exceptions) in the Assertions +Reference. + +### Predicate Assertions for Better Error Messages + +Even though googletest has a rich set of assertions, they can never be complete, +as it's impossible (nor a good idea) to anticipate all scenarios a user might +run into. Therefore, sometimes a user has to use `EXPECT_TRUE()` to check a +complex expression, for lack of a better macro. This has the problem of not +showing you the values of the parts of the expression, making it hard to +understand what went wrong. As a workaround, some users choose to construct the +failure message by themselves, streaming it into `EXPECT_TRUE()`. However, this +is awkward especially when the expression has side-effects or is expensive to +evaluate. + +googletest gives you three different options to solve this problem: + +#### Using an Existing Boolean Function + +If you already have a function or functor that returns `bool` (or a type that +can be implicitly converted to `bool`), you can use it in a *predicate +assertion* to get the function arguments printed for free. See +[`EXPECT_PRED*`](reference/assertions.md#EXPECT_PRED) in the Assertions +Reference for details. + +#### Using a Function That Returns an AssertionResult + +While `EXPECT_PRED*()` and friends are handy for a quick job, the syntax is not +satisfactory: you have to use different macros for different arities, and it +feels more like Lisp than C++. The `::testing::AssertionResult` class solves +this problem. + +An `AssertionResult` object represents the result of an assertion (whether it's +a success or a failure, and an associated message). You can create an +`AssertionResult` using one of these factory functions: + +```c++ +namespace testing { + +// Returns an AssertionResult object to indicate that an assertion has +// succeeded. +AssertionResult AssertionSuccess(); + +// Returns an AssertionResult object to indicate that an assertion has +// failed. +AssertionResult AssertionFailure(); + +} +``` + +You can then use the `<<` operator to stream messages to the `AssertionResult` +object. + +To provide more readable messages in Boolean assertions (e.g. `EXPECT_TRUE()`), +write a predicate function that returns `AssertionResult` instead of `bool`. For +example, if you define `IsEven()` as: + +```c++ +testing::AssertionResult IsEven(int n) { + if ((n % 2) == 0) + return testing::AssertionSuccess(); + else + return testing::AssertionFailure() << n << " is odd"; +} +``` + +instead of: + +```c++ +bool IsEven(int n) { + return (n % 2) == 0; +} +``` + +the failed assertion `EXPECT_TRUE(IsEven(Fib(4)))` will print: + +```none +Value of: IsEven(Fib(4)) + Actual: false (3 is odd) +Expected: true +``` + +instead of a more opaque + +```none +Value of: IsEven(Fib(4)) + Actual: false +Expected: true +``` + +If you want informative messages in `EXPECT_FALSE` and `ASSERT_FALSE` as well +(one third of Boolean assertions in the Google code base are negative ones), and +are fine with making the predicate slower in the success case, you can supply a +success message: + +```c++ +testing::AssertionResult IsEven(int n) { + if ((n % 2) == 0) + return testing::AssertionSuccess() << n << " is even"; + else + return testing::AssertionFailure() << n << " is odd"; +} +``` + +Then the statement `EXPECT_FALSE(IsEven(Fib(6)))` will print + +```none + Value of: IsEven(Fib(6)) + Actual: true (8 is even) + Expected: false +``` + +#### Using a Predicate-Formatter + +If you find the default message generated by +[`EXPECT_PRED*`](reference/assertions.md#EXPECT_PRED) and +[`EXPECT_TRUE`](reference/assertions.md#EXPECT_TRUE) unsatisfactory, or some +arguments to your predicate do not support streaming to `ostream`, you can +instead use *predicate-formatter assertions* to *fully* customize how the +message is formatted. See +[`EXPECT_PRED_FORMAT*`](reference/assertions.md#EXPECT_PRED_FORMAT) in the +Assertions Reference for details. + +### Floating-Point Comparison + +See [Floating-Point Comparison](reference/assertions.md#floating-point) in the +Assertions Reference. + +#### Floating-Point Predicate-Format Functions + +Some floating-point operations are useful, but not that often used. In order to +avoid an explosion of new macros, we provide them as predicate-format functions +that can be used in the predicate assertion macro +[`EXPECT_PRED_FORMAT2`](reference/assertions.md#EXPECT_PRED_FORMAT), for +example: + +```c++ +EXPECT_PRED_FORMAT2(testing::FloatLE, val1, val2); +EXPECT_PRED_FORMAT2(testing::DoubleLE, val1, val2); +``` + +The above code verifies that `val1` is less than, or approximately equal to, +`val2`. + +### Asserting Using gMock Matchers + +See [`EXPECT_THAT`](reference/assertions.md#EXPECT_THAT) in the Assertions +Reference. + +### More String Assertions + +(Please read the [previous](#asserting-using-gmock-matchers) section first if +you haven't.) + +You can use the gMock [string matchers](reference/matchers.md#string-matchers) +with [`EXPECT_THAT`](reference/assertions.md#EXPECT_THAT) to do more string +comparison tricks (sub-string, prefix, suffix, regular expression, and etc). For +example, + +```c++ +using ::testing::HasSubstr; +using ::testing::MatchesRegex; +... + ASSERT_THAT(foo_string, HasSubstr("needle")); + EXPECT_THAT(bar_string, MatchesRegex("\\w*\\d+")); +``` + +### Windows HRESULT assertions + +See [Windows HRESULT Assertions](reference/assertions.md#HRESULT) in the +Assertions Reference. + +### Type Assertions + +You can call the function + +```c++ +::testing::StaticAssertTypeEq(); +``` + +to assert that types `T1` and `T2` are the same. The function does nothing if +the assertion is satisfied. If the types are different, the function call will +fail to compile, the compiler error message will say that +`T1 and T2 are not the same type` and most likely (depending on the compiler) +show you the actual values of `T1` and `T2`. This is mainly useful inside +template code. + +**Caveat**: When used inside a member function of a class template or a function +template, `StaticAssertTypeEq()` is effective only if the function is +instantiated. For example, given: + +```c++ +template class Foo { + public: + void Bar() { testing::StaticAssertTypeEq(); } +}; +``` + +the code: + +```c++ +void Test1() { Foo foo; } +``` + +will not generate a compiler error, as `Foo::Bar()` is never actually +instantiated. Instead, you need: + +```c++ +void Test2() { Foo foo; foo.Bar(); } +``` + +to cause a compiler error. + +### Assertion Placement + +You can use assertions in any C++ function. In particular, it doesn't have to be +a method of the test fixture class. The one constraint is that assertions that +generate a fatal failure (`FAIL*` and `ASSERT_*`) can only be used in +void-returning functions. This is a consequence of Google's not using +exceptions. By placing it in a non-void function you'll get a confusing compile +error like `"error: void value not ignored as it ought to be"` or `"cannot +initialize return object of type 'bool' with an rvalue of type 'void'"` or +`"error: no viable conversion from 'void' to 'string'"`. + +If you need to use fatal assertions in a function that returns non-void, one +option is to make the function return the value in an out parameter instead. For +example, you can rewrite `T2 Foo(T1 x)` to `void Foo(T1 x, T2* result)`. You +need to make sure that `*result` contains some sensible value even when the +function returns prematurely. As the function now returns `void`, you can use +any assertion inside of it. + +If changing the function's type is not an option, you should just use assertions +that generate non-fatal failures, such as `ADD_FAILURE*` and `EXPECT_*`. + +{: .callout .note} +NOTE: Constructors and destructors are not considered void-returning functions, +according to the C++ language specification, and so you may not use fatal +assertions in them; you'll get a compilation error if you try. Instead, either +call `abort` and crash the entire test executable, or put the fatal assertion in +a `SetUp`/`TearDown` function; see +[constructor/destructor vs. `SetUp`/`TearDown`](faq.md#CtorVsSetUp) + +{: .callout .warning} +WARNING: A fatal assertion in a helper function (private void-returning method) +called from a constructor or destructor does not terminate the current test, as +your intuition might suggest: it merely returns from the constructor or +destructor early, possibly leaving your object in a partially-constructed or +partially-destructed state! You almost certainly want to `abort` or use +`SetUp`/`TearDown` instead. + +## Skipping test execution + +Related to the assertions `SUCCEED()` and `FAIL()`, you can prevent further test +execution at runtime with the `GTEST_SKIP()` macro. This is useful when you need +to check for preconditions of the system under test during runtime and skip +tests in a meaningful way. + +`GTEST_SKIP()` can be used in individual test cases or in the `SetUp()` methods +of classes derived from either `::testing::Environment` or `::testing::Test`. +For example: + +```c++ +TEST(SkipTest, DoesSkip) { + GTEST_SKIP() << "Skipping single test"; + EXPECT_EQ(0, 1); // Won't fail; it won't be executed +} + +class SkipFixture : public ::testing::Test { + protected: + void SetUp() override { + GTEST_SKIP() << "Skipping all tests for this fixture"; + } +}; + +// Tests for SkipFixture won't be executed. +TEST_F(SkipFixture, SkipsOneTest) { + EXPECT_EQ(5, 7); // Won't fail +} +``` + +As with assertion macros, you can stream a custom message into `GTEST_SKIP()`. + +## Teaching googletest How to Print Your Values + +When a test assertion such as `EXPECT_EQ` fails, googletest prints the argument +values to help you debug. It does this using a user-extensible value printer. + +This printer knows how to print built-in C++ types, native arrays, STL +containers, and any type that supports the `<<` operator. For other types, it +prints the raw bytes in the value and hopes that you the user can figure it out. + +As mentioned earlier, the printer is *extensible*. That means you can teach it +to do a better job at printing your particular type than to dump the bytes. To +do that, define `<<` for your type: + +```c++ +#include + +namespace foo { + +class Bar { // We want googletest to be able to print instances of this. +... + // Create a free inline friend function. + friend std::ostream& operator<<(std::ostream& os, const Bar& bar) { + return os << bar.DebugString(); // whatever needed to print bar to os + } +}; + +// If you can't declare the function in the class it's important that the +// << operator is defined in the SAME namespace that defines Bar. C++'s look-up +// rules rely on that. +std::ostream& operator<<(std::ostream& os, const Bar& bar) { + return os << bar.DebugString(); // whatever needed to print bar to os +} + +} // namespace foo +``` + +Sometimes, this might not be an option: your team may consider it bad style to +have a `<<` operator for `Bar`, or `Bar` may already have a `<<` operator that +doesn't do what you want (and you cannot change it). If so, you can instead +define a `PrintTo()` function like this: + +```c++ +#include + +namespace foo { + +class Bar { + ... + friend void PrintTo(const Bar& bar, std::ostream* os) { + *os << bar.DebugString(); // whatever needed to print bar to os + } +}; + +// If you can't declare the function in the class it's important that PrintTo() +// is defined in the SAME namespace that defines Bar. C++'s look-up rules rely +// on that. +void PrintTo(const Bar& bar, std::ostream* os) { + *os << bar.DebugString(); // whatever needed to print bar to os +} + +} // namespace foo +``` + +If you have defined both `<<` and `PrintTo()`, the latter will be used when +googletest is concerned. This allows you to customize how the value appears in +googletest's output without affecting code that relies on the behavior of its +`<<` operator. + +If you want to print a value `x` using googletest's value printer yourself, just +call `::testing::PrintToString(x)`, which returns an `std::string`: + +```c++ +vector > bar_ints = GetBarIntVector(); + +EXPECT_TRUE(IsCorrectBarIntVector(bar_ints)) + << "bar_ints = " << testing::PrintToString(bar_ints); +``` + +## Death Tests + +In many applications, there are assertions that can cause application failure if +a condition is not met. These sanity checks, which ensure that the program is in +a known good state, are there to fail at the earliest possible time after some +program state is corrupted. If the assertion checks the wrong condition, then +the program may proceed in an erroneous state, which could lead to memory +corruption, security holes, or worse. Hence it is vitally important to test that +such assertion statements work as expected. + +Since these precondition checks cause the processes to die, we call such tests +_death tests_. More generally, any test that checks that a program terminates +(except by throwing an exception) in an expected fashion is also a death test. + +Note that if a piece of code throws an exception, we don't consider it "death" +for the purpose of death tests, as the caller of the code could catch the +exception and avoid the crash. If you want to verify exceptions thrown by your +code, see [Exception Assertions](#ExceptionAssertions). + +If you want to test `EXPECT_*()/ASSERT_*()` failures in your test code, see +["Catching" Failures](#catching-failures). + +### How to Write a Death Test + +GoogleTest provides assertion macros to support death tests. See +[Death Assertions](reference/assertions.md#death) in the Assertions Reference +for details. + +To write a death test, simply use one of the macros inside your test function. +For example, + +```c++ +TEST(MyDeathTest, Foo) { + // This death test uses a compound statement. + ASSERT_DEATH({ + int n = 5; + Foo(&n); + }, "Error on line .* of Foo()"); +} + +TEST(MyDeathTest, NormalExit) { + EXPECT_EXIT(NormalExit(), testing::ExitedWithCode(0), "Success"); +} + +TEST(MyDeathTest, KillProcess) { + EXPECT_EXIT(KillProcess(), testing::KilledBySignal(SIGKILL), + "Sending myself unblockable signal"); +} +``` + +verifies that: + +* calling `Foo(5)` causes the process to die with the given error message, +* calling `NormalExit()` causes the process to print `"Success"` to stderr and + exit with exit code 0, and +* calling `KillProcess()` kills the process with signal `SIGKILL`. + +The test function body may contain other assertions and statements as well, if +necessary. + +Note that a death test only cares about three things: + +1. does `statement` abort or exit the process? +2. (in the case of `ASSERT_EXIT` and `EXPECT_EXIT`) does the exit status + satisfy `predicate`? Or (in the case of `ASSERT_DEATH` and `EXPECT_DEATH`) + is the exit status non-zero? And +3. does the stderr output match `matcher`? + +In particular, if `statement` generates an `ASSERT_*` or `EXPECT_*` failure, it +will **not** cause the death test to fail, as googletest assertions don't abort +the process. + +### Death Test Naming + +{: .callout .important} +IMPORTANT: We strongly recommend you to follow the convention of naming your +**test suite** (not test) `*DeathTest` when it contains a death test, as +demonstrated in the above example. The +[Death Tests And Threads](#death-tests-and-threads) section below explains why. + +If a test fixture class is shared by normal tests and death tests, you can use +`using` or `typedef` to introduce an alias for the fixture class and avoid +duplicating its code: + +```c++ +class FooTest : public testing::Test { ... }; + +using FooDeathTest = FooTest; + +TEST_F(FooTest, DoesThis) { + // normal test +} + +TEST_F(FooDeathTest, DoesThat) { + // death test +} +``` + +### Regular Expression Syntax + +On POSIX systems (e.g. Linux, Cygwin, and Mac), googletest uses the +[POSIX extended regular expression](http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html#tag_09_04) +syntax. To learn about this syntax, you may want to read this +[Wikipedia entry](http://en.wikipedia.org/wiki/Regular_expression#POSIX_Extended_Regular_Expressions). + +On Windows, googletest uses its own simple regular expression implementation. It +lacks many features. For example, we don't support union (`"x|y"`), grouping +(`"(xy)"`), brackets (`"[xy]"`), and repetition count (`"x{5,7}"`), among +others. Below is what we do support (`A` denotes a literal character, period +(`.`), or a single `\\ ` escape sequence; `x` and `y` denote regular +expressions.): + +Expression | Meaning +---------- | -------------------------------------------------------------- +`c` | matches any literal character `c` +`\\d` | matches any decimal digit +`\\D` | matches any character that's not a decimal digit +`\\f` | matches `\f` +`\\n` | matches `\n` +`\\r` | matches `\r` +`\\s` | matches any ASCII whitespace, including `\n` +`\\S` | matches any character that's not a whitespace +`\\t` | matches `\t` +`\\v` | matches `\v` +`\\w` | matches any letter, `_`, or decimal digit +`\\W` | matches any character that `\\w` doesn't match +`\\c` | matches any literal character `c`, which must be a punctuation +`.` | matches any single character except `\n` +`A?` | matches 0 or 1 occurrences of `A` +`A*` | matches 0 or many occurrences of `A` +`A+` | matches 1 or many occurrences of `A` +`^` | matches the beginning of a string (not that of each line) +`$` | matches the end of a string (not that of each line) +`xy` | matches `x` followed by `y` + +To help you determine which capability is available on your system, googletest +defines macros to govern which regular expression it is using. The macros are: +`GTEST_USES_SIMPLE_RE=1` or `GTEST_USES_POSIX_RE=1`. If you want your death +tests to work in all cases, you can either `#if` on these macros or use the more +limited syntax only. + +### How It Works + +See [Death Assertions](reference/assertions.md#death) in the Assertions +Reference. + +### Death Tests And Threads + +The reason for the two death test styles has to do with thread safety. Due to +well-known problems with forking in the presence of threads, death tests should +be run in a single-threaded context. Sometimes, however, it isn't feasible to +arrange that kind of environment. For example, statically-initialized modules +may start threads before main is ever reached. Once threads have been created, +it may be difficult or impossible to clean them up. + +googletest has three features intended to raise awareness of threading issues. + +1. A warning is emitted if multiple threads are running when a death test is + encountered. +2. Test suites with a name ending in "DeathTest" are run before all other + tests. +3. It uses `clone()` instead of `fork()` to spawn the child process on Linux + (`clone()` is not available on Cygwin and Mac), as `fork()` is more likely + to cause the child to hang when the parent process has multiple threads. + +It's perfectly fine to create threads inside a death test statement; they are +executed in a separate process and cannot affect the parent. + +### Death Test Styles + +The "threadsafe" death test style was introduced in order to help mitigate the +risks of testing in a possibly multithreaded environment. It trades increased +test execution time (potentially dramatically so) for improved thread safety. + +The automated testing framework does not set the style flag. You can choose a +particular style of death tests by setting the flag programmatically: + +```c++ +testing::FLAGS_gtest_death_test_style="threadsafe" +``` + +You can do this in `main()` to set the style for all death tests in the binary, +or in individual tests. Recall that flags are saved before running each test and +restored afterwards, so you need not do that yourself. For example: + +```c++ +int main(int argc, char** argv) { + testing::InitGoogleTest(&argc, argv); + testing::FLAGS_gtest_death_test_style = "fast"; + return RUN_ALL_TESTS(); +} + +TEST(MyDeathTest, TestOne) { + testing::FLAGS_gtest_death_test_style = "threadsafe"; + // This test is run in the "threadsafe" style: + ASSERT_DEATH(ThisShouldDie(), ""); +} + +TEST(MyDeathTest, TestTwo) { + // This test is run in the "fast" style: + ASSERT_DEATH(ThisShouldDie(), ""); +} +``` + +### Caveats + +The `statement` argument of `ASSERT_EXIT()` can be any valid C++ statement. If +it leaves the current function via a `return` statement or by throwing an +exception, the death test is considered to have failed. Some googletest macros +may return from the current function (e.g. `ASSERT_TRUE()`), so be sure to avoid +them in `statement`. + +Since `statement` runs in the child process, any in-memory side effect (e.g. +modifying a variable, releasing memory, etc) it causes will *not* be observable +in the parent process. In particular, if you release memory in a death test, +your program will fail the heap check as the parent process will never see the +memory reclaimed. To solve this problem, you can + +1. try not to free memory in a death test; +2. free the memory again in the parent process; or +3. do not use the heap checker in your program. + +Due to an implementation detail, you cannot place multiple death test assertions +on the same line; otherwise, compilation will fail with an unobvious error +message. + +Despite the improved thread safety afforded by the "threadsafe" style of death +test, thread problems such as deadlock are still possible in the presence of +handlers registered with `pthread_atfork(3)`. + + +## Using Assertions in Sub-routines + +{: .callout .note} +Note: If you want to put a series of test assertions in a subroutine to check +for a complex condition, consider using +[a custom GMock matcher](gmock_cook_book.md#NewMatchers) +instead. This lets you provide a more readable error message in case of failure +and avoid all of the issues described below. + +### Adding Traces to Assertions + +If a test sub-routine is called from several places, when an assertion inside it +fails, it can be hard to tell which invocation of the sub-routine the failure is +from. You can alleviate this problem using extra logging or custom failure +messages, but that usually clutters up your tests. A better solution is to use +the `SCOPED_TRACE` macro or the `ScopedTrace` utility: + +```c++ +SCOPED_TRACE(message); +``` +```c++ +ScopedTrace trace("file_path", line_number, message); +``` + +where `message` can be anything streamable to `std::ostream`. `SCOPED_TRACE` +macro will cause the current file name, line number, and the given message to be +added in every failure message. `ScopedTrace` accepts explicit file name and +line number in arguments, which is useful for writing test helpers. The effect +will be undone when the control leaves the current lexical scope. + +For example, + +```c++ +10: void Sub1(int n) { +11: EXPECT_EQ(Bar(n), 1); +12: EXPECT_EQ(Bar(n + 1), 2); +13: } +14: +15: TEST(FooTest, Bar) { +16: { +17: SCOPED_TRACE("A"); // This trace point will be included in +18: // every failure in this scope. +19: Sub1(1); +20: } +21: // Now it won't. +22: Sub1(9); +23: } +``` + +could result in messages like these: + +```none +path/to/foo_test.cc:11: Failure +Value of: Bar(n) +Expected: 1 + Actual: 2 +Google Test trace: +path/to/foo_test.cc:17: A + +path/to/foo_test.cc:12: Failure +Value of: Bar(n + 1) +Expected: 2 + Actual: 3 +``` + +Without the trace, it would've been difficult to know which invocation of +`Sub1()` the two failures come from respectively. (You could add an extra +message to each assertion in `Sub1()` to indicate the value of `n`, but that's +tedious.) + +Some tips on using `SCOPED_TRACE`: + +1. With a suitable message, it's often enough to use `SCOPED_TRACE` at the + beginning of a sub-routine, instead of at each call site. +2. When calling sub-routines inside a loop, make the loop iterator part of the + message in `SCOPED_TRACE` such that you can know which iteration the failure + is from. +3. Sometimes the line number of the trace point is enough for identifying the + particular invocation of a sub-routine. In this case, you don't have to + choose a unique message for `SCOPED_TRACE`. You can simply use `""`. +4. You can use `SCOPED_TRACE` in an inner scope when there is one in the outer + scope. In this case, all active trace points will be included in the failure + messages, in reverse order they are encountered. +5. The trace dump is clickable in Emacs - hit `return` on a line number and + you'll be taken to that line in the source file! + +### Propagating Fatal Failures + +A common pitfall when using `ASSERT_*` and `FAIL*` is not understanding that +when they fail they only abort the _current function_, not the entire test. For +example, the following test will segfault: + +```c++ +void Subroutine() { + // Generates a fatal failure and aborts the current function. + ASSERT_EQ(1, 2); + + // The following won't be executed. + ... +} + +TEST(FooTest, Bar) { + Subroutine(); // The intended behavior is for the fatal failure + // in Subroutine() to abort the entire test. + + // The actual behavior: the function goes on after Subroutine() returns. + int* p = nullptr; + *p = 3; // Segfault! +} +``` + +To alleviate this, googletest provides three different solutions. You could use +either exceptions, the `(ASSERT|EXPECT)_NO_FATAL_FAILURE` assertions or the +`HasFatalFailure()` function. They are described in the following two +subsections. + +#### Asserting on Subroutines with an exception + +The following code can turn ASSERT-failure into an exception: + +```c++ +class ThrowListener : public testing::EmptyTestEventListener { + void OnTestPartResult(const testing::TestPartResult& result) override { + if (result.type() == testing::TestPartResult::kFatalFailure) { + throw testing::AssertionException(result); + } + } +}; +int main(int argc, char** argv) { + ... + testing::UnitTest::GetInstance()->listeners().Append(new ThrowListener); + return RUN_ALL_TESTS(); +} +``` + +This listener should be added after other listeners if you have any, otherwise +they won't see failed `OnTestPartResult`. + +#### Asserting on Subroutines + +As shown above, if your test calls a subroutine that has an `ASSERT_*` failure +in it, the test will continue after the subroutine returns. This may not be what +you want. + +Often people want fatal failures to propagate like exceptions. For that +googletest offers the following macros: + +Fatal assertion | Nonfatal assertion | Verifies +------------------------------------- | ------------------------------------- | -------- +`ASSERT_NO_FATAL_FAILURE(statement);` | `EXPECT_NO_FATAL_FAILURE(statement);` | `statement` doesn't generate any new fatal failures in the current thread. + +Only failures in the thread that executes the assertion are checked to determine +the result of this type of assertions. If `statement` creates new threads, +failures in these threads are ignored. + +Examples: + +```c++ +ASSERT_NO_FATAL_FAILURE(Foo()); + +int i; +EXPECT_NO_FATAL_FAILURE({ + i = Bar(); +}); +``` + +Assertions from multiple threads are currently not supported on Windows. + +#### Checking for Failures in the Current Test + +`HasFatalFailure()` in the `::testing::Test` class returns `true` if an +assertion in the current test has suffered a fatal failure. This allows +functions to catch fatal failures in a sub-routine and return early. + +```c++ +class Test { + public: + ... + static bool HasFatalFailure(); +}; +``` + +The typical usage, which basically simulates the behavior of a thrown exception, +is: + +```c++ +TEST(FooTest, Bar) { + Subroutine(); + // Aborts if Subroutine() had a fatal failure. + if (HasFatalFailure()) return; + + // The following won't be executed. + ... +} +``` + +If `HasFatalFailure()` is used outside of `TEST()` , `TEST_F()` , or a test +fixture, you must add the `::testing::Test::` prefix, as in: + +```c++ +if (testing::Test::HasFatalFailure()) return; +``` + +Similarly, `HasNonfatalFailure()` returns `true` if the current test has at +least one non-fatal failure, and `HasFailure()` returns `true` if the current +test has at least one failure of either kind. + +## Logging Additional Information + +In your test code, you can call `RecordProperty("key", value)` to log additional +information, where `value` can be either a string or an `int`. The *last* value +recorded for a key will be emitted to the +[XML output](#generating-an-xml-report) if you specify one. For example, the +test + +```c++ +TEST_F(WidgetUsageTest, MinAndMaxWidgets) { + RecordProperty("MaximumWidgets", ComputeMaxUsage()); + RecordProperty("MinimumWidgets", ComputeMinUsage()); +} +``` + +will output XML like this: + +```xml + ... + + ... +``` + +{: .callout .note} +> NOTE: +> +> * `RecordProperty()` is a static member of the `Test` class. Therefore it +> needs to be prefixed with `::testing::Test::` if used outside of the +> `TEST` body and the test fixture class. +> * *`key`* must be a valid XML attribute name, and cannot conflict with the +> ones already used by googletest (`name`, `status`, `time`, `classname`, +> `type_param`, and `value_param`). +> * Calling `RecordProperty()` outside of the lifespan of a test is allowed. +> If it's called outside of a test but between a test suite's +> `SetUpTestSuite()` and `TearDownTestSuite()` methods, it will be +> attributed to the XML element for the test suite. If it's called outside +> of all test suites (e.g. in a test environment), it will be attributed to +> the top-level XML element. + +## Sharing Resources Between Tests in the Same Test Suite + +googletest creates a new test fixture object for each test in order to make +tests independent and easier to debug. However, sometimes tests use resources +that are expensive to set up, making the one-copy-per-test model prohibitively +expensive. + +If the tests don't change the resource, there's no harm in their sharing a +single resource copy. So, in addition to per-test set-up/tear-down, googletest +also supports per-test-suite set-up/tear-down. To use it: + +1. In your test fixture class (say `FooTest` ), declare as `static` some member + variables to hold the shared resources. +2. Outside your test fixture class (typically just below it), define those + member variables, optionally giving them initial values. +3. In the same test fixture class, define a `static void SetUpTestSuite()` + function (remember not to spell it as **`SetupTestSuite`** with a small + `u`!) to set up the shared resources and a `static void TearDownTestSuite()` + function to tear them down. + +That's it! googletest automatically calls `SetUpTestSuite()` before running the +*first test* in the `FooTest` test suite (i.e. before creating the first +`FooTest` object), and calls `TearDownTestSuite()` after running the *last test* +in it (i.e. after deleting the last `FooTest` object). In between, the tests can +use the shared resources. + +Remember that the test order is undefined, so your code can't depend on a test +preceding or following another. Also, the tests must either not modify the state +of any shared resource, or, if they do modify the state, they must restore the +state to its original value before passing control to the next test. + +Here's an example of per-test-suite set-up and tear-down: + +```c++ +class FooTest : public testing::Test { + protected: + // Per-test-suite set-up. + // Called before the first test in this test suite. + // Can be omitted if not needed. + static void SetUpTestSuite() { + shared_resource_ = new ...; + } + + // Per-test-suite tear-down. + // Called after the last test in this test suite. + // Can be omitted if not needed. + static void TearDownTestSuite() { + delete shared_resource_; + shared_resource_ = nullptr; + } + + // You can define per-test set-up logic as usual. + void SetUp() override { ... } + + // You can define per-test tear-down logic as usual. + void TearDown() override { ... } + + // Some expensive resource shared by all tests. + static T* shared_resource_; +}; + +T* FooTest::shared_resource_ = nullptr; + +TEST_F(FooTest, Test1) { + ... you can refer to shared_resource_ here ... +} + +TEST_F(FooTest, Test2) { + ... you can refer to shared_resource_ here ... +} +``` + +{: .callout .note} +NOTE: Though the above code declares `SetUpTestSuite()` protected, it may +sometimes be necessary to declare it public, such as when using it with +`TEST_P`. + +## Global Set-Up and Tear-Down + +Just as you can do set-up and tear-down at the test level and the test suite +level, you can also do it at the test program level. Here's how. + +First, you subclass the `::testing::Environment` class to define a test +environment, which knows how to set-up and tear-down: + +```c++ +class Environment : public ::testing::Environment { + public: + ~Environment() override {} + + // Override this to define how to set up the environment. + void SetUp() override {} + + // Override this to define how to tear down the environment. + void TearDown() override {} +}; +``` + +Then, you register an instance of your environment class with googletest by +calling the `::testing::AddGlobalTestEnvironment()` function: + +```c++ +Environment* AddGlobalTestEnvironment(Environment* env); +``` + +Now, when `RUN_ALL_TESTS()` is called, it first calls the `SetUp()` method of +each environment object, then runs the tests if none of the environments +reported fatal failures and `GTEST_SKIP()` was not called. `RUN_ALL_TESTS()` +always calls `TearDown()` with each environment object, regardless of whether or +not the tests were run. + +It's OK to register multiple environment objects. In this suite, their `SetUp()` +will be called in the order they are registered, and their `TearDown()` will be +called in the reverse order. + +Note that googletest takes ownership of the registered environment objects. +Therefore **do not delete them** by yourself. + +You should call `AddGlobalTestEnvironment()` before `RUN_ALL_TESTS()` is called, +probably in `main()`. If you use `gtest_main`, you need to call this before +`main()` starts for it to take effect. One way to do this is to define a global +variable like this: + +```c++ +testing::Environment* const foo_env = + testing::AddGlobalTestEnvironment(new FooEnvironment); +``` + +However, we strongly recommend you to write your own `main()` and call +`AddGlobalTestEnvironment()` there, as relying on initialization of global +variables makes the code harder to read and may cause problems when you register +multiple environments from different translation units and the environments have +dependencies among them (remember that the compiler doesn't guarantee the order +in which global variables from different translation units are initialized). + +## Value-Parameterized Tests + +*Value-parameterized tests* allow you to test your code with different +parameters without writing multiple copies of the same test. This is useful in a +number of situations, for example: + +* You have a piece of code whose behavior is affected by one or more + command-line flags. You want to make sure your code performs correctly for + various values of those flags. +* You want to test different implementations of an OO interface. +* You want to test your code over various inputs (a.k.a. data-driven testing). + This feature is easy to abuse, so please exercise your good sense when doing + it! + +### How to Write Value-Parameterized Tests + +To write value-parameterized tests, first you should define a fixture class. It +must be derived from both `testing::Test` and `testing::WithParamInterface` +(the latter is a pure interface), where `T` is the type of your parameter +values. For convenience, you can just derive the fixture class from +`testing::TestWithParam`, which itself is derived from both `testing::Test` +and `testing::WithParamInterface`. `T` can be any copyable type. If it's a +raw pointer, you are responsible for managing the lifespan of the pointed +values. + +{: .callout .note} +NOTE: If your test fixture defines `SetUpTestSuite()` or `TearDownTestSuite()` +they must be declared **public** rather than **protected** in order to use +`TEST_P`. + +```c++ +class FooTest : + public testing::TestWithParam { + // You can implement all the usual fixture class members here. + // To access the test parameter, call GetParam() from class + // TestWithParam. +}; + +// Or, when you want to add parameters to a pre-existing fixture class: +class BaseTest : public testing::Test { + ... +}; +class BarTest : public BaseTest, + public testing::WithParamInterface { + ... +}; +``` + +Then, use the `TEST_P` macro to define as many test patterns using this fixture +as you want. The `_P` suffix is for "parameterized" or "pattern", whichever you +prefer to think. + +```c++ +TEST_P(FooTest, DoesBlah) { + // Inside a test, access the test parameter with the GetParam() method + // of the TestWithParam class: + EXPECT_TRUE(foo.Blah(GetParam())); + ... +} + +TEST_P(FooTest, HasBlahBlah) { + ... +} +``` + +Finally, you can use the `INSTANTIATE_TEST_SUITE_P` macro to instantiate the +test suite with any set of parameters you want. GoogleTest defines a number of +functions for generating test parameters—see details at +[`INSTANTIATE_TEST_SUITE_P`](reference/testing.md#INSTANTIATE_TEST_SUITE_P) in +the Testing Reference. + +For example, the following statement will instantiate tests from the `FooTest` +test suite each with parameter values `"meeny"`, `"miny"`, and `"moe"` using the +[`Values`](reference/testing.md#param-generators) parameter generator: + +```c++ +INSTANTIATE_TEST_SUITE_P(MeenyMinyMoe, + FooTest, + testing::Values("meeny", "miny", "moe")); +``` + +{: .callout .note} +NOTE: The code above must be placed at global or namespace scope, not at +function scope. + +The first argument to `INSTANTIATE_TEST_SUITE_P` is a unique name for the +instantiation of the test suite. The next argument is the name of the test +pattern, and the last is the +[parameter generator](reference/testing.md#param-generators). + +You can instantiate a test pattern more than once, so to distinguish different +instances of the pattern, the instantiation name is added as a prefix to the +actual test suite name. Remember to pick unique prefixes for different +instantiations. The tests from the instantiation above will have these names: + +* `MeenyMinyMoe/FooTest.DoesBlah/0` for `"meeny"` +* `MeenyMinyMoe/FooTest.DoesBlah/1` for `"miny"` +* `MeenyMinyMoe/FooTest.DoesBlah/2` for `"moe"` +* `MeenyMinyMoe/FooTest.HasBlahBlah/0` for `"meeny"` +* `MeenyMinyMoe/FooTest.HasBlahBlah/1` for `"miny"` +* `MeenyMinyMoe/FooTest.HasBlahBlah/2` for `"moe"` + +You can use these names in [`--gtest_filter`](#running-a-subset-of-the-tests). + +The following statement will instantiate all tests from `FooTest` again, each +with parameter values `"cat"` and `"dog"` using the +[`ValuesIn`](reference/testing.md#param-generators) parameter generator: + +```c++ +const char* pets[] = {"cat", "dog"}; +INSTANTIATE_TEST_SUITE_P(Pets, FooTest, testing::ValuesIn(pets)); +``` + +The tests from the instantiation above will have these names: + +* `Pets/FooTest.DoesBlah/0` for `"cat"` +* `Pets/FooTest.DoesBlah/1` for `"dog"` +* `Pets/FooTest.HasBlahBlah/0` for `"cat"` +* `Pets/FooTest.HasBlahBlah/1` for `"dog"` + +Please note that `INSTANTIATE_TEST_SUITE_P` will instantiate *all* tests in the +given test suite, whether their definitions come before or *after* the +`INSTANTIATE_TEST_SUITE_P` statement. + +Additionally, by default, every `TEST_P` without a corresponding +`INSTANTIATE_TEST_SUITE_P` causes a failing test in test suite +`GoogleTestVerification`. If you have a test suite where that omission is not an +error, for example it is in a library that may be linked in for other reasons or +where the list of test cases is dynamic and may be empty, then this check can be +suppressed by tagging the test suite: + +```c++ +GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(FooTest); +``` + +You can see [sample7_unittest.cc] and [sample8_unittest.cc] for more examples. + +[sample7_unittest.cc]: https://github.com/google/googletest/blob/master/googletest/samples/sample7_unittest.cc "Parameterized Test example" +[sample8_unittest.cc]: https://github.com/google/googletest/blob/master/googletest/samples/sample8_unittest.cc "Parameterized Test example with multiple parameters" + +### Creating Value-Parameterized Abstract Tests + +In the above, we define and instantiate `FooTest` in the *same* source file. +Sometimes you may want to define value-parameterized tests in a library and let +other people instantiate them later. This pattern is known as *abstract tests*. +As an example of its application, when you are designing an interface you can +write a standard suite of abstract tests (perhaps using a factory function as +the test parameter) that all implementations of the interface are expected to +pass. When someone implements the interface, they can instantiate your suite to +get all the interface-conformance tests for free. + +To define abstract tests, you should organize your code like this: + +1. Put the definition of the parameterized test fixture class (e.g. `FooTest`) + in a header file, say `foo_param_test.h`. Think of this as *declaring* your + abstract tests. +2. Put the `TEST_P` definitions in `foo_param_test.cc`, which includes + `foo_param_test.h`. Think of this as *implementing* your abstract tests. + +Once they are defined, you can instantiate them by including `foo_param_test.h`, +invoking `INSTANTIATE_TEST_SUITE_P()`, and depending on the library target that +contains `foo_param_test.cc`. You can instantiate the same abstract test suite +multiple times, possibly in different source files. + +### Specifying Names for Value-Parameterized Test Parameters + +The optional last argument to `INSTANTIATE_TEST_SUITE_P()` allows the user to +specify a function or functor that generates custom test name suffixes based on +the test parameters. The function should accept one argument of type +`testing::TestParamInfo`, and return `std::string`. + +`testing::PrintToStringParamName` is a builtin test suffix generator that +returns the value of `testing::PrintToString(GetParam())`. It does not work for +`std::string` or C strings. + +{: .callout .note} +NOTE: test names must be non-empty, unique, and may only contain ASCII +alphanumeric characters. In particular, they +[should not contain underscores](faq.md#why-should-test-suite-names-and-test-names-not-contain-underscore) + +```c++ +class MyTestSuite : public testing::TestWithParam {}; + +TEST_P(MyTestSuite, MyTest) +{ + std::cout << "Example Test Param: " << GetParam() << std::endl; +} + +INSTANTIATE_TEST_SUITE_P(MyGroup, MyTestSuite, testing::Range(0, 10), + testing::PrintToStringParamName()); +``` + +Providing a custom functor allows for more control over test parameter name +generation, especially for types where the automatic conversion does not +generate helpful parameter names (e.g. strings as demonstrated above). The +following example illustrates this for multiple parameters, an enumeration type +and a string, and also demonstrates how to combine generators. It uses a lambda +for conciseness: + +```c++ +enum class MyType { MY_FOO = 0, MY_BAR = 1 }; + +class MyTestSuite : public testing::TestWithParam> { +}; + +INSTANTIATE_TEST_SUITE_P( + MyGroup, MyTestSuite, + testing::Combine( + testing::Values(MyType::MY_FOO, MyType::MY_BAR), + testing::Values("A", "B")), + [](const testing::TestParamInfo& info) { + std::string name = absl::StrCat( + std::get<0>(info.param) == MyType::MY_FOO ? "Foo" : "Bar", + std::get<1>(info.param)); + absl::c_replace_if(name, [](char c) { return !std::isalnum(c); }, '_'); + return name; + }); +``` + +## Typed Tests + +Suppose you have multiple implementations of the same interface and want to make +sure that all of them satisfy some common requirements. Or, you may have defined +several types that are supposed to conform to the same "concept" and you want to +verify it. In both cases, you want the same test logic repeated for different +types. + +While you can write one `TEST` or `TEST_F` for each type you want to test (and +you may even factor the test logic into a function template that you invoke from +the `TEST`), it's tedious and doesn't scale: if you want `m` tests over `n` +types, you'll end up writing `m*n` `TEST`s. + +*Typed tests* allow you to repeat the same test logic over a list of types. You +only need to write the test logic once, although you must know the type list +when writing typed tests. Here's how you do it: + +First, define a fixture class template. It should be parameterized by a type. +Remember to derive it from `::testing::Test`: + +```c++ +template +class FooTest : public testing::Test { + public: + ... + using List = std::list; + static T shared_; + T value_; +}; +``` + +Next, associate a list of types with the test suite, which will be repeated for +each type in the list: + +```c++ +using MyTypes = ::testing::Types; +TYPED_TEST_SUITE(FooTest, MyTypes); +``` + +The type alias (`using` or `typedef`) is necessary for the `TYPED_TEST_SUITE` +macro to parse correctly. Otherwise the compiler will think that each comma in +the type list introduces a new macro argument. + +Then, use `TYPED_TEST()` instead of `TEST_F()` to define a typed test for this +test suite. You can repeat this as many times as you want: + +```c++ +TYPED_TEST(FooTest, DoesBlah) { + // Inside a test, refer to the special name TypeParam to get the type + // parameter. Since we are inside a derived class template, C++ requires + // us to visit the members of FooTest via 'this'. + TypeParam n = this->value_; + + // To visit static members of the fixture, add the 'TestFixture::' + // prefix. + n += TestFixture::shared_; + + // To refer to typedefs in the fixture, add the 'typename TestFixture::' + // prefix. The 'typename' is required to satisfy the compiler. + typename TestFixture::List values; + + values.push_back(n); + ... +} + +TYPED_TEST(FooTest, HasPropertyA) { ... } +``` + +You can see [sample6_unittest.cc] for a complete example. + +[sample6_unittest.cc]: https://github.com/google/googletest/blob/master/googletest/samples/sample6_unittest.cc "Typed Test example" + +## Type-Parameterized Tests + +*Type-parameterized tests* are like typed tests, except that they don't require +you to know the list of types ahead of time. Instead, you can define the test +logic first and instantiate it with different type lists later. You can even +instantiate it more than once in the same program. + +If you are designing an interface or concept, you can define a suite of +type-parameterized tests to verify properties that any valid implementation of +the interface/concept should have. Then, the author of each implementation can +just instantiate the test suite with their type to verify that it conforms to +the requirements, without having to write similar tests repeatedly. Here's an +example: + +First, define a fixture class template, as we did with typed tests: + +```c++ +template +class FooTest : public testing::Test { + ... +}; +``` + +Next, declare that you will define a type-parameterized test suite: + +```c++ +TYPED_TEST_SUITE_P(FooTest); +``` + +Then, use `TYPED_TEST_P()` to define a type-parameterized test. You can repeat +this as many times as you want: + +```c++ +TYPED_TEST_P(FooTest, DoesBlah) { + // Inside a test, refer to TypeParam to get the type parameter. + TypeParam n = 0; + ... +} + +TYPED_TEST_P(FooTest, HasPropertyA) { ... } +``` + +Now the tricky part: you need to register all test patterns using the +`REGISTER_TYPED_TEST_SUITE_P` macro before you can instantiate them. The first +argument of the macro is the test suite name; the rest are the names of the +tests in this test suite: + +```c++ +REGISTER_TYPED_TEST_SUITE_P(FooTest, + DoesBlah, HasPropertyA); +``` + +Finally, you are free to instantiate the pattern with the types you want. If you +put the above code in a header file, you can `#include` it in multiple C++ +source files and instantiate it multiple times. + +```c++ +using MyTypes = ::testing::Types; +INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); +``` + +To distinguish different instances of the pattern, the first argument to the +`INSTANTIATE_TYPED_TEST_SUITE_P` macro is a prefix that will be added to the +actual test suite name. Remember to pick unique prefixes for different +instances. + +In the special case where the type list contains only one type, you can write +that type directly without `::testing::Types<...>`, like this: + +```c++ +INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, int); +``` + +You can see [sample6_unittest.cc] for a complete example. + +## Testing Private Code + +If you change your software's internal implementation, your tests should not +break as long as the change is not observable by users. Therefore, **per the +black-box testing principle, most of the time you should test your code through +its public interfaces.** + +**If you still find yourself needing to test internal implementation code, +consider if there's a better design.** The desire to test internal +implementation is often a sign that the class is doing too much. Consider +extracting an implementation class, and testing it. Then use that implementation +class in the original class. + +If you absolutely have to test non-public interface code though, you can. There +are two cases to consider: + +* Static functions ( *not* the same as static member functions!) or unnamed + namespaces, and +* Private or protected class members + +To test them, we use the following special techniques: + +* Both static functions and definitions/declarations in an unnamed namespace + are only visible within the same translation unit. To test them, you can + `#include` the entire `.cc` file being tested in your `*_test.cc` file. + (#including `.cc` files is not a good way to reuse code - you should not do + this in production code!) + + However, a better approach is to move the private code into the + `foo::internal` namespace, where `foo` is the namespace your project + normally uses, and put the private declarations in a `*-internal.h` file. + Your production `.cc` files and your tests are allowed to include this + internal header, but your clients are not. This way, you can fully test your + internal implementation without leaking it to your clients. + +* Private class members are only accessible from within the class or by + friends. To access a class' private members, you can declare your test + fixture as a friend to the class and define accessors in your fixture. Tests + using the fixture can then access the private members of your production + class via the accessors in the fixture. Note that even though your fixture + is a friend to your production class, your tests are not automatically + friends to it, as they are technically defined in sub-classes of the + fixture. + + Another way to test private members is to refactor them into an + implementation class, which is then declared in a `*-internal.h` file. Your + clients aren't allowed to include this header but your tests can. Such is + called the + [Pimpl](https://www.gamedev.net/articles/programming/general-and-gameplay-programming/the-c-pimpl-r1794/) + (Private Implementation) idiom. + + Or, you can declare an individual test as a friend of your class by adding + this line in the class body: + + ```c++ + FRIEND_TEST(TestSuiteName, TestName); + ``` + + For example, + + ```c++ + // foo.h + class Foo { + ... + private: + FRIEND_TEST(FooTest, BarReturnsZeroOnNull); + + int Bar(void* x); + }; + + // foo_test.cc + ... + TEST(FooTest, BarReturnsZeroOnNull) { + Foo foo; + EXPECT_EQ(foo.Bar(NULL), 0); // Uses Foo's private member Bar(). + } + ``` + + Pay special attention when your class is defined in a namespace. If you want + your test fixtures and tests to be friends of your class, then they must be + defined in the exact same namespace (no anonymous or inline namespaces). + + For example, if the code to be tested looks like: + + ```c++ + namespace my_namespace { + + class Foo { + friend class FooTest; + FRIEND_TEST(FooTest, Bar); + FRIEND_TEST(FooTest, Baz); + ... definition of the class Foo ... + }; + + } // namespace my_namespace + ``` + + Your test code should be something like: + + ```c++ + namespace my_namespace { + + class FooTest : public testing::Test { + protected: + ... + }; + + TEST_F(FooTest, Bar) { ... } + TEST_F(FooTest, Baz) { ... } + + } // namespace my_namespace + ``` + +## "Catching" Failures + +If you are building a testing utility on top of googletest, you'll want to test +your utility. What framework would you use to test it? googletest, of course. + +The challenge is to verify that your testing utility reports failures correctly. +In frameworks that report a failure by throwing an exception, you could catch +the exception and assert on it. But googletest doesn't use exceptions, so how do +we test that a piece of code generates an expected failure? + +`"gtest/gtest-spi.h"` contains some constructs to do this. After #including this header, +you can use + +```c++ + EXPECT_FATAL_FAILURE(statement, substring); +``` + +to assert that `statement` generates a fatal (e.g. `ASSERT_*`) failure in the +current thread whose message contains the given `substring`, or use + +```c++ + EXPECT_NONFATAL_FAILURE(statement, substring); +``` + +if you are expecting a non-fatal (e.g. `EXPECT_*`) failure. + +Only failures in the current thread are checked to determine the result of this +type of expectations. If `statement` creates new threads, failures in these +threads are also ignored. If you want to catch failures in other threads as +well, use one of the following macros instead: + +```c++ + EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substring); + EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substring); +``` + +{: .callout .note} +NOTE: Assertions from multiple threads are currently not supported on Windows. + +For technical reasons, there are some caveats: + +1. You cannot stream a failure message to either macro. + +2. `statement` in `EXPECT_FATAL_FAILURE{_ON_ALL_THREADS}()` cannot reference + local non-static variables or non-static members of `this` object. + +3. `statement` in `EXPECT_FATAL_FAILURE{_ON_ALL_THREADS}()` cannot return a + value. + +## Registering tests programmatically + +The `TEST` macros handle the vast majority of all use cases, but there are few +where runtime registration logic is required. For those cases, the framework +provides the `::testing::RegisterTest` that allows callers to register arbitrary +tests dynamically. + +This is an advanced API only to be used when the `TEST` macros are insufficient. +The macros should be preferred when possible, as they avoid most of the +complexity of calling this function. + +It provides the following signature: + +```c++ +template +TestInfo* RegisterTest(const char* test_suite_name, const char* test_name, + const char* type_param, const char* value_param, + const char* file, int line, Factory factory); +``` + +The `factory` argument is a factory callable (move-constructible) object or +function pointer that creates a new instance of the Test object. It handles +ownership to the caller. The signature of the callable is `Fixture*()`, where +`Fixture` is the test fixture class for the test. All tests registered with the +same `test_suite_name` must return the same fixture type. This is checked at +runtime. + +The framework will infer the fixture class from the factory and will call the +`SetUpTestSuite` and `TearDownTestSuite` for it. + +Must be called before `RUN_ALL_TESTS()` is invoked, otherwise behavior is +undefined. + +Use case example: + +```c++ +class MyFixture : public testing::Test { + public: + // All of these optional, just like in regular macro usage. + static void SetUpTestSuite() { ... } + static void TearDownTestSuite() { ... } + void SetUp() override { ... } + void TearDown() override { ... } +}; + +class MyTest : public MyFixture { + public: + explicit MyTest(int data) : data_(data) {} + void TestBody() override { ... } + + private: + int data_; +}; + +void RegisterMyTests(const std::vector& values) { + for (int v : values) { + testing::RegisterTest( + "MyFixture", ("Test" + std::to_string(v)).c_str(), nullptr, + std::to_string(v).c_str(), + __FILE__, __LINE__, + // Important to use the fixture type as the return type here. + [=]() -> MyFixture* { return new MyTest(v); }); + } +} +... +int main(int argc, char** argv) { + std::vector values_to_test = LoadValuesFromConfig(); + RegisterMyTests(values_to_test); + ... + return RUN_ALL_TESTS(); +} +``` +## Getting the Current Test's Name + +Sometimes a function may need to know the name of the currently running test. +For example, you may be using the `SetUp()` method of your test fixture to set +the golden file name based on which test is running. The +[`TestInfo`](reference/testing.md#TestInfo) class has this information. + +To obtain a `TestInfo` object for the currently running test, call +`current_test_info()` on the [`UnitTest`](reference/testing.md#UnitTest) +singleton object: + +```c++ + // Gets information about the currently running test. + // Do NOT delete the returned object - it's managed by the UnitTest class. + const testing::TestInfo* const test_info = + testing::UnitTest::GetInstance()->current_test_info(); + + printf("We are in test %s of test suite %s.\n", + test_info->name(), + test_info->test_suite_name()); +``` + +`current_test_info()` returns a null pointer if no test is running. In +particular, you cannot find the test suite name in `SetUpTestSuite()`, +`TearDownTestSuite()` (where you know the test suite name implicitly), or +functions called from them. + +## Extending googletest by Handling Test Events + +googletest provides an **event listener API** to let you receive notifications +about the progress of a test program and test failures. The events you can +listen to include the start and end of the test program, a test suite, or a test +method, among others. You may use this API to augment or replace the standard +console output, replace the XML output, or provide a completely different form +of output, such as a GUI or a database. You can also use test events as +checkpoints to implement a resource leak checker, for example. + +### Defining Event Listeners + +To define a event listener, you subclass either +[`testing::TestEventListener`](reference/testing.md#TestEventListener) or +[`testing::EmptyTestEventListener`](reference/testing.md#EmptyTestEventListener) +The former is an (abstract) interface, where *each pure virtual method can be +overridden to handle a test event* (For example, when a test starts, the +`OnTestStart()` method will be called.). The latter provides an empty +implementation of all methods in the interface, such that a subclass only needs +to override the methods it cares about. + +When an event is fired, its context is passed to the handler function as an +argument. The following argument types are used: + +* UnitTest reflects the state of the entire test program, +* TestSuite has information about a test suite, which can contain one or more + tests, +* TestInfo contains the state of a test, and +* TestPartResult represents the result of a test assertion. + +An event handler function can examine the argument it receives to find out +interesting information about the event and the test program's state. + +Here's an example: + +```c++ + class MinimalistPrinter : public testing::EmptyTestEventListener { + // Called before a test starts. + void OnTestStart(const testing::TestInfo& test_info) override { + printf("*** Test %s.%s starting.\n", + test_info.test_suite_name(), test_info.name()); + } + + // Called after a failed assertion or a SUCCESS(). + void OnTestPartResult(const testing::TestPartResult& test_part_result) override { + printf("%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()); + } + + // Called after a test ends. + void OnTestEnd(const testing::TestInfo& test_info) override { + printf("*** Test %s.%s ending.\n", + test_info.test_suite_name(), test_info.name()); + } + }; +``` + +### Using Event Listeners + +To use the event listener you have defined, add an instance of it to the +googletest event listener list (represented by class +[`TestEventListeners`](reference/testing.md#TestEventListeners) - note the "s" +at the end of the name) in your `main()` function, before calling +`RUN_ALL_TESTS()`: + +```c++ +int main(int argc, char** argv) { + testing::InitGoogleTest(&argc, argv); + // Gets hold of the event listener list. + testing::TestEventListeners& listeners = + testing::UnitTest::GetInstance()->listeners(); + // Adds a listener to the end. googletest takes the ownership. + listeners.Append(new MinimalistPrinter); + return RUN_ALL_TESTS(); +} +``` + +There's only one problem: the default test result printer is still in effect, so +its output will mingle with the output from your minimalist printer. To suppress +the default printer, just release it from the event listener list and delete it. +You can do so by adding one line: + +```c++ + ... + delete listeners.Release(listeners.default_result_printer()); + listeners.Append(new MinimalistPrinter); + return RUN_ALL_TESTS(); +``` + +Now, sit back and enjoy a completely different output from your tests. For more +details, see [sample9_unittest.cc]. + +[sample9_unittest.cc]: https://github.com/google/googletest/blob/master/googletest/samples/sample9_unittest.cc "Event listener example" + +You may append more than one listener to the list. When an `On*Start()` or +`OnTestPartResult()` event is fired, the listeners will receive it in the order +they appear in the list (since new listeners are added to the end of the list, +the default text printer and the default XML generator will receive the event +first). An `On*End()` event will be received by the listeners in the *reverse* +order. This allows output by listeners added later to be framed by output from +listeners added earlier. + +### Generating Failures in Listeners + +You may use failure-raising macros (`EXPECT_*()`, `ASSERT_*()`, `FAIL()`, etc) +when processing an event. There are some restrictions: + +1. You cannot generate any failure in `OnTestPartResult()` (otherwise it will + cause `OnTestPartResult()` to be called recursively). +2. A listener that handles `OnTestPartResult()` is not allowed to generate any + failure. + +When you add listeners to the listener list, you should put listeners that +handle `OnTestPartResult()` *before* listeners that can generate failures. This +ensures that failures generated by the latter are attributed to the right test +by the former. + +See [sample10_unittest.cc] for an example of a failure-raising listener. + +[sample10_unittest.cc]: https://github.com/google/googletest/blob/master/googletest/samples/sample10_unittest.cc "Failure-raising listener example" + +## Running Test Programs: Advanced Options + +googletest test programs are ordinary executables. Once built, you can run them +directly and affect their behavior via the following environment variables +and/or command line flags. For the flags to work, your programs must call +`::testing::InitGoogleTest()` before calling `RUN_ALL_TESTS()`. + +To see a list of supported flags and their usage, please run your test program +with the `--help` flag. You can also use `-h`, `-?`, or `/?` for short. + +If an option is specified both by an environment variable and by a flag, the +latter takes precedence. + +### Selecting Tests + +#### Listing Test Names + +Sometimes it is necessary to list the available tests in a program before +running them so that a filter may be applied if needed. Including the flag +`--gtest_list_tests` overrides all other flags and lists tests in the following +format: + +```none +TestSuite1. + TestName1 + TestName2 +TestSuite2. + TestName +``` + +None of the tests listed are actually run if the flag is provided. There is no +corresponding environment variable for this flag. + +#### Running a Subset of the Tests + +By default, a googletest program runs all tests the user has defined. Sometimes, +you want to run only a subset of the tests (e.g. for debugging or quickly +verifying a change). If you set the `GTEST_FILTER` environment variable or the +`--gtest_filter` flag to a filter string, googletest will only run the tests +whose full names (in the form of `TestSuiteName.TestName`) match the filter. + +The format of a filter is a '`:`'-separated list of wildcard patterns (called +the *positive patterns*) optionally followed by a '`-`' and another +'`:`'-separated pattern list (called the *negative patterns*). A test matches +the filter if and only if it matches any of the positive patterns but does not +match any of the negative patterns. + +A pattern may contain `'*'` (matches any string) or `'?'` (matches any single +character). For convenience, the filter `'*-NegativePatterns'` can be also +written as `'-NegativePatterns'`. + +For example: + +* `./foo_test` Has no flag, and thus runs all its tests. +* `./foo_test --gtest_filter=*` Also runs everything, due to the single + match-everything `*` value. +* `./foo_test --gtest_filter=FooTest.*` Runs everything in test suite + `FooTest` . +* `./foo_test --gtest_filter=*Null*:*Constructor*` Runs any test whose full + name contains either `"Null"` or `"Constructor"` . +* `./foo_test --gtest_filter=-*DeathTest.*` Runs all non-death tests. +* `./foo_test --gtest_filter=FooTest.*-FooTest.Bar` Runs everything in test + suite `FooTest` except `FooTest.Bar`. +* `./foo_test --gtest_filter=FooTest.*:BarTest.*-FooTest.Bar:BarTest.Foo` Runs + everything in test suite `FooTest` except `FooTest.Bar` and everything in + test suite `BarTest` except `BarTest.Foo`. + +#### Stop test execution upon first failure + +By default, a googletest program runs all tests the user has defined. In some +cases (e.g. iterative test development & execution) it may be desirable stop +test execution upon first failure (trading improved latency for completeness). +If `GTEST_FAIL_FAST` environment variable or `--gtest_fail_fast` flag is set, +the test runner will stop execution as soon as the first test failure is +found. + +#### Temporarily Disabling Tests + +If you have a broken test that you cannot fix right away, you can add the +`DISABLED_` prefix to its name. This will exclude it from execution. This is +better than commenting out the code or using `#if 0`, as disabled tests are +still compiled (and thus won't rot). + +If you need to disable all tests in a test suite, you can either add `DISABLED_` +to the front of the name of each test, or alternatively add it to the front of +the test suite name. + +For example, the following tests won't be run by googletest, even though they +will still be compiled: + +```c++ +// Tests that Foo does Abc. +TEST(FooTest, DISABLED_DoesAbc) { ... } + +class DISABLED_BarTest : public testing::Test { ... }; + +// Tests that Bar does Xyz. +TEST_F(DISABLED_BarTest, DoesXyz) { ... } +``` + +{: .callout .note} +NOTE: This feature should only be used for temporary pain-relief. You still have +to fix the disabled tests at a later date. As a reminder, googletest will print +a banner warning you if a test program contains any disabled tests. + +{: .callout .tip} +TIP: You can easily count the number of disabled tests you have using +`grep`. This number can be used as a metric for +improving your test quality. + +#### Temporarily Enabling Disabled Tests + +To include disabled tests in test execution, just invoke the test program with +the `--gtest_also_run_disabled_tests` flag or set the +`GTEST_ALSO_RUN_DISABLED_TESTS` environment variable to a value other than `0`. +You can combine this with the `--gtest_filter` flag to further select which +disabled tests to run. + +### Repeating the Tests + +Once in a while you'll run into a test whose result is hit-or-miss. Perhaps it +will fail only 1% of the time, making it rather hard to reproduce the bug under +a debugger. This can be a major source of frustration. + +The `--gtest_repeat` flag allows you to repeat all (or selected) test methods in +a program many times. Hopefully, a flaky test will eventually fail and give you +a chance to debug. Here's how to use it: + +```none +$ foo_test --gtest_repeat=1000 +Repeat foo_test 1000 times and don't stop at failures. + +$ foo_test --gtest_repeat=-1 +A negative count means repeating forever. + +$ foo_test --gtest_repeat=1000 --gtest_break_on_failure +Repeat foo_test 1000 times, stopping at the first failure. This +is especially useful when running under a debugger: when the test +fails, it will drop into the debugger and you can then inspect +variables and stacks. + +$ foo_test --gtest_repeat=1000 --gtest_filter=FooBar.* +Repeat the tests whose name matches the filter 1000 times. +``` + +If your test program contains +[global set-up/tear-down](#global-set-up-and-tear-down) code, it will be +repeated in each iteration as well, as the flakiness may be in it. You can also +specify the repeat count by setting the `GTEST_REPEAT` environment variable. + +### Shuffling the Tests + +You can specify the `--gtest_shuffle` flag (or set the `GTEST_SHUFFLE` +environment variable to `1`) to run the tests in a program in a random order. +This helps to reveal bad dependencies between tests. + +By default, googletest uses a random seed calculated from the current time. +Therefore you'll get a different order every time. The console output includes +the random seed value, such that you can reproduce an order-related test failure +later. To specify the random seed explicitly, use the `--gtest_random_seed=SEED` +flag (or set the `GTEST_RANDOM_SEED` environment variable), where `SEED` is an +integer in the range [0, 99999]. The seed value 0 is special: it tells +googletest to do the default behavior of calculating the seed from the current +time. + +If you combine this with `--gtest_repeat=N`, googletest will pick a different +random seed and re-shuffle the tests in each iteration. + +### Controlling Test Output + +#### Colored Terminal Output + +googletest can use colors in its terminal output to make it easier to spot the +important information: + +
...
+[----------] 1 test from FooTest
+[ RUN      ] FooTest.DoesAbc
+[       OK ] FooTest.DoesAbc
+[----------] 2 tests from BarTest
+[ RUN      ] BarTest.HasXyzProperty
+[       OK ] BarTest.HasXyzProperty
+[ RUN      ] BarTest.ReturnsTrueOnSuccess
+... some error messages ...
+[   FAILED ] BarTest.ReturnsTrueOnSuccess
+...
+[==========] 30 tests from 14 test suites ran.
+[   PASSED ] 28 tests.
+[   FAILED ] 2 tests, listed below:
+[   FAILED ] BarTest.ReturnsTrueOnSuccess
+[   FAILED ] AnotherTest.DoesXyz
+
+ 2 FAILED TESTS
+
+ +You can set the `GTEST_COLOR` environment variable or the `--gtest_color` +command line flag to `yes`, `no`, or `auto` (the default) to enable colors, +disable colors, or let googletest decide. When the value is `auto`, googletest +will use colors if and only if the output goes to a terminal and (on non-Windows +platforms) the `TERM` environment variable is set to `xterm` or `xterm-color`. + +#### Suppressing test passes + +By default, googletest prints 1 line of output for each test, indicating if it +passed or failed. To show only test failures, run the test program with +`--gtest_brief=1`, or set the GTEST_BRIEF environment variable to `1`. + +#### Suppressing the Elapsed Time + +By default, googletest prints the time it takes to run each test. To disable +that, run the test program with the `--gtest_print_time=0` command line flag, or +set the GTEST_PRINT_TIME environment variable to `0`. + +#### Suppressing UTF-8 Text Output + +In case of assertion failures, googletest prints expected and actual values of +type `string` both as hex-encoded strings as well as in readable UTF-8 text if +they contain valid non-ASCII UTF-8 characters. If you want to suppress the UTF-8 +text because, for example, you don't have an UTF-8 compatible output medium, run +the test program with `--gtest_print_utf8=0` or set the `GTEST_PRINT_UTF8` +environment variable to `0`. + + + +#### Generating an XML Report + +googletest can emit a detailed XML report to a file in addition to its normal +textual output. The report contains the duration of each test, and thus can help +you identify slow tests. + +To generate the XML report, set the `GTEST_OUTPUT` environment variable or the +`--gtest_output` flag to the string `"xml:path_to_output_file"`, which will +create the file at the given location. You can also just use the string `"xml"`, +in which case the output can be found in the `test_detail.xml` file in the +current directory. + +If you specify a directory (for example, `"xml:output/directory/"` on Linux or +`"xml:output\directory\"` on Windows), googletest will create the XML file in +that directory, named after the test executable (e.g. `foo_test.xml` for test +program `foo_test` or `foo_test.exe`). If the file already exists (perhaps left +over from a previous run), googletest will pick a different name (e.g. +`foo_test_1.xml`) to avoid overwriting it. + +The report is based on the `junitreport` Ant task. Since that format was +originally intended for Java, a little interpretation is required to make it +apply to googletest tests, as shown here: + +```xml + + + + + + + + + +``` + +* The root `` element corresponds to the entire test program. +* `` elements correspond to googletest test suites. +* `` elements correspond to googletest test functions. + +For instance, the following program + +```c++ +TEST(MathTest, Addition) { ... } +TEST(MathTest, Subtraction) { ... } +TEST(LogicTest, NonContradiction) { ... } +``` + +could generate this report: + +```xml + + + + + ... + ... + + + + + + + + + +``` + +Things to note: + +* The `tests` attribute of a `` or `` element tells how + many test functions the googletest program or test suite contains, while the + `failures` attribute tells how many of them failed. + +* The `time` attribute expresses the duration of the test, test suite, or + entire test program in seconds. + +* The `timestamp` attribute records the local date and time of the test + execution. + +* Each `` element corresponds to a single failed googletest + assertion. + +#### Generating a JSON Report + +googletest can also emit a JSON report as an alternative format to XML. To +generate the JSON report, set the `GTEST_OUTPUT` environment variable or the +`--gtest_output` flag to the string `"json:path_to_output_file"`, which will +create the file at the given location. You can also just use the string +`"json"`, in which case the output can be found in the `test_detail.json` file +in the current directory. + +The report format conforms to the following JSON Schema: + +```json +{ + "$schema": "http://json-schema.org/schema#", + "type": "object", + "definitions": { + "TestCase": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "tests": { "type": "integer" }, + "failures": { "type": "integer" }, + "disabled": { "type": "integer" }, + "time": { "type": "string" }, + "testsuite": { + "type": "array", + "items": { + "$ref": "#/definitions/TestInfo" + } + } + } + }, + "TestInfo": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "status": { + "type": "string", + "enum": ["RUN", "NOTRUN"] + }, + "time": { "type": "string" }, + "classname": { "type": "string" }, + "failures": { + "type": "array", + "items": { + "$ref": "#/definitions/Failure" + } + } + } + }, + "Failure": { + "type": "object", + "properties": { + "failures": { "type": "string" }, + "type": { "type": "string" } + } + } + }, + "properties": { + "tests": { "type": "integer" }, + "failures": { "type": "integer" }, + "disabled": { "type": "integer" }, + "errors": { "type": "integer" }, + "timestamp": { + "type": "string", + "format": "date-time" + }, + "time": { "type": "string" }, + "name": { "type": "string" }, + "testsuites": { + "type": "array", + "items": { + "$ref": "#/definitions/TestCase" + } + } + } +} +``` + +The report uses the format that conforms to the following Proto3 using the +[JSON encoding](https://developers.google.com/protocol-buffers/docs/proto3#json): + +```proto +syntax = "proto3"; + +package googletest; + +import "google/protobuf/timestamp.proto"; +import "google/protobuf/duration.proto"; + +message UnitTest { + int32 tests = 1; + int32 failures = 2; + int32 disabled = 3; + int32 errors = 4; + google.protobuf.Timestamp timestamp = 5; + google.protobuf.Duration time = 6; + string name = 7; + repeated TestCase testsuites = 8; +} + +message TestCase { + string name = 1; + int32 tests = 2; + int32 failures = 3; + int32 disabled = 4; + int32 errors = 5; + google.protobuf.Duration time = 6; + repeated TestInfo testsuite = 7; +} + +message TestInfo { + string name = 1; + enum Status { + RUN = 0; + NOTRUN = 1; + } + Status status = 2; + google.protobuf.Duration time = 3; + string classname = 4; + message Failure { + string failures = 1; + string type = 2; + } + repeated Failure failures = 5; +} +``` + +For instance, the following program + +```c++ +TEST(MathTest, Addition) { ... } +TEST(MathTest, Subtraction) { ... } +TEST(LogicTest, NonContradiction) { ... } +``` + +could generate this report: + +```json +{ + "tests": 3, + "failures": 1, + "errors": 0, + "time": "0.035s", + "timestamp": "2011-10-31T18:52:42Z", + "name": "AllTests", + "testsuites": [ + { + "name": "MathTest", + "tests": 2, + "failures": 1, + "errors": 0, + "time": "0.015s", + "testsuite": [ + { + "name": "Addition", + "status": "RUN", + "time": "0.007s", + "classname": "", + "failures": [ + { + "message": "Value of: add(1, 1)\n Actual: 3\nExpected: 2", + "type": "" + }, + { + "message": "Value of: add(1, -1)\n Actual: 1\nExpected: 0", + "type": "" + } + ] + }, + { + "name": "Subtraction", + "status": "RUN", + "time": "0.005s", + "classname": "" + } + ] + }, + { + "name": "LogicTest", + "tests": 1, + "failures": 0, + "errors": 0, + "time": "0.005s", + "testsuite": [ + { + "name": "NonContradiction", + "status": "RUN", + "time": "0.005s", + "classname": "" + } + ] + } + ] +} +``` + +{: .callout .important} +IMPORTANT: The exact format of the JSON document is subject to change. + +### Controlling How Failures Are Reported + +#### Detecting Test Premature Exit + +Google Test implements the _premature-exit-file_ protocol for test runners +to catch any kind of unexpected exits of test programs. Upon start, +Google Test creates the file which will be automatically deleted after +all work has been finished. Then, the test runner can check if this file +exists. In case the file remains undeleted, the inspected test has exited +prematurely. + +This feature is enabled only if the `TEST_PREMATURE_EXIT_FILE` environment +variable has been set. + +#### Turning Assertion Failures into Break-Points + +When running test programs under a debugger, it's very convenient if the +debugger can catch an assertion failure and automatically drop into interactive +mode. googletest's *break-on-failure* mode supports this behavior. + +To enable it, set the `GTEST_BREAK_ON_FAILURE` environment variable to a value +other than `0`. Alternatively, you can use the `--gtest_break_on_failure` +command line flag. + +#### Disabling Catching Test-Thrown Exceptions + +googletest can be used either with or without exceptions enabled. If a test +throws a C++ exception or (on Windows) a structured exception (SEH), by default +googletest catches it, reports it as a test failure, and continues with the next +test method. This maximizes the coverage of a test run. Also, on Windows an +uncaught exception will cause a pop-up window, so catching the exceptions allows +you to run the tests automatically. + +When debugging the test failures, however, you may instead want the exceptions +to be handled by the debugger, such that you can examine the call stack when an +exception is thrown. To achieve that, set the `GTEST_CATCH_EXCEPTIONS` +environment variable to `0`, or use the `--gtest_catch_exceptions=0` flag when +running the tests. + +### Sanitizer Integration + +The +[Undefined Behavior Sanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html), +[Address Sanitizer](https://github.com/google/sanitizers/wiki/AddressSanitizer), +and +[Thread Sanitizer](https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual) +all provide weak functions that you can override to trigger explicit failures +when they detect sanitizer errors, such as creating a reference from `nullptr`. +To override these functions, place definitions for them in a source file that +you compile as part of your main binary: + +``` +extern "C" { +void __ubsan_on_report() { + FAIL() << "Encountered an undefined behavior sanitizer error"; +} +void __asan_on_error() { + FAIL() << "Encountered an address sanitizer error"; +} +void __tsan_on_report() { + FAIL() << "Encountered a thread sanitizer error"; +} +} // extern "C" +``` + +After compiling your project with one of the sanitizers enabled, if a particular +test triggers a sanitizer error, googletest will report that it failed. diff --git a/build/_deps/googletest-src/docs/assets/css/style.scss b/build/_deps/googletest-src/docs/assets/css/style.scss new file mode 100644 index 0000000..bb30f41 --- /dev/null +++ b/build/_deps/googletest-src/docs/assets/css/style.scss @@ -0,0 +1,5 @@ +--- +--- + +@import "jekyll-theme-primer"; +@import "main"; diff --git a/build/_deps/googletest-src/docs/community_created_documentation.md b/build/_deps/googletest-src/docs/community_created_documentation.md new file mode 100644 index 0000000..4569075 --- /dev/null +++ b/build/_deps/googletest-src/docs/community_created_documentation.md @@ -0,0 +1,7 @@ +# Community-Created Documentation + +The following is a list, in no particular order, of links to documentation +created by the Googletest community. + +* [Googlemock Insights](https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/googletest/insights.md), + by [ElectricRCAircraftGuy](https://github.com/ElectricRCAircraftGuy) diff --git a/build/_deps/googletest-src/docs/faq.md b/build/_deps/googletest-src/docs/faq.md new file mode 100644 index 0000000..9042da1 --- /dev/null +++ b/build/_deps/googletest-src/docs/faq.md @@ -0,0 +1,693 @@ +# Googletest FAQ + +## Why should test suite names and test names not contain underscore? + +{: .callout .note} +Note: Googletest reserves underscore (`_`) for special purpose keywords, such as +[the `DISABLED_` prefix](advanced.md#temporarily-disabling-tests), in addition +to the following rationale. + +Underscore (`_`) is special, as C++ reserves the following to be used by the +compiler and the standard library: + +1. any identifier that starts with an `_` followed by an upper-case letter, and +2. any identifier that contains two consecutive underscores (i.e. `__`) + *anywhere* in its name. + +User code is *prohibited* from using such identifiers. + +Now let's look at what this means for `TEST` and `TEST_F`. + +Currently `TEST(TestSuiteName, TestName)` generates a class named +`TestSuiteName_TestName_Test`. What happens if `TestSuiteName` or `TestName` +contains `_`? + +1. If `TestSuiteName` starts with an `_` followed by an upper-case letter (say, + `_Foo`), we end up with `_Foo_TestName_Test`, which is reserved and thus + invalid. +2. If `TestSuiteName` ends with an `_` (say, `Foo_`), we get + `Foo__TestName_Test`, which is invalid. +3. If `TestName` starts with an `_` (say, `_Bar`), we get + `TestSuiteName__Bar_Test`, which is invalid. +4. If `TestName` ends with an `_` (say, `Bar_`), we get + `TestSuiteName_Bar__Test`, which is invalid. + +So clearly `TestSuiteName` and `TestName` cannot start or end with `_` +(Actually, `TestSuiteName` can start with `_` -- as long as the `_` isn't +followed by an upper-case letter. But that's getting complicated. So for +simplicity we just say that it cannot start with `_`.). + +It may seem fine for `TestSuiteName` and `TestName` to contain `_` in the +middle. However, consider this: + +```c++ +TEST(Time, Flies_Like_An_Arrow) { ... } +TEST(Time_Flies, Like_An_Arrow) { ... } +``` + +Now, the two `TEST`s will both generate the same class +(`Time_Flies_Like_An_Arrow_Test`). That's not good. + +So for simplicity, we just ask the users to avoid `_` in `TestSuiteName` and +`TestName`. The rule is more constraining than necessary, but it's simple and +easy to remember. It also gives googletest some wiggle room in case its +implementation needs to change in the future. + +If you violate the rule, there may not be immediate consequences, but your test +may (just may) break with a new compiler (or a new version of the compiler you +are using) or with a new version of googletest. Therefore it's best to follow +the rule. + +## Why does googletest support `EXPECT_EQ(NULL, ptr)` and `ASSERT_EQ(NULL, ptr)` but not `EXPECT_NE(NULL, ptr)` and `ASSERT_NE(NULL, ptr)`? + +First of all, you can use `nullptr` with each of these macros, e.g. +`EXPECT_EQ(ptr, nullptr)`, `EXPECT_NE(ptr, nullptr)`, `ASSERT_EQ(ptr, nullptr)`, +`ASSERT_NE(ptr, nullptr)`. This is the preferred syntax in the style guide +because `nullptr` does not have the type problems that `NULL` does. + +Due to some peculiarity of C++, it requires some non-trivial template meta +programming tricks to support using `NULL` as an argument of the `EXPECT_XX()` +and `ASSERT_XX()` macros. Therefore we only do it where it's most needed +(otherwise we make the implementation of googletest harder to maintain and more +error-prone than necessary). + +Historically, the `EXPECT_EQ()` macro took the *expected* value as its first +argument and the *actual* value as the second, though this argument order is now +discouraged. It was reasonable that someone wanted +to write `EXPECT_EQ(NULL, some_expression)`, and this indeed was requested +several times. Therefore we implemented it. + +The need for `EXPECT_NE(NULL, ptr)` wasn't nearly as strong. When the assertion +fails, you already know that `ptr` must be `NULL`, so it doesn't add any +information to print `ptr` in this case. That means `EXPECT_TRUE(ptr != NULL)` +works just as well. + +If we were to support `EXPECT_NE(NULL, ptr)`, for consistency we'd have to +support `EXPECT_NE(ptr, NULL)` as well. This means using the template meta +programming tricks twice in the implementation, making it even harder to +understand and maintain. We believe the benefit doesn't justify the cost. + +Finally, with the growth of the gMock matcher library, we are encouraging people +to use the unified `EXPECT_THAT(value, matcher)` syntax more often in tests. One +significant advantage of the matcher approach is that matchers can be easily +combined to form new matchers, while the `EXPECT_NE`, etc, macros cannot be +easily combined. Therefore we want to invest more in the matchers than in the +`EXPECT_XX()` macros. + +## I need to test that different implementations of an interface satisfy some common requirements. Should I use typed tests or value-parameterized tests? + +For testing various implementations of the same interface, either typed tests or +value-parameterized tests can get it done. It's really up to you the user to +decide which is more convenient for you, depending on your particular case. Some +rough guidelines: + +* Typed tests can be easier to write if instances of the different + implementations can be created the same way, modulo the type. For example, + if all these implementations have a public default constructor (such that + you can write `new TypeParam`), or if their factory functions have the same + form (e.g. `CreateInstance()`). +* Value-parameterized tests can be easier to write if you need different code + patterns to create different implementations' instances, e.g. `new Foo` vs + `new Bar(5)`. To accommodate for the differences, you can write factory + function wrappers and pass these function pointers to the tests as their + parameters. +* When a typed test fails, the default output includes the name of the type, + which can help you quickly identify which implementation is wrong. + Value-parameterized tests only show the number of the failed iteration by + default. You will need to define a function that returns the iteration name + and pass it as the third parameter to INSTANTIATE_TEST_SUITE_P to have more + useful output. +* When using typed tests, you need to make sure you are testing against the + interface type, not the concrete types (in other words, you want to make + sure `implicit_cast(my_concrete_impl)` works, not just that + `my_concrete_impl` works). It's less likely to make mistakes in this area + when using value-parameterized tests. + +I hope I didn't confuse you more. :-) If you don't mind, I'd suggest you to give +both approaches a try. Practice is a much better way to grasp the subtle +differences between the two tools. Once you have some concrete experience, you +can much more easily decide which one to use the next time. + +## I got some run-time errors about invalid proto descriptors when using `ProtocolMessageEquals`. Help! + +{: .callout .note} +**Note:** `ProtocolMessageEquals` and `ProtocolMessageEquiv` are *deprecated* +now. Please use `EqualsProto`, etc instead. + +`ProtocolMessageEquals` and `ProtocolMessageEquiv` were redefined recently and +are now less tolerant of invalid protocol buffer definitions. In particular, if +you have a `foo.proto` that doesn't fully qualify the type of a protocol message +it references (e.g. `message` where it should be `message`), you +will now get run-time errors like: + +``` +... descriptor.cc:...] Invalid proto descriptor for file "path/to/foo.proto": +... descriptor.cc:...] blah.MyMessage.my_field: ".Bar" is not defined. +``` + +If you see this, your `.proto` file is broken and needs to be fixed by making +the types fully qualified. The new definition of `ProtocolMessageEquals` and +`ProtocolMessageEquiv` just happen to reveal your bug. + +## My death test modifies some state, but the change seems lost after the death test finishes. Why? + +Death tests (`EXPECT_DEATH`, etc) are executed in a sub-process s.t. the +expected crash won't kill the test program (i.e. the parent process). As a +result, any in-memory side effects they incur are observable in their respective +sub-processes, but not in the parent process. You can think of them as running +in a parallel universe, more or less. + +In particular, if you use mocking and the death test statement invokes some mock +methods, the parent process will think the calls have never occurred. Therefore, +you may want to move your `EXPECT_CALL` statements inside the `EXPECT_DEATH` +macro. + +## EXPECT_EQ(htonl(blah), blah_blah) generates weird compiler errors in opt mode. Is this a googletest bug? + +Actually, the bug is in `htonl()`. + +According to `'man htonl'`, `htonl()` is a *function*, which means it's valid to +use `htonl` as a function pointer. However, in opt mode `htonl()` is defined as +a *macro*, which breaks this usage. + +Worse, the macro definition of `htonl()` uses a `gcc` extension and is *not* +standard C++. That hacky implementation has some ad hoc limitations. In +particular, it prevents you from writing `Foo()`, where `Foo` +is a template that has an integral argument. + +The implementation of `EXPECT_EQ(a, b)` uses `sizeof(... a ...)` inside a +template argument, and thus doesn't compile in opt mode when `a` contains a call +to `htonl()`. It is difficult to make `EXPECT_EQ` bypass the `htonl()` bug, as +the solution must work with different compilers on various platforms. + +## The compiler complains about "undefined references" to some static const member variables, but I did define them in the class body. What's wrong? + +If your class has a static data member: + +```c++ +// foo.h +class Foo { + ... + static const int kBar = 100; +}; +``` + +You also need to define it *outside* of the class body in `foo.cc`: + +```c++ +const int Foo::kBar; // No initializer here. +``` + +Otherwise your code is **invalid C++**, and may break in unexpected ways. In +particular, using it in googletest comparison assertions (`EXPECT_EQ`, etc) will +generate an "undefined reference" linker error. The fact that "it used to work" +doesn't mean it's valid. It just means that you were lucky. :-) + +If the declaration of the static data member is `constexpr` then it is +implicitly an `inline` definition, and a separate definition in `foo.cc` is not +needed: + +```c++ +// foo.h +class Foo { + ... + static constexpr int kBar = 100; // Defines kBar, no need to do it in foo.cc. +}; +``` + +## Can I derive a test fixture from another? + +Yes. + +Each test fixture has a corresponding and same named test suite. This means only +one test suite can use a particular fixture. Sometimes, however, multiple test +cases may want to use the same or slightly different fixtures. For example, you +may want to make sure that all of a GUI library's test suites don't leak +important system resources like fonts and brushes. + +In googletest, you share a fixture among test suites by putting the shared logic +in a base test fixture, then deriving from that base a separate fixture for each +test suite that wants to use this common logic. You then use `TEST_F()` to write +tests using each derived fixture. + +Typically, your code looks like this: + +```c++ +// Defines a base test fixture. +class BaseTest : public ::testing::Test { + protected: + ... +}; + +// Derives a fixture FooTest from BaseTest. +class FooTest : public BaseTest { + protected: + void SetUp() override { + BaseTest::SetUp(); // Sets up the base fixture first. + ... additional set-up work ... + } + + void TearDown() override { + ... clean-up work for FooTest ... + BaseTest::TearDown(); // Remember to tear down the base fixture + // after cleaning up FooTest! + } + + ... functions and variables for FooTest ... +}; + +// Tests that use the fixture FooTest. +TEST_F(FooTest, Bar) { ... } +TEST_F(FooTest, Baz) { ... } + +... additional fixtures derived from BaseTest ... +``` + +If necessary, you can continue to derive test fixtures from a derived fixture. +googletest has no limit on how deep the hierarchy can be. + +For a complete example using derived test fixtures, see +[sample5_unittest.cc](https://github.com/google/googletest/blob/master/googletest/samples/sample5_unittest.cc). + +## My compiler complains "void value not ignored as it ought to be." What does this mean? + +You're probably using an `ASSERT_*()` in a function that doesn't return `void`. +`ASSERT_*()` can only be used in `void` functions, due to exceptions being +disabled by our build system. Please see more details +[here](advanced.md#assertion-placement). + +## My death test hangs (or seg-faults). How do I fix it? + +In googletest, death tests are run in a child process and the way they work is +delicate. To write death tests you really need to understand how they work—see +the details at [Death Assertions](reference/assertions.md#death) in the +Assertions Reference. + +In particular, death tests don't like having multiple threads in the parent +process. So the first thing you can try is to eliminate creating threads outside +of `EXPECT_DEATH()`. For example, you may want to use mocks or fake objects +instead of real ones in your tests. + +Sometimes this is impossible as some library you must use may be creating +threads before `main()` is even reached. In this case, you can try to minimize +the chance of conflicts by either moving as many activities as possible inside +`EXPECT_DEATH()` (in the extreme case, you want to move everything inside), or +leaving as few things as possible in it. Also, you can try to set the death test +style to `"threadsafe"`, which is safer but slower, and see if it helps. + +If you go with thread-safe death tests, remember that they rerun the test +program from the beginning in the child process. Therefore make sure your +program can run side-by-side with itself and is deterministic. + +In the end, this boils down to good concurrent programming. You have to make +sure that there are no race conditions or deadlocks in your program. No silver +bullet - sorry! + +## Should I use the constructor/destructor of the test fixture or SetUp()/TearDown()? {#CtorVsSetUp} + +The first thing to remember is that googletest does **not** reuse the same test +fixture object across multiple tests. For each `TEST_F`, googletest will create +a **fresh** test fixture object, immediately call `SetUp()`, run the test body, +call `TearDown()`, and then delete the test fixture object. + +When you need to write per-test set-up and tear-down logic, you have the choice +between using the test fixture constructor/destructor or `SetUp()/TearDown()`. +The former is usually preferred, as it has the following benefits: + +* By initializing a member variable in the constructor, we have the option to + make it `const`, which helps prevent accidental changes to its value and + makes the tests more obviously correct. +* In case we need to subclass the test fixture class, the subclass' + constructor is guaranteed to call the base class' constructor *first*, and + the subclass' destructor is guaranteed to call the base class' destructor + *afterward*. With `SetUp()/TearDown()`, a subclass may make the mistake of + forgetting to call the base class' `SetUp()/TearDown()` or call them at the + wrong time. + +You may still want to use `SetUp()/TearDown()` in the following cases: + +* C++ does not allow virtual function calls in constructors and destructors. + You can call a method declared as virtual, but it will not use dynamic + dispatch, it will use the definition from the class the constructor of which + is currently executing. This is because calling a virtual method before the + derived class constructor has a chance to run is very dangerous - the + virtual method might operate on uninitialized data. Therefore, if you need + to call a method that will be overridden in a derived class, you have to use + `SetUp()/TearDown()`. +* In the body of a constructor (or destructor), it's not possible to use the + `ASSERT_xx` macros. Therefore, if the set-up operation could cause a fatal + test failure that should prevent the test from running, it's necessary to + use `abort` and abort the whole test + executable, or to use `SetUp()` instead of a constructor. +* If the tear-down operation could throw an exception, you must use + `TearDown()` as opposed to the destructor, as throwing in a destructor leads + to undefined behavior and usually will kill your program right away. Note + that many standard libraries (like STL) may throw when exceptions are + enabled in the compiler. Therefore you should prefer `TearDown()` if you + want to write portable tests that work with or without exceptions. +* The googletest team is considering making the assertion macros throw on + platforms where exceptions are enabled (e.g. Windows, Mac OS, and Linux + client-side), which will eliminate the need for the user to propagate + failures from a subroutine to its caller. Therefore, you shouldn't use + googletest assertions in a destructor if your code could run on such a + platform. + +## The compiler complains "no matching function to call" when I use ASSERT_PRED*. How do I fix it? + +See details for [`EXPECT_PRED*`](reference/assertions.md#EXPECT_PRED) in the +Assertions Reference. + +## My compiler complains about "ignoring return value" when I call RUN_ALL_TESTS(). Why? + +Some people had been ignoring the return value of `RUN_ALL_TESTS()`. That is, +instead of + +```c++ + return RUN_ALL_TESTS(); +``` + +they write + +```c++ + RUN_ALL_TESTS(); +``` + +This is **wrong and dangerous**. The testing services needs to see the return +value of `RUN_ALL_TESTS()` in order to determine if a test has passed. If your +`main()` function ignores it, your test will be considered successful even if it +has a googletest assertion failure. Very bad. + +We have decided to fix this (thanks to Michael Chastain for the idea). Now, your +code will no longer be able to ignore `RUN_ALL_TESTS()` when compiled with +`gcc`. If you do so, you'll get a compiler error. + +If you see the compiler complaining about you ignoring the return value of +`RUN_ALL_TESTS()`, the fix is simple: just make sure its value is used as the +return value of `main()`. + +But how could we introduce a change that breaks existing tests? Well, in this +case, the code was already broken in the first place, so we didn't break it. :-) + +## My compiler complains that a constructor (or destructor) cannot return a value. What's going on? + +Due to a peculiarity of C++, in order to support the syntax for streaming +messages to an `ASSERT_*`, e.g. + +```c++ + ASSERT_EQ(1, Foo()) << "blah blah" << foo; +``` + +we had to give up using `ASSERT*` and `FAIL*` (but not `EXPECT*` and +`ADD_FAILURE*`) in constructors and destructors. The workaround is to move the +content of your constructor/destructor to a private void member function, or +switch to `EXPECT_*()` if that works. This +[section](advanced.md#assertion-placement) in the user's guide explains it. + +## My SetUp() function is not called. Why? + +C++ is case-sensitive. Did you spell it as `Setup()`? + +Similarly, sometimes people spell `SetUpTestSuite()` as `SetupTestSuite()` and +wonder why it's never called. + + +## I have several test suites which share the same test fixture logic, do I have to define a new test fixture class for each of them? This seems pretty tedious. + +You don't have to. Instead of + +```c++ +class FooTest : public BaseTest {}; + +TEST_F(FooTest, Abc) { ... } +TEST_F(FooTest, Def) { ... } + +class BarTest : public BaseTest {}; + +TEST_F(BarTest, Abc) { ... } +TEST_F(BarTest, Def) { ... } +``` + +you can simply `typedef` the test fixtures: + +```c++ +typedef BaseTest FooTest; + +TEST_F(FooTest, Abc) { ... } +TEST_F(FooTest, Def) { ... } + +typedef BaseTest BarTest; + +TEST_F(BarTest, Abc) { ... } +TEST_F(BarTest, Def) { ... } +``` + +## googletest output is buried in a whole bunch of LOG messages. What do I do? + +The googletest output is meant to be a concise and human-friendly report. If +your test generates textual output itself, it will mix with the googletest +output, making it hard to read. However, there is an easy solution to this +problem. + +Since `LOG` messages go to stderr, we decided to let googletest output go to +stdout. This way, you can easily separate the two using redirection. For +example: + +```shell +$ ./my_test > gtest_output.txt +``` + +## Why should I prefer test fixtures over global variables? + +There are several good reasons: + +1. It's likely your test needs to change the states of its global variables. + This makes it difficult to keep side effects from escaping one test and + contaminating others, making debugging difficult. By using fixtures, each + test has a fresh set of variables that's different (but with the same + names). Thus, tests are kept independent of each other. +2. Global variables pollute the global namespace. +3. Test fixtures can be reused via subclassing, which cannot be done easily + with global variables. This is useful if many test suites have something in + common. + +## What can the statement argument in ASSERT_DEATH() be? + +`ASSERT_DEATH(statement, matcher)` (or any death assertion macro) can be used +wherever *`statement`* is valid. So basically *`statement`* can be any C++ +statement that makes sense in the current context. In particular, it can +reference global and/or local variables, and can be: + +* a simple function call (often the case), +* a complex expression, or +* a compound statement. + +Some examples are shown here: + +```c++ +// A death test can be a simple function call. +TEST(MyDeathTest, FunctionCall) { + ASSERT_DEATH(Xyz(5), "Xyz failed"); +} + +// Or a complex expression that references variables and functions. +TEST(MyDeathTest, ComplexExpression) { + const bool c = Condition(); + ASSERT_DEATH((c ? Func1(0) : object2.Method("test")), + "(Func1|Method) failed"); +} + +// Death assertions can be used anywhere in a function. In +// particular, they can be inside a loop. +TEST(MyDeathTest, InsideLoop) { + // Verifies that Foo(0), Foo(1), ..., and Foo(4) all die. + for (int i = 0; i < 5; i++) { + EXPECT_DEATH_M(Foo(i), "Foo has \\d+ errors", + ::testing::Message() << "where i is " << i); + } +} + +// A death assertion can contain a compound statement. +TEST(MyDeathTest, CompoundStatement) { + // Verifies that at lease one of Bar(0), Bar(1), ..., and + // Bar(4) dies. + ASSERT_DEATH({ + for (int i = 0; i < 5; i++) { + Bar(i); + } + }, + "Bar has \\d+ errors"); +} +``` + +## I have a fixture class `FooTest`, but `TEST_F(FooTest, Bar)` gives me error ``"no matching function for call to `FooTest::FooTest()'"``. Why? + +Googletest needs to be able to create objects of your test fixture class, so it +must have a default constructor. Normally the compiler will define one for you. +However, there are cases where you have to define your own: + +* If you explicitly declare a non-default constructor for class `FooTest` + (`DISALLOW_EVIL_CONSTRUCTORS()` does this), then you need to define a + default constructor, even if it would be empty. +* If `FooTest` has a const non-static data member, then you have to define the + default constructor *and* initialize the const member in the initializer + list of the constructor. (Early versions of `gcc` doesn't force you to + initialize the const member. It's a bug that has been fixed in `gcc 4`.) + +## Why does ASSERT_DEATH complain about previous threads that were already joined? + +With the Linux pthread library, there is no turning back once you cross the line +from a single thread to multiple threads. The first time you create a thread, a +manager thread is created in addition, so you get 3, not 2, threads. Later when +the thread you create joins the main thread, the thread count decrements by 1, +but the manager thread will never be killed, so you still have 2 threads, which +means you cannot safely run a death test. + +The new NPTL thread library doesn't suffer from this problem, as it doesn't +create a manager thread. However, if you don't control which machine your test +runs on, you shouldn't depend on this. + +## Why does googletest require the entire test suite, instead of individual tests, to be named *DeathTest when it uses ASSERT_DEATH? + +googletest does not interleave tests from different test suites. That is, it +runs all tests in one test suite first, and then runs all tests in the next test +suite, and so on. googletest does this because it needs to set up a test suite +before the first test in it is run, and tear it down afterwards. Splitting up +the test case would require multiple set-up and tear-down processes, which is +inefficient and makes the semantics unclean. + +If we were to determine the order of tests based on test name instead of test +case name, then we would have a problem with the following situation: + +```c++ +TEST_F(FooTest, AbcDeathTest) { ... } +TEST_F(FooTest, Uvw) { ... } + +TEST_F(BarTest, DefDeathTest) { ... } +TEST_F(BarTest, Xyz) { ... } +``` + +Since `FooTest.AbcDeathTest` needs to run before `BarTest.Xyz`, and we don't +interleave tests from different test suites, we need to run all tests in the +`FooTest` case before running any test in the `BarTest` case. This contradicts +with the requirement to run `BarTest.DefDeathTest` before `FooTest.Uvw`. + +## But I don't like calling my entire test suite \*DeathTest when it contains both death tests and non-death tests. What do I do? + +You don't have to, but if you like, you may split up the test suite into +`FooTest` and `FooDeathTest`, where the names make it clear that they are +related: + +```c++ +class FooTest : public ::testing::Test { ... }; + +TEST_F(FooTest, Abc) { ... } +TEST_F(FooTest, Def) { ... } + +using FooDeathTest = FooTest; + +TEST_F(FooDeathTest, Uvw) { ... EXPECT_DEATH(...) ... } +TEST_F(FooDeathTest, Xyz) { ... ASSERT_DEATH(...) ... } +``` + +## googletest prints the LOG messages in a death test's child process only when the test fails. How can I see the LOG messages when the death test succeeds? + +Printing the LOG messages generated by the statement inside `EXPECT_DEATH()` +makes it harder to search for real problems in the parent's log. Therefore, +googletest only prints them when the death test has failed. + +If you really need to see such LOG messages, a workaround is to temporarily +break the death test (e.g. by changing the regex pattern it is expected to +match). Admittedly, this is a hack. We'll consider a more permanent solution +after the fork-and-exec-style death tests are implemented. + +## The compiler complains about `no match for 'operator<<'` when I use an assertion. What gives? + +If you use a user-defined type `FooType` in an assertion, you must make sure +there is an `std::ostream& operator<<(std::ostream&, const FooType&)` function +defined such that we can print a value of `FooType`. + +In addition, if `FooType` is declared in a name space, the `<<` operator also +needs to be defined in the *same* name space. See +[Tip of the Week #49](http://abseil.io/tips/49) for details. + +## How do I suppress the memory leak messages on Windows? + +Since the statically initialized googletest singleton requires allocations on +the heap, the Visual C++ memory leak detector will report memory leaks at the +end of the program run. The easiest way to avoid this is to use the +`_CrtMemCheckpoint` and `_CrtMemDumpAllObjectsSince` calls to not report any +statically initialized heap objects. See MSDN for more details and additional +heap check/debug routines. + +## How can my code detect if it is running in a test? + +If you write code that sniffs whether it's running in a test and does different +things accordingly, you are leaking test-only logic into production code and +there is no easy way to ensure that the test-only code paths aren't run by +mistake in production. Such cleverness also leads to +[Heisenbugs](https://en.wikipedia.org/wiki/Heisenbug). Therefore we strongly +advise against the practice, and googletest doesn't provide a way to do it. + +In general, the recommended way to cause the code to behave differently under +test is [Dependency Injection](http://en.wikipedia.org/wiki/Dependency_injection). You can inject +different functionality from the test and from the production code. Since your +production code doesn't link in the for-test logic at all (the +[`testonly`](http://docs.bazel.build/versions/master/be/common-definitions.html#common.testonly) attribute for BUILD targets helps to ensure +that), there is no danger in accidentally running it. + +However, if you *really*, *really*, *really* have no choice, and if you follow +the rule of ending your test program names with `_test`, you can use the +*horrible* hack of sniffing your executable name (`argv[0]` in `main()`) to know +whether the code is under test. + +## How do I temporarily disable a test? + +If you have a broken test that you cannot fix right away, you can add the +`DISABLED_` prefix to its name. This will exclude it from execution. This is +better than commenting out the code or using `#if 0`, as disabled tests are +still compiled (and thus won't rot). + +To include disabled tests in test execution, just invoke the test program with +the `--gtest_also_run_disabled_tests` flag. + +## Is it OK if I have two separate `TEST(Foo, Bar)` test methods defined in different namespaces? + +Yes. + +The rule is **all test methods in the same test suite must use the same fixture +class.** This means that the following is **allowed** because both tests use the +same fixture class (`::testing::Test`). + +```c++ +namespace foo { +TEST(CoolTest, DoSomething) { + SUCCEED(); +} +} // namespace foo + +namespace bar { +TEST(CoolTest, DoSomething) { + SUCCEED(); +} +} // namespace bar +``` + +However, the following code is **not allowed** and will produce a runtime error +from googletest because the test methods are using different test fixture +classes with the same test suite name. + +```c++ +namespace foo { +class CoolTest : public ::testing::Test {}; // Fixture foo::CoolTest +TEST_F(CoolTest, DoSomething) { + SUCCEED(); +} +} // namespace foo + +namespace bar { +class CoolTest : public ::testing::Test {}; // Fixture: bar::CoolTest +TEST_F(CoolTest, DoSomething) { + SUCCEED(); +} +} // namespace bar +``` diff --git a/build/_deps/googletest-src/docs/gmock_cheat_sheet.md b/build/_deps/googletest-src/docs/gmock_cheat_sheet.md new file mode 100644 index 0000000..17ed7a5 --- /dev/null +++ b/build/_deps/googletest-src/docs/gmock_cheat_sheet.md @@ -0,0 +1,241 @@ +# gMock Cheat Sheet + +## Defining a Mock Class + +### Mocking a Normal Class {#MockClass} + +Given + +```cpp +class Foo { + ... + virtual ~Foo(); + virtual int GetSize() const = 0; + virtual string Describe(const char* name) = 0; + virtual string Describe(int type) = 0; + virtual bool Process(Bar elem, int count) = 0; +}; +``` + +(note that `~Foo()` **must** be virtual) we can define its mock as + +```cpp +#include "gmock/gmock.h" + +class MockFoo : public Foo { + ... + MOCK_METHOD(int, GetSize, (), (const, override)); + MOCK_METHOD(string, Describe, (const char* name), (override)); + MOCK_METHOD(string, Describe, (int type), (override)); + MOCK_METHOD(bool, Process, (Bar elem, int count), (override)); +}; +``` + +To create a "nice" mock, which ignores all uninteresting calls, a "naggy" mock, +which warns on all uninteresting calls, or a "strict" mock, which treats them as +failures: + +```cpp +using ::testing::NiceMock; +using ::testing::NaggyMock; +using ::testing::StrictMock; + +NiceMock nice_foo; // The type is a subclass of MockFoo. +NaggyMock naggy_foo; // The type is a subclass of MockFoo. +StrictMock strict_foo; // The type is a subclass of MockFoo. +``` + +{: .callout .note} +**Note:** A mock object is currently naggy by default. We may make it nice by +default in the future. + +### Mocking a Class Template {#MockTemplate} + +Class templates can be mocked just like any class. + +To mock + +```cpp +template +class StackInterface { + ... + virtual ~StackInterface(); + virtual int GetSize() const = 0; + virtual void Push(const Elem& x) = 0; +}; +``` + +(note that all member functions that are mocked, including `~StackInterface()` +**must** be virtual). + +```cpp +template +class MockStack : public StackInterface { + ... + MOCK_METHOD(int, GetSize, (), (const, override)); + MOCK_METHOD(void, Push, (const Elem& x), (override)); +}; +``` + +### Specifying Calling Conventions for Mock Functions + +If your mock function doesn't use the default calling convention, you can +specify it by adding `Calltype(convention)` to `MOCK_METHOD`'s 4th parameter. +For example, + +```cpp + MOCK_METHOD(bool, Foo, (int n), (Calltype(STDMETHODCALLTYPE))); + MOCK_METHOD(int, Bar, (double x, double y), + (const, Calltype(STDMETHODCALLTYPE))); +``` + +where `STDMETHODCALLTYPE` is defined by `` on Windows. + +## Using Mocks in Tests {#UsingMocks} + +The typical work flow is: + +1. Import the gMock names you need to use. All gMock symbols are in the + `testing` namespace unless they are macros or otherwise noted. +2. Create the mock objects. +3. Optionally, set the default actions of the mock objects. +4. Set your expectations on the mock objects (How will they be called? What + will they do?). +5. Exercise code that uses the mock objects; if necessary, check the result + using googletest assertions. +6. When a mock object is destructed, gMock automatically verifies that all + expectations on it have been satisfied. + +Here's an example: + +```cpp +using ::testing::Return; // #1 + +TEST(BarTest, DoesThis) { + MockFoo foo; // #2 + + ON_CALL(foo, GetSize()) // #3 + .WillByDefault(Return(1)); + // ... other default actions ... + + EXPECT_CALL(foo, Describe(5)) // #4 + .Times(3) + .WillRepeatedly(Return("Category 5")); + // ... other expectations ... + + EXPECT_EQ(MyProductionFunction(&foo), "good"); // #5 +} // #6 +``` + +## Setting Default Actions {#OnCall} + +gMock has a **built-in default action** for any function that returns `void`, +`bool`, a numeric value, or a pointer. In C++11, it will additionally returns +the default-constructed value, if one exists for the given type. + +To customize the default action for functions with return type `T`, use +[`DefaultValue`](reference/mocking.md#DefaultValue). For example: + +```cpp + // Sets the default action for return type std::unique_ptr to + // creating a new Buzz every time. + DefaultValue>::SetFactory( + [] { return MakeUnique(AccessLevel::kInternal); }); + + // When this fires, the default action of MakeBuzz() will run, which + // will return a new Buzz object. + EXPECT_CALL(mock_buzzer_, MakeBuzz("hello")).Times(AnyNumber()); + + auto buzz1 = mock_buzzer_.MakeBuzz("hello"); + auto buzz2 = mock_buzzer_.MakeBuzz("hello"); + EXPECT_NE(buzz1, nullptr); + EXPECT_NE(buzz2, nullptr); + EXPECT_NE(buzz1, buzz2); + + // Resets the default action for return type std::unique_ptr, + // to avoid interfere with other tests. + DefaultValue>::Clear(); +``` + +To customize the default action for a particular method of a specific mock +object, use [`ON_CALL`](reference/mocking.md#ON_CALL). `ON_CALL` has a similar +syntax to `EXPECT_CALL`, but it is used for setting default behaviors when you +do not require that the mock method is called. See +[Knowing When to Expect](gmock_cook_book.md#UseOnCall) for a more detailed +discussion. + +## Setting Expectations {#ExpectCall} + +See [`EXPECT_CALL`](reference/mocking.md#EXPECT_CALL) in the Mocking Reference. + +## Matchers {#MatcherList} + +See the [Matchers Reference](reference/matchers.md). + +## Actions {#ActionList} + +See the [Actions Reference](reference/actions.md). + +## Cardinalities {#CardinalityList} + +See the [`Times` clause](reference/mocking.md#EXPECT_CALL.Times) of +`EXPECT_CALL` in the Mocking Reference. + +## Expectation Order + +By default, expectations can be matched in *any* order. If some or all +expectations must be matched in a given order, you can use the +[`After` clause](reference/mocking.md#EXPECT_CALL.After) or +[`InSequence` clause](reference/mocking.md#EXPECT_CALL.InSequence) of +`EXPECT_CALL`, or use an [`InSequence` object](reference/mocking.md#InSequence). + +## Verifying and Resetting a Mock + +gMock will verify the expectations on a mock object when it is destructed, or +you can do it earlier: + +```cpp +using ::testing::Mock; +... +// Verifies and removes the expectations on mock_obj; +// returns true if and only if successful. +Mock::VerifyAndClearExpectations(&mock_obj); +... +// Verifies and removes the expectations on mock_obj; +// also removes the default actions set by ON_CALL(); +// returns true if and only if successful. +Mock::VerifyAndClear(&mock_obj); +``` + +Do not set new expectations after verifying and clearing a mock after its use. +Setting expectations after code that exercises the mock has undefined behavior. +See [Using Mocks in Tests](gmock_for_dummies.md#using-mocks-in-tests) for more +information. + +You can also tell gMock that a mock object can be leaked and doesn't need to be +verified: + +```cpp +Mock::AllowLeak(&mock_obj); +``` + +## Mock Classes + +gMock defines a convenient mock class template + +```cpp +class MockFunction { + public: + MOCK_METHOD(R, Call, (A1, ..., An)); +}; +``` + +See this [recipe](gmock_cook_book.md#using-check-points) for one application of +it. + +## Flags + +| Flag | Description | +| :----------------------------- | :---------------------------------------- | +| `--gmock_catch_leaked_mocks=0` | Don't report leaked mock objects as failures. | +| `--gmock_verbose=LEVEL` | Sets the default verbosity level (`info`, `warning`, or `error`) of Google Mock messages. | diff --git a/build/_deps/googletest-src/docs/gmock_cook_book.md b/build/_deps/googletest-src/docs/gmock_cook_book.md new file mode 100644 index 0000000..c08958e --- /dev/null +++ b/build/_deps/googletest-src/docs/gmock_cook_book.md @@ -0,0 +1,4301 @@ +# gMock Cookbook + +You can find recipes for using gMock here. If you haven't yet, please read +[the dummy guide](gmock_for_dummies.md) first to make sure you understand the +basics. + +{: .callout .note} +**Note:** gMock lives in the `testing` name space. For readability, it is +recommended to write `using ::testing::Foo;` once in your file before using the +name `Foo` defined by gMock. We omit such `using` statements in this section for +brevity, but you should do it in your own code. + +## Creating Mock Classes + +Mock classes are defined as normal classes, using the `MOCK_METHOD` macro to +generate mocked methods. The macro gets 3 or 4 parameters: + +```cpp +class MyMock { + public: + MOCK_METHOD(ReturnType, MethodName, (Args...)); + MOCK_METHOD(ReturnType, MethodName, (Args...), (Specs...)); +}; +``` + +The first 3 parameters are simply the method declaration, split into 3 parts. +The 4th parameter accepts a closed list of qualifiers, which affect the +generated method: + +* **`const`** - Makes the mocked method a `const` method. Required if + overriding a `const` method. +* **`override`** - Marks the method with `override`. Recommended if overriding + a `virtual` method. +* **`noexcept`** - Marks the method with `noexcept`. Required if overriding a + `noexcept` method. +* **`Calltype(...)`** - Sets the call type for the method (e.g. to + `STDMETHODCALLTYPE`), useful in Windows. +* **`ref(...)`** - Marks the method with the reference qualification + specified. Required if overriding a method that has reference + qualifications. Eg `ref(&)` or `ref(&&)`. + +### Dealing with unprotected commas + +Unprotected commas, i.e. commas which are not surrounded by parentheses, prevent +`MOCK_METHOD` from parsing its arguments correctly: + +{: .bad} +```cpp +class MockFoo { + public: + MOCK_METHOD(std::pair, GetPair, ()); // Won't compile! + MOCK_METHOD(bool, CheckMap, (std::map, bool)); // Won't compile! +}; +``` + +Solution 1 - wrap with parentheses: + +{: .good} +```cpp +class MockFoo { + public: + MOCK_METHOD((std::pair), GetPair, ()); + MOCK_METHOD(bool, CheckMap, ((std::map), bool)); +}; +``` + +Note that wrapping a return or argument type with parentheses is, in general, +invalid C++. `MOCK_METHOD` removes the parentheses. + +Solution 2 - define an alias: + +{: .good} +```cpp +class MockFoo { + public: + using BoolAndInt = std::pair; + MOCK_METHOD(BoolAndInt, GetPair, ()); + using MapIntDouble = std::map; + MOCK_METHOD(bool, CheckMap, (MapIntDouble, bool)); +}; +``` + +### Mocking Private or Protected Methods + +You must always put a mock method definition (`MOCK_METHOD`) in a `public:` +section of the mock class, regardless of the method being mocked being `public`, +`protected`, or `private` in the base class. This allows `ON_CALL` and +`EXPECT_CALL` to reference the mock function from outside of the mock class. +(Yes, C++ allows a subclass to change the access level of a virtual function in +the base class.) Example: + +```cpp +class Foo { + public: + ... + virtual bool Transform(Gadget* g) = 0; + + protected: + virtual void Resume(); + + private: + virtual int GetTimeOut(); +}; + +class MockFoo : public Foo { + public: + ... + MOCK_METHOD(bool, Transform, (Gadget* g), (override)); + + // The following must be in the public section, even though the + // methods are protected or private in the base class. + MOCK_METHOD(void, Resume, (), (override)); + MOCK_METHOD(int, GetTimeOut, (), (override)); +}; +``` + +### Mocking Overloaded Methods + +You can mock overloaded functions as usual. No special attention is required: + +```cpp +class Foo { + ... + + // Must be virtual as we'll inherit from Foo. + virtual ~Foo(); + + // Overloaded on the types and/or numbers of arguments. + virtual int Add(Element x); + virtual int Add(int times, Element x); + + // Overloaded on the const-ness of this object. + virtual Bar& GetBar(); + virtual const Bar& GetBar() const; +}; + +class MockFoo : public Foo { + ... + MOCK_METHOD(int, Add, (Element x), (override)); + MOCK_METHOD(int, Add, (int times, Element x), (override)); + + MOCK_METHOD(Bar&, GetBar, (), (override)); + MOCK_METHOD(const Bar&, GetBar, (), (const, override)); +}; +``` + +{: .callout .note} +**Note:** if you don't mock all versions of the overloaded method, the compiler +will give you a warning about some methods in the base class being hidden. To +fix that, use `using` to bring them in scope: + +```cpp +class MockFoo : public Foo { + ... + using Foo::Add; + MOCK_METHOD(int, Add, (Element x), (override)); + // We don't want to mock int Add(int times, Element x); + ... +}; +``` + +### Mocking Class Templates + +You can mock class templates just like any class. + +```cpp +template +class StackInterface { + ... + // Must be virtual as we'll inherit from StackInterface. + virtual ~StackInterface(); + + virtual int GetSize() const = 0; + virtual void Push(const Elem& x) = 0; +}; + +template +class MockStack : public StackInterface { + ... + MOCK_METHOD(int, GetSize, (), (override)); + MOCK_METHOD(void, Push, (const Elem& x), (override)); +}; +``` + +### Mocking Non-virtual Methods {#MockingNonVirtualMethods} + +gMock can mock non-virtual functions to be used in Hi-perf dependency injection. + +In this case, instead of sharing a common base class with the real class, your +mock class will be *unrelated* to the real class, but contain methods with the +same signatures. The syntax for mocking non-virtual methods is the *same* as +mocking virtual methods (just don't add `override`): + +```cpp +// A simple packet stream class. None of its members is virtual. +class ConcretePacketStream { + public: + void AppendPacket(Packet* new_packet); + const Packet* GetPacket(size_t packet_number) const; + size_t NumberOfPackets() const; + ... +}; + +// A mock packet stream class. It inherits from no other, but defines +// GetPacket() and NumberOfPackets(). +class MockPacketStream { + public: + MOCK_METHOD(const Packet*, GetPacket, (size_t packet_number), (const)); + MOCK_METHOD(size_t, NumberOfPackets, (), (const)); + ... +}; +``` + +Note that the mock class doesn't define `AppendPacket()`, unlike the real class. +That's fine as long as the test doesn't need to call it. + +Next, you need a way to say that you want to use `ConcretePacketStream` in +production code, and use `MockPacketStream` in tests. Since the functions are +not virtual and the two classes are unrelated, you must specify your choice at +*compile time* (as opposed to run time). + +One way to do it is to templatize your code that needs to use a packet stream. +More specifically, you will give your code a template type argument for the type +of the packet stream. In production, you will instantiate your template with +`ConcretePacketStream` as the type argument. In tests, you will instantiate the +same template with `MockPacketStream`. For example, you may write: + +```cpp +template +void CreateConnection(PacketStream* stream) { ... } + +template +class PacketReader { + public: + void ReadPackets(PacketStream* stream, size_t packet_num); +}; +``` + +Then you can use `CreateConnection()` and +`PacketReader` in production code, and use +`CreateConnection()` and `PacketReader` in +tests. + +```cpp + MockPacketStream mock_stream; + EXPECT_CALL(mock_stream, ...)...; + .. set more expectations on mock_stream ... + PacketReader reader(&mock_stream); + ... exercise reader ... +``` + +### Mocking Free Functions + +It is not possible to directly mock a free function (i.e. a C-style function or +a static method). If you need to, you can rewrite your code to use an interface +(abstract class). + +Instead of calling a free function (say, `OpenFile`) directly, introduce an +interface for it and have a concrete subclass that calls the free function: + +```cpp +class FileInterface { + public: + ... + virtual bool Open(const char* path, const char* mode) = 0; +}; + +class File : public FileInterface { + public: + ... + bool Open(const char* path, const char* mode) override { + return OpenFile(path, mode); + } +}; +``` + +Your code should talk to `FileInterface` to open a file. Now it's easy to mock +out the function. + +This may seem like a lot of hassle, but in practice you often have multiple +related functions that you can put in the same interface, so the per-function +syntactic overhead will be much lower. + +If you are concerned about the performance overhead incurred by virtual +functions, and profiling confirms your concern, you can combine this with the +recipe for [mocking non-virtual methods](#MockingNonVirtualMethods). + +### Old-Style `MOCK_METHODn` Macros + +Before the generic `MOCK_METHOD` macro +[was introduced in 2018](https://github.com/google/googletest/commit/c5f08bf91944ce1b19bcf414fa1760e69d20afc2), +mocks where created using a family of macros collectively called `MOCK_METHODn`. +These macros are still supported, though migration to the new `MOCK_METHOD` is +recommended. + +The macros in the `MOCK_METHODn` family differ from `MOCK_METHOD`: + +* The general structure is `MOCK_METHODn(MethodName, ReturnType(Args))`, + instead of `MOCK_METHOD(ReturnType, MethodName, (Args))`. +* The number `n` must equal the number of arguments. +* When mocking a const method, one must use `MOCK_CONST_METHODn`. +* When mocking a class template, the macro name must be suffixed with `_T`. +* In order to specify the call type, the macro name must be suffixed with + `_WITH_CALLTYPE`, and the call type is the first macro argument. + +Old macros and their new equivalents: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Simple
OldMOCK_METHOD1(Foo, bool(int))
NewMOCK_METHOD(bool, Foo, (int))
Const Method
OldMOCK_CONST_METHOD1(Foo, bool(int))
NewMOCK_METHOD(bool, Foo, (int), (const))
Method in a Class Template
OldMOCK_METHOD1_T(Foo, bool(int))
NewMOCK_METHOD(bool, Foo, (int))
Const Method in a Class Template
OldMOCK_CONST_METHOD1_T(Foo, bool(int))
NewMOCK_METHOD(bool, Foo, (int), (const))
Method with Call Type
OldMOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))
NewMOCK_METHOD(bool, Foo, (int), (Calltype(STDMETHODCALLTYPE)))
Const Method with Call Type
OldMOCK_CONST_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))
NewMOCK_METHOD(bool, Foo, (int), (const, Calltype(STDMETHODCALLTYPE)))
Method with Call Type in a Class Template
OldMOCK_METHOD1_T_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))
NewMOCK_METHOD(bool, Foo, (int), (Calltype(STDMETHODCALLTYPE)))
Const Method with Call Type in a Class Template
OldMOCK_CONST_METHOD1_T_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))
NewMOCK_METHOD(bool, Foo, (int), (const, Calltype(STDMETHODCALLTYPE)))
+ +### The Nice, the Strict, and the Naggy {#NiceStrictNaggy} + +If a mock method has no `EXPECT_CALL` spec but is called, we say that it's an +"uninteresting call", and the default action (which can be specified using +`ON_CALL()`) of the method will be taken. Currently, an uninteresting call will +also by default cause gMock to print a warning. (In the future, we might remove +this warning by default.) + +However, sometimes you may want to ignore these uninteresting calls, and +sometimes you may want to treat them as errors. gMock lets you make the decision +on a per-mock-object basis. + +Suppose your test uses a mock class `MockFoo`: + +```cpp +TEST(...) { + MockFoo mock_foo; + EXPECT_CALL(mock_foo, DoThis()); + ... code that uses mock_foo ... +} +``` + +If a method of `mock_foo` other than `DoThis()` is called, you will get a +warning. However, if you rewrite your test to use `NiceMock` instead, +you can suppress the warning: + +```cpp +using ::testing::NiceMock; + +TEST(...) { + NiceMock mock_foo; + EXPECT_CALL(mock_foo, DoThis()); + ... code that uses mock_foo ... +} +``` + +`NiceMock` is a subclass of `MockFoo`, so it can be used wherever +`MockFoo` is accepted. + +It also works if `MockFoo`'s constructor takes some arguments, as +`NiceMock` "inherits" `MockFoo`'s constructors: + +```cpp +using ::testing::NiceMock; + +TEST(...) { + NiceMock mock_foo(5, "hi"); // Calls MockFoo(5, "hi"). + EXPECT_CALL(mock_foo, DoThis()); + ... code that uses mock_foo ... +} +``` + +The usage of `StrictMock` is similar, except that it makes all uninteresting +calls failures: + +```cpp +using ::testing::StrictMock; + +TEST(...) { + StrictMock mock_foo; + EXPECT_CALL(mock_foo, DoThis()); + ... code that uses mock_foo ... + + // The test will fail if a method of mock_foo other than DoThis() + // is called. +} +``` + +{: .callout .note} +NOTE: `NiceMock` and `StrictMock` only affects *uninteresting* calls (calls of +*methods* with no expectations); they do not affect *unexpected* calls (calls of +methods with expectations, but they don't match). See +[Understanding Uninteresting vs Unexpected Calls](#uninteresting-vs-unexpected). + +There are some caveats though (sadly they are side effects of C++'s +limitations): + +1. `NiceMock` and `StrictMock` only work for mock methods + defined using the `MOCK_METHOD` macro **directly** in the `MockFoo` class. + If a mock method is defined in a **base class** of `MockFoo`, the "nice" or + "strict" modifier may not affect it, depending on the compiler. In + particular, nesting `NiceMock` and `StrictMock` (e.g. + `NiceMock >`) is **not** supported. +2. `NiceMock` and `StrictMock` may not work correctly if the + destructor of `MockFoo` is not virtual. We would like to fix this, but it + requires cleaning up existing tests. + +Finally, you should be **very cautious** about when to use naggy or strict +mocks, as they tend to make tests more brittle and harder to maintain. When you +refactor your code without changing its externally visible behavior, ideally you +shouldn't need to update any tests. If your code interacts with a naggy mock, +however, you may start to get spammed with warnings as the result of your +change. Worse, if your code interacts with a strict mock, your tests may start +to fail and you'll be forced to fix them. Our general recommendation is to use +nice mocks (not yet the default) most of the time, use naggy mocks (the current +default) when developing or debugging tests, and use strict mocks only as the +last resort. + +### Simplifying the Interface without Breaking Existing Code {#SimplerInterfaces} + +Sometimes a method has a long list of arguments that is mostly uninteresting. +For example: + +```cpp +class LogSink { + public: + ... + virtual void send(LogSeverity severity, const char* full_filename, + const char* base_filename, int line, + const struct tm* tm_time, + const char* message, size_t message_len) = 0; +}; +``` + +This method's argument list is lengthy and hard to work with (the `message` +argument is not even 0-terminated). If we mock it as is, using the mock will be +awkward. If, however, we try to simplify this interface, we'll need to fix all +clients depending on it, which is often infeasible. + +The trick is to redispatch the method in the mock class: + +```cpp +class ScopedMockLog : public LogSink { + public: + ... + void send(LogSeverity severity, const char* full_filename, + const char* base_filename, int line, const tm* tm_time, + const char* message, size_t message_len) override { + // We are only interested in the log severity, full file name, and + // log message. + Log(severity, full_filename, std::string(message, message_len)); + } + + // Implements the mock method: + // + // void Log(LogSeverity severity, + // const string& file_path, + // const string& message); + MOCK_METHOD(void, Log, + (LogSeverity severity, const string& file_path, + const string& message)); +}; +``` + +By defining a new mock method with a trimmed argument list, we make the mock +class more user-friendly. + +This technique may also be applied to make overloaded methods more amenable to +mocking. For example, when overloads have been used to implement default +arguments: + +```cpp +class MockTurtleFactory : public TurtleFactory { + public: + Turtle* MakeTurtle(int length, int weight) override { ... } + Turtle* MakeTurtle(int length, int weight, int speed) override { ... } + + // the above methods delegate to this one: + MOCK_METHOD(Turtle*, DoMakeTurtle, ()); +}; +``` + +This allows tests that don't care which overload was invoked to avoid specifying +argument matchers: + +```cpp +ON_CALL(factory, DoMakeTurtle) + .WillByDefault(Return(MakeMockTurtle())); +``` + +### Alternative to Mocking Concrete Classes + +Often you may find yourself using classes that don't implement interfaces. In +order to test your code that uses such a class (let's call it `Concrete`), you +may be tempted to make the methods of `Concrete` virtual and then mock it. + +Try not to do that. + +Making a non-virtual function virtual is a big decision. It creates an extension +point where subclasses can tweak your class' behavior. This weakens your control +on the class because now it's harder to maintain the class invariants. You +should make a function virtual only when there is a valid reason for a subclass +to override it. + +Mocking concrete classes directly is problematic as it creates a tight coupling +between the class and the tests - any small change in the class may invalidate +your tests and make test maintenance a pain. + +To avoid such problems, many programmers have been practicing "coding to +interfaces": instead of talking to the `Concrete` class, your code would define +an interface and talk to it. Then you implement that interface as an adaptor on +top of `Concrete`. In tests, you can easily mock that interface to observe how +your code is doing. + +This technique incurs some overhead: + +* You pay the cost of virtual function calls (usually not a problem). +* There is more abstraction for the programmers to learn. + +However, it can also bring significant benefits in addition to better +testability: + +* `Concrete`'s API may not fit your problem domain very well, as you may not + be the only client it tries to serve. By designing your own interface, you + have a chance to tailor it to your need - you may add higher-level + functionalities, rename stuff, etc instead of just trimming the class. This + allows you to write your code (user of the interface) in a more natural way, + which means it will be more readable, more maintainable, and you'll be more + productive. +* If `Concrete`'s implementation ever has to change, you don't have to rewrite + everywhere it is used. Instead, you can absorb the change in your + implementation of the interface, and your other code and tests will be + insulated from this change. + +Some people worry that if everyone is practicing this technique, they will end +up writing lots of redundant code. This concern is totally understandable. +However, there are two reasons why it may not be the case: + +* Different projects may need to use `Concrete` in different ways, so the best + interfaces for them will be different. Therefore, each of them will have its + own domain-specific interface on top of `Concrete`, and they will not be the + same code. +* If enough projects want to use the same interface, they can always share it, + just like they have been sharing `Concrete`. You can check in the interface + and the adaptor somewhere near `Concrete` (perhaps in a `contrib` + sub-directory) and let many projects use it. + +You need to weigh the pros and cons carefully for your particular problem, but +I'd like to assure you that the Java community has been practicing this for a +long time and it's a proven effective technique applicable in a wide variety of +situations. :-) + +### Delegating Calls to a Fake {#DelegatingToFake} + +Some times you have a non-trivial fake implementation of an interface. For +example: + +```cpp +class Foo { + public: + virtual ~Foo() {} + virtual char DoThis(int n) = 0; + virtual void DoThat(const char* s, int* p) = 0; +}; + +class FakeFoo : public Foo { + public: + char DoThis(int n) override { + return (n > 0) ? '+' : + (n < 0) ? '-' : '0'; + } + + void DoThat(const char* s, int* p) override { + *p = strlen(s); + } +}; +``` + +Now you want to mock this interface such that you can set expectations on it. +However, you also want to use `FakeFoo` for the default behavior, as duplicating +it in the mock object is, well, a lot of work. + +When you define the mock class using gMock, you can have it delegate its default +action to a fake class you already have, using this pattern: + +```cpp +class MockFoo : public Foo { + public: + // Normal mock method definitions using gMock. + MOCK_METHOD(char, DoThis, (int n), (override)); + MOCK_METHOD(void, DoThat, (const char* s, int* p), (override)); + + // Delegates the default actions of the methods to a FakeFoo object. + // This must be called *before* the custom ON_CALL() statements. + void DelegateToFake() { + ON_CALL(*this, DoThis).WillByDefault([this](int n) { + return fake_.DoThis(n); + }); + ON_CALL(*this, DoThat).WillByDefault([this](const char* s, int* p) { + fake_.DoThat(s, p); + }); + } + + private: + FakeFoo fake_; // Keeps an instance of the fake in the mock. +}; +``` + +With that, you can use `MockFoo` in your tests as usual. Just remember that if +you don't explicitly set an action in an `ON_CALL()` or `EXPECT_CALL()`, the +fake will be called upon to do it.: + +```cpp +using ::testing::_; + +TEST(AbcTest, Xyz) { + MockFoo foo; + + foo.DelegateToFake(); // Enables the fake for delegation. + + // Put your ON_CALL(foo, ...)s here, if any. + + // No action specified, meaning to use the default action. + EXPECT_CALL(foo, DoThis(5)); + EXPECT_CALL(foo, DoThat(_, _)); + + int n = 0; + EXPECT_EQ('+', foo.DoThis(5)); // FakeFoo::DoThis() is invoked. + foo.DoThat("Hi", &n); // FakeFoo::DoThat() is invoked. + EXPECT_EQ(2, n); +} +``` + +**Some tips:** + +* If you want, you can still override the default action by providing your own + `ON_CALL()` or using `.WillOnce()` / `.WillRepeatedly()` in `EXPECT_CALL()`. +* In `DelegateToFake()`, you only need to delegate the methods whose fake + implementation you intend to use. + +* The general technique discussed here works for overloaded methods, but + you'll need to tell the compiler which version you mean. To disambiguate a + mock function (the one you specify inside the parentheses of `ON_CALL()`), + use [this technique](#SelectOverload); to disambiguate a fake function (the + one you place inside `Invoke()`), use a `static_cast` to specify the + function's type. For instance, if class `Foo` has methods `char DoThis(int + n)` and `bool DoThis(double x) const`, and you want to invoke the latter, + you need to write `Invoke(&fake_, static_cast(&FakeFoo::DoThis))` instead of `Invoke(&fake_, &FakeFoo::DoThis)` + (The strange-looking thing inside the angled brackets of `static_cast` is + the type of a function pointer to the second `DoThis()` method.). + +* Having to mix a mock and a fake is often a sign of something gone wrong. + Perhaps you haven't got used to the interaction-based way of testing yet. Or + perhaps your interface is taking on too many roles and should be split up. + Therefore, **don't abuse this**. We would only recommend to do it as an + intermediate step when you are refactoring your code. + +Regarding the tip on mixing a mock and a fake, here's an example on why it may +be a bad sign: Suppose you have a class `System` for low-level system +operations. In particular, it does file and I/O operations. And suppose you want +to test how your code uses `System` to do I/O, and you just want the file +operations to work normally. If you mock out the entire `System` class, you'll +have to provide a fake implementation for the file operation part, which +suggests that `System` is taking on too many roles. + +Instead, you can define a `FileOps` interface and an `IOOps` interface and split +`System`'s functionalities into the two. Then you can mock `IOOps` without +mocking `FileOps`. + +### Delegating Calls to a Real Object + +When using testing doubles (mocks, fakes, stubs, and etc), sometimes their +behaviors will differ from those of the real objects. This difference could be +either intentional (as in simulating an error such that you can test the error +handling code) or unintentional. If your mocks have different behaviors than the +real objects by mistake, you could end up with code that passes the tests but +fails in production. + +You can use the *delegating-to-real* technique to ensure that your mock has the +same behavior as the real object while retaining the ability to validate calls. +This technique is very similar to the [delegating-to-fake](#DelegatingToFake) +technique, the difference being that we use a real object instead of a fake. +Here's an example: + +```cpp +using ::testing::AtLeast; + +class MockFoo : public Foo { + public: + MockFoo() { + // By default, all calls are delegated to the real object. + ON_CALL(*this, DoThis).WillByDefault([this](int n) { + return real_.DoThis(n); + }); + ON_CALL(*this, DoThat).WillByDefault([this](const char* s, int* p) { + real_.DoThat(s, p); + }); + ... + } + MOCK_METHOD(char, DoThis, ...); + MOCK_METHOD(void, DoThat, ...); + ... + private: + Foo real_; +}; + +... + MockFoo mock; + EXPECT_CALL(mock, DoThis()) + .Times(3); + EXPECT_CALL(mock, DoThat("Hi")) + .Times(AtLeast(1)); + ... use mock in test ... +``` + +With this, gMock will verify that your code made the right calls (with the right +arguments, in the right order, called the right number of times, etc), and a +real object will answer the calls (so the behavior will be the same as in +production). This gives you the best of both worlds. + +### Delegating Calls to a Parent Class + +Ideally, you should code to interfaces, whose methods are all pure virtual. In +reality, sometimes you do need to mock a virtual method that is not pure (i.e, +it already has an implementation). For example: + +```cpp +class Foo { + public: + virtual ~Foo(); + + virtual void Pure(int n) = 0; + virtual int Concrete(const char* str) { ... } +}; + +class MockFoo : public Foo { + public: + // Mocking a pure method. + MOCK_METHOD(void, Pure, (int n), (override)); + // Mocking a concrete method. Foo::Concrete() is shadowed. + MOCK_METHOD(int, Concrete, (const char* str), (override)); +}; +``` + +Sometimes you may want to call `Foo::Concrete()` instead of +`MockFoo::Concrete()`. Perhaps you want to do it as part of a stub action, or +perhaps your test doesn't need to mock `Concrete()` at all (but it would be +oh-so painful to have to define a new mock class whenever you don't need to mock +one of its methods). + +You can call `Foo::Concrete()` inside an action by: + +```cpp +... + EXPECT_CALL(foo, Concrete).WillOnce([&foo](const char* str) { + return foo.Foo::Concrete(str); + }); +``` + +or tell the mock object that you don't want to mock `Concrete()`: + +```cpp +... + ON_CALL(foo, Concrete).WillByDefault([&foo](const char* str) { + return foo.Foo::Concrete(str); + }); +``` + +(Why don't we just write `{ return foo.Concrete(str); }`? If you do that, +`MockFoo::Concrete()` will be called (and cause an infinite recursion) since +`Foo::Concrete()` is virtual. That's just how C++ works.) + +## Using Matchers + +### Matching Argument Values Exactly + +You can specify exactly which arguments a mock method is expecting: + +```cpp +using ::testing::Return; +... + EXPECT_CALL(foo, DoThis(5)) + .WillOnce(Return('a')); + EXPECT_CALL(foo, DoThat("Hello", bar)); +``` + +### Using Simple Matchers + +You can use matchers to match arguments that have a certain property: + +```cpp +using ::testing::NotNull; +using ::testing::Return; +... + EXPECT_CALL(foo, DoThis(Ge(5))) // The argument must be >= 5. + .WillOnce(Return('a')); + EXPECT_CALL(foo, DoThat("Hello", NotNull())); + // The second argument must not be NULL. +``` + +A frequently used matcher is `_`, which matches anything: + +```cpp + EXPECT_CALL(foo, DoThat(_, NotNull())); +``` + +### Combining Matchers {#CombiningMatchers} + +You can build complex matchers from existing ones using `AllOf()`, +`AllOfArray()`, `AnyOf()`, `AnyOfArray()` and `Not()`: + +```cpp +using ::testing::AllOf; +using ::testing::Gt; +using ::testing::HasSubstr; +using ::testing::Ne; +using ::testing::Not; +... + // The argument must be > 5 and != 10. + EXPECT_CALL(foo, DoThis(AllOf(Gt(5), + Ne(10)))); + + // The first argument must not contain sub-string "blah". + EXPECT_CALL(foo, DoThat(Not(HasSubstr("blah")), + NULL)); +``` + +Matchers are function objects, and parametrized matchers can be composed just +like any other function. However because their types can be long and rarely +provide meaningful information, it can be easier to express them with C++14 +generic lambdas to avoid specifying types. For example, + +```cpp +using ::testing::Contains; +using ::testing::Property; + +inline constexpr auto HasFoo = [](const auto& f) { + return Property(&MyClass::foo, Contains(f)); +}; +... + EXPECT_THAT(x, HasFoo("blah")); +``` + +### Casting Matchers {#SafeMatcherCast} + +gMock matchers are statically typed, meaning that the compiler can catch your +mistake if you use a matcher of the wrong type (for example, if you use `Eq(5)` +to match a `string` argument). Good for you! + +Sometimes, however, you know what you're doing and want the compiler to give you +some slack. One example is that you have a matcher for `long` and the argument +you want to match is `int`. While the two types aren't exactly the same, there +is nothing really wrong with using a `Matcher` to match an `int` - after +all, we can first convert the `int` argument to a `long` losslessly before +giving it to the matcher. + +To support this need, gMock gives you the `SafeMatcherCast(m)` function. It +casts a matcher `m` to type `Matcher`. To ensure safety, gMock checks that +(let `U` be the type `m` accepts : + +1. Type `T` can be *implicitly* cast to type `U`; +2. When both `T` and `U` are built-in arithmetic types (`bool`, integers, and + floating-point numbers), the conversion from `T` to `U` is not lossy (in + other words, any value representable by `T` can also be represented by `U`); + and +3. When `U` is a reference, `T` must also be a reference (as the underlying + matcher may be interested in the address of the `U` value). + +The code won't compile if any of these conditions isn't met. + +Here's one example: + +```cpp +using ::testing::SafeMatcherCast; + +// A base class and a child class. +class Base { ... }; +class Derived : public Base { ... }; + +class MockFoo : public Foo { + public: + MOCK_METHOD(void, DoThis, (Derived* derived), (override)); +}; + +... + MockFoo foo; + // m is a Matcher we got from somewhere. + EXPECT_CALL(foo, DoThis(SafeMatcherCast(m))); +``` + +If you find `SafeMatcherCast(m)` too limiting, you can use a similar function +`MatcherCast(m)`. The difference is that `MatcherCast` works as long as you +can `static_cast` type `T` to type `U`. + +`MatcherCast` essentially lets you bypass C++'s type system (`static_cast` isn't +always safe as it could throw away information, for example), so be careful not +to misuse/abuse it. + +### Selecting Between Overloaded Functions {#SelectOverload} + +If you expect an overloaded function to be called, the compiler may need some +help on which overloaded version it is. + +To disambiguate functions overloaded on the const-ness of this object, use the +`Const()` argument wrapper. + +```cpp +using ::testing::ReturnRef; + +class MockFoo : public Foo { + ... + MOCK_METHOD(Bar&, GetBar, (), (override)); + MOCK_METHOD(const Bar&, GetBar, (), (const, override)); +}; + +... + MockFoo foo; + Bar bar1, bar2; + EXPECT_CALL(foo, GetBar()) // The non-const GetBar(). + .WillOnce(ReturnRef(bar1)); + EXPECT_CALL(Const(foo), GetBar()) // The const GetBar(). + .WillOnce(ReturnRef(bar2)); +``` + +(`Const()` is defined by gMock and returns a `const` reference to its argument.) + +To disambiguate overloaded functions with the same number of arguments but +different argument types, you may need to specify the exact type of a matcher, +either by wrapping your matcher in `Matcher()`, or using a matcher whose +type is fixed (`TypedEq`, `An()`, etc): + +```cpp +using ::testing::An; +using ::testing::Matcher; +using ::testing::TypedEq; + +class MockPrinter : public Printer { + public: + MOCK_METHOD(void, Print, (int n), (override)); + MOCK_METHOD(void, Print, (char c), (override)); +}; + +TEST(PrinterTest, Print) { + MockPrinter printer; + + EXPECT_CALL(printer, Print(An())); // void Print(int); + EXPECT_CALL(printer, Print(Matcher(Lt(5)))); // void Print(int); + EXPECT_CALL(printer, Print(TypedEq('a'))); // void Print(char); + + printer.Print(3); + printer.Print(6); + printer.Print('a'); +} +``` + +### Performing Different Actions Based on the Arguments + +When a mock method is called, the *last* matching expectation that's still +active will be selected (think "newer overrides older"). So, you can make a +method do different things depending on its argument values like this: + +```cpp +using ::testing::_; +using ::testing::Lt; +using ::testing::Return; +... + // The default case. + EXPECT_CALL(foo, DoThis(_)) + .WillRepeatedly(Return('b')); + // The more specific case. + EXPECT_CALL(foo, DoThis(Lt(5))) + .WillRepeatedly(Return('a')); +``` + +Now, if `foo.DoThis()` is called with a value less than 5, `'a'` will be +returned; otherwise `'b'` will be returned. + +### Matching Multiple Arguments as a Whole + +Sometimes it's not enough to match the arguments individually. For example, we +may want to say that the first argument must be less than the second argument. +The `With()` clause allows us to match all arguments of a mock function as a +whole. For example, + +```cpp +using ::testing::_; +using ::testing::Ne; +using ::testing::Lt; +... + EXPECT_CALL(foo, InRange(Ne(0), _)) + .With(Lt()); +``` + +says that the first argument of `InRange()` must not be 0, and must be less than +the second argument. + +The expression inside `With()` must be a matcher of type `Matcher>`, where `A1`, ..., `An` are the types of the function arguments. + +You can also write `AllArgs(m)` instead of `m` inside `.With()`. The two forms +are equivalent, but `.With(AllArgs(Lt()))` is more readable than `.With(Lt())`. + +You can use `Args(m)` to match the `n` selected arguments (as a +tuple) against `m`. For example, + +```cpp +using ::testing::_; +using ::testing::AllOf; +using ::testing::Args; +using ::testing::Lt; +... + EXPECT_CALL(foo, Blah) + .With(AllOf(Args<0, 1>(Lt()), Args<1, 2>(Lt()))); +``` + +says that `Blah` will be called with arguments `x`, `y`, and `z` where `x < y < +z`. Note that in this example, it wasn't necessary specify the positional +matchers. + +As a convenience and example, gMock provides some matchers for 2-tuples, +including the `Lt()` matcher above. See +[Multi-argument Matchers](reference/matchers.md#MultiArgMatchers) for the +complete list. + +Note that if you want to pass the arguments to a predicate of your own (e.g. +`.With(Args<0, 1>(Truly(&MyPredicate)))`), that predicate MUST be written to +take a `std::tuple` as its argument; gMock will pass the `n` selected arguments +as *one* single tuple to the predicate. + +### Using Matchers as Predicates + +Have you noticed that a matcher is just a fancy predicate that also knows how to +describe itself? Many existing algorithms take predicates as arguments (e.g. +those defined in STL's `` header), and it would be a shame if gMock +matchers were not allowed to participate. + +Luckily, you can use a matcher where a unary predicate functor is expected by +wrapping it inside the `Matches()` function. For example, + +```cpp +#include +#include + +using ::testing::Matches; +using ::testing::Ge; + +vector v; +... +// How many elements in v are >= 10? +const int count = count_if(v.begin(), v.end(), Matches(Ge(10))); +``` + +Since you can build complex matchers from simpler ones easily using gMock, this +gives you a way to conveniently construct composite predicates (doing the same +using STL's `` header is just painful). For example, here's a +predicate that's satisfied by any number that is >= 0, <= 100, and != 50: + +```cpp +using testing::AllOf; +using testing::Ge; +using testing::Le; +using testing::Matches; +using testing::Ne; +... +Matches(AllOf(Ge(0), Le(100), Ne(50))) +``` + +### Using Matchers in googletest Assertions + +See [`EXPECT_THAT`](reference/assertions.md#EXPECT_THAT) in the Assertions +Reference. + +### Using Predicates as Matchers + +gMock provides a set of built-in matchers for matching arguments with expected +values—see the [Matchers Reference](reference/matchers.md) for more information. +In case you find the built-in set lacking, you can use an arbitrary unary +predicate function or functor as a matcher - as long as the predicate accepts a +value of the type you want. You do this by wrapping the predicate inside the +`Truly()` function, for example: + +```cpp +using ::testing::Truly; + +int IsEven(int n) { return (n % 2) == 0 ? 1 : 0; } +... + // Bar() must be called with an even number. + EXPECT_CALL(foo, Bar(Truly(IsEven))); +``` + +Note that the predicate function / functor doesn't have to return `bool`. It +works as long as the return value can be used as the condition in in statement +`if (condition) ...`. + +### Matching Arguments that Are Not Copyable + +When you do an `EXPECT_CALL(mock_obj, Foo(bar))`, gMock saves away a copy of +`bar`. When `Foo()` is called later, gMock compares the argument to `Foo()` with +the saved copy of `bar`. This way, you don't need to worry about `bar` being +modified or destroyed after the `EXPECT_CALL()` is executed. The same is true +when you use matchers like `Eq(bar)`, `Le(bar)`, and so on. + +But what if `bar` cannot be copied (i.e. has no copy constructor)? You could +define your own matcher function or callback and use it with `Truly()`, as the +previous couple of recipes have shown. Or, you may be able to get away from it +if you can guarantee that `bar` won't be changed after the `EXPECT_CALL()` is +executed. Just tell gMock that it should save a reference to `bar`, instead of a +copy of it. Here's how: + +```cpp +using ::testing::Eq; +using ::testing::Lt; +... + // Expects that Foo()'s argument == bar. + EXPECT_CALL(mock_obj, Foo(Eq(std::ref(bar)))); + + // Expects that Foo()'s argument < bar. + EXPECT_CALL(mock_obj, Foo(Lt(std::ref(bar)))); +``` + +Remember: if you do this, don't change `bar` after the `EXPECT_CALL()`, or the +result is undefined. + +### Validating a Member of an Object + +Often a mock function takes a reference to object as an argument. When matching +the argument, you may not want to compare the entire object against a fixed +object, as that may be over-specification. Instead, you may need to validate a +certain member variable or the result of a certain getter method of the object. +You can do this with `Field()` and `Property()`. More specifically, + +```cpp +Field(&Foo::bar, m) +``` + +is a matcher that matches a `Foo` object whose `bar` member variable satisfies +matcher `m`. + +```cpp +Property(&Foo::baz, m) +``` + +is a matcher that matches a `Foo` object whose `baz()` method returns a value +that satisfies matcher `m`. + +For example: + +| Expression | Description | +| :--------------------------- | :--------------------------------------- | +| `Field(&Foo::number, Ge(3))` | Matches `x` where `x.number >= 3`. | +| `Property(&Foo::name, StartsWith("John "))` | Matches `x` where `x.name()` starts with `"John "`. | + +Note that in `Property(&Foo::baz, ...)`, method `baz()` must take no argument +and be declared as `const`. Don't use `Property()` against member functions that +you do not own, because taking addresses of functions is fragile and generally +not part of the contract of the function. + +`Field()` and `Property()` can also match plain pointers to objects. For +instance, + +```cpp +using ::testing::Field; +using ::testing::Ge; +... +Field(&Foo::number, Ge(3)) +``` + +matches a plain pointer `p` where `p->number >= 3`. If `p` is `NULL`, the match +will always fail regardless of the inner matcher. + +What if you want to validate more than one members at the same time? Remember +that there are [`AllOf()` and `AllOfArray()`](#CombiningMatchers). + +Finally `Field()` and `Property()` provide overloads that take the field or +property names as the first argument to include it in the error message. This +can be useful when creating combined matchers. + +```cpp +using ::testing::AllOf; +using ::testing::Field; +using ::testing::Matcher; +using ::testing::SafeMatcherCast; + +Matcher IsFoo(const Foo& foo) { + return AllOf(Field("some_field", &Foo::some_field, foo.some_field), + Field("other_field", &Foo::other_field, foo.other_field), + Field("last_field", &Foo::last_field, foo.last_field)); +} +``` + +### Validating the Value Pointed to by a Pointer Argument + +C++ functions often take pointers as arguments. You can use matchers like +`IsNull()`, `NotNull()`, and other comparison matchers to match a pointer, but +what if you want to make sure the value *pointed to* by the pointer, instead of +the pointer itself, has a certain property? Well, you can use the `Pointee(m)` +matcher. + +`Pointee(m)` matches a pointer if and only if `m` matches the value the pointer +points to. For example: + +```cpp +using ::testing::Ge; +using ::testing::Pointee; +... + EXPECT_CALL(foo, Bar(Pointee(Ge(3)))); +``` + +expects `foo.Bar()` to be called with a pointer that points to a value greater +than or equal to 3. + +One nice thing about `Pointee()` is that it treats a `NULL` pointer as a match +failure, so you can write `Pointee(m)` instead of + +```cpp +using ::testing::AllOf; +using ::testing::NotNull; +using ::testing::Pointee; +... + AllOf(NotNull(), Pointee(m)) +``` + +without worrying that a `NULL` pointer will crash your test. + +Also, did we tell you that `Pointee()` works with both raw pointers **and** +smart pointers (`std::unique_ptr`, `std::shared_ptr`, etc)? + +What if you have a pointer to pointer? You guessed it - you can use nested +`Pointee()` to probe deeper inside the value. For example, +`Pointee(Pointee(Lt(3)))` matches a pointer that points to a pointer that points +to a number less than 3 (what a mouthful...). + +### Testing a Certain Property of an Object + +Sometimes you want to specify that an object argument has a certain property, +but there is no existing matcher that does this. If you want good error +messages, you should [define a matcher](#NewMatchers). If you want to do it +quick and dirty, you could get away with writing an ordinary function. + +Let's say you have a mock function that takes an object of type `Foo`, which has +an `int bar()` method and an `int baz()` method, and you want to constrain that +the argument's `bar()` value plus its `baz()` value is a given number. Here's +how you can define a matcher to do it: + +```cpp +using ::testing::Matcher; + +class BarPlusBazEqMatcher { + public: + explicit BarPlusBazEqMatcher(int expected_sum) + : expected_sum_(expected_sum) {} + + bool MatchAndExplain(const Foo& foo, + std::ostream* /* listener */) const { + return (foo.bar() + foo.baz()) == expected_sum_; + } + + void DescribeTo(std::ostream& os) const { + os << "bar() + baz() equals " << expected_sum_; + } + + void DescribeNegationTo(std::ostream& os) const { + os << "bar() + baz() does not equal " << expected_sum_; + } + private: + const int expected_sum_; +}; + +Matcher BarPlusBazEq(int expected_sum) { + return BarPlusBazEqMatcher(expected_sum); +} + +... + EXPECT_CALL(..., DoThis(BarPlusBazEq(5)))...; +``` + +### Matching Containers + +Sometimes an STL container (e.g. list, vector, map, ...) is passed to a mock +function and you may want to validate it. Since most STL containers support the +`==` operator, you can write `Eq(expected_container)` or simply +`expected_container` to match a container exactly. + +Sometimes, though, you may want to be more flexible (for example, the first +element must be an exact match, but the second element can be any positive +number, and so on). Also, containers used in tests often have a small number of +elements, and having to define the expected container out-of-line is a bit of a +hassle. + +You can use the `ElementsAre()` or `UnorderedElementsAre()` matcher in such +cases: + +```cpp +using ::testing::_; +using ::testing::ElementsAre; +using ::testing::Gt; +... + MOCK_METHOD(void, Foo, (const vector& numbers), (override)); +... + EXPECT_CALL(mock, Foo(ElementsAre(1, Gt(0), _, 5))); +``` + +The above matcher says that the container must have 4 elements, which must be 1, +greater than 0, anything, and 5 respectively. + +If you instead write: + +```cpp +using ::testing::_; +using ::testing::Gt; +using ::testing::UnorderedElementsAre; +... + MOCK_METHOD(void, Foo, (const vector& numbers), (override)); +... + EXPECT_CALL(mock, Foo(UnorderedElementsAre(1, Gt(0), _, 5))); +``` + +It means that the container must have 4 elements, which (under some permutation) +must be 1, greater than 0, anything, and 5 respectively. + +As an alternative you can place the arguments in a C-style array and use +`ElementsAreArray()` or `UnorderedElementsAreArray()` instead: + +```cpp +using ::testing::ElementsAreArray; +... + // ElementsAreArray accepts an array of element values. + const int expected_vector1[] = {1, 5, 2, 4, ...}; + EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector1))); + + // Or, an array of element matchers. + Matcher expected_vector2[] = {1, Gt(2), _, 3, ...}; + EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector2))); +``` + +In case the array needs to be dynamically created (and therefore the array size +cannot be inferred by the compiler), you can give `ElementsAreArray()` an +additional argument to specify the array size: + +```cpp +using ::testing::ElementsAreArray; +... + int* const expected_vector3 = new int[count]; + ... fill expected_vector3 with values ... + EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector3, count))); +``` + +Use `Pair` when comparing maps or other associative containers. + +{% raw %} + +```cpp +using testing::ElementsAre; +using testing::Pair; +... + std::map m = {{"a", 1}, {"b", 2}, {"c", 3}}; + EXPECT_THAT(m, ElementsAre(Pair("a", 1), Pair("b", 2), Pair("c", 3))); +``` + +{% endraw %} + +**Tips:** + +* `ElementsAre*()` can be used to match *any* container that implements the + STL iterator pattern (i.e. it has a `const_iterator` type and supports + `begin()/end()`), not just the ones defined in STL. It will even work with + container types yet to be written - as long as they follows the above + pattern. +* You can use nested `ElementsAre*()` to match nested (multi-dimensional) + containers. +* If the container is passed by pointer instead of by reference, just write + `Pointee(ElementsAre*(...))`. +* The order of elements *matters* for `ElementsAre*()`. If you are using it + with containers whose element order are undefined (e.g. `hash_map`) you + should use `WhenSorted` around `ElementsAre`. + +### Sharing Matchers + +Under the hood, a gMock matcher object consists of a pointer to a ref-counted +implementation object. Copying matchers is allowed and very efficient, as only +the pointer is copied. When the last matcher that references the implementation +object dies, the implementation object will be deleted. + +Therefore, if you have some complex matcher that you want to use again and +again, there is no need to build it everytime. Just assign it to a matcher +variable and use that variable repeatedly! For example, + +```cpp +using ::testing::AllOf; +using ::testing::Gt; +using ::testing::Le; +using ::testing::Matcher; +... + Matcher in_range = AllOf(Gt(5), Le(10)); + ... use in_range as a matcher in multiple EXPECT_CALLs ... +``` + +### Matchers must have no side-effects {#PureMatchers} + +{: .callout .warning} +WARNING: gMock does not guarantee when or how many times a matcher will be +invoked. Therefore, all matchers must be *purely functional*: they cannot have +any side effects, and the match result must not depend on anything other than +the matcher's parameters and the value being matched. + +This requirement must be satisfied no matter how a matcher is defined (e.g., if +it is one of the standard matchers, or a custom matcher). In particular, a +matcher can never call a mock function, as that will affect the state of the +mock object and gMock. + +## Setting Expectations + +### Knowing When to Expect {#UseOnCall} + +**`ON_CALL`** is likely the *single most under-utilized construct* in gMock. + +There are basically two constructs for defining the behavior of a mock object: +`ON_CALL` and `EXPECT_CALL`. The difference? `ON_CALL` defines what happens when +a mock method is called, but doesn't imply any expectation on the method +being called. `EXPECT_CALL` not only defines the behavior, but also sets an +expectation that the method will be called with the given arguments, for the +given number of times (and *in the given order* when you specify the order +too). + +Since `EXPECT_CALL` does more, isn't it better than `ON_CALL`? Not really. Every +`EXPECT_CALL` adds a constraint on the behavior of the code under test. Having +more constraints than necessary is *baaad* - even worse than not having enough +constraints. + +This may be counter-intuitive. How could tests that verify more be worse than +tests that verify less? Isn't verification the whole point of tests? + +The answer lies in *what* a test should verify. **A good test verifies the +contract of the code.** If a test over-specifies, it doesn't leave enough +freedom to the implementation. As a result, changing the implementation without +breaking the contract (e.g. refactoring and optimization), which should be +perfectly fine to do, can break such tests. Then you have to spend time fixing +them, only to see them broken again the next time the implementation is changed. + +Keep in mind that one doesn't have to verify more than one property in one test. +In fact, **it's a good style to verify only one thing in one test.** If you do +that, a bug will likely break only one or two tests instead of dozens (which +case would you rather debug?). If you are also in the habit of giving tests +descriptive names that tell what they verify, you can often easily guess what's +wrong just from the test log itself. + +So use `ON_CALL` by default, and only use `EXPECT_CALL` when you actually intend +to verify that the call is made. For example, you may have a bunch of `ON_CALL`s +in your test fixture to set the common mock behavior shared by all tests in the +same group, and write (scarcely) different `EXPECT_CALL`s in different `TEST_F`s +to verify different aspects of the code's behavior. Compared with the style +where each `TEST` has many `EXPECT_CALL`s, this leads to tests that are more +resilient to implementational changes (and thus less likely to require +maintenance) and makes the intent of the tests more obvious (so they are easier +to maintain when you do need to maintain them). + +If you are bothered by the "Uninteresting mock function call" message printed +when a mock method without an `EXPECT_CALL` is called, you may use a `NiceMock` +instead to suppress all such messages for the mock object, or suppress the +message for specific methods by adding `EXPECT_CALL(...).Times(AnyNumber())`. DO +NOT suppress it by blindly adding an `EXPECT_CALL(...)`, or you'll have a test +that's a pain to maintain. + +### Ignoring Uninteresting Calls + +If you are not interested in how a mock method is called, just don't say +anything about it. In this case, if the method is ever called, gMock will +perform its default action to allow the test program to continue. If you are not +happy with the default action taken by gMock, you can override it using +`DefaultValue::Set()` (described [here](#DefaultValue)) or `ON_CALL()`. + +Please note that once you expressed interest in a particular mock method (via +`EXPECT_CALL()`), all invocations to it must match some expectation. If this +function is called but the arguments don't match any `EXPECT_CALL()` statement, +it will be an error. + +### Disallowing Unexpected Calls + +If a mock method shouldn't be called at all, explicitly say so: + +```cpp +using ::testing::_; +... + EXPECT_CALL(foo, Bar(_)) + .Times(0); +``` + +If some calls to the method are allowed, but the rest are not, just list all the +expected calls: + +```cpp +using ::testing::AnyNumber; +using ::testing::Gt; +... + EXPECT_CALL(foo, Bar(5)); + EXPECT_CALL(foo, Bar(Gt(10))) + .Times(AnyNumber()); +``` + +A call to `foo.Bar()` that doesn't match any of the `EXPECT_CALL()` statements +will be an error. + +### Understanding Uninteresting vs Unexpected Calls {#uninteresting-vs-unexpected} + +*Uninteresting* calls and *unexpected* calls are different concepts in gMock. +*Very* different. + +A call `x.Y(...)` is **uninteresting** if there's *not even a single* +`EXPECT_CALL(x, Y(...))` set. In other words, the test isn't interested in the +`x.Y()` method at all, as evident in that the test doesn't care to say anything +about it. + +A call `x.Y(...)` is **unexpected** if there are *some* `EXPECT_CALL(x, +Y(...))`s set, but none of them matches the call. Put another way, the test is +interested in the `x.Y()` method (therefore it explicitly sets some +`EXPECT_CALL` to verify how it's called); however, the verification fails as the +test doesn't expect this particular call to happen. + +**An unexpected call is always an error,** as the code under test doesn't behave +the way the test expects it to behave. + +**By default, an uninteresting call is not an error,** as it violates no +constraint specified by the test. (gMock's philosophy is that saying nothing +means there is no constraint.) However, it leads to a warning, as it *might* +indicate a problem (e.g. the test author might have forgotten to specify a +constraint). + +In gMock, `NiceMock` and `StrictMock` can be used to make a mock class "nice" or +"strict". How does this affect uninteresting calls and unexpected calls? + +A **nice mock** suppresses uninteresting call *warnings*. It is less chatty than +the default mock, but otherwise is the same. If a test fails with a default +mock, it will also fail using a nice mock instead. And vice versa. Don't expect +making a mock nice to change the test's result. + +A **strict mock** turns uninteresting call warnings into errors. So making a +mock strict may change the test's result. + +Let's look at an example: + +```cpp +TEST(...) { + NiceMock mock_registry; + EXPECT_CALL(mock_registry, GetDomainOwner("google.com")) + .WillRepeatedly(Return("Larry Page")); + + // Use mock_registry in code under test. + ... &mock_registry ... +} +``` + +The sole `EXPECT_CALL` here says that all calls to `GetDomainOwner()` must have +`"google.com"` as the argument. If `GetDomainOwner("yahoo.com")` is called, it +will be an unexpected call, and thus an error. *Having a nice mock doesn't +change the severity of an unexpected call.* + +So how do we tell gMock that `GetDomainOwner()` can be called with some other +arguments as well? The standard technique is to add a "catch all" `EXPECT_CALL`: + +```cpp + EXPECT_CALL(mock_registry, GetDomainOwner(_)) + .Times(AnyNumber()); // catches all other calls to this method. + EXPECT_CALL(mock_registry, GetDomainOwner("google.com")) + .WillRepeatedly(Return("Larry Page")); +``` + +Remember that `_` is the wildcard matcher that matches anything. With this, if +`GetDomainOwner("google.com")` is called, it will do what the second +`EXPECT_CALL` says; if it is called with a different argument, it will do what +the first `EXPECT_CALL` says. + +Note that the order of the two `EXPECT_CALL`s is important, as a newer +`EXPECT_CALL` takes precedence over an older one. + +For more on uninteresting calls, nice mocks, and strict mocks, read +["The Nice, the Strict, and the Naggy"](#NiceStrictNaggy). + +### Ignoring Uninteresting Arguments {#ParameterlessExpectations} + +If your test doesn't care about the parameters (it only cares about the number +or order of calls), you can often simply omit the parameter list: + +```cpp + // Expect foo.Bar( ... ) twice with any arguments. + EXPECT_CALL(foo, Bar).Times(2); + + // Delegate to the given method whenever the factory is invoked. + ON_CALL(foo_factory, MakeFoo) + .WillByDefault(&BuildFooForTest); +``` + +This functionality is only available when a method is not overloaded; to prevent +unexpected behavior it is a compilation error to try to set an expectation on a +method where the specific overload is ambiguous. You can work around this by +supplying a [simpler mock interface](#SimplerInterfaces) than the mocked class +provides. + +This pattern is also useful when the arguments are interesting, but match logic +is substantially complex. You can leave the argument list unspecified and use +SaveArg actions to [save the values for later verification](#SaveArgVerify). If +you do that, you can easily differentiate calling the method the wrong number of +times from calling it with the wrong arguments. + +### Expecting Ordered Calls {#OrderedCalls} + +Although an `EXPECT_CALL()` statement defined later takes precedence when gMock +tries to match a function call with an expectation, by default calls don't have +to happen in the order `EXPECT_CALL()` statements are written. For example, if +the arguments match the matchers in the second `EXPECT_CALL()`, but not those in +the first and third, then the second expectation will be used. + +If you would rather have all calls occur in the order of the expectations, put +the `EXPECT_CALL()` statements in a block where you define a variable of type +`InSequence`: + +```cpp +using ::testing::_; +using ::testing::InSequence; + + { + InSequence s; + + EXPECT_CALL(foo, DoThis(5)); + EXPECT_CALL(bar, DoThat(_)) + .Times(2); + EXPECT_CALL(foo, DoThis(6)); + } +``` + +In this example, we expect a call to `foo.DoThis(5)`, followed by two calls to +`bar.DoThat()` where the argument can be anything, which are in turn followed by +a call to `foo.DoThis(6)`. If a call occurred out-of-order, gMock will report an +error. + +### Expecting Partially Ordered Calls {#PartialOrder} + +Sometimes requiring everything to occur in a predetermined order can lead to +brittle tests. For example, we may care about `A` occurring before both `B` and +`C`, but aren't interested in the relative order of `B` and `C`. In this case, +the test should reflect our real intent, instead of being overly constraining. + +gMock allows you to impose an arbitrary DAG (directed acyclic graph) on the +calls. One way to express the DAG is to use the +[`After` clause](reference/mocking.md#EXPECT_CALL.After) of `EXPECT_CALL`. + +Another way is via the `InSequence()` clause (not the same as the `InSequence` +class), which we borrowed from jMock 2. It's less flexible than `After()`, but +more convenient when you have long chains of sequential calls, as it doesn't +require you to come up with different names for the expectations in the chains. +Here's how it works: + +If we view `EXPECT_CALL()` statements as nodes in a graph, and add an edge from +node A to node B wherever A must occur before B, we can get a DAG. We use the +term "sequence" to mean a directed path in this DAG. Now, if we decompose the +DAG into sequences, we just need to know which sequences each `EXPECT_CALL()` +belongs to in order to be able to reconstruct the original DAG. + +So, to specify the partial order on the expectations we need to do two things: +first to define some `Sequence` objects, and then for each `EXPECT_CALL()` say +which `Sequence` objects it is part of. + +Expectations in the same sequence must occur in the order they are written. For +example, + +```cpp +using ::testing::Sequence; +... + Sequence s1, s2; + + EXPECT_CALL(foo, A()) + .InSequence(s1, s2); + EXPECT_CALL(bar, B()) + .InSequence(s1); + EXPECT_CALL(bar, C()) + .InSequence(s2); + EXPECT_CALL(foo, D()) + .InSequence(s2); +``` + +specifies the following DAG (where `s1` is `A -> B`, and `s2` is `A -> C -> D`): + +```text + +---> B + | + A ---| + | + +---> C ---> D +``` + +This means that A must occur before B and C, and C must occur before D. There's +no restriction about the order other than these. + +### Controlling When an Expectation Retires + +When a mock method is called, gMock only considers expectations that are still +active. An expectation is active when created, and becomes inactive (aka +*retires*) when a call that has to occur later has occurred. For example, in + +```cpp +using ::testing::_; +using ::testing::Sequence; +... + Sequence s1, s2; + + EXPECT_CALL(log, Log(WARNING, _, "File too large.")) // #1 + .Times(AnyNumber()) + .InSequence(s1, s2); + EXPECT_CALL(log, Log(WARNING, _, "Data set is empty.")) // #2 + .InSequence(s1); + EXPECT_CALL(log, Log(WARNING, _, "User not found.")) // #3 + .InSequence(s2); +``` + +as soon as either #2 or #3 is matched, #1 will retire. If a warning `"File too +large."` is logged after this, it will be an error. + +Note that an expectation doesn't retire automatically when it's saturated. For +example, + +```cpp +using ::testing::_; +... + EXPECT_CALL(log, Log(WARNING, _, _)); // #1 + EXPECT_CALL(log, Log(WARNING, _, "File too large.")); // #2 +``` + +says that there will be exactly one warning with the message `"File too +large."`. If the second warning contains this message too, #2 will match again +and result in an upper-bound-violated error. + +If this is not what you want, you can ask an expectation to retire as soon as it +becomes saturated: + +```cpp +using ::testing::_; +... + EXPECT_CALL(log, Log(WARNING, _, _)); // #1 + EXPECT_CALL(log, Log(WARNING, _, "File too large.")) // #2 + .RetiresOnSaturation(); +``` + +Here #2 can be used only once, so if you have two warnings with the message +`"File too large."`, the first will match #2 and the second will match #1 - +there will be no error. + +## Using Actions + +### Returning References from Mock Methods + +If a mock function's return type is a reference, you need to use `ReturnRef()` +instead of `Return()` to return a result: + +```cpp +using ::testing::ReturnRef; + +class MockFoo : public Foo { + public: + MOCK_METHOD(Bar&, GetBar, (), (override)); +}; +... + MockFoo foo; + Bar bar; + EXPECT_CALL(foo, GetBar()) + .WillOnce(ReturnRef(bar)); +... +``` + +### Returning Live Values from Mock Methods + +The `Return(x)` action saves a copy of `x` when the action is created, and +always returns the same value whenever it's executed. Sometimes you may want to +instead return the *live* value of `x` (i.e. its value at the time when the +action is *executed*.). Use either `ReturnRef()` or `ReturnPointee()` for this +purpose. + +If the mock function's return type is a reference, you can do it using +`ReturnRef(x)`, as shown in the previous recipe ("Returning References from Mock +Methods"). However, gMock doesn't let you use `ReturnRef()` in a mock function +whose return type is not a reference, as doing that usually indicates a user +error. So, what shall you do? + +Though you may be tempted, DO NOT use `std::ref()`: + +```cpp +using testing::Return; + +class MockFoo : public Foo { + public: + MOCK_METHOD(int, GetValue, (), (override)); +}; +... + int x = 0; + MockFoo foo; + EXPECT_CALL(foo, GetValue()) + .WillRepeatedly(Return(std::ref(x))); // Wrong! + x = 42; + EXPECT_EQ(42, foo.GetValue()); +``` + +Unfortunately, it doesn't work here. The above code will fail with error: + +```text +Value of: foo.GetValue() + Actual: 0 +Expected: 42 +``` + +The reason is that `Return(*value*)` converts `value` to the actual return type +of the mock function at the time when the action is *created*, not when it is +*executed*. (This behavior was chosen for the action to be safe when `value` is +a proxy object that references some temporary objects.) As a result, +`std::ref(x)` is converted to an `int` value (instead of a `const int&`) when +the expectation is set, and `Return(std::ref(x))` will always return 0. + +`ReturnPointee(pointer)` was provided to solve this problem specifically. It +returns the value pointed to by `pointer` at the time the action is *executed*: + +```cpp +using testing::ReturnPointee; +... + int x = 0; + MockFoo foo; + EXPECT_CALL(foo, GetValue()) + .WillRepeatedly(ReturnPointee(&x)); // Note the & here. + x = 42; + EXPECT_EQ(42, foo.GetValue()); // This will succeed now. +``` + +### Combining Actions + +Want to do more than one thing when a function is called? That's fine. `DoAll()` +allow you to do sequence of actions every time. Only the return value of the +last action in the sequence will be used. + +```cpp +using ::testing::_; +using ::testing::DoAll; + +class MockFoo : public Foo { + public: + MOCK_METHOD(bool, Bar, (int n), (override)); +}; +... + EXPECT_CALL(foo, Bar(_)) + .WillOnce(DoAll(action_1, + action_2, + ... + action_n)); +``` + +### Verifying Complex Arguments {#SaveArgVerify} + +If you want to verify that a method is called with a particular argument but the +match criteria is complex, it can be difficult to distinguish between +cardinality failures (calling the method the wrong number of times) and argument +match failures. Similarly, if you are matching multiple parameters, it may not +be easy to distinguishing which argument failed to match. For example: + +```cpp + // Not ideal: this could fail because of a problem with arg1 or arg2, or maybe + // just the method wasn't called. + EXPECT_CALL(foo, SendValues(_, ElementsAre(1, 4, 4, 7), EqualsProto( ... ))); +``` + +You can instead save the arguments and test them individually: + +```cpp + EXPECT_CALL(foo, SendValues) + .WillOnce(DoAll(SaveArg<1>(&actual_array), SaveArg<2>(&actual_proto))); + ... run the test + EXPECT_THAT(actual_array, ElementsAre(1, 4, 4, 7)); + EXPECT_THAT(actual_proto, EqualsProto( ... )); +``` + +### Mocking Side Effects {#MockingSideEffects} + +Sometimes a method exhibits its effect not via returning a value but via side +effects. For example, it may change some global state or modify an output +argument. To mock side effects, in general you can define your own action by +implementing `::testing::ActionInterface`. + +If all you need to do is to change an output argument, the built-in +`SetArgPointee()` action is convenient: + +```cpp +using ::testing::_; +using ::testing::SetArgPointee; + +class MockMutator : public Mutator { + public: + MOCK_METHOD(void, Mutate, (bool mutate, int* value), (override)); + ... +} +... + MockMutator mutator; + EXPECT_CALL(mutator, Mutate(true, _)) + .WillOnce(SetArgPointee<1>(5)); +``` + +In this example, when `mutator.Mutate()` is called, we will assign 5 to the +`int` variable pointed to by argument #1 (0-based). + +`SetArgPointee()` conveniently makes an internal copy of the value you pass to +it, removing the need to keep the value in scope and alive. The implication +however is that the value must have a copy constructor and assignment operator. + +If the mock method also needs to return a value as well, you can chain +`SetArgPointee()` with `Return()` using `DoAll()`, remembering to put the +`Return()` statement last: + +```cpp +using ::testing::_; +using ::testing::Return; +using ::testing::SetArgPointee; + +class MockMutator : public Mutator { + public: + ... + MOCK_METHOD(bool, MutateInt, (int* value), (override)); +} +... + MockMutator mutator; + EXPECT_CALL(mutator, MutateInt(_)) + .WillOnce(DoAll(SetArgPointee<0>(5), + Return(true))); +``` + +Note, however, that if you use the `ReturnOKWith()` method, it will override the +values provided by `SetArgPointee()` in the response parameters of your function +call. + +If the output argument is an array, use the `SetArrayArgument(first, last)` +action instead. It copies the elements in source range `[first, last)` to the +array pointed to by the `N`-th (0-based) argument: + +```cpp +using ::testing::NotNull; +using ::testing::SetArrayArgument; + +class MockArrayMutator : public ArrayMutator { + public: + MOCK_METHOD(void, Mutate, (int* values, int num_values), (override)); + ... +} +... + MockArrayMutator mutator; + int values[5] = {1, 2, 3, 4, 5}; + EXPECT_CALL(mutator, Mutate(NotNull(), 5)) + .WillOnce(SetArrayArgument<0>(values, values + 5)); +``` + +This also works when the argument is an output iterator: + +```cpp +using ::testing::_; +using ::testing::SetArrayArgument; + +class MockRolodex : public Rolodex { + public: + MOCK_METHOD(void, GetNames, (std::back_insert_iterator>), + (override)); + ... +} +... + MockRolodex rolodex; + vector names; + names.push_back("George"); + names.push_back("John"); + names.push_back("Thomas"); + EXPECT_CALL(rolodex, GetNames(_)) + .WillOnce(SetArrayArgument<0>(names.begin(), names.end())); +``` + +### Changing a Mock Object's Behavior Based on the State + +If you expect a call to change the behavior of a mock object, you can use +`::testing::InSequence` to specify different behaviors before and after the +call: + +```cpp +using ::testing::InSequence; +using ::testing::Return; + +... + { + InSequence seq; + EXPECT_CALL(my_mock, IsDirty()) + .WillRepeatedly(Return(true)); + EXPECT_CALL(my_mock, Flush()); + EXPECT_CALL(my_mock, IsDirty()) + .WillRepeatedly(Return(false)); + } + my_mock.FlushIfDirty(); +``` + +This makes `my_mock.IsDirty()` return `true` before `my_mock.Flush()` is called +and return `false` afterwards. + +If the behavior change is more complex, you can store the effects in a variable +and make a mock method get its return value from that variable: + +```cpp +using ::testing::_; +using ::testing::SaveArg; +using ::testing::Return; + +ACTION_P(ReturnPointee, p) { return *p; } +... + int previous_value = 0; + EXPECT_CALL(my_mock, GetPrevValue) + .WillRepeatedly(ReturnPointee(&previous_value)); + EXPECT_CALL(my_mock, UpdateValue) + .WillRepeatedly(SaveArg<0>(&previous_value)); + my_mock.DoSomethingToUpdateValue(); +``` + +Here `my_mock.GetPrevValue()` will always return the argument of the last +`UpdateValue()` call. + +### Setting the Default Value for a Return Type {#DefaultValue} + +If a mock method's return type is a built-in C++ type or pointer, by default it +will return 0 when invoked. Also, in C++ 11 and above, a mock method whose +return type has a default constructor will return a default-constructed value by +default. You only need to specify an action if this default value doesn't work +for you. + +Sometimes, you may want to change this default value, or you may want to specify +a default value for types gMock doesn't know about. You can do this using the +`::testing::DefaultValue` class template: + +```cpp +using ::testing::DefaultValue; + +class MockFoo : public Foo { + public: + MOCK_METHOD(Bar, CalculateBar, (), (override)); +}; + + +... + Bar default_bar; + // Sets the default return value for type Bar. + DefaultValue::Set(default_bar); + + MockFoo foo; + + // We don't need to specify an action here, as the default + // return value works for us. + EXPECT_CALL(foo, CalculateBar()); + + foo.CalculateBar(); // This should return default_bar. + + // Unsets the default return value. + DefaultValue::Clear(); +``` + +Please note that changing the default value for a type can make your tests hard +to understand. We recommend you to use this feature judiciously. For example, +you may want to make sure the `Set()` and `Clear()` calls are right next to the +code that uses your mock. + +### Setting the Default Actions for a Mock Method + +You've learned how to change the default value of a given type. However, this +may be too coarse for your purpose: perhaps you have two mock methods with the +same return type and you want them to have different behaviors. The `ON_CALL()` +macro allows you to customize your mock's behavior at the method level: + +```cpp +using ::testing::_; +using ::testing::AnyNumber; +using ::testing::Gt; +using ::testing::Return; +... + ON_CALL(foo, Sign(_)) + .WillByDefault(Return(-1)); + ON_CALL(foo, Sign(0)) + .WillByDefault(Return(0)); + ON_CALL(foo, Sign(Gt(0))) + .WillByDefault(Return(1)); + + EXPECT_CALL(foo, Sign(_)) + .Times(AnyNumber()); + + foo.Sign(5); // This should return 1. + foo.Sign(-9); // This should return -1. + foo.Sign(0); // This should return 0. +``` + +As you may have guessed, when there are more than one `ON_CALL()` statements, +the newer ones in the order take precedence over the older ones. In other words, +the **last** one that matches the function arguments will be used. This matching +order allows you to set up the common behavior in a mock object's constructor or +the test fixture's set-up phase and specialize the mock's behavior later. + +Note that both `ON_CALL` and `EXPECT_CALL` have the same "later statements take +precedence" rule, but they don't interact. That is, `EXPECT_CALL`s have their +own precedence order distinct from the `ON_CALL` precedence order. + +### Using Functions/Methods/Functors/Lambdas as Actions {#FunctionsAsActions} + +If the built-in actions don't suit you, you can use an existing callable +(function, `std::function`, method, functor, lambda) as an action. + +```cpp +using ::testing::_; using ::testing::Invoke; + +class MockFoo : public Foo { + public: + MOCK_METHOD(int, Sum, (int x, int y), (override)); + MOCK_METHOD(bool, ComplexJob, (int x), (override)); +}; + +int CalculateSum(int x, int y) { return x + y; } +int Sum3(int x, int y, int z) { return x + y + z; } + +class Helper { + public: + bool ComplexJob(int x); +}; + +... + MockFoo foo; + Helper helper; + EXPECT_CALL(foo, Sum(_, _)) + .WillOnce(&CalculateSum) + .WillRepeatedly(Invoke(NewPermanentCallback(Sum3, 1))); + EXPECT_CALL(foo, ComplexJob(_)) + .WillOnce(Invoke(&helper, &Helper::ComplexJob)) + .WillOnce([] { return true; }) + .WillRepeatedly([](int x) { return x > 0; }); + + foo.Sum(5, 6); // Invokes CalculateSum(5, 6). + foo.Sum(2, 3); // Invokes Sum3(1, 2, 3). + foo.ComplexJob(10); // Invokes helper.ComplexJob(10). + foo.ComplexJob(-1); // Invokes the inline lambda. +``` + +The only requirement is that the type of the function, etc must be *compatible* +with the signature of the mock function, meaning that the latter's arguments (if +it takes any) can be implicitly converted to the corresponding arguments of the +former, and the former's return type can be implicitly converted to that of the +latter. So, you can invoke something whose type is *not* exactly the same as the +mock function, as long as it's safe to do so - nice, huh? + +Note that: + +* The action takes ownership of the callback and will delete it when the + action itself is destructed. +* If the type of a callback is derived from a base callback type `C`, you need + to implicitly cast it to `C` to resolve the overloading, e.g. + + ```cpp + using ::testing::Invoke; + ... + ResultCallback* is_ok = ...; + ... Invoke(is_ok) ...; // This works. + + BlockingClosure* done = new BlockingClosure; + ... Invoke(implicit_cast(done)) ...; // The cast is necessary. + ``` + +### Using Functions with Extra Info as Actions + +The function or functor you call using `Invoke()` must have the same number of +arguments as the mock function you use it for. Sometimes you may have a function +that takes more arguments, and you are willing to pass in the extra arguments +yourself to fill the gap. You can do this in gMock using callbacks with +pre-bound arguments. Here's an example: + +```cpp +using ::testing::Invoke; + +class MockFoo : public Foo { + public: + MOCK_METHOD(char, DoThis, (int n), (override)); +}; + +char SignOfSum(int x, int y) { + const int sum = x + y; + return (sum > 0) ? '+' : (sum < 0) ? '-' : '0'; +} + +TEST_F(FooTest, Test) { + MockFoo foo; + + EXPECT_CALL(foo, DoThis(2)) + .WillOnce(Invoke(NewPermanentCallback(SignOfSum, 5))); + EXPECT_EQ('+', foo.DoThis(2)); // Invokes SignOfSum(5, 2). +} +``` + +### Invoking a Function/Method/Functor/Lambda/Callback Without Arguments + +`Invoke()` passes the mock function's arguments to the function, etc being +invoked such that the callee has the full context of the call to work with. If +the invoked function is not interested in some or all of the arguments, it can +simply ignore them. + +Yet, a common pattern is that a test author wants to invoke a function without +the arguments of the mock function. She could do that using a wrapper function +that throws away the arguments before invoking an underlining nullary function. +Needless to say, this can be tedious and obscures the intent of the test. + +There are two solutions to this problem. First, you can pass any callable of +zero args as an action. Alternatively, use `InvokeWithoutArgs()`, which is like +`Invoke()` except that it doesn't pass the mock function's arguments to the +callee. Here's an example of each: + +```cpp +using ::testing::_; +using ::testing::InvokeWithoutArgs; + +class MockFoo : public Foo { + public: + MOCK_METHOD(bool, ComplexJob, (int n), (override)); +}; + +bool Job1() { ... } +bool Job2(int n, char c) { ... } + +... + MockFoo foo; + EXPECT_CALL(foo, ComplexJob(_)) + .WillOnce([] { Job1(); }); + .WillOnce(InvokeWithoutArgs(NewPermanentCallback(Job2, 5, 'a'))); + + foo.ComplexJob(10); // Invokes Job1(). + foo.ComplexJob(20); // Invokes Job2(5, 'a'). +``` + +Note that: + +* The action takes ownership of the callback and will delete it when the + action itself is destructed. +* If the type of a callback is derived from a base callback type `C`, you need + to implicitly cast it to `C` to resolve the overloading, e.g. + + ```cpp + using ::testing::InvokeWithoutArgs; + ... + ResultCallback* is_ok = ...; + ... InvokeWithoutArgs(is_ok) ...; // This works. + + BlockingClosure* done = ...; + ... InvokeWithoutArgs(implicit_cast(done)) ...; + // The cast is necessary. + ``` + +### Invoking an Argument of the Mock Function + +Sometimes a mock function will receive a function pointer, a functor (in other +words, a "callable") as an argument, e.g. + +```cpp +class MockFoo : public Foo { + public: + MOCK_METHOD(bool, DoThis, (int n, (ResultCallback1* callback)), + (override)); +}; +``` + +and you may want to invoke this callable argument: + +```cpp +using ::testing::_; +... + MockFoo foo; + EXPECT_CALL(foo, DoThis(_, _)) + .WillOnce(...); + // Will execute callback->Run(5), where callback is the + // second argument DoThis() receives. +``` + +{: .callout .note} +NOTE: The section below is legacy documentation from before C++ had lambdas: + +Arghh, you need to refer to a mock function argument but C++ has no lambda +(yet), so you have to define your own action. :-( Or do you really? + +Well, gMock has an action to solve *exactly* this problem: + +```cpp +InvokeArgument(arg_1, arg_2, ..., arg_m) +``` + +will invoke the `N`-th (0-based) argument the mock function receives, with +`arg_1`, `arg_2`, ..., and `arg_m`. No matter if the argument is a function +pointer, a functor, or a callback. gMock handles them all. + +With that, you could write: + +```cpp +using ::testing::_; +using ::testing::InvokeArgument; +... + EXPECT_CALL(foo, DoThis(_, _)) + .WillOnce(InvokeArgument<1>(5)); + // Will execute callback->Run(5), where callback is the + // second argument DoThis() receives. +``` + +What if the callable takes an argument by reference? No problem - just wrap it +inside `std::ref()`: + +```cpp + ... + MOCK_METHOD(bool, Bar, + ((ResultCallback2* callback)), + (override)); + ... + using ::testing::_; + using ::testing::InvokeArgument; + ... + MockFoo foo; + Helper helper; + ... + EXPECT_CALL(foo, Bar(_)) + .WillOnce(InvokeArgument<0>(5, std::ref(helper))); + // std::ref(helper) guarantees that a reference to helper, not a copy of + // it, will be passed to the callback. +``` + +What if the callable takes an argument by reference and we do **not** wrap the +argument in `std::ref()`? Then `InvokeArgument()` will *make a copy* of the +argument, and pass a *reference to the copy*, instead of a reference to the +original value, to the callable. This is especially handy when the argument is a +temporary value: + +```cpp + ... + MOCK_METHOD(bool, DoThat, (bool (*f)(const double& x, const string& s)), + (override)); + ... + using ::testing::_; + using ::testing::InvokeArgument; + ... + MockFoo foo; + ... + EXPECT_CALL(foo, DoThat(_)) + .WillOnce(InvokeArgument<0>(5.0, string("Hi"))); + // Will execute (*f)(5.0, string("Hi")), where f is the function pointer + // DoThat() receives. Note that the values 5.0 and string("Hi") are + // temporary and dead once the EXPECT_CALL() statement finishes. Yet + // it's fine to perform this action later, since a copy of the values + // are kept inside the InvokeArgument action. +``` + +### Ignoring an Action's Result + +Sometimes you have an action that returns *something*, but you need an action +that returns `void` (perhaps you want to use it in a mock function that returns +`void`, or perhaps it needs to be used in `DoAll()` and it's not the last in the +list). `IgnoreResult()` lets you do that. For example: + +```cpp +using ::testing::_; +using ::testing::DoAll; +using ::testing::IgnoreResult; +using ::testing::Return; + +int Process(const MyData& data); +string DoSomething(); + +class MockFoo : public Foo { + public: + MOCK_METHOD(void, Abc, (const MyData& data), (override)); + MOCK_METHOD(bool, Xyz, (), (override)); +}; + + ... + MockFoo foo; + EXPECT_CALL(foo, Abc(_)) + // .WillOnce(Invoke(Process)); + // The above line won't compile as Process() returns int but Abc() needs + // to return void. + .WillOnce(IgnoreResult(Process)); + EXPECT_CALL(foo, Xyz()) + .WillOnce(DoAll(IgnoreResult(DoSomething), + // Ignores the string DoSomething() returns. + Return(true))); +``` + +Note that you **cannot** use `IgnoreResult()` on an action that already returns +`void`. Doing so will lead to ugly compiler errors. + +### Selecting an Action's Arguments {#SelectingArgs} + +Say you have a mock function `Foo()` that takes seven arguments, and you have a +custom action that you want to invoke when `Foo()` is called. Trouble is, the +custom action only wants three arguments: + +```cpp +using ::testing::_; +using ::testing::Invoke; +... + MOCK_METHOD(bool, Foo, + (bool visible, const string& name, int x, int y, + (const map>), double& weight, double min_weight, + double max_wight)); +... +bool IsVisibleInQuadrant1(bool visible, int x, int y) { + return visible && x >= 0 && y >= 0; +} +... + EXPECT_CALL(mock, Foo) + .WillOnce(Invoke(IsVisibleInQuadrant1)); // Uh, won't compile. :-( +``` + +To please the compiler God, you need to define an "adaptor" that has the same +signature as `Foo()` and calls the custom action with the right arguments: + +```cpp +using ::testing::_; +using ::testing::Invoke; +... +bool MyIsVisibleInQuadrant1(bool visible, const string& name, int x, int y, + const map, double>& weight, + double min_weight, double max_wight) { + return IsVisibleInQuadrant1(visible, x, y); +} +... + EXPECT_CALL(mock, Foo) + .WillOnce(Invoke(MyIsVisibleInQuadrant1)); // Now it works. +``` + +But isn't this awkward? + +gMock provides a generic *action adaptor*, so you can spend your time minding +more important business than writing your own adaptors. Here's the syntax: + +```cpp +WithArgs(action) +``` + +creates an action that passes the arguments of the mock function at the given +indices (0-based) to the inner `action` and performs it. Using `WithArgs`, our +original example can be written as: + +```cpp +using ::testing::_; +using ::testing::Invoke; +using ::testing::WithArgs; +... + EXPECT_CALL(mock, Foo) + .WillOnce(WithArgs<0, 2, 3>(Invoke(IsVisibleInQuadrant1))); // No need to define your own adaptor. +``` + +For better readability, gMock also gives you: + +* `WithoutArgs(action)` when the inner `action` takes *no* argument, and +* `WithArg(action)` (no `s` after `Arg`) when the inner `action` takes + *one* argument. + +As you may have realized, `InvokeWithoutArgs(...)` is just syntactic sugar for +`WithoutArgs(Invoke(...))`. + +Here are more tips: + +* The inner action used in `WithArgs` and friends does not have to be + `Invoke()` -- it can be anything. +* You can repeat an argument in the argument list if necessary, e.g. + `WithArgs<2, 3, 3, 5>(...)`. +* You can change the order of the arguments, e.g. `WithArgs<3, 2, 1>(...)`. +* The types of the selected arguments do *not* have to match the signature of + the inner action exactly. It works as long as they can be implicitly + converted to the corresponding arguments of the inner action. For example, + if the 4-th argument of the mock function is an `int` and `my_action` takes + a `double`, `WithArg<4>(my_action)` will work. + +### Ignoring Arguments in Action Functions + +The [selecting-an-action's-arguments](#SelectingArgs) recipe showed us one way +to make a mock function and an action with incompatible argument lists fit +together. The downside is that wrapping the action in `WithArgs<...>()` can get +tedious for people writing the tests. + +If you are defining a function (or method, functor, lambda, callback) to be used +with `Invoke*()`, and you are not interested in some of its arguments, an +alternative to `WithArgs` is to declare the uninteresting arguments as `Unused`. +This makes the definition less cluttered and less fragile in case the types of +the uninteresting arguments change. It could also increase the chance the action +function can be reused. For example, given + +```cpp + public: + MOCK_METHOD(double, Foo, double(const string& label, double x, double y), + (override)); + MOCK_METHOD(double, Bar, (int index, double x, double y), (override)); +``` + +instead of + +```cpp +using ::testing::_; +using ::testing::Invoke; + +double DistanceToOriginWithLabel(const string& label, double x, double y) { + return sqrt(x*x + y*y); +} +double DistanceToOriginWithIndex(int index, double x, double y) { + return sqrt(x*x + y*y); +} +... + EXPECT_CALL(mock, Foo("abc", _, _)) + .WillOnce(Invoke(DistanceToOriginWithLabel)); + EXPECT_CALL(mock, Bar(5, _, _)) + .WillOnce(Invoke(DistanceToOriginWithIndex)); +``` + +you could write + +```cpp +using ::testing::_; +using ::testing::Invoke; +using ::testing::Unused; + +double DistanceToOrigin(Unused, double x, double y) { + return sqrt(x*x + y*y); +} +... + EXPECT_CALL(mock, Foo("abc", _, _)) + .WillOnce(Invoke(DistanceToOrigin)); + EXPECT_CALL(mock, Bar(5, _, _)) + .WillOnce(Invoke(DistanceToOrigin)); +``` + +### Sharing Actions + +Just like matchers, a gMock action object consists of a pointer to a ref-counted +implementation object. Therefore copying actions is also allowed and very +efficient. When the last action that references the implementation object dies, +the implementation object will be deleted. + +If you have some complex action that you want to use again and again, you may +not have to build it from scratch everytime. If the action doesn't have an +internal state (i.e. if it always does the same thing no matter how many times +it has been called), you can assign it to an action variable and use that +variable repeatedly. For example: + +```cpp +using ::testing::Action; +using ::testing::DoAll; +using ::testing::Return; +using ::testing::SetArgPointee; +... + Action set_flag = DoAll(SetArgPointee<0>(5), + Return(true)); + ... use set_flag in .WillOnce() and .WillRepeatedly() ... +``` + +However, if the action has its own state, you may be surprised if you share the +action object. Suppose you have an action factory `IncrementCounter(init)` which +creates an action that increments and returns a counter whose initial value is +`init`, using two actions created from the same expression and using a shared +action will exhibit different behaviors. Example: + +```cpp + EXPECT_CALL(foo, DoThis()) + .WillRepeatedly(IncrementCounter(0)); + EXPECT_CALL(foo, DoThat()) + .WillRepeatedly(IncrementCounter(0)); + foo.DoThis(); // Returns 1. + foo.DoThis(); // Returns 2. + foo.DoThat(); // Returns 1 - Blah() uses a different + // counter than Bar()'s. +``` + +versus + +```cpp +using ::testing::Action; +... + Action increment = IncrementCounter(0); + EXPECT_CALL(foo, DoThis()) + .WillRepeatedly(increment); + EXPECT_CALL(foo, DoThat()) + .WillRepeatedly(increment); + foo.DoThis(); // Returns 1. + foo.DoThis(); // Returns 2. + foo.DoThat(); // Returns 3 - the counter is shared. +``` + +### Testing Asynchronous Behavior + +One oft-encountered problem with gMock is that it can be hard to test +asynchronous behavior. Suppose you had a `EventQueue` class that you wanted to +test, and you created a separate `EventDispatcher` interface so that you could +easily mock it out. However, the implementation of the class fired all the +events on a background thread, which made test timings difficult. You could just +insert `sleep()` statements and hope for the best, but that makes your test +behavior nondeterministic. A better way is to use gMock actions and +`Notification` objects to force your asynchronous test to behave synchronously. + +```cpp +class MockEventDispatcher : public EventDispatcher { + MOCK_METHOD(bool, DispatchEvent, (int32), (override)); +}; + +TEST(EventQueueTest, EnqueueEventTest) { + MockEventDispatcher mock_event_dispatcher; + EventQueue event_queue(&mock_event_dispatcher); + + const int32 kEventId = 321; + absl::Notification done; + EXPECT_CALL(mock_event_dispatcher, DispatchEvent(kEventId)) + .WillOnce([&done] { done.Notify(); }); + + event_queue.EnqueueEvent(kEventId); + done.WaitForNotification(); +} +``` + +In the example above, we set our normal gMock expectations, but then add an +additional action to notify the `Notification` object. Now we can just call +`Notification::WaitForNotification()` in the main thread to wait for the +asynchronous call to finish. After that, our test suite is complete and we can +safely exit. + +{: .callout .note} +Note: this example has a downside: namely, if the expectation is not satisfied, +our test will run forever. It will eventually time-out and fail, but it will +take longer and be slightly harder to debug. To alleviate this problem, you can +use `WaitForNotificationWithTimeout(ms)` instead of `WaitForNotification()`. + +## Misc Recipes on Using gMock + +### Mocking Methods That Use Move-Only Types + +C++11 introduced *move-only types*. A move-only-typed value can be moved from +one object to another, but cannot be copied. `std::unique_ptr` is probably +the most commonly used move-only type. + +Mocking a method that takes and/or returns move-only types presents some +challenges, but nothing insurmountable. This recipe shows you how you can do it. +Note that the support for move-only method arguments was only introduced to +gMock in April 2017; in older code, you may find more complex +[workarounds](#LegacyMoveOnly) for lack of this feature. + +Let’s say we are working on a fictional project that lets one post and share +snippets called “buzzes”. Your code uses these types: + +```cpp +enum class AccessLevel { kInternal, kPublic }; + +class Buzz { + public: + explicit Buzz(AccessLevel access) { ... } + ... +}; + +class Buzzer { + public: + virtual ~Buzzer() {} + virtual std::unique_ptr MakeBuzz(StringPiece text) = 0; + virtual bool ShareBuzz(std::unique_ptr buzz, int64_t timestamp) = 0; + ... +}; +``` + +A `Buzz` object represents a snippet being posted. A class that implements the +`Buzzer` interface is capable of creating and sharing `Buzz`es. Methods in +`Buzzer` may return a `unique_ptr` or take a `unique_ptr`. Now we +need to mock `Buzzer` in our tests. + +To mock a method that accepts or returns move-only types, you just use the +familiar `MOCK_METHOD` syntax as usual: + +```cpp +class MockBuzzer : public Buzzer { + public: + MOCK_METHOD(std::unique_ptr, MakeBuzz, (StringPiece text), (override)); + MOCK_METHOD(bool, ShareBuzz, (std::unique_ptr buzz, int64_t timestamp), + (override)); +}; +``` + +Now that we have the mock class defined, we can use it in tests. In the +following code examples, we assume that we have defined a `MockBuzzer` object +named `mock_buzzer_`: + +```cpp + MockBuzzer mock_buzzer_; +``` + +First let’s see how we can set expectations on the `MakeBuzz()` method, which +returns a `unique_ptr`. + +As usual, if you set an expectation without an action (i.e. the `.WillOnce()` or +`.WillRepeatedly()` clause), when that expectation fires, the default action for +that method will be taken. Since `unique_ptr<>` has a default constructor that +returns a null `unique_ptr`, that’s what you’ll get if you don’t specify an +action: + +```cpp + // Use the default action. + EXPECT_CALL(mock_buzzer_, MakeBuzz("hello")); + + // Triggers the previous EXPECT_CALL. + EXPECT_EQ(nullptr, mock_buzzer_.MakeBuzz("hello")); +``` + +If you are not happy with the default action, you can tweak it as usual; see +[Setting Default Actions](#OnCall). + +If you just need to return a pre-defined move-only value, you can use the +`Return(ByMove(...))` action: + +```cpp + // When this fires, the unique_ptr<> specified by ByMove(...) will + // be returned. + EXPECT_CALL(mock_buzzer_, MakeBuzz("world")) + .WillOnce(Return(ByMove(MakeUnique(AccessLevel::kInternal)))); + + EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("world")); +``` + +Note that `ByMove()` is essential here - if you drop it, the code won’t compile. + +Quiz time! What do you think will happen if a `Return(ByMove(...))` action is +performed more than once (e.g. you write `... +.WillRepeatedly(Return(ByMove(...)));`)? Come think of it, after the first time +the action runs, the source value will be consumed (since it’s a move-only +value), so the next time around, there’s no value to move from -- you’ll get a +run-time error that `Return(ByMove(...))` can only be run once. + +If you need your mock method to do more than just moving a pre-defined value, +remember that you can always use a lambda or a callable object, which can do +pretty much anything you want: + +```cpp + EXPECT_CALL(mock_buzzer_, MakeBuzz("x")) + .WillRepeatedly([](StringPiece text) { + return MakeUnique(AccessLevel::kInternal); + }); + + EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("x")); + EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("x")); +``` + +Every time this `EXPECT_CALL` fires, a new `unique_ptr` will be created +and returned. You cannot do this with `Return(ByMove(...))`. + +That covers returning move-only values; but how do we work with methods +accepting move-only arguments? The answer is that they work normally, although +some actions will not compile when any of method's arguments are move-only. You +can always use `Return`, or a [lambda or functor](#FunctionsAsActions): + +```cpp + using ::testing::Unused; + + EXPECT_CALL(mock_buzzer_, ShareBuzz(NotNull(), _)).WillOnce(Return(true)); + EXPECT_TRUE(mock_buzzer_.ShareBuzz(MakeUnique(AccessLevel::kInternal)), + 0); + + EXPECT_CALL(mock_buzzer_, ShareBuzz(_, _)).WillOnce( + [](std::unique_ptr buzz, Unused) { return buzz != nullptr; }); + EXPECT_FALSE(mock_buzzer_.ShareBuzz(nullptr, 0)); +``` + +Many built-in actions (`WithArgs`, `WithoutArgs`,`DeleteArg`, `SaveArg`, ...) +could in principle support move-only arguments, but the support for this is not +implemented yet. If this is blocking you, please file a bug. + +A few actions (e.g. `DoAll`) copy their arguments internally, so they can never +work with non-copyable objects; you'll have to use functors instead. + +#### Legacy workarounds for move-only types {#LegacyMoveOnly} + +Support for move-only function arguments was only introduced to gMock in April +of 2017. In older code, you may encounter the following workaround for the lack +of this feature (it is no longer necessary - we're including it just for +reference): + +```cpp +class MockBuzzer : public Buzzer { + public: + MOCK_METHOD(bool, DoShareBuzz, (Buzz* buzz, Time timestamp)); + bool ShareBuzz(std::unique_ptr buzz, Time timestamp) override { + return DoShareBuzz(buzz.get(), timestamp); + } +}; +``` + +The trick is to delegate the `ShareBuzz()` method to a mock method (let’s call +it `DoShareBuzz()`) that does not take move-only parameters. Then, instead of +setting expectations on `ShareBuzz()`, you set them on the `DoShareBuzz()` mock +method: + +```cpp + MockBuzzer mock_buzzer_; + EXPECT_CALL(mock_buzzer_, DoShareBuzz(NotNull(), _)); + + // When one calls ShareBuzz() on the MockBuzzer like this, the call is + // forwarded to DoShareBuzz(), which is mocked. Therefore this statement + // will trigger the above EXPECT_CALL. + mock_buzzer_.ShareBuzz(MakeUnique(AccessLevel::kInternal), 0); +``` + +### Making the Compilation Faster + +Believe it or not, the *vast majority* of the time spent on compiling a mock +class is in generating its constructor and destructor, as they perform +non-trivial tasks (e.g. verification of the expectations). What's more, mock +methods with different signatures have different types and thus their +constructors/destructors need to be generated by the compiler separately. As a +result, if you mock many different types of methods, compiling your mock class +can get really slow. + +If you are experiencing slow compilation, you can move the definition of your +mock class' constructor and destructor out of the class body and into a `.cc` +file. This way, even if you `#include` your mock class in N files, the compiler +only needs to generate its constructor and destructor once, resulting in a much +faster compilation. + +Let's illustrate the idea using an example. Here's the definition of a mock +class before applying this recipe: + +```cpp +// File mock_foo.h. +... +class MockFoo : public Foo { + public: + // Since we don't declare the constructor or the destructor, + // the compiler will generate them in every translation unit + // where this mock class is used. + + MOCK_METHOD(int, DoThis, (), (override)); + MOCK_METHOD(bool, DoThat, (const char* str), (override)); + ... more mock methods ... +}; +``` + +After the change, it would look like: + +```cpp +// File mock_foo.h. +... +class MockFoo : public Foo { + public: + // The constructor and destructor are declared, but not defined, here. + MockFoo(); + virtual ~MockFoo(); + + MOCK_METHOD(int, DoThis, (), (override)); + MOCK_METHOD(bool, DoThat, (const char* str), (override)); + ... more mock methods ... +}; +``` + +and + +```cpp +// File mock_foo.cc. +#include "path/to/mock_foo.h" + +// The definitions may appear trivial, but the functions actually do a +// lot of things through the constructors/destructors of the member +// variables used to implement the mock methods. +MockFoo::MockFoo() {} +MockFoo::~MockFoo() {} +``` + +### Forcing a Verification + +When it's being destroyed, your friendly mock object will automatically verify +that all expectations on it have been satisfied, and will generate googletest +failures if not. This is convenient as it leaves you with one less thing to +worry about. That is, unless you are not sure if your mock object will be +destroyed. + +How could it be that your mock object won't eventually be destroyed? Well, it +might be created on the heap and owned by the code you are testing. Suppose +there's a bug in that code and it doesn't delete the mock object properly - you +could end up with a passing test when there's actually a bug. + +Using a heap checker is a good idea and can alleviate the concern, but its +implementation is not 100% reliable. So, sometimes you do want to *force* gMock +to verify a mock object before it is (hopefully) destructed. You can do this +with `Mock::VerifyAndClearExpectations(&mock_object)`: + +```cpp +TEST(MyServerTest, ProcessesRequest) { + using ::testing::Mock; + + MockFoo* const foo = new MockFoo; + EXPECT_CALL(*foo, ...)...; + // ... other expectations ... + + // server now owns foo. + MyServer server(foo); + server.ProcessRequest(...); + + // In case that server's destructor will forget to delete foo, + // this will verify the expectations anyway. + Mock::VerifyAndClearExpectations(foo); +} // server is destroyed when it goes out of scope here. +``` + +{: .callout .tip} +**Tip:** The `Mock::VerifyAndClearExpectations()` function returns a `bool` to +indicate whether the verification was successful (`true` for yes), so you can +wrap that function call inside a `ASSERT_TRUE()` if there is no point going +further when the verification has failed. + +Do not set new expectations after verifying and clearing a mock after its use. +Setting expectations after code that exercises the mock has undefined behavior. +See [Using Mocks in Tests](gmock_for_dummies.md#using-mocks-in-tests) for more +information. + +### Using Checkpoints {#UsingCheckPoints} + +Sometimes you might want to test a mock object's behavior in phases whose sizes +are each manageable, or you might want to set more detailed expectations about +which API calls invoke which mock functions. + +A technique you can use is to put the expectations in a sequence and insert +calls to a dummy "checkpoint" function at specific places. Then you can verify +that the mock function calls do happen at the right time. For example, if you +are exercising the code: + +```cpp + Foo(1); + Foo(2); + Foo(3); +``` + +and want to verify that `Foo(1)` and `Foo(3)` both invoke `mock.Bar("a")`, but +`Foo(2)` doesn't invoke anything, you can write: + +```cpp +using ::testing::MockFunction; + +TEST(FooTest, InvokesBarCorrectly) { + MyMock mock; + // Class MockFunction has exactly one mock method. It is named + // Call() and has type F. + MockFunction check; + { + InSequence s; + + EXPECT_CALL(mock, Bar("a")); + EXPECT_CALL(check, Call("1")); + EXPECT_CALL(check, Call("2")); + EXPECT_CALL(mock, Bar("a")); + } + Foo(1); + check.Call("1"); + Foo(2); + check.Call("2"); + Foo(3); +} +``` + +The expectation spec says that the first `Bar("a")` call must happen before +checkpoint "1", the second `Bar("a")` call must happen after checkpoint "2", and +nothing should happen between the two checkpoints. The explicit checkpoints make +it clear which `Bar("a")` is called by which call to `Foo()`. + +### Mocking Destructors + +Sometimes you want to make sure a mock object is destructed at the right time, +e.g. after `bar->A()` is called but before `bar->B()` is called. We already know +that you can specify constraints on the [order](#OrderedCalls) of mock function +calls, so all we need to do is to mock the destructor of the mock function. + +This sounds simple, except for one problem: a destructor is a special function +with special syntax and special semantics, and the `MOCK_METHOD` macro doesn't +work for it: + +```cpp +MOCK_METHOD(void, ~MockFoo, ()); // Won't compile! +``` + +The good news is that you can use a simple pattern to achieve the same effect. +First, add a mock function `Die()` to your mock class and call it in the +destructor, like this: + +```cpp +class MockFoo : public Foo { + ... + // Add the following two lines to the mock class. + MOCK_METHOD(void, Die, ()); + ~MockFoo() override { Die(); } +}; +``` + +(If the name `Die()` clashes with an existing symbol, choose another name.) Now, +we have translated the problem of testing when a `MockFoo` object dies to +testing when its `Die()` method is called: + +```cpp + MockFoo* foo = new MockFoo; + MockBar* bar = new MockBar; + ... + { + InSequence s; + + // Expects *foo to die after bar->A() and before bar->B(). + EXPECT_CALL(*bar, A()); + EXPECT_CALL(*foo, Die()); + EXPECT_CALL(*bar, B()); + } +``` + +And that's that. + +### Using gMock and Threads {#UsingThreads} + +In a **unit** test, it's best if you could isolate and test a piece of code in a +single-threaded context. That avoids race conditions and dead locks, and makes +debugging your test much easier. + +Yet most programs are multi-threaded, and sometimes to test something we need to +pound on it from more than one thread. gMock works for this purpose too. + +Remember the steps for using a mock: + +1. Create a mock object `foo`. +2. Set its default actions and expectations using `ON_CALL()` and + `EXPECT_CALL()`. +3. The code under test calls methods of `foo`. +4. Optionally, verify and reset the mock. +5. Destroy the mock yourself, or let the code under test destroy it. The + destructor will automatically verify it. + +If you follow the following simple rules, your mocks and threads can live +happily together: + +* Execute your *test code* (as opposed to the code being tested) in *one* + thread. This makes your test easy to follow. +* Obviously, you can do step #1 without locking. +* When doing step #2 and #5, make sure no other thread is accessing `foo`. + Obvious too, huh? +* #3 and #4 can be done either in one thread or in multiple threads - anyway + you want. gMock takes care of the locking, so you don't have to do any - + unless required by your test logic. + +If you violate the rules (for example, if you set expectations on a mock while +another thread is calling its methods), you get undefined behavior. That's not +fun, so don't do it. + +gMock guarantees that the action for a mock function is done in the same thread +that called the mock function. For example, in + +```cpp + EXPECT_CALL(mock, Foo(1)) + .WillOnce(action1); + EXPECT_CALL(mock, Foo(2)) + .WillOnce(action2); +``` + +if `Foo(1)` is called in thread 1 and `Foo(2)` is called in thread 2, gMock will +execute `action1` in thread 1 and `action2` in thread 2. + +gMock does *not* impose a sequence on actions performed in different threads +(doing so may create deadlocks as the actions may need to cooperate). This means +that the execution of `action1` and `action2` in the above example *may* +interleave. If this is a problem, you should add proper synchronization logic to +`action1` and `action2` to make the test thread-safe. + +Also, remember that `DefaultValue` is a global resource that potentially +affects *all* living mock objects in your program. Naturally, you won't want to +mess with it from multiple threads or when there still are mocks in action. + +### Controlling How Much Information gMock Prints + +When gMock sees something that has the potential of being an error (e.g. a mock +function with no expectation is called, a.k.a. an uninteresting call, which is +allowed but perhaps you forgot to explicitly ban the call), it prints some +warning messages, including the arguments of the function, the return value, and +the stack trace. Hopefully this will remind you to take a look and see if there +is indeed a problem. + +Sometimes you are confident that your tests are correct and may not appreciate +such friendly messages. Some other times, you are debugging your tests or +learning about the behavior of the code you are testing, and wish you could +observe every mock call that happens (including argument values, the return +value, and the stack trace). Clearly, one size doesn't fit all. + +You can control how much gMock tells you using the `--gmock_verbose=LEVEL` +command-line flag, where `LEVEL` is a string with three possible values: + +* `info`: gMock will print all informational messages, warnings, and errors + (most verbose). At this setting, gMock will also log any calls to the + `ON_CALL/EXPECT_CALL` macros. It will include a stack trace in + "uninteresting call" warnings. +* `warning`: gMock will print both warnings and errors (less verbose); it will + omit the stack traces in "uninteresting call" warnings. This is the default. +* `error`: gMock will print errors only (least verbose). + +Alternatively, you can adjust the value of that flag from within your tests like +so: + +```cpp + ::testing::FLAGS_gmock_verbose = "error"; +``` + +If you find gMock printing too many stack frames with its informational or +warning messages, remember that you can control their amount with the +`--gtest_stack_trace_depth=max_depth` flag. + +Now, judiciously use the right flag to enable gMock serve you better! + +### Gaining Super Vision into Mock Calls + +You have a test using gMock. It fails: gMock tells you some expectations aren't +satisfied. However, you aren't sure why: Is there a typo somewhere in the +matchers? Did you mess up the order of the `EXPECT_CALL`s? Or is the code under +test doing something wrong? How can you find out the cause? + +Won't it be nice if you have X-ray vision and can actually see the trace of all +`EXPECT_CALL`s and mock method calls as they are made? For each call, would you +like to see its actual argument values and which `EXPECT_CALL` gMock thinks it +matches? If you still need some help to figure out who made these calls, how +about being able to see the complete stack trace at each mock call? + +You can unlock this power by running your test with the `--gmock_verbose=info` +flag. For example, given the test program: + +```cpp +#include "gmock/gmock.h" + +using testing::_; +using testing::HasSubstr; +using testing::Return; + +class MockFoo { + public: + MOCK_METHOD(void, F, (const string& x, const string& y)); +}; + +TEST(Foo, Bar) { + MockFoo mock; + EXPECT_CALL(mock, F(_, _)).WillRepeatedly(Return()); + EXPECT_CALL(mock, F("a", "b")); + EXPECT_CALL(mock, F("c", HasSubstr("d"))); + + mock.F("a", "good"); + mock.F("a", "b"); +} +``` + +if you run it with `--gmock_verbose=info`, you will see this output: + +```shell +[ RUN ] Foo.Bar + +foo_test.cc:14: EXPECT_CALL(mock, F(_, _)) invoked +Stack trace: ... + +foo_test.cc:15: EXPECT_CALL(mock, F("a", "b")) invoked +Stack trace: ... + +foo_test.cc:16: EXPECT_CALL(mock, F("c", HasSubstr("d"))) invoked +Stack trace: ... + +foo_test.cc:14: Mock function call matches EXPECT_CALL(mock, F(_, _))... + Function call: F(@0x7fff7c8dad40"a",@0x7fff7c8dad10"good") +Stack trace: ... + +foo_test.cc:15: Mock function call matches EXPECT_CALL(mock, F("a", "b"))... + Function call: F(@0x7fff7c8dada0"a",@0x7fff7c8dad70"b") +Stack trace: ... + +foo_test.cc:16: Failure +Actual function call count doesn't match EXPECT_CALL(mock, F("c", HasSubstr("d")))... + Expected: to be called once + Actual: never called - unsatisfied and active +[ FAILED ] Foo.Bar +``` + +Suppose the bug is that the `"c"` in the third `EXPECT_CALL` is a typo and +should actually be `"a"`. With the above message, you should see that the actual +`F("a", "good")` call is matched by the first `EXPECT_CALL`, not the third as +you thought. From that it should be obvious that the third `EXPECT_CALL` is +written wrong. Case solved. + +If you are interested in the mock call trace but not the stack traces, you can +combine `--gmock_verbose=info` with `--gtest_stack_trace_depth=0` on the test +command line. + +### Running Tests in Emacs + +If you build and run your tests in Emacs using the `M-x google-compile` command +(as many googletest users do), the source file locations of gMock and googletest +errors will be highlighted. Just press `` on one of them and you'll be +taken to the offending line. Or, you can just type `C-x`` to jump to the next +error. + +To make it even easier, you can add the following lines to your `~/.emacs` file: + +```text +(global-set-key "\M-m" 'google-compile) ; m is for make +(global-set-key [M-down] 'next-error) +(global-set-key [M-up] '(lambda () (interactive) (next-error -1))) +``` + +Then you can type `M-m` to start a build (if you want to run the test as well, +just make sure `foo_test.run` or `runtests` is in the build command you supply +after typing `M-m`), or `M-up`/`M-down` to move back and forth between errors. + +## Extending gMock + +### Writing New Matchers Quickly {#NewMatchers} + +{: .callout .warning} +WARNING: gMock does not guarantee when or how many times a matcher will be +invoked. Therefore, all matchers must be functionally pure. See +[this section](#PureMatchers) for more details. + +The `MATCHER*` family of macros can be used to define custom matchers easily. +The syntax: + +```cpp +MATCHER(name, description_string_expression) { statements; } +``` + +will define a matcher with the given name that executes the statements, which +must return a `bool` to indicate if the match succeeds. Inside the statements, +you can refer to the value being matched by `arg`, and refer to its type by +`arg_type`. + +The *description string* is a `string`-typed expression that documents what the +matcher does, and is used to generate the failure message when the match fails. +It can (and should) reference the special `bool` variable `negation`, and should +evaluate to the description of the matcher when `negation` is `false`, or that +of the matcher's negation when `negation` is `true`. + +For convenience, we allow the description string to be empty (`""`), in which +case gMock will use the sequence of words in the matcher name as the +description. + +For example: + +```cpp +MATCHER(IsDivisibleBy7, "") { return (arg % 7) == 0; } +``` + +allows you to write + +```cpp + // Expects mock_foo.Bar(n) to be called where n is divisible by 7. + EXPECT_CALL(mock_foo, Bar(IsDivisibleBy7())); +``` + +or, + +```cpp + using ::testing::Not; + ... + // Verifies that a value is divisible by 7 and the other is not. + EXPECT_THAT(some_expression, IsDivisibleBy7()); + EXPECT_THAT(some_other_expression, Not(IsDivisibleBy7())); +``` + +If the above assertions fail, they will print something like: + +```shell + Value of: some_expression + Expected: is divisible by 7 + Actual: 27 + ... + Value of: some_other_expression + Expected: not (is divisible by 7) + Actual: 21 +``` + +where the descriptions `"is divisible by 7"` and `"not (is divisible by 7)"` are +automatically calculated from the matcher name `IsDivisibleBy7`. + +As you may have noticed, the auto-generated descriptions (especially those for +the negation) may not be so great. You can always override them with a `string` +expression of your own: + +```cpp +MATCHER(IsDivisibleBy7, + absl::StrCat(negation ? "isn't" : "is", " divisible by 7")) { + return (arg % 7) == 0; +} +``` + +Optionally, you can stream additional information to a hidden argument named +`result_listener` to explain the match result. For example, a better definition +of `IsDivisibleBy7` is: + +```cpp +MATCHER(IsDivisibleBy7, "") { + if ((arg % 7) == 0) + return true; + + *result_listener << "the remainder is " << (arg % 7); + return false; +} +``` + +With this definition, the above assertion will give a better message: + +```shell + Value of: some_expression + Expected: is divisible by 7 + Actual: 27 (the remainder is 6) +``` + +You should let `MatchAndExplain()` print *any additional information* that can +help a user understand the match result. Note that it should explain why the +match succeeds in case of a success (unless it's obvious) - this is useful when +the matcher is used inside `Not()`. There is no need to print the argument value +itself, as gMock already prints it for you. + +{: .callout .note} +NOTE: The type of the value being matched (`arg_type`) is determined by the +context in which you use the matcher and is supplied to you by the compiler, so +you don't need to worry about declaring it (nor can you). This allows the +matcher to be polymorphic. For example, `IsDivisibleBy7()` can be used to match +any type where the value of `(arg % 7) == 0` can be implicitly converted to a +`bool`. In the `Bar(IsDivisibleBy7())` example above, if method `Bar()` takes an +`int`, `arg_type` will be `int`; if it takes an `unsigned long`, `arg_type` will +be `unsigned long`; and so on. + +### Writing New Parameterized Matchers Quickly + +Sometimes you'll want to define a matcher that has parameters. For that you can +use the macro: + +```cpp +MATCHER_P(name, param_name, description_string) { statements; } +``` + +where the description string can be either `""` or a `string` expression that +references `negation` and `param_name`. + +For example: + +```cpp +MATCHER_P(HasAbsoluteValue, value, "") { return abs(arg) == value; } +``` + +will allow you to write: + +```cpp + EXPECT_THAT(Blah("a"), HasAbsoluteValue(n)); +``` + +which may lead to this message (assuming `n` is 10): + +```shell + Value of: Blah("a") + Expected: has absolute value 10 + Actual: -9 +``` + +Note that both the matcher description and its parameter are printed, making the +message human-friendly. + +In the matcher definition body, you can write `foo_type` to reference the type +of a parameter named `foo`. For example, in the body of +`MATCHER_P(HasAbsoluteValue, value)` above, you can write `value_type` to refer +to the type of `value`. + +gMock also provides `MATCHER_P2`, `MATCHER_P3`, ..., up to `MATCHER_P10` to +support multi-parameter matchers: + +```cpp +MATCHER_Pk(name, param_1, ..., param_k, description_string) { statements; } +``` + +Please note that the custom description string is for a particular *instance* of +the matcher, where the parameters have been bound to actual values. Therefore +usually you'll want the parameter values to be part of the description. gMock +lets you do that by referencing the matcher parameters in the description string +expression. + +For example, + +```cpp +using ::testing::PrintToString; +MATCHER_P2(InClosedRange, low, hi, + absl::StrFormat("%s in range [%s, %s]", negation ? "isn't" : "is", + PrintToString(low), PrintToString(hi))) { + return low <= arg && arg <= hi; +} +... +EXPECT_THAT(3, InClosedRange(4, 6)); +``` + +would generate a failure that contains the message: + +```shell + Expected: is in range [4, 6] +``` + +If you specify `""` as the description, the failure message will contain the +sequence of words in the matcher name followed by the parameter values printed +as a tuple. For example, + +```cpp + MATCHER_P2(InClosedRange, low, hi, "") { ... } + ... + EXPECT_THAT(3, InClosedRange(4, 6)); +``` + +would generate a failure that contains the text: + +```shell + Expected: in closed range (4, 6) +``` + +For the purpose of typing, you can view + +```cpp +MATCHER_Pk(Foo, p1, ..., pk, description_string) { ... } +``` + +as shorthand for + +```cpp +template +FooMatcherPk +Foo(p1_type p1, ..., pk_type pk) { ... } +``` + +When you write `Foo(v1, ..., vk)`, the compiler infers the types of the +parameters `v1`, ..., and `vk` for you. If you are not happy with the result of +the type inference, you can specify the types by explicitly instantiating the +template, as in `Foo(5, false)`. As said earlier, you don't get to +(or need to) specify `arg_type` as that's determined by the context in which the +matcher is used. + +You can assign the result of expression `Foo(p1, ..., pk)` to a variable of type +`FooMatcherPk`. This can be useful when composing +matchers. Matchers that don't have a parameter or have only one parameter have +special types: you can assign `Foo()` to a `FooMatcher`-typed variable, and +assign `Foo(p)` to a `FooMatcherP`-typed variable. + +While you can instantiate a matcher template with reference types, passing the +parameters by pointer usually makes your code more readable. If, however, you +still want to pass a parameter by reference, be aware that in the failure +message generated by the matcher you will see the value of the referenced object +but not its address. + +You can overload matchers with different numbers of parameters: + +```cpp +MATCHER_P(Blah, a, description_string_1) { ... } +MATCHER_P2(Blah, a, b, description_string_2) { ... } +``` + +While it's tempting to always use the `MATCHER*` macros when defining a new +matcher, you should also consider implementing the matcher interface directly +instead (see the recipes that follow), especially if you need to use the matcher +a lot. While these approaches require more work, they give you more control on +the types of the value being matched and the matcher parameters, which in +general leads to better compiler error messages that pay off in the long run. +They also allow overloading matchers based on parameter types (as opposed to +just based on the number of parameters). + +### Writing New Monomorphic Matchers + +A matcher of argument type `T` implements the matcher interface for `T` and does +two things: it tests whether a value of type `T` matches the matcher, and can +describe what kind of values it matches. The latter ability is used for +generating readable error messages when expectations are violated. + +A matcher of `T` must declare a typedef like: + +```cpp +using is_gtest_matcher = void; +``` + +and supports the following operations: + +```cpp +// Match a value and optionally explain into an ostream. +bool matched = matcher.MatchAndExplain(value, maybe_os); +// where `value` is of type `T` and +// `maybe_os` is of type `std::ostream*`, where it can be null if the caller +// is not interested in there textual explanation. + +matcher.DescribeTo(os); +matcher.DescribeNegationTo(os); +// where `os` is of type `std::ostream*`. +``` + +If you need a custom matcher but `Truly()` is not a good option (for example, +you may not be happy with the way `Truly(predicate)` describes itself, or you +may want your matcher to be polymorphic as `Eq(value)` is), you can define a +matcher to do whatever you want in two steps: first implement the matcher +interface, and then define a factory function to create a matcher instance. The +second step is not strictly needed but it makes the syntax of using the matcher +nicer. + +For example, you can define a matcher to test whether an `int` is divisible by 7 +and then use it like this: + +```cpp +using ::testing::Matcher; + +class DivisibleBy7Matcher { + public: + using is_gtest_matcher = void; + + bool MatchAndExplain(int n, std::ostream*) const { + return (n % 7) == 0; + } + + void DescribeTo(std::ostream* os) const { + *os << "is divisible by 7"; + } + + void DescribeNegationTo(std::ostream* os) const { + *os << "is not divisible by 7"; + } +}; + +Matcher DivisibleBy7() { + return DivisibleBy7Matcher(); +} + +... + EXPECT_CALL(foo, Bar(DivisibleBy7())); +``` + +You may improve the matcher message by streaming additional information to the +`os` argument in `MatchAndExplain()`: + +```cpp +class DivisibleBy7Matcher { + public: + bool MatchAndExplain(int n, std::ostream* os) const { + const int remainder = n % 7; + if (remainder != 0 && os != nullptr) { + *os << "the remainder is " << remainder; + } + return remainder == 0; + } + ... +}; +``` + +Then, `EXPECT_THAT(x, DivisibleBy7());` may generate a message like this: + +```shell +Value of: x +Expected: is divisible by 7 + Actual: 23 (the remainder is 2) +``` + +{: .callout .tip} +Tip: for convenience, `MatchAndExplain()` can take a `MatchResultListener*` +instead of `std::ostream*`. + +### Writing New Polymorphic Matchers + +Expanding what we learned above to *polymorphic* matchers is now just as simple +as adding templates in the right place. + +```cpp + +class NotNullMatcher { + public: + using is_gtest_matcher = void; + + // To implement a polymorphic matcher, we just need to make MatchAndExplain a + // template on its first argument. + + // In this example, we want to use NotNull() with any pointer, so + // MatchAndExplain() accepts a pointer of any type as its first argument. + // In general, you can define MatchAndExplain() as an ordinary method or + // a method template, or even overload it. + template + bool MatchAndExplain(T* p, std::ostream*) const { + return p != nullptr; + } + + // Describes the property of a value matching this matcher. + void DescribeTo(std::ostream* os) const { *os << "is not NULL"; } + + // Describes the property of a value NOT matching this matcher. + void DescribeNegationTo(std::ostream* os) const { *os << "is NULL"; } +}; + +NotNullMatcher NotNull() { + return NotNullMatcher(); +} + +... + + EXPECT_CALL(foo, Bar(NotNull())); // The argument must be a non-NULL pointer. +``` + +### Legacy Matcher Implementation + +Defining matchers used to be somewhat more complicated, in which it required +several supporting classes and virtual functions. To implement a matcher for +type `T` using the legacy API you have to derive from `MatcherInterface` and +call `MakeMatcher` to construct the object. + +The interface looks like this: + +```cpp +class MatchResultListener { + public: + ... + // Streams x to the underlying ostream; does nothing if the ostream + // is NULL. + template + MatchResultListener& operator<<(const T& x); + + // Returns the underlying ostream. + std::ostream* stream(); +}; + +template +class MatcherInterface { + public: + virtual ~MatcherInterface(); + + // Returns true if and only if the matcher matches x; also explains the match + // result to 'listener'. + virtual bool MatchAndExplain(T x, MatchResultListener* listener) const = 0; + + // Describes this matcher to an ostream. + virtual void DescribeTo(std::ostream* os) const = 0; + + // Describes the negation of this matcher to an ostream. + virtual void DescribeNegationTo(std::ostream* os) const; +}; +``` + +Fortunately, most of the time you can define a polymorphic matcher easily with +the help of `MakePolymorphicMatcher()`. Here's how you can define `NotNull()` as +an example: + +```cpp +using ::testing::MakePolymorphicMatcher; +using ::testing::MatchResultListener; +using ::testing::PolymorphicMatcher; + +class NotNullMatcher { + public: + // To implement a polymorphic matcher, first define a COPYABLE class + // that has three members MatchAndExplain(), DescribeTo(), and + // DescribeNegationTo(), like the following. + + // In this example, we want to use NotNull() with any pointer, so + // MatchAndExplain() accepts a pointer of any type as its first argument. + // In general, you can define MatchAndExplain() as an ordinary method or + // a method template, or even overload it. + template + bool MatchAndExplain(T* p, + MatchResultListener* /* listener */) const { + return p != NULL; + } + + // Describes the property of a value matching this matcher. + void DescribeTo(std::ostream* os) const { *os << "is not NULL"; } + + // Describes the property of a value NOT matching this matcher. + void DescribeNegationTo(std::ostream* os) const { *os << "is NULL"; } +}; + +// To construct a polymorphic matcher, pass an instance of the class +// to MakePolymorphicMatcher(). Note the return type. +PolymorphicMatcher NotNull() { + return MakePolymorphicMatcher(NotNullMatcher()); +} + +... + + EXPECT_CALL(foo, Bar(NotNull())); // The argument must be a non-NULL pointer. +``` + +{: .callout .note} +**Note:** Your polymorphic matcher class does **not** need to inherit from +`MatcherInterface` or any other class, and its methods do **not** need to be +virtual. + +Like in a monomorphic matcher, you may explain the match result by streaming +additional information to the `listener` argument in `MatchAndExplain()`. + +### Writing New Cardinalities + +A cardinality is used in `Times()` to tell gMock how many times you expect a +call to occur. It doesn't have to be exact. For example, you can say +`AtLeast(5)` or `Between(2, 4)`. + +If the [built-in set](gmock_cheat_sheet.md#CardinalityList) of cardinalities +doesn't suit you, you are free to define your own by implementing the following +interface (in namespace `testing`): + +```cpp +class CardinalityInterface { + public: + virtual ~CardinalityInterface(); + + // Returns true if and only if call_count calls will satisfy this cardinality. + virtual bool IsSatisfiedByCallCount(int call_count) const = 0; + + // Returns true if and only if call_count calls will saturate this + // cardinality. + virtual bool IsSaturatedByCallCount(int call_count) const = 0; + + // Describes self to an ostream. + virtual void DescribeTo(std::ostream* os) const = 0; +}; +``` + +For example, to specify that a call must occur even number of times, you can +write + +```cpp +using ::testing::Cardinality; +using ::testing::CardinalityInterface; +using ::testing::MakeCardinality; + +class EvenNumberCardinality : public CardinalityInterface { + public: + bool IsSatisfiedByCallCount(int call_count) const override { + return (call_count % 2) == 0; + } + + bool IsSaturatedByCallCount(int call_count) const override { + return false; + } + + void DescribeTo(std::ostream* os) const { + *os << "called even number of times"; + } +}; + +Cardinality EvenNumber() { + return MakeCardinality(new EvenNumberCardinality); +} + +... + EXPECT_CALL(foo, Bar(3)) + .Times(EvenNumber()); +``` + +### Writing New Actions Quickly {#QuickNewActions} + +If the built-in actions don't work for you, you can easily define your own one. +Just define a functor class with a (possibly templated) call operator, matching +the signature of your action. + +```cpp +struct Increment { + template + T operator()(T* arg) { + return ++(*arg); + } +} +``` + +The same approach works with stateful functors (or any callable, really): + +``` +struct MultiplyBy { + template + T operator()(T arg) { return arg * multiplier; } + + int multiplier; +} + +// Then use: +// EXPECT_CALL(...).WillOnce(MultiplyBy{7}); +``` + +#### Legacy macro-based Actions + +Before C++11, the functor-based actions were not supported; the old way of +writing actions was through a set of `ACTION*` macros. We suggest to avoid them +in new code; they hide a lot of logic behind the macro, potentially leading to +harder-to-understand compiler errors. Nevertheless, we cover them here for +completeness. + +By writing + +```cpp +ACTION(name) { statements; } +``` + +in a namespace scope (i.e. not inside a class or function), you will define an +action with the given name that executes the statements. The value returned by +`statements` will be used as the return value of the action. Inside the +statements, you can refer to the K-th (0-based) argument of the mock function as +`argK`. For example: + +```cpp +ACTION(IncrementArg1) { return ++(*arg1); } +``` + +allows you to write + +```cpp +... WillOnce(IncrementArg1()); +``` + +Note that you don't need to specify the types of the mock function arguments. +Rest assured that your code is type-safe though: you'll get a compiler error if +`*arg1` doesn't support the `++` operator, or if the type of `++(*arg1)` isn't +compatible with the mock function's return type. + +Another example: + +```cpp +ACTION(Foo) { + (*arg2)(5); + Blah(); + *arg1 = 0; + return arg0; +} +``` + +defines an action `Foo()` that invokes argument #2 (a function pointer) with 5, +calls function `Blah()`, sets the value pointed to by argument #1 to 0, and +returns argument #0. + +For more convenience and flexibility, you can also use the following pre-defined +symbols in the body of `ACTION`: + +`argK_type` | The type of the K-th (0-based) argument of the mock function +:-------------- | :----------------------------------------------------------- +`args` | All arguments of the mock function as a tuple +`args_type` | The type of all arguments of the mock function as a tuple +`return_type` | The return type of the mock function +`function_type` | The type of the mock function + +For example, when using an `ACTION` as a stub action for mock function: + +```cpp +int DoSomething(bool flag, int* ptr); +``` + +we have: + +Pre-defined Symbol | Is Bound To +------------------ | --------------------------------- +`arg0` | the value of `flag` +`arg0_type` | the type `bool` +`arg1` | the value of `ptr` +`arg1_type` | the type `int*` +`args` | the tuple `(flag, ptr)` +`args_type` | the type `std::tuple` +`return_type` | the type `int` +`function_type` | the type `int(bool, int*)` + +#### Legacy macro-based parameterized Actions + +Sometimes you'll want to parameterize an action you define. For that we have +another macro + +```cpp +ACTION_P(name, param) { statements; } +``` + +For example, + +```cpp +ACTION_P(Add, n) { return arg0 + n; } +``` + +will allow you to write + +```cpp +// Returns argument #0 + 5. +... WillOnce(Add(5)); +``` + +For convenience, we use the term *arguments* for the values used to invoke the +mock function, and the term *parameters* for the values used to instantiate an +action. + +Note that you don't need to provide the type of the parameter either. Suppose +the parameter is named `param`, you can also use the gMock-defined symbol +`param_type` to refer to the type of the parameter as inferred by the compiler. +For example, in the body of `ACTION_P(Add, n)` above, you can write `n_type` for +the type of `n`. + +gMock also provides `ACTION_P2`, `ACTION_P3`, and etc to support multi-parameter +actions. For example, + +```cpp +ACTION_P2(ReturnDistanceTo, x, y) { + double dx = arg0 - x; + double dy = arg1 - y; + return sqrt(dx*dx + dy*dy); +} +``` + +lets you write + +```cpp +... WillOnce(ReturnDistanceTo(5.0, 26.5)); +``` + +You can view `ACTION` as a degenerated parameterized action where the number of +parameters is 0. + +You can also easily define actions overloaded on the number of parameters: + +```cpp +ACTION_P(Plus, a) { ... } +ACTION_P2(Plus, a, b) { ... } +``` + +### Restricting the Type of an Argument or Parameter in an ACTION + +For maximum brevity and reusability, the `ACTION*` macros don't ask you to +provide the types of the mock function arguments and the action parameters. +Instead, we let the compiler infer the types for us. + +Sometimes, however, we may want to be more explicit about the types. There are +several tricks to do that. For example: + +```cpp +ACTION(Foo) { + // Makes sure arg0 can be converted to int. + int n = arg0; + ... use n instead of arg0 here ... +} + +ACTION_P(Bar, param) { + // Makes sure the type of arg1 is const char*. + ::testing::StaticAssertTypeEq(); + + // Makes sure param can be converted to bool. + bool flag = param; +} +``` + +where `StaticAssertTypeEq` is a compile-time assertion in googletest that +verifies two types are the same. + +### Writing New Action Templates Quickly + +Sometimes you want to give an action explicit template parameters that cannot be +inferred from its value parameters. `ACTION_TEMPLATE()` supports that and can be +viewed as an extension to `ACTION()` and `ACTION_P*()`. + +The syntax: + +```cpp +ACTION_TEMPLATE(ActionName, + HAS_m_TEMPLATE_PARAMS(kind1, name1, ..., kind_m, name_m), + AND_n_VALUE_PARAMS(p1, ..., p_n)) { statements; } +``` + +defines an action template that takes *m* explicit template parameters and *n* +value parameters, where *m* is in [1, 10] and *n* is in [0, 10]. `name_i` is the +name of the *i*-th template parameter, and `kind_i` specifies whether it's a +`typename`, an integral constant, or a template. `p_i` is the name of the *i*-th +value parameter. + +Example: + +```cpp +// DuplicateArg(output) converts the k-th argument of the mock +// function to type T and copies it to *output. +ACTION_TEMPLATE(DuplicateArg, + // Note the comma between int and k: + HAS_2_TEMPLATE_PARAMS(int, k, typename, T), + AND_1_VALUE_PARAMS(output)) { + *output = T(std::get(args)); +} +``` + +To create an instance of an action template, write: + +```cpp +ActionName(v1, ..., v_n) +``` + +where the `t`s are the template arguments and the `v`s are the value arguments. +The value argument types are inferred by the compiler. For example: + +```cpp +using ::testing::_; +... + int n; + EXPECT_CALL(mock, Foo).WillOnce(DuplicateArg<1, unsigned char>(&n)); +``` + +If you want to explicitly specify the value argument types, you can provide +additional template arguments: + +```cpp +ActionName(v1, ..., v_n) +``` + +where `u_i` is the desired type of `v_i`. + +`ACTION_TEMPLATE` and `ACTION`/`ACTION_P*` can be overloaded on the number of +value parameters, but not on the number of template parameters. Without the +restriction, the meaning of the following is unclear: + +```cpp + OverloadedAction(x); +``` + +Are we using a single-template-parameter action where `bool` refers to the type +of `x`, or a two-template-parameter action where the compiler is asked to infer +the type of `x`? + +### Using the ACTION Object's Type + +If you are writing a function that returns an `ACTION` object, you'll need to +know its type. The type depends on the macro used to define the action and the +parameter types. The rule is relatively simple: + + +| Given Definition | Expression | Has Type | +| ----------------------------- | ------------------- | --------------------- | +| `ACTION(Foo)` | `Foo()` | `FooAction` | +| `ACTION_TEMPLATE(Foo, HAS_m_TEMPLATE_PARAMS(...), AND_0_VALUE_PARAMS())` | `Foo()` | `FooAction` | +| `ACTION_P(Bar, param)` | `Bar(int_value)` | `BarActionP` | +| `ACTION_TEMPLATE(Bar, HAS_m_TEMPLATE_PARAMS(...), AND_1_VALUE_PARAMS(p1))` | `Bar(int_value)` | `BarActionP` | +| `ACTION_P2(Baz, p1, p2)` | `Baz(bool_value, int_value)` | `BazActionP2` | +| `ACTION_TEMPLATE(Baz, HAS_m_TEMPLATE_PARAMS(...), AND_2_VALUE_PARAMS(p1, p2))` | `Baz(bool_value, int_value)` | `BazActionP2` | +| ... | ... | ... | + + +Note that we have to pick different suffixes (`Action`, `ActionP`, `ActionP2`, +and etc) for actions with different numbers of value parameters, or the action +definitions cannot be overloaded on the number of them. + +### Writing New Monomorphic Actions {#NewMonoActions} + +While the `ACTION*` macros are very convenient, sometimes they are +inappropriate. For example, despite the tricks shown in the previous recipes, +they don't let you directly specify the types of the mock function arguments and +the action parameters, which in general leads to unoptimized compiler error +messages that can baffle unfamiliar users. They also don't allow overloading +actions based on parameter types without jumping through some hoops. + +An alternative to the `ACTION*` macros is to implement +`::testing::ActionInterface`, where `F` is the type of the mock function in +which the action will be used. For example: + +```cpp +template +class ActionInterface { + public: + virtual ~ActionInterface(); + + // Performs the action. Result is the return type of function type + // F, and ArgumentTuple is the tuple of arguments of F. + // + + // For example, if F is int(bool, const string&), then Result would + // be int, and ArgumentTuple would be std::tuple. + virtual Result Perform(const ArgumentTuple& args) = 0; +}; +``` + +```cpp +using ::testing::_; +using ::testing::Action; +using ::testing::ActionInterface; +using ::testing::MakeAction; + +typedef int IncrementMethod(int*); + +class IncrementArgumentAction : public ActionInterface { + public: + int Perform(const std::tuple& args) override { + int* p = std::get<0>(args); // Grabs the first argument. + return *p++; + } +}; + +Action IncrementArgument() { + return MakeAction(new IncrementArgumentAction); +} + +... + EXPECT_CALL(foo, Baz(_)) + .WillOnce(IncrementArgument()); + + int n = 5; + foo.Baz(&n); // Should return 5 and change n to 6. +``` + +### Writing New Polymorphic Actions {#NewPolyActions} + +The previous recipe showed you how to define your own action. This is all good, +except that you need to know the type of the function in which the action will +be used. Sometimes that can be a problem. For example, if you want to use the +action in functions with *different* types (e.g. like `Return()` and +`SetArgPointee()`). + +If an action can be used in several types of mock functions, we say it's +*polymorphic*. The `MakePolymorphicAction()` function template makes it easy to +define such an action: + +```cpp +namespace testing { +template +PolymorphicAction MakePolymorphicAction(const Impl& impl); +} // namespace testing +``` + +As an example, let's define an action that returns the second argument in the +mock function's argument list. The first step is to define an implementation +class: + +```cpp +class ReturnSecondArgumentAction { + public: + template + Result Perform(const ArgumentTuple& args) const { + // To get the i-th (0-based) argument, use std::get(args). + return std::get<1>(args); + } +}; +``` + +This implementation class does *not* need to inherit from any particular class. +What matters is that it must have a `Perform()` method template. This method +template takes the mock function's arguments as a tuple in a **single** +argument, and returns the result of the action. It can be either `const` or not, +but must be invokable with exactly one template argument, which is the result +type. In other words, you must be able to call `Perform(args)` where `R` is +the mock function's return type and `args` is its arguments in a tuple. + +Next, we use `MakePolymorphicAction()` to turn an instance of the implementation +class into the polymorphic action we need. It will be convenient to have a +wrapper for this: + +```cpp +using ::testing::MakePolymorphicAction; +using ::testing::PolymorphicAction; + +PolymorphicAction ReturnSecondArgument() { + return MakePolymorphicAction(ReturnSecondArgumentAction()); +} +``` + +Now, you can use this polymorphic action the same way you use the built-in ones: + +```cpp +using ::testing::_; + +class MockFoo : public Foo { + public: + MOCK_METHOD(int, DoThis, (bool flag, int n), (override)); + MOCK_METHOD(string, DoThat, (int x, const char* str1, const char* str2), + (override)); +}; + + ... + MockFoo foo; + EXPECT_CALL(foo, DoThis).WillOnce(ReturnSecondArgument()); + EXPECT_CALL(foo, DoThat).WillOnce(ReturnSecondArgument()); + ... + foo.DoThis(true, 5); // Will return 5. + foo.DoThat(1, "Hi", "Bye"); // Will return "Hi". +``` + +### Teaching gMock How to Print Your Values + +When an uninteresting or unexpected call occurs, gMock prints the argument +values and the stack trace to help you debug. Assertion macros like +`EXPECT_THAT` and `EXPECT_EQ` also print the values in question when the +assertion fails. gMock and googletest do this using googletest's user-extensible +value printer. + +This printer knows how to print built-in C++ types, native arrays, STL +containers, and any type that supports the `<<` operator. For other types, it +prints the raw bytes in the value and hopes that you the user can figure it out. +[The GoogleTest advanced guide](advanced.md#teaching-googletest-how-to-print-your-values) +explains how to extend the printer to do a better job at printing your +particular type than to dump the bytes. + +## Useful Mocks Created Using gMock + + + + +### Mock std::function {#MockFunction} + +`std::function` is a general function type introduced in C++11. It is a +preferred way of passing callbacks to new interfaces. Functions are copiable, +and are not usually passed around by pointer, which makes them tricky to mock. +But fear not - `MockFunction` can help you with that. + +`MockFunction` has a mock method `Call()` with the signature: + +```cpp + R Call(T1, ..., Tn); +``` + +It also has a `AsStdFunction()` method, which creates a `std::function` proxy +forwarding to Call: + +```cpp + std::function AsStdFunction(); +``` + +To use `MockFunction`, first create `MockFunction` object and set up +expectations on its `Call` method. Then pass proxy obtained from +`AsStdFunction()` to the code you are testing. For example: + +```cpp +TEST(FooTest, RunsCallbackWithBarArgument) { + // 1. Create a mock object. + MockFunction mock_function; + + // 2. Set expectations on Call() method. + EXPECT_CALL(mock_function, Call("bar")).WillOnce(Return(1)); + + // 3. Exercise code that uses std::function. + Foo(mock_function.AsStdFunction()); + // Foo's signature can be either of: + // void Foo(const std::function& fun); + // void Foo(std::function fun); + + // 4. All expectations will be verified when mock_function + // goes out of scope and is destroyed. +} +``` + +Remember that function objects created with `AsStdFunction()` are just +forwarders. If you create multiple of them, they will share the same set of +expectations. + +Although `std::function` supports unlimited number of arguments, `MockFunction` +implementation is limited to ten. If you ever hit that limit... well, your +callback has bigger problems than being mockable. :-) diff --git a/build/_deps/googletest-src/docs/gmock_faq.md b/build/_deps/googletest-src/docs/gmock_faq.md new file mode 100644 index 0000000..2cd9b3f --- /dev/null +++ b/build/_deps/googletest-src/docs/gmock_faq.md @@ -0,0 +1,390 @@ +# Legacy gMock FAQ + +### When I call a method on my mock object, the method for the real object is invoked instead. What's the problem? + +In order for a method to be mocked, it must be *virtual*, unless you use the +[high-perf dependency injection technique](gmock_cook_book.md#MockingNonVirtualMethods). + +### Can I mock a variadic function? + +You cannot mock a variadic function (i.e. a function taking ellipsis (`...`) +arguments) directly in gMock. + +The problem is that in general, there is *no way* for a mock object to know how +many arguments are passed to the variadic method, and what the arguments' types +are. Only the *author of the base class* knows the protocol, and we cannot look +into his or her head. + +Therefore, to mock such a function, the *user* must teach the mock object how to +figure out the number of arguments and their types. One way to do it is to +provide overloaded versions of the function. + +Ellipsis arguments are inherited from C and not really a C++ feature. They are +unsafe to use and don't work with arguments that have constructors or +destructors. Therefore we recommend to avoid them in C++ as much as possible. + +### MSVC gives me warning C4301 or C4373 when I define a mock method with a const parameter. Why? + +If you compile this using Microsoft Visual C++ 2005 SP1: + +```cpp +class Foo { + ... + virtual void Bar(const int i) = 0; +}; + +class MockFoo : public Foo { + ... + MOCK_METHOD(void, Bar, (const int i), (override)); +}; +``` + +You may get the following warning: + +```shell +warning C4301: 'MockFoo::Bar': overriding virtual function only differs from 'Foo::Bar' by const/volatile qualifier +``` + +This is a MSVC bug. The same code compiles fine with gcc, for example. If you +use Visual C++ 2008 SP1, you would get the warning: + +```shell +warning C4373: 'MockFoo::Bar': virtual function overrides 'Foo::Bar', previous versions of the compiler did not override when parameters only differed by const/volatile qualifiers +``` + +In C++, if you *declare* a function with a `const` parameter, the `const` +modifier is ignored. Therefore, the `Foo` base class above is equivalent to: + +```cpp +class Foo { + ... + virtual void Bar(int i) = 0; // int or const int? Makes no difference. +}; +``` + +In fact, you can *declare* `Bar()` with an `int` parameter, and define it with a +`const int` parameter. The compiler will still match them up. + +Since making a parameter `const` is meaningless in the method declaration, we +recommend to remove it in both `Foo` and `MockFoo`. That should workaround the +VC bug. + +Note that we are talking about the *top-level* `const` modifier here. If the +function parameter is passed by pointer or reference, declaring the pointee or +referee as `const` is still meaningful. For example, the following two +declarations are *not* equivalent: + +```cpp +void Bar(int* p); // Neither p nor *p is const. +void Bar(const int* p); // p is not const, but *p is. +``` + +### I can't figure out why gMock thinks my expectations are not satisfied. What should I do? + +You might want to run your test with `--gmock_verbose=info`. This flag lets +gMock print a trace of every mock function call it receives. By studying the +trace, you'll gain insights on why the expectations you set are not met. + +If you see the message "The mock function has no default action set, and its +return type has no default value set.", then try +[adding a default action](gmock_cheat_sheet.md#OnCall). Due to a known issue, +unexpected calls on mocks without default actions don't print out a detailed +comparison between the actual arguments and the expected arguments. + +### My program crashed and `ScopedMockLog` spit out tons of messages. Is it a gMock bug? + +gMock and `ScopedMockLog` are likely doing the right thing here. + +When a test crashes, the failure signal handler will try to log a lot of +information (the stack trace, and the address map, for example). The messages +are compounded if you have many threads with depth stacks. When `ScopedMockLog` +intercepts these messages and finds that they don't match any expectations, it +prints an error for each of them. + +You can learn to ignore the errors, or you can rewrite your expectations to make +your test more robust, for example, by adding something like: + +```cpp +using ::testing::AnyNumber; +using ::testing::Not; +... + // Ignores any log not done by us. + EXPECT_CALL(log, Log(_, Not(EndsWith("/my_file.cc")), _)) + .Times(AnyNumber()); +``` + +### How can I assert that a function is NEVER called? + +```cpp +using ::testing::_; +... + EXPECT_CALL(foo, Bar(_)) + .Times(0); +``` + +### I have a failed test where gMock tells me TWICE that a particular expectation is not satisfied. Isn't this redundant? + +When gMock detects a failure, it prints relevant information (the mock function +arguments, the state of relevant expectations, and etc) to help the user debug. +If another failure is detected, gMock will do the same, including printing the +state of relevant expectations. + +Sometimes an expectation's state didn't change between two failures, and you'll +see the same description of the state twice. They are however *not* redundant, +as they refer to *different points in time*. The fact they are the same *is* +interesting information. + +### I get a heapcheck failure when using a mock object, but using a real object is fine. What can be wrong? + +Does the class (hopefully a pure interface) you are mocking have a virtual +destructor? + +Whenever you derive from a base class, make sure its destructor is virtual. +Otherwise Bad Things will happen. Consider the following code: + +```cpp +class Base { + public: + // Not virtual, but should be. + ~Base() { ... } + ... +}; + +class Derived : public Base { + public: + ... + private: + std::string value_; +}; + +... + Base* p = new Derived; + ... + delete p; // Surprise! ~Base() will be called, but ~Derived() will not + // - value_ is leaked. +``` + +By changing `~Base()` to virtual, `~Derived()` will be correctly called when +`delete p` is executed, and the heap checker will be happy. + +### The "newer expectations override older ones" rule makes writing expectations awkward. Why does gMock do that? + +When people complain about this, often they are referring to code like: + +```cpp +using ::testing::Return; +... + // foo.Bar() should be called twice, return 1 the first time, and return + // 2 the second time. However, I have to write the expectations in the + // reverse order. This sucks big time!!! + EXPECT_CALL(foo, Bar()) + .WillOnce(Return(2)) + .RetiresOnSaturation(); + EXPECT_CALL(foo, Bar()) + .WillOnce(Return(1)) + .RetiresOnSaturation(); +``` + +The problem, is that they didn't pick the **best** way to express the test's +intent. + +By default, expectations don't have to be matched in *any* particular order. If +you want them to match in a certain order, you need to be explicit. This is +gMock's (and jMock's) fundamental philosophy: it's easy to accidentally +over-specify your tests, and we want to make it harder to do so. + +There are two better ways to write the test spec. You could either put the +expectations in sequence: + +```cpp +using ::testing::Return; +... + // foo.Bar() should be called twice, return 1 the first time, and return + // 2 the second time. Using a sequence, we can write the expectations + // in their natural order. + { + InSequence s; + EXPECT_CALL(foo, Bar()) + .WillOnce(Return(1)) + .RetiresOnSaturation(); + EXPECT_CALL(foo, Bar()) + .WillOnce(Return(2)) + .RetiresOnSaturation(); + } +``` + +or you can put the sequence of actions in the same expectation: + +```cpp +using ::testing::Return; +... + // foo.Bar() should be called twice, return 1 the first time, and return + // 2 the second time. + EXPECT_CALL(foo, Bar()) + .WillOnce(Return(1)) + .WillOnce(Return(2)) + .RetiresOnSaturation(); +``` + +Back to the original questions: why does gMock search the expectations (and +`ON_CALL`s) from back to front? Because this allows a user to set up a mock's +behavior for the common case early (e.g. in the mock's constructor or the test +fixture's set-up phase) and customize it with more specific rules later. If +gMock searches from front to back, this very useful pattern won't be possible. + +### gMock prints a warning when a function without EXPECT_CALL is called, even if I have set its behavior using ON_CALL. Would it be reasonable not to show the warning in this case? + +When choosing between being neat and being safe, we lean toward the latter. So +the answer is that we think it's better to show the warning. + +Often people write `ON_CALL`s in the mock object's constructor or `SetUp()`, as +the default behavior rarely changes from test to test. Then in the test body +they set the expectations, which are often different for each test. Having an +`ON_CALL` in the set-up part of a test doesn't mean that the calls are expected. +If there's no `EXPECT_CALL` and the method is called, it's possibly an error. If +we quietly let the call go through without notifying the user, bugs may creep in +unnoticed. + +If, however, you are sure that the calls are OK, you can write + +```cpp +using ::testing::_; +... + EXPECT_CALL(foo, Bar(_)) + .WillRepeatedly(...); +``` + +instead of + +```cpp +using ::testing::_; +... + ON_CALL(foo, Bar(_)) + .WillByDefault(...); +``` + +This tells gMock that you do expect the calls and no warning should be printed. + +Also, you can control the verbosity by specifying `--gmock_verbose=error`. Other +values are `info` and `warning`. If you find the output too noisy when +debugging, just choose a less verbose level. + +### How can I delete the mock function's argument in an action? + +If your mock function takes a pointer argument and you want to delete that +argument, you can use testing::DeleteArg() to delete the N'th (zero-indexed) +argument: + +```cpp +using ::testing::_; + ... + MOCK_METHOD(void, Bar, (X* x, const Y& y)); + ... + EXPECT_CALL(mock_foo_, Bar(_, _)) + .WillOnce(testing::DeleteArg<0>())); +``` + +### How can I perform an arbitrary action on a mock function's argument? + +If you find yourself needing to perform some action that's not supported by +gMock directly, remember that you can define your own actions using +[`MakeAction()`](#NewMonoActions) or +[`MakePolymorphicAction()`](#NewPolyActions), or you can write a stub function +and invoke it using [`Invoke()`](#FunctionsAsActions). + +```cpp +using ::testing::_; +using ::testing::Invoke; + ... + MOCK_METHOD(void, Bar, (X* p)); + ... + EXPECT_CALL(mock_foo_, Bar(_)) + .WillOnce(Invoke(MyAction(...))); +``` + +### My code calls a static/global function. Can I mock it? + +You can, but you need to make some changes. + +In general, if you find yourself needing to mock a static function, it's a sign +that your modules are too tightly coupled (and less flexible, less reusable, +less testable, etc). You are probably better off defining a small interface and +call the function through that interface, which then can be easily mocked. It's +a bit of work initially, but usually pays for itself quickly. + +This Google Testing Blog +[post](https://testing.googleblog.com/2008/06/defeat-static-cling.html) says it +excellently. Check it out. + +### My mock object needs to do complex stuff. It's a lot of pain to specify the actions. gMock sucks! + +I know it's not a question, but you get an answer for free any way. :-) + +With gMock, you can create mocks in C++ easily. And people might be tempted to +use them everywhere. Sometimes they work great, and sometimes you may find them, +well, a pain to use. So, what's wrong in the latter case? + +When you write a test without using mocks, you exercise the code and assert that +it returns the correct value or that the system is in an expected state. This is +sometimes called "state-based testing". + +Mocks are great for what some call "interaction-based" testing: instead of +checking the system state at the very end, mock objects verify that they are +invoked the right way and report an error as soon as it arises, giving you a +handle on the precise context in which the error was triggered. This is often +more effective and economical to do than state-based testing. + +If you are doing state-based testing and using a test double just to simulate +the real object, you are probably better off using a fake. Using a mock in this +case causes pain, as it's not a strong point for mocks to perform complex +actions. If you experience this and think that mocks suck, you are just not +using the right tool for your problem. Or, you might be trying to solve the +wrong problem. :-) + +### I got a warning "Uninteresting function call encountered - default action taken.." Should I panic? + +By all means, NO! It's just an FYI. :-) + +What it means is that you have a mock function, you haven't set any expectations +on it (by gMock's rule this means that you are not interested in calls to this +function and therefore it can be called any number of times), and it is called. +That's OK - you didn't say it's not OK to call the function! + +What if you actually meant to disallow this function to be called, but forgot to +write `EXPECT_CALL(foo, Bar()).Times(0)`? While one can argue that it's the +user's fault, gMock tries to be nice and prints you a note. + +So, when you see the message and believe that there shouldn't be any +uninteresting calls, you should investigate what's going on. To make your life +easier, gMock dumps the stack trace when an uninteresting call is encountered. +From that you can figure out which mock function it is, and how it is called. + +### I want to define a custom action. Should I use Invoke() or implement the ActionInterface interface? + +Either way is fine - you want to choose the one that's more convenient for your +circumstance. + +Usually, if your action is for a particular function type, defining it using +`Invoke()` should be easier; if your action can be used in functions of +different types (e.g. if you are defining `Return(*value*)`), +`MakePolymorphicAction()` is easiest. Sometimes you want precise control on what +types of functions the action can be used in, and implementing `ActionInterface` +is the way to go here. See the implementation of `Return()` in +`testing/base/public/gmock-actions.h` for an example. + +### I use SetArgPointee() in WillOnce(), but gcc complains about "conflicting return type specified". What does it mean? + +You got this error as gMock has no idea what value it should return when the +mock method is called. `SetArgPointee()` says what the side effect is, but +doesn't say what the return value should be. You need `DoAll()` to chain a +`SetArgPointee()` with a `Return()` that provides a value appropriate to the API +being mocked. + +See this [recipe](gmock_cook_book.md#mocking-side-effects) for more details and +an example. + +### I have a huge mock class, and Microsoft Visual C++ runs out of memory when compiling it. What can I do? + +We've noticed that when the `/clr` compiler flag is used, Visual C++ uses 5~6 +times as much memory when compiling a mock class. We suggest to avoid `/clr` +when compiling native C++ mocks. diff --git a/build/_deps/googletest-src/docs/gmock_for_dummies.md b/build/_deps/googletest-src/docs/gmock_for_dummies.md new file mode 100644 index 0000000..1f4cc24 --- /dev/null +++ b/build/_deps/googletest-src/docs/gmock_for_dummies.md @@ -0,0 +1,700 @@ +# gMock for Dummies + +## What Is gMock? + +When you write a prototype or test, often it's not feasible or wise to rely on +real objects entirely. A **mock object** implements the same interface as a real +object (so it can be used as one), but lets you specify at run time how it will +be used and what it should do (which methods will be called? in which order? how +many times? with what arguments? what will they return? etc). + +It is easy to confuse the term *fake objects* with mock objects. Fakes and mocks +actually mean very different things in the Test-Driven Development (TDD) +community: + +* **Fake** objects have working implementations, but usually take some + shortcut (perhaps to make the operations less expensive), which makes them + not suitable for production. An in-memory file system would be an example of + a fake. +* **Mocks** are objects pre-programmed with *expectations*, which form a + specification of the calls they are expected to receive. + +If all this seems too abstract for you, don't worry - the most important thing +to remember is that a mock allows you to check the *interaction* between itself +and code that uses it. The difference between fakes and mocks shall become much +clearer once you start to use mocks. + +**gMock** is a library (sometimes we also call it a "framework" to make it sound +cool) for creating mock classes and using them. It does to C++ what +jMock/EasyMock does to Java (well, more or less). + +When using gMock, + +1. first, you use some simple macros to describe the interface you want to + mock, and they will expand to the implementation of your mock class; +2. next, you create some mock objects and specify its expectations and behavior + using an intuitive syntax; +3. then you exercise code that uses the mock objects. gMock will catch any + violation to the expectations as soon as it arises. + +## Why gMock? + +While mock objects help you remove unnecessary dependencies in tests and make +them fast and reliable, using mocks manually in C++ is *hard*: + +* Someone has to implement the mocks. The job is usually tedious and + error-prone. No wonder people go great distance to avoid it. +* The quality of those manually written mocks is a bit, uh, unpredictable. You + may see some really polished ones, but you may also see some that were + hacked up in a hurry and have all sorts of ad hoc restrictions. +* The knowledge you gained from using one mock doesn't transfer to the next + one. + +In contrast, Java and Python programmers have some fine mock frameworks (jMock, +EasyMock, etc), which automate the creation of mocks. As a result, mocking is a +proven effective technique and widely adopted practice in those communities. +Having the right tool absolutely makes the difference. + +gMock was built to help C++ programmers. It was inspired by jMock and EasyMock, +but designed with C++'s specifics in mind. It is your friend if any of the +following problems is bothering you: + +* You are stuck with a sub-optimal design and wish you had done more + prototyping before it was too late, but prototyping in C++ is by no means + "rapid". +* Your tests are slow as they depend on too many libraries or use expensive + resources (e.g. a database). +* Your tests are brittle as some resources they use are unreliable (e.g. the + network). +* You want to test how your code handles a failure (e.g. a file checksum + error), but it's not easy to cause one. +* You need to make sure that your module interacts with other modules in the + right way, but it's hard to observe the interaction; therefore you resort to + observing the side effects at the end of the action, but it's awkward at + best. +* You want to "mock out" your dependencies, except that they don't have mock + implementations yet; and, frankly, you aren't thrilled by some of those + hand-written mocks. + +We encourage you to use gMock as + +* a *design* tool, for it lets you experiment with your interface design early + and often. More iterations lead to better designs! +* a *testing* tool to cut your tests' outbound dependencies and probe the + interaction between your module and its collaborators. + +## Getting Started + +gMock is bundled with googletest. + +## A Case for Mock Turtles + +Let's look at an example. Suppose you are developing a graphics program that +relies on a [LOGO](http://en.wikipedia.org/wiki/Logo_programming_language)-like +API for drawing. How would you test that it does the right thing? Well, you can +run it and compare the screen with a golden screen snapshot, but let's admit it: +tests like this are expensive to run and fragile (What if you just upgraded to a +shiny new graphics card that has better anti-aliasing? Suddenly you have to +update all your golden images.). It would be too painful if all your tests are +like this. Fortunately, you learned about +[Dependency Injection](http://en.wikipedia.org/wiki/Dependency_injection) and know the right thing +to do: instead of having your application talk to the system API directly, wrap +the API in an interface (say, `Turtle`) and code to that interface: + +```cpp +class Turtle { + ... + virtual ~Turtle() {} + virtual void PenUp() = 0; + virtual void PenDown() = 0; + virtual void Forward(int distance) = 0; + virtual void Turn(int degrees) = 0; + virtual void GoTo(int x, int y) = 0; + virtual int GetX() const = 0; + virtual int GetY() const = 0; +}; +``` + +(Note that the destructor of `Turtle` **must** be virtual, as is the case for +**all** classes you intend to inherit from - otherwise the destructor of the +derived class will not be called when you delete an object through a base +pointer, and you'll get corrupted program states like memory leaks.) + +You can control whether the turtle's movement will leave a trace using `PenUp()` +and `PenDown()`, and control its movement using `Forward()`, `Turn()`, and +`GoTo()`. Finally, `GetX()` and `GetY()` tell you the current position of the +turtle. + +Your program will normally use a real implementation of this interface. In +tests, you can use a mock implementation instead. This allows you to easily +check what drawing primitives your program is calling, with what arguments, and +in which order. Tests written this way are much more robust (they won't break +because your new machine does anti-aliasing differently), easier to read and +maintain (the intent of a test is expressed in the code, not in some binary +images), and run *much, much faster*. + +## Writing the Mock Class + +If you are lucky, the mocks you need to use have already been implemented by +some nice people. If, however, you find yourself in the position to write a mock +class, relax - gMock turns this task into a fun game! (Well, almost.) + +### How to Define It + +Using the `Turtle` interface as example, here are the simple steps you need to +follow: + +* Derive a class `MockTurtle` from `Turtle`. +* Take a *virtual* function of `Turtle` (while it's possible to + [mock non-virtual methods using templates](gmock_cook_book.md#MockingNonVirtualMethods), + it's much more involved). +* In the `public:` section of the child class, write `MOCK_METHOD();` +* Now comes the fun part: you take the function signature, cut-and-paste it + into the macro, and add two commas - one between the return type and the + name, another between the name and the argument list. +* If you're mocking a const method, add a 4th parameter containing `(const)` + (the parentheses are required). +* Since you're overriding a virtual method, we suggest adding the `override` + keyword. For const methods the 4th parameter becomes `(const, override)`, + for non-const methods just `(override)`. This isn't mandatory. +* Repeat until all virtual functions you want to mock are done. (It goes + without saying that *all* pure virtual methods in your abstract class must + be either mocked or overridden.) + +After the process, you should have something like: + +```cpp +#include "gmock/gmock.h" // Brings in gMock. + +class MockTurtle : public Turtle { + public: + ... + MOCK_METHOD(void, PenUp, (), (override)); + MOCK_METHOD(void, PenDown, (), (override)); + MOCK_METHOD(void, Forward, (int distance), (override)); + MOCK_METHOD(void, Turn, (int degrees), (override)); + MOCK_METHOD(void, GoTo, (int x, int y), (override)); + MOCK_METHOD(int, GetX, (), (const, override)); + MOCK_METHOD(int, GetY, (), (const, override)); +}; +``` + +You don't need to define these mock methods somewhere else - the `MOCK_METHOD` +macro will generate the definitions for you. It's that simple! + +### Where to Put It + +When you define a mock class, you need to decide where to put its definition. +Some people put it in a `_test.cc`. This is fine when the interface being mocked +(say, `Foo`) is owned by the same person or team. Otherwise, when the owner of +`Foo` changes it, your test could break. (You can't really expect `Foo`'s +maintainer to fix every test that uses `Foo`, can you?) + +So, the rule of thumb is: if you need to mock `Foo` and it's owned by others, +define the mock class in `Foo`'s package (better, in a `testing` sub-package +such that you can clearly separate production code and testing utilities), put +it in a `.h` and a `cc_library`. Then everyone can reference them from their +tests. If `Foo` ever changes, there is only one copy of `MockFoo` to change, and +only tests that depend on the changed methods need to be fixed. + +Another way to do it: you can introduce a thin layer `FooAdaptor` on top of +`Foo` and code to this new interface. Since you own `FooAdaptor`, you can absorb +changes in `Foo` much more easily. While this is more work initially, carefully +choosing the adaptor interface can make your code easier to write and more +readable (a net win in the long run), as you can choose `FooAdaptor` to fit your +specific domain much better than `Foo` does. + +## Using Mocks in Tests + +Once you have a mock class, using it is easy. The typical work flow is: + +1. Import the gMock names from the `testing` namespace such that you can use + them unqualified (You only have to do it once per file). Remember that + namespaces are a good idea. +2. Create some mock objects. +3. Specify your expectations on them (How many times will a method be called? + With what arguments? What should it do? etc.). +4. Exercise some code that uses the mocks; optionally, check the result using + googletest assertions. If a mock method is called more than expected or with + wrong arguments, you'll get an error immediately. +5. When a mock is destructed, gMock will automatically check whether all + expectations on it have been satisfied. + +Here's an example: + +```cpp +#include "path/to/mock-turtle.h" +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +using ::testing::AtLeast; // #1 + +TEST(PainterTest, CanDrawSomething) { + MockTurtle turtle; // #2 + EXPECT_CALL(turtle, PenDown()) // #3 + .Times(AtLeast(1)); + + Painter painter(&turtle); // #4 + + EXPECT_TRUE(painter.DrawCircle(0, 0, 10)); // #5 +} +``` + +As you might have guessed, this test checks that `PenDown()` is called at least +once. If the `painter` object didn't call this method, your test will fail with +a message like this: + +```text +path/to/my_test.cc:119: Failure +Actual function call count doesn't match this expectation: +Actually: never called; +Expected: called at least once. +Stack trace: +... +``` + +**Tip 1:** If you run the test from an Emacs buffer, you can hit `` on +the line number to jump right to the failed expectation. + +**Tip 2:** If your mock objects are never deleted, the final verification won't +happen. Therefore it's a good idea to turn on the heap checker in your tests +when you allocate mocks on the heap. You get that automatically if you use the +`gtest_main` library already. + +**Important note:** gMock requires expectations to be set **before** the mock +functions are called, otherwise the behavior is **undefined**. Do not alternate +between calls to `EXPECT_CALL()` and calls to the mock functions, and do not set +any expectations on a mock after passing the mock to an API. + +This means `EXPECT_CALL()` should be read as expecting that a call will occur +*in the future*, not that a call has occurred. Why does gMock work like that? +Well, specifying the expectation beforehand allows gMock to report a violation +as soon as it rises, when the context (stack trace, etc) is still available. +This makes debugging much easier. + +Admittedly, this test is contrived and doesn't do much. You can easily achieve +the same effect without using gMock. However, as we shall reveal soon, gMock +allows you to do *so much more* with the mocks. + +## Setting Expectations + +The key to using a mock object successfully is to set the *right expectations* +on it. If you set the expectations too strict, your test will fail as the result +of unrelated changes. If you set them too loose, bugs can slip through. You want +to do it just right such that your test can catch exactly the kind of bugs you +intend it to catch. gMock provides the necessary means for you to do it "just +right." + +### General Syntax + +In gMock we use the `EXPECT_CALL()` macro to set an expectation on a mock +method. The general syntax is: + +```cpp +EXPECT_CALL(mock_object, method(matchers)) + .Times(cardinality) + .WillOnce(action) + .WillRepeatedly(action); +``` + +The macro has two arguments: first the mock object, and then the method and its +arguments. Note that the two are separated by a comma (`,`), not a period (`.`). +(Why using a comma? The answer is that it was necessary for technical reasons.) +If the method is not overloaded, the macro can also be called without matchers: + +```cpp +EXPECT_CALL(mock_object, non-overloaded-method) + .Times(cardinality) + .WillOnce(action) + .WillRepeatedly(action); +``` + +This syntax allows the test writer to specify "called with any arguments" +without explicitly specifying the number or types of arguments. To avoid +unintended ambiguity, this syntax may only be used for methods that are not +overloaded. + +Either form of the macro can be followed by some optional *clauses* that provide +more information about the expectation. We'll discuss how each clause works in +the coming sections. + +This syntax is designed to make an expectation read like English. For example, +you can probably guess that + +```cpp +using ::testing::Return; +... +EXPECT_CALL(turtle, GetX()) + .Times(5) + .WillOnce(Return(100)) + .WillOnce(Return(150)) + .WillRepeatedly(Return(200)); +``` + +says that the `turtle` object's `GetX()` method will be called five times, it +will return 100 the first time, 150 the second time, and then 200 every time. +Some people like to call this style of syntax a Domain-Specific Language (DSL). + +{: .callout .note} +**Note:** Why do we use a macro to do this? Well it serves two purposes: first +it makes expectations easily identifiable (either by `grep` or by a human +reader), and second it allows gMock to include the source file location of a +failed expectation in messages, making debugging easier. + +### Matchers: What Arguments Do We Expect? + +When a mock function takes arguments, we may specify what arguments we are +expecting, for example: + +```cpp +// Expects the turtle to move forward by 100 units. +EXPECT_CALL(turtle, Forward(100)); +``` + +Oftentimes you do not want to be too specific. Remember that talk about tests +being too rigid? Over specification leads to brittle tests and obscures the +intent of tests. Therefore we encourage you to specify only what's necessary—no +more, no less. If you aren't interested in the value of an argument, write `_` +as the argument, which means "anything goes": + +```cpp +using ::testing::_; +... +// Expects that the turtle jumps to somewhere on the x=50 line. +EXPECT_CALL(turtle, GoTo(50, _)); +``` + +`_` is an instance of what we call **matchers**. A matcher is like a predicate +and can test whether an argument is what we'd expect. You can use a matcher +inside `EXPECT_CALL()` wherever a function argument is expected. `_` is a +convenient way of saying "any value". + +In the above examples, `100` and `50` are also matchers; implicitly, they are +the same as `Eq(100)` and `Eq(50)`, which specify that the argument must be +equal (using `operator==`) to the matcher argument. There are many +[built-in matchers](reference/matchers.md) for common types (as well as +[custom matchers](gmock_cook_book.md#NewMatchers)); for example: + +```cpp +using ::testing::Ge; +... +// Expects the turtle moves forward by at least 100. +EXPECT_CALL(turtle, Forward(Ge(100))); +``` + +If you don't care about *any* arguments, rather than specify `_` for each of +them you may instead omit the parameter list: + +```cpp +// Expects the turtle to move forward. +EXPECT_CALL(turtle, Forward); +// Expects the turtle to jump somewhere. +EXPECT_CALL(turtle, GoTo); +``` + +This works for all non-overloaded methods; if a method is overloaded, you need +to help gMock resolve which overload is expected by specifying the number of +arguments and possibly also the +[types of the arguments](gmock_cook_book.md#SelectOverload). + +### Cardinalities: How Many Times Will It Be Called? + +The first clause we can specify following an `EXPECT_CALL()` is `Times()`. We +call its argument a **cardinality** as it tells *how many times* the call should +occur. It allows us to repeat an expectation many times without actually writing +it as many times. More importantly, a cardinality can be "fuzzy", just like a +matcher can be. This allows a user to express the intent of a test exactly. + +An interesting special case is when we say `Times(0)`. You may have guessed - it +means that the function shouldn't be called with the given arguments at all, and +gMock will report a googletest failure whenever the function is (wrongfully) +called. + +We've seen `AtLeast(n)` as an example of fuzzy cardinalities earlier. For the +list of built-in cardinalities you can use, see +[here](gmock_cheat_sheet.md#CardinalityList). + +The `Times()` clause can be omitted. **If you omit `Times()`, gMock will infer +the cardinality for you.** The rules are easy to remember: + +* If **neither** `WillOnce()` **nor** `WillRepeatedly()` is in the + `EXPECT_CALL()`, the inferred cardinality is `Times(1)`. +* If there are *n* `WillOnce()`'s but **no** `WillRepeatedly()`, where *n* >= + 1, the cardinality is `Times(n)`. +* If there are *n* `WillOnce()`'s and **one** `WillRepeatedly()`, where *n* >= + 0, the cardinality is `Times(AtLeast(n))`. + +**Quick quiz:** what do you think will happen if a function is expected to be +called twice but actually called four times? + +### Actions: What Should It Do? + +Remember that a mock object doesn't really have a working implementation? We as +users have to tell it what to do when a method is invoked. This is easy in +gMock. + +First, if the return type of a mock function is a built-in type or a pointer, +the function has a **default action** (a `void` function will just return, a +`bool` function will return `false`, and other functions will return 0). In +addition, in C++ 11 and above, a mock function whose return type is +default-constructible (i.e. has a default constructor) has a default action of +returning a default-constructed value. If you don't say anything, this behavior +will be used. + +Second, if a mock function doesn't have a default action, or the default action +doesn't suit you, you can specify the action to be taken each time the +expectation matches using a series of `WillOnce()` clauses followed by an +optional `WillRepeatedly()`. For example, + +```cpp +using ::testing::Return; +... +EXPECT_CALL(turtle, GetX()) + .WillOnce(Return(100)) + .WillOnce(Return(200)) + .WillOnce(Return(300)); +``` + +says that `turtle.GetX()` will be called *exactly three times* (gMock inferred +this from how many `WillOnce()` clauses we've written, since we didn't +explicitly write `Times()`), and will return 100, 200, and 300 respectively. + +```cpp +using ::testing::Return; +... +EXPECT_CALL(turtle, GetY()) + .WillOnce(Return(100)) + .WillOnce(Return(200)) + .WillRepeatedly(Return(300)); +``` + +says that `turtle.GetY()` will be called *at least twice* (gMock knows this as +we've written two `WillOnce()` clauses and a `WillRepeatedly()` while having no +explicit `Times()`), will return 100 and 200 respectively the first two times, +and 300 from the third time on. + +Of course, if you explicitly write a `Times()`, gMock will not try to infer the +cardinality itself. What if the number you specified is larger than there are +`WillOnce()` clauses? Well, after all `WillOnce()`s are used up, gMock will do +the *default* action for the function every time (unless, of course, you have a +`WillRepeatedly()`.). + +What can we do inside `WillOnce()` besides `Return()`? You can return a +reference using `ReturnRef(*variable*)`, or invoke a pre-defined function, among +[others](gmock_cook_book.md#using-actions). + +**Important note:** The `EXPECT_CALL()` statement evaluates the action clause +only once, even though the action may be performed many times. Therefore you +must be careful about side effects. The following may not do what you want: + +```cpp +using ::testing::Return; +... +int n = 100; +EXPECT_CALL(turtle, GetX()) + .Times(4) + .WillRepeatedly(Return(n++)); +``` + +Instead of returning 100, 101, 102, ..., consecutively, this mock function will +always return 100 as `n++` is only evaluated once. Similarly, `Return(new Foo)` +will create a new `Foo` object when the `EXPECT_CALL()` is executed, and will +return the same pointer every time. If you want the side effect to happen every +time, you need to define a custom action, which we'll teach in the +[cook book](gmock_cook_book.md). + +Time for another quiz! What do you think the following means? + +```cpp +using ::testing::Return; +... +EXPECT_CALL(turtle, GetY()) + .Times(4) + .WillOnce(Return(100)); +``` + +Obviously `turtle.GetY()` is expected to be called four times. But if you think +it will return 100 every time, think twice! Remember that one `WillOnce()` +clause will be consumed each time the function is invoked and the default action +will be taken afterwards. So the right answer is that `turtle.GetY()` will +return 100 the first time, but **return 0 from the second time on**, as +returning 0 is the default action for `int` functions. + +### Using Multiple Expectations {#MultiExpectations} + +So far we've only shown examples where you have a single expectation. More +realistically, you'll specify expectations on multiple mock methods which may be +from multiple mock objects. + +By default, when a mock method is invoked, gMock will search the expectations in +the **reverse order** they are defined, and stop when an active expectation that +matches the arguments is found (you can think of it as "newer rules override +older ones."). If the matching expectation cannot take any more calls, you will +get an upper-bound-violated failure. Here's an example: + +```cpp +using ::testing::_; +... +EXPECT_CALL(turtle, Forward(_)); // #1 +EXPECT_CALL(turtle, Forward(10)) // #2 + .Times(2); +``` + +If `Forward(10)` is called three times in a row, the third time it will be an +error, as the last matching expectation (#2) has been saturated. If, however, +the third `Forward(10)` call is replaced by `Forward(20)`, then it would be OK, +as now #1 will be the matching expectation. + +{: .callout .note} +**Note:** Why does gMock search for a match in the *reverse* order of the +expectations? The reason is that this allows a user to set up the default +expectations in a mock object's constructor or the test fixture's set-up phase +and then customize the mock by writing more specific expectations in the test +body. So, if you have two expectations on the same method, you want to put the +one with more specific matchers **after** the other, or the more specific rule +would be shadowed by the more general one that comes after it. + +{: .callout .tip} +**Tip:** It is very common to start with a catch-all expectation for a method +and `Times(AnyNumber())` (omitting arguments, or with `_` for all arguments, if +overloaded). This makes any calls to the method expected. This is not necessary +for methods that are not mentioned at all (these are "uninteresting"), but is +useful for methods that have some expectations, but for which other calls are +ok. See +[Understanding Uninteresting vs Unexpected Calls](gmock_cook_book.md#uninteresting-vs-unexpected). + +### Ordered vs Unordered Calls {#OrderedCalls} + +By default, an expectation can match a call even though an earlier expectation +hasn't been satisfied. In other words, the calls don't have to occur in the +order the expectations are specified. + +Sometimes, you may want all the expected calls to occur in a strict order. To +say this in gMock is easy: + +```cpp +using ::testing::InSequence; +... +TEST(FooTest, DrawsLineSegment) { + ... + { + InSequence seq; + + EXPECT_CALL(turtle, PenDown()); + EXPECT_CALL(turtle, Forward(100)); + EXPECT_CALL(turtle, PenUp()); + } + Foo(); +} +``` + +By creating an object of type `InSequence`, all expectations in its scope are +put into a *sequence* and have to occur *sequentially*. Since we are just +relying on the constructor and destructor of this object to do the actual work, +its name is really irrelevant. + +In this example, we test that `Foo()` calls the three expected functions in the +order as written. If a call is made out-of-order, it will be an error. + +(What if you care about the relative order of some of the calls, but not all of +them? Can you specify an arbitrary partial order? The answer is ... yes! The +details can be found [here](gmock_cook_book.md#OrderedCalls).) + +### All Expectations Are Sticky (Unless Said Otherwise) {#StickyExpectations} + +Now let's do a quick quiz to see how well you can use this mock stuff already. +How would you test that the turtle is asked to go to the origin *exactly twice* +(you want to ignore any other instructions it receives)? + +After you've come up with your answer, take a look at ours and compare notes +(solve it yourself first - don't cheat!): + +```cpp +using ::testing::_; +using ::testing::AnyNumber; +... +EXPECT_CALL(turtle, GoTo(_, _)) // #1 + .Times(AnyNumber()); +EXPECT_CALL(turtle, GoTo(0, 0)) // #2 + .Times(2); +``` + +Suppose `turtle.GoTo(0, 0)` is called three times. In the third time, gMock will +see that the arguments match expectation #2 (remember that we always pick the +last matching expectation). Now, since we said that there should be only two +such calls, gMock will report an error immediately. This is basically what we've +told you in the [Using Multiple Expectations](#MultiExpectations) section above. + +This example shows that **expectations in gMock are "sticky" by default**, in +the sense that they remain active even after we have reached their invocation +upper bounds. This is an important rule to remember, as it affects the meaning +of the spec, and is **different** to how it's done in many other mocking +frameworks (Why'd we do that? Because we think our rule makes the common cases +easier to express and understand.). + +Simple? Let's see if you've really understood it: what does the following code +say? + +```cpp +using ::testing::Return; +... +for (int i = n; i > 0; i--) { + EXPECT_CALL(turtle, GetX()) + .WillOnce(Return(10*i)); +} +``` + +If you think it says that `turtle.GetX()` will be called `n` times and will +return 10, 20, 30, ..., consecutively, think twice! The problem is that, as we +said, expectations are sticky. So, the second time `turtle.GetX()` is called, +the last (latest) `EXPECT_CALL()` statement will match, and will immediately +lead to an "upper bound violated" error - this piece of code is not very useful! + +One correct way of saying that `turtle.GetX()` will return 10, 20, 30, ..., is +to explicitly say that the expectations are *not* sticky. In other words, they +should *retire* as soon as they are saturated: + +```cpp +using ::testing::Return; +... +for (int i = n; i > 0; i--) { + EXPECT_CALL(turtle, GetX()) + .WillOnce(Return(10*i)) + .RetiresOnSaturation(); +} +``` + +And, there's a better way to do it: in this case, we expect the calls to occur +in a specific order, and we line up the actions to match the order. Since the +order is important here, we should make it explicit using a sequence: + +```cpp +using ::testing::InSequence; +using ::testing::Return; +... +{ + InSequence s; + + for (int i = 1; i <= n; i++) { + EXPECT_CALL(turtle, GetX()) + .WillOnce(Return(10*i)) + .RetiresOnSaturation(); + } +} +``` + +By the way, the other situation where an expectation may *not* be sticky is when +it's in a sequence - as soon as another expectation that comes after it in the +sequence has been used, it automatically retires (and will never be used to +match any call). + +### Uninteresting Calls + +A mock object may have many methods, and not all of them are that interesting. +For example, in some tests we may not care about how many times `GetX()` and +`GetY()` get called. + +In gMock, if you are not interested in a method, just don't say anything about +it. If a call to this method occurs, you'll see a warning in the test output, +but it won't be a failure. This is called "naggy" behavior; to change, see +[The Nice, the Strict, and the Naggy](gmock_cook_book.md#NiceStrictNaggy). diff --git a/build/_deps/googletest-src/docs/index.md b/build/_deps/googletest-src/docs/index.md new file mode 100644 index 0000000..b162c74 --- /dev/null +++ b/build/_deps/googletest-src/docs/index.md @@ -0,0 +1,22 @@ +# GoogleTest User's Guide + +## Welcome to GoogleTest! + +GoogleTest is Google's C++ testing and mocking framework. This user's guide has +the following contents: + +* [GoogleTest Primer](primer.md) - Teaches you how to write simple tests using + GoogleTest. Read this first if you are new to GoogleTest. +* [GoogleTest Advanced](advanced.md) - Read this when you've finished the + Primer and want to utilize GoogleTest to its full potential. +* [GoogleTest Samples](samples.md) - Describes some GoogleTest samples. +* [GoogleTest FAQ](faq.md) - Have a question? Want some tips? Check here + first. +* [Mocking for Dummies](gmock_for_dummies.md) - Teaches you how to create mock + objects and use them in tests. +* [Mocking Cookbook](gmock_cook_book.md) - Includes tips and approaches to + common mocking use cases. +* [Mocking Cheat Sheet](gmock_cheat_sheet.md) - A handy reference for + matchers, actions, invariants, and more. +* [Mocking FAQ](gmock_faq.md) - Contains answers to some mocking-specific + questions. diff --git a/build/_deps/googletest-src/docs/pkgconfig.md b/build/_deps/googletest-src/docs/pkgconfig.md new file mode 100644 index 0000000..768e9b4 --- /dev/null +++ b/build/_deps/googletest-src/docs/pkgconfig.md @@ -0,0 +1,148 @@ +## Using GoogleTest from various build systems + +GoogleTest comes with pkg-config files that can be used to determine all +necessary flags for compiling and linking to GoogleTest (and GoogleMock). +Pkg-config is a standardised plain-text format containing + +* the includedir (-I) path +* necessary macro (-D) definitions +* further required flags (-pthread) +* the library (-L) path +* the library (-l) to link to + +All current build systems support pkg-config in one way or another. For all +examples here we assume you want to compile the sample +`samples/sample3_unittest.cc`. + +### CMake + +Using `pkg-config` in CMake is fairly easy: + +```cmake +cmake_minimum_required(VERSION 3.0) + +cmake_policy(SET CMP0048 NEW) +project(my_gtest_pkgconfig VERSION 0.0.1 LANGUAGES CXX) + +find_package(PkgConfig) +pkg_search_module(GTEST REQUIRED gtest_main) + +add_executable(testapp samples/sample3_unittest.cc) +target_link_libraries(testapp ${GTEST_LDFLAGS}) +target_compile_options(testapp PUBLIC ${GTEST_CFLAGS}) + +include(CTest) +add_test(first_and_only_test testapp) +``` + +It is generally recommended that you use `target_compile_options` + `_CFLAGS` +over `target_include_directories` + `_INCLUDE_DIRS` as the former includes not +just -I flags (GoogleTest might require a macro indicating to internal headers +that all libraries have been compiled with threading enabled. In addition, +GoogleTest might also require `-pthread` in the compiling step, and as such +splitting the pkg-config `Cflags` variable into include dirs and macros for +`target_compile_definitions()` might still miss this). The same recommendation +goes for using `_LDFLAGS` over the more commonplace `_LIBRARIES`, which happens +to discard `-L` flags and `-pthread`. + +### Help! pkg-config can't find GoogleTest! + +Let's say you have a `CMakeLists.txt` along the lines of the one in this +tutorial and you try to run `cmake`. It is very possible that you get a failure +along the lines of: + +``` +-- Checking for one of the modules 'gtest_main' +CMake Error at /usr/share/cmake/Modules/FindPkgConfig.cmake:640 (message): + None of the required 'gtest_main' found +``` + +These failures are common if you installed GoogleTest yourself and have not +sourced it from a distro or other package manager. If so, you need to tell +pkg-config where it can find the `.pc` files containing the information. Say you +installed GoogleTest to `/usr/local`, then it might be that the `.pc` files are +installed under `/usr/local/lib64/pkgconfig`. If you set + +``` +export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig +``` + +pkg-config will also try to look in `PKG_CONFIG_PATH` to find `gtest_main.pc`. + +### Using pkg-config in a cross-compilation setting + +Pkg-config can be used in a cross-compilation setting too. To do this, let's +assume the final prefix of the cross-compiled installation will be `/usr`, and +your sysroot is `/home/MYUSER/sysroot`. Configure and install GTest using + +``` +mkdir build && cmake -DCMAKE_INSTALL_PREFIX=/usr .. +``` + +Install into the sysroot using `DESTDIR`: + +``` +make -j install DESTDIR=/home/MYUSER/sysroot +``` + +Before we continue, it is recommended to **always** define the following two +variables for pkg-config in a cross-compilation setting: + +``` +export PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=yes +export PKG_CONFIG_ALLOW_SYSTEM_LIBS=yes +``` + +otherwise `pkg-config` will filter `-I` and `-L` flags against standard prefixes +such as `/usr` (see https://bugs.freedesktop.org/show_bug.cgi?id=28264#c3 for +reasons why this stripping needs to occur usually). + +If you look at the generated pkg-config file, it will look something like + +``` +libdir=/usr/lib64 +includedir=/usr/include + +Name: gtest +Description: GoogleTest (without main() function) +Version: 1.10.0 +URL: https://github.com/google/googletest +Libs: -L${libdir} -lgtest -lpthread +Cflags: -I${includedir} -DGTEST_HAS_PTHREAD=1 -lpthread +``` + +Notice that the sysroot is not included in `libdir` and `includedir`! If you try +to run `pkg-config` with the correct +`PKG_CONFIG_LIBDIR=/home/MYUSER/sysroot/usr/lib64/pkgconfig` against this `.pc` +file, you will get + +``` +$ pkg-config --cflags gtest +-DGTEST_HAS_PTHREAD=1 -lpthread -I/usr/include +$ pkg-config --libs gtest +-L/usr/lib64 -lgtest -lpthread +``` + +which is obviously wrong and points to the `CBUILD` and not `CHOST` root. In +order to use this in a cross-compilation setting, we need to tell pkg-config to +inject the actual sysroot into `-I` and `-L` variables. Let us now tell +pkg-config about the actual sysroot + +``` +export PKG_CONFIG_DIR= +export PKG_CONFIG_SYSROOT_DIR=/home/MYUSER/sysroot +export PKG_CONFIG_LIBDIR=${PKG_CONFIG_SYSROOT_DIR}/usr/lib64/pkgconfig +``` + +and running `pkg-config` again we get + +``` +$ pkg-config --cflags gtest +-DGTEST_HAS_PTHREAD=1 -lpthread -I/home/MYUSER/sysroot/usr/include +$ pkg-config --libs gtest +-L/home/MYUSER/sysroot/usr/lib64 -lgtest -lpthread +``` + +which contains the correct sysroot now. For a more comprehensive guide to also +including `${CHOST}` in build system calls, see the excellent tutorial by Diego +Elio Pettenò: diff --git a/build/_deps/googletest-src/docs/platforms.md b/build/_deps/googletest-src/docs/platforms.md new file mode 100644 index 0000000..eba6ef8 --- /dev/null +++ b/build/_deps/googletest-src/docs/platforms.md @@ -0,0 +1,35 @@ +# Supported Platforms + +GoogleTest requires a codebase and compiler compliant with the C++11 standard or +newer. + +The GoogleTest code is officially supported on the following platforms. +Operating systems or tools not listed below are community-supported. For +community-supported platforms, patches that do not complicate the code may be +considered. + +If you notice any problems on your platform, please file an issue on the +[GoogleTest GitHub Issue Tracker](https://github.com/google/googletest/issues). +Pull requests containing fixes are welcome! + +### Operating systems + +* Linux +* macOS +* Windows + +### Compilers + +* gcc 5.0+ +* clang 5.0+ +* MSVC 2015+ + +**macOS users:** Xcode 9.3+ provides clang 5.0+. + +### Build systems + +* [Bazel](https://bazel.build/) +* [CMake](https://cmake.org/) + +Bazel is the build system used by the team internally and in tests. CMake is +supported on a best-effort basis and by the community. diff --git a/build/_deps/googletest-src/docs/primer.md b/build/_deps/googletest-src/docs/primer.md new file mode 100644 index 0000000..6d8fdf4 --- /dev/null +++ b/build/_deps/googletest-src/docs/primer.md @@ -0,0 +1,482 @@ +# Googletest Primer + +## Introduction: Why googletest? + +*googletest* helps you write better C++ tests. + +googletest is a testing framework developed by the Testing Technology team with +Google's specific requirements and constraints in mind. Whether you work on +Linux, Windows, or a Mac, if you write C++ code, googletest can help you. And it +supports *any* kind of tests, not just unit tests. + +So what makes a good test, and how does googletest fit in? We believe: + +1. Tests should be *independent* and *repeatable*. It's a pain to debug a test + that succeeds or fails as a result of other tests. googletest isolates the + tests by running each of them on a different object. When a test fails, + googletest allows you to run it in isolation for quick debugging. +2. Tests should be well *organized* and reflect the structure of the tested + code. googletest groups related tests into test suites that can share data + and subroutines. This common pattern is easy to recognize and makes tests + easy to maintain. Such consistency is especially helpful when people switch + projects and start to work on a new code base. +3. Tests should be *portable* and *reusable*. Google has a lot of code that is + platform-neutral; its tests should also be platform-neutral. googletest + works on different OSes, with different compilers, with or without + exceptions, so googletest tests can work with a variety of configurations. +4. When tests fail, they should provide as much *information* about the problem + as possible. googletest doesn't stop at the first test failure. Instead, it + only stops the current test and continues with the next. You can also set up + tests that report non-fatal failures after which the current test continues. + Thus, you can detect and fix multiple bugs in a single run-edit-compile + cycle. +5. The testing framework should liberate test writers from housekeeping chores + and let them focus on the test *content*. googletest automatically keeps + track of all tests defined, and doesn't require the user to enumerate them + in order to run them. +6. Tests should be *fast*. With googletest, you can reuse shared resources + across tests and pay for the set-up/tear-down only once, without making + tests depend on each other. + +Since googletest is based on the popular xUnit architecture, you'll feel right +at home if you've used JUnit or PyUnit before. If not, it will take you about 10 +minutes to learn the basics and get started. So let's go! + +## Beware of the nomenclature + +{: .callout .note} +_Note:_ There might be some confusion arising from different definitions of the +terms _Test_, _Test Case_ and _Test Suite_, so beware of misunderstanding these. + +Historically, googletest started to use the term _Test Case_ for grouping +related tests, whereas current publications, including International Software +Testing Qualifications Board ([ISTQB](http://www.istqb.org/)) materials and +various textbooks on software quality, use the term +_[Test Suite][istqb test suite]_ for this. + +The related term _Test_, as it is used in googletest, corresponds to the term +_[Test Case][istqb test case]_ of ISTQB and others. + +The term _Test_ is commonly of broad enough sense, including ISTQB's definition +of _Test Case_, so it's not much of a problem here. But the term _Test Case_ as +was used in Google Test is of contradictory sense and thus confusing. + +googletest recently started replacing the term _Test Case_ with _Test Suite_. +The preferred API is *TestSuite*. The older TestCase API is being slowly +deprecated and refactored away. + +So please be aware of the different definitions of the terms: + + +Meaning | googletest Term | [ISTQB](http://www.istqb.org/) Term +:----------------------------------------------------------------------------------- | :---------------------- | :---------------------------------- +Exercise a particular program path with specific input values and verify the results | [TEST()](#simple-tests) | [Test Case][istqb test case] + + +[istqb test case]: http://glossary.istqb.org/en/search/test%20case +[istqb test suite]: http://glossary.istqb.org/en/search/test%20suite + +## Basic Concepts + +When using googletest, you start by writing *assertions*, which are statements +that check whether a condition is true. An assertion's result can be *success*, +*nonfatal failure*, or *fatal failure*. If a fatal failure occurs, it aborts the +current function; otherwise the program continues normally. + +*Tests* use assertions to verify the tested code's behavior. If a test crashes +or has a failed assertion, then it *fails*; otherwise it *succeeds*. + +A *test suite* contains one or many tests. You should group your tests into test +suites that reflect the structure of the tested code. When multiple tests in a +test suite need to share common objects and subroutines, you can put them into a +*test fixture* class. + +A *test program* can contain multiple test suites. + +We'll now explain how to write a test program, starting at the individual +assertion level and building up to tests and test suites. + +## Assertions + +googletest assertions are macros that resemble function calls. You test a class +or function by making assertions about its behavior. When an assertion fails, +googletest prints the assertion's source file and line number location, along +with a failure message. You may also supply a custom failure message which will +be appended to googletest's message. + +The assertions come in pairs that test the same thing but have different effects +on the current function. `ASSERT_*` versions generate fatal failures when they +fail, and **abort the current function**. `EXPECT_*` versions generate nonfatal +failures, which don't abort the current function. Usually `EXPECT_*` are +preferred, as they allow more than one failure to be reported in a test. +However, you should use `ASSERT_*` if it doesn't make sense to continue when the +assertion in question fails. + +Since a failed `ASSERT_*` returns from the current function immediately, +possibly skipping clean-up code that comes after it, it may cause a space leak. +Depending on the nature of the leak, it may or may not be worth fixing - so keep +this in mind if you get a heap checker error in addition to assertion errors. + +To provide a custom failure message, simply stream it into the macro using the +`<<` operator or a sequence of such operators. See the following example, using +the [`ASSERT_EQ` and `EXPECT_EQ`](reference/assertions.md#EXPECT_EQ) macros to +verify value equality: + +```c++ +ASSERT_EQ(x.size(), y.size()) << "Vectors x and y are of unequal length"; + +for (int i = 0; i < x.size(); ++i) { + EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i; +} +``` + +Anything that can be streamed to an `ostream` can be streamed to an assertion +macro--in particular, C strings and `string` objects. If a wide string +(`wchar_t*`, `TCHAR*` in `UNICODE` mode on Windows, or `std::wstring`) is +streamed to an assertion, it will be translated to UTF-8 when printed. + +GoogleTest provides a collection of assertions for verifying the behavior of +your code in various ways. You can check Boolean conditions, compare values +based on relational operators, verify string values, floating-point values, and +much more. There are even assertions that enable you to verify more complex +states by providing custom predicates. For the complete list of assertions +provided by GoogleTest, see the [Assertions Reference](reference/assertions.md). + +## Simple Tests + +To create a test: + +1. Use the `TEST()` macro to define and name a test function. These are + ordinary C++ functions that don't return a value. +2. In this function, along with any valid C++ statements you want to include, + use the various googletest assertions to check values. +3. The test's result is determined by the assertions; if any assertion in the + test fails (either fatally or non-fatally), or if the test crashes, the + entire test fails. Otherwise, it succeeds. + +```c++ +TEST(TestSuiteName, TestName) { + ... test body ... +} +``` + +`TEST()` arguments go from general to specific. The *first* argument is the name +of the test suite, and the *second* argument is the test's name within the test +suite. Both names must be valid C++ identifiers, and they should not contain +any underscores (`_`). A test's *full name* consists of its containing test suite and +its individual name. Tests from different test suites can have the same +individual name. + +For example, let's take a simple integer function: + +```c++ +int Factorial(int n); // Returns the factorial of n +``` + +A test suite for this function might look like: + +```c++ +// Tests factorial of 0. +TEST(FactorialTest, HandlesZeroInput) { + EXPECT_EQ(Factorial(0), 1); +} + +// Tests factorial of positive numbers. +TEST(FactorialTest, HandlesPositiveInput) { + EXPECT_EQ(Factorial(1), 1); + EXPECT_EQ(Factorial(2), 2); + EXPECT_EQ(Factorial(3), 6); + EXPECT_EQ(Factorial(8), 40320); +} +``` + +googletest groups the test results by test suites, so logically related tests +should be in the same test suite; in other words, the first argument to their +`TEST()` should be the same. In the above example, we have two tests, +`HandlesZeroInput` and `HandlesPositiveInput`, that belong to the same test +suite `FactorialTest`. + +When naming your test suites and tests, you should follow the same convention as +for +[naming functions and classes](https://google.github.io/styleguide/cppguide.html#Function_Names). + +**Availability**: Linux, Windows, Mac. + +## Test Fixtures: Using the Same Data Configuration for Multiple Tests {#same-data-multiple-tests} + +If you find yourself writing two or more tests that operate on similar data, you +can use a *test fixture*. This allows you to reuse the same configuration of +objects for several different tests. + +To create a fixture: + +1. Derive a class from `::testing::Test` . Start its body with `protected:`, as + we'll want to access fixture members from sub-classes. +2. Inside the class, declare any objects you plan to use. +3. If necessary, write a default constructor or `SetUp()` function to prepare + the objects for each test. A common mistake is to spell `SetUp()` as + **`Setup()`** with a small `u` - Use `override` in C++11 to make sure you + spelled it correctly. +4. If necessary, write a destructor or `TearDown()` function to release any + resources you allocated in `SetUp()` . To learn when you should use the + constructor/destructor and when you should use `SetUp()/TearDown()`, read + the [FAQ](faq.md#CtorVsSetUp). +5. If needed, define subroutines for your tests to share. + +When using a fixture, use `TEST_F()` instead of `TEST()` as it allows you to +access objects and subroutines in the test fixture: + +```c++ +TEST_F(TestFixtureName, TestName) { + ... test body ... +} +``` + +Like `TEST()`, the first argument is the test suite name, but for `TEST_F()` +this must be the name of the test fixture class. You've probably guessed: `_F` +is for fixture. + +Unfortunately, the C++ macro system does not allow us to create a single macro +that can handle both types of tests. Using the wrong macro causes a compiler +error. + +Also, you must first define a test fixture class before using it in a +`TEST_F()`, or you'll get the compiler error "`virtual outside class +declaration`". + +For each test defined with `TEST_F()`, googletest will create a *fresh* test +fixture at runtime, immediately initialize it via `SetUp()`, run the test, +clean up by calling `TearDown()`, and then delete the test fixture. Note that +different tests in the same test suite have different test fixture objects, and +googletest always deletes a test fixture before it creates the next one. +googletest does **not** reuse the same test fixture for multiple tests. Any +changes one test makes to the fixture do not affect other tests. + +As an example, let's write tests for a FIFO queue class named `Queue`, which has +the following interface: + +```c++ +template // E is the element type. +class Queue { + public: + Queue(); + void Enqueue(const E& element); + E* Dequeue(); // Returns NULL if the queue is empty. + size_t size() const; + ... +}; +``` + +First, define a fixture class. By convention, you should give it the name +`FooTest` where `Foo` is the class being tested. + +```c++ +class QueueTest : public ::testing::Test { + protected: + void SetUp() override { + q1_.Enqueue(1); + q2_.Enqueue(2); + q2_.Enqueue(3); + } + + // void TearDown() override {} + + Queue q0_; + Queue q1_; + Queue q2_; +}; +``` + +In this case, `TearDown()` is not needed since we don't have to clean up after +each test, other than what's already done by the destructor. + +Now we'll write tests using `TEST_F()` and this fixture. + +```c++ +TEST_F(QueueTest, IsEmptyInitially) { + EXPECT_EQ(q0_.size(), 0); +} + +TEST_F(QueueTest, DequeueWorks) { + int* n = q0_.Dequeue(); + EXPECT_EQ(n, nullptr); + + n = q1_.Dequeue(); + ASSERT_NE(n, nullptr); + EXPECT_EQ(*n, 1); + EXPECT_EQ(q1_.size(), 0); + delete n; + + n = q2_.Dequeue(); + ASSERT_NE(n, nullptr); + EXPECT_EQ(*n, 2); + EXPECT_EQ(q2_.size(), 1); + delete n; +} +``` + +The above uses both `ASSERT_*` and `EXPECT_*` assertions. The rule of thumb is +to use `EXPECT_*` when you want the test to continue to reveal more errors after +the assertion failure, and use `ASSERT_*` when continuing after failure doesn't +make sense. For example, the second assertion in the `Dequeue` test is +`ASSERT_NE(n, nullptr)`, as we need to dereference the pointer `n` later, which +would lead to a segfault when `n` is `NULL`. + +When these tests run, the following happens: + +1. googletest constructs a `QueueTest` object (let's call it `t1`). +2. `t1.SetUp()` initializes `t1`. +3. The first test (`IsEmptyInitially`) runs on `t1`. +4. `t1.TearDown()` cleans up after the test finishes. +5. `t1` is destructed. +6. The above steps are repeated on another `QueueTest` object, this time + running the `DequeueWorks` test. + +**Availability**: Linux, Windows, Mac. + +## Invoking the Tests + +`TEST()` and `TEST_F()` implicitly register their tests with googletest. So, +unlike with many other C++ testing frameworks, you don't have to re-list all +your defined tests in order to run them. + +After defining your tests, you can run them with `RUN_ALL_TESTS()`, which +returns `0` if all the tests are successful, or `1` otherwise. Note that +`RUN_ALL_TESTS()` runs *all tests* in your link unit--they can be from +different test suites, or even different source files. + +When invoked, the `RUN_ALL_TESTS()` macro: + +* Saves the state of all googletest flags. + +* Creates a test fixture object for the first test. + +* Initializes it via `SetUp()`. + +* Runs the test on the fixture object. + +* Cleans up the fixture via `TearDown()`. + +* Deletes the fixture. + +* Restores the state of all googletest flags. + +* Repeats the above steps for the next test, until all tests have run. + +If a fatal failure happens the subsequent steps will be skipped. + +{: .callout .important} +> IMPORTANT: You must **not** ignore the return value of `RUN_ALL_TESTS()`, or +> you will get a compiler error. The rationale for this design is that the +> automated testing service determines whether a test has passed based on its +> exit code, not on its stdout/stderr output; thus your `main()` function must +> return the value of `RUN_ALL_TESTS()`. +> +> Also, you should call `RUN_ALL_TESTS()` only **once**. Calling it more than +> once conflicts with some advanced googletest features (e.g., thread-safe +> [death tests](advanced.md#death-tests)) and thus is not supported. + +**Availability**: Linux, Windows, Mac. + +## Writing the main() Function + +Most users should _not_ need to write their own `main` function and instead link +with `gtest_main` (as opposed to with `gtest`), which defines a suitable entry +point. See the end of this section for details. The remainder of this section +should only apply when you need to do something custom before the tests run that +cannot be expressed within the framework of fixtures and test suites. + +If you write your own `main` function, it should return the value of +`RUN_ALL_TESTS()`. + +You can start from this boilerplate: + +```c++ +#include "this/package/foo.h" + +#include "gtest/gtest.h" + +namespace my { +namespace project { +namespace { + +// The fixture for testing class Foo. +class FooTest : public ::testing::Test { + protected: + // You can remove any or all of the following functions if their bodies would + // be empty. + + FooTest() { + // You can do set-up work for each test here. + } + + ~FooTest() override { + // You can do clean-up work that doesn't throw exceptions here. + } + + // If the constructor and destructor are not enough for setting up + // and cleaning up each test, you can define the following methods: + + void SetUp() override { + // Code here will be called immediately after the constructor (right + // before each test). + } + + void TearDown() override { + // Code here will be called immediately after each test (right + // before the destructor). + } + + // Class members declared here can be used by all tests in the test suite + // for Foo. +}; + +// Tests that the Foo::Bar() method does Abc. +TEST_F(FooTest, MethodBarDoesAbc) { + const std::string input_filepath = "this/package/testdata/myinputfile.dat"; + const std::string output_filepath = "this/package/testdata/myoutputfile.dat"; + Foo f; + EXPECT_EQ(f.Bar(input_filepath, output_filepath), 0); +} + +// Tests that Foo does Xyz. +TEST_F(FooTest, DoesXyz) { + // Exercises the Xyz feature of Foo. +} + +} // namespace +} // namespace project +} // namespace my + +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} +``` + +The `::testing::InitGoogleTest()` function parses the command line for +googletest flags, and removes all recognized flags. This allows the user to +control a test program's behavior via various flags, which we'll cover in +the [AdvancedGuide](advanced.md). You **must** call this function before calling +`RUN_ALL_TESTS()`, or the flags won't be properly initialized. + +On Windows, `InitGoogleTest()` also works with wide strings, so it can be used +in programs compiled in `UNICODE` mode as well. + +But maybe you think that writing all those `main` functions is too much work? We +agree with you completely, and that's why Google Test provides a basic +implementation of main(). If it fits your needs, then just link your test with +the `gtest_main` library and you are good to go. + +{: .callout .note} +NOTE: `ParseGUnitFlags()` is deprecated in favor of `InitGoogleTest()`. + +## Known Limitations + +* Google Test is designed to be thread-safe. The implementation is thread-safe + on systems where the `pthreads` library is available. It is currently + _unsafe_ to use Google Test assertions from two threads concurrently on + other systems (e.g. Windows). In most tests this is not an issue as usually + the assertions are done in the main thread. If you want to help, you can + volunteer to implement the necessary synchronization primitives in + `gtest-port.h` for your platform. diff --git a/build/_deps/googletest-src/docs/quickstart-bazel.md b/build/_deps/googletest-src/docs/quickstart-bazel.md new file mode 100644 index 0000000..362ee6d --- /dev/null +++ b/build/_deps/googletest-src/docs/quickstart-bazel.md @@ -0,0 +1,161 @@ +# Quickstart: Building with Bazel + +This tutorial aims to get you up and running with GoogleTest using the Bazel +build system. If you're using GoogleTest for the first time or need a refresher, +we recommend this tutorial as a starting point. + +## Prerequisites + +To complete this tutorial, you'll need: + +* A compatible operating system (e.g. Linux, macOS, Windows). +* A compatible C++ compiler that supports at least C++11. +* [Bazel](https://bazel.build/), the preferred build system used by the + GoogleTest team. + +See [Supported Platforms](platforms.md) for more information about platforms +compatible with GoogleTest. + +If you don't already have Bazel installed, see the +[Bazel installation guide](https://docs.bazel.build/versions/master/install.html). + +{: .callout .note} +Note: The terminal commands in this tutorial show a Unix shell prompt, but the +commands work on the Windows command line as well. + +## Set up a Bazel workspace + +A +[Bazel workspace](https://docs.bazel.build/versions/master/build-ref.html#workspace) +is a directory on your filesystem that you use to manage source files for the +software you want to build. Each workspace directory has a text file named +`WORKSPACE` which may be empty, or may contain references to external +dependencies required to build the outputs. + +First, create a directory for your workspace: + +``` +$ mkdir my_workspace && cd my_workspace +``` + +Next, you’ll create the `WORKSPACE` file to specify dependencies. A common and +recommended way to depend on GoogleTest is to use a +[Bazel external dependency](https://docs.bazel.build/versions/master/external.html) +via the +[`http_archive` rule](https://docs.bazel.build/versions/master/repo/http.html#http_archive). +To do this, in the root directory of your workspace (`my_workspace/`), create a +file named `WORKSPACE` with the following contents: + +``` +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "com_google_googletest", + urls = ["https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip"], + strip_prefix = "googletest-609281088cfefc76f9d0ce82e1ff6c30cc3591e5", +) +``` + +The above configuration declares a dependency on GoogleTest which is downloaded +as a ZIP archive from GitHub. In the above example, +`609281088cfefc76f9d0ce82e1ff6c30cc3591e5` is the Git commit hash of the +GoogleTest version to use; we recommend updating the hash often to point to the +latest version. + +Bazel also needs a dependency on the +[`rules_cc` repository](https://github.com/bazelbuild/rules_cc) to build C++ +code, so add the following to the `WORKSPACE` file: + +``` +http_archive( + name = "rules_cc", + urls = ["https://github.com/bazelbuild/rules_cc/archive/40548a2974f1aea06215272d9c2b47a14a24e556.zip"], + strip_prefix = "rules_cc-40548a2974f1aea06215272d9c2b47a14a24e556", +) +``` + +Now you're ready to build C++ code that uses GoogleTest. + +## Create and run a binary + +With your Bazel workspace set up, you can now use GoogleTest code within your +own project. + +As an example, create a file named `hello_test.cc` in your `my_workspace` +directory with the following contents: + +```cpp +#include + +// Demonstrate some basic assertions. +TEST(HelloTest, BasicAssertions) { + // Expect two strings not to be equal. + EXPECT_STRNE("hello", "world"); + // Expect equality. + EXPECT_EQ(7 * 6, 42); +} +``` + +GoogleTest provides [assertions](primer.md#assertions) that you use to test the +behavior of your code. The above sample includes the main GoogleTest header file +and demonstrates some basic assertions. + +To build the code, create a file named `BUILD` in the same directory with the +following contents: + +``` +load("@rules_cc//cc:defs.bzl", "cc_test") + +cc_test( + name = "hello_test", + size = "small", + srcs = ["hello_test.cc"], + deps = ["@com_google_googletest//:gtest_main"], +) +``` + +This `cc_test` rule declares the C++ test binary you want to build, and links to +GoogleTest (`//:gtest_main`) using the prefix you specified in the `WORKSPACE` +file (`@com_google_googletest`). For more information about Bazel `BUILD` files, +see the +[Bazel C++ Tutorial](https://docs.bazel.build/versions/master/tutorial/cpp.html). + +Now you can build and run your test: + +
+my_workspace$ bazel test --test_output=all //:hello_test
+INFO: Analyzed target //:hello_test (26 packages loaded, 362 targets configured).
+INFO: Found 1 test target...
+INFO: From Testing //:hello_test:
+==================== Test output for //:hello_test:
+Running main() from gmock_main.cc
+[==========] Running 1 test from 1 test suite.
+[----------] Global test environment set-up.
+[----------] 1 test from HelloTest
+[ RUN      ] HelloTest.BasicAssertions
+[       OK ] HelloTest.BasicAssertions (0 ms)
+[----------] 1 test from HelloTest (0 ms total)
+
+[----------] Global test environment tear-down
+[==========] 1 test from 1 test suite ran. (0 ms total)
+[  PASSED  ] 1 test.
+================================================================================
+Target //:hello_test up-to-date:
+  bazel-bin/hello_test
+INFO: Elapsed time: 4.190s, Critical Path: 3.05s
+INFO: 27 processes: 8 internal, 19 linux-sandbox.
+INFO: Build completed successfully, 27 total actions
+//:hello_test                                                     PASSED in 0.1s
+
+INFO: Build completed successfully, 27 total actions
+
+ +Congratulations! You've successfully built and run a test binary using +GoogleTest. + +## Next steps + +* [Check out the Primer](primer.md) to start learning how to write simple + tests. +* [See the code samples](samples.md) for more examples showing how to use a + variety of GoogleTest features. diff --git a/build/_deps/googletest-src/docs/quickstart-cmake.md b/build/_deps/googletest-src/docs/quickstart-cmake.md new file mode 100644 index 0000000..420f1d3 --- /dev/null +++ b/build/_deps/googletest-src/docs/quickstart-cmake.md @@ -0,0 +1,156 @@ +# Quickstart: Building with CMake + +This tutorial aims to get you up and running with GoogleTest using CMake. If +you're using GoogleTest for the first time or need a refresher, we recommend +this tutorial as a starting point. If your project uses Bazel, see the +[Quickstart for Bazel](quickstart-bazel.md) instead. + +## Prerequisites + +To complete this tutorial, you'll need: + +* A compatible operating system (e.g. Linux, macOS, Windows). +* A compatible C++ compiler that supports at least C++11. +* [CMake](https://cmake.org/) and a compatible build tool for building the + project. + * Compatible build tools include + [Make](https://www.gnu.org/software/make/), + [Ninja](https://ninja-build.org/), and others - see + [CMake Generators](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html) + for more information. + +See [Supported Platforms](platforms.md) for more information about platforms +compatible with GoogleTest. + +If you don't already have CMake installed, see the +[CMake installation guide](https://cmake.org/install). + +{: .callout .note} +Note: The terminal commands in this tutorial show a Unix shell prompt, but the +commands work on the Windows command line as well. + +## Set up a project + +CMake uses a file named `CMakeLists.txt` to configure the build system for a +project. You'll use this file to set up your project and declare a dependency on +GoogleTest. + +First, create a directory for your project: + +``` +$ mkdir my_project && cd my_project +``` + +Next, you'll create the `CMakeLists.txt` file and declare a dependency on +GoogleTest. There are many ways to express dependencies in the CMake ecosystem; +in this quickstart, you'll use the +[`FetchContent` CMake module](https://cmake.org/cmake/help/latest/module/FetchContent.html). +To do this, in your project directory (`my_project`), create a file named +`CMakeLists.txt` with the following contents: + +```cmake +cmake_minimum_required(VERSION 3.14) +project(my_project) + +# GoogleTest requires at least C++11 +set(CMAKE_CXX_STANDARD 11) + +include(FetchContent) +FetchContent_Declare( + googletest + URL https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip +) +# For Windows: Prevent overriding the parent project's compiler/linker settings +set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) +FetchContent_MakeAvailable(googletest) +``` + +The above configuration declares a dependency on GoogleTest which is downloaded +from GitHub. In the above example, `609281088cfefc76f9d0ce82e1ff6c30cc3591e5` is +the Git commit hash of the GoogleTest version to use; we recommend updating the +hash often to point to the latest version. + +For more information about how to create `CMakeLists.txt` files, see the +[CMake Tutorial](https://cmake.org/cmake/help/latest/guide/tutorial/index.html). + +## Create and run a binary + +With GoogleTest declared as a dependency, you can use GoogleTest code within +your own project. + +As an example, create a file named `hello_test.cc` in your `my_project` +directory with the following contents: + +```cpp +#include + +// Demonstrate some basic assertions. +TEST(HelloTest, BasicAssertions) { + // Expect two strings not to be equal. + EXPECT_STRNE("hello", "world"); + // Expect equality. + EXPECT_EQ(7 * 6, 42); +} +``` + +GoogleTest provides [assertions](primer.md#assertions) that you use to test the +behavior of your code. The above sample includes the main GoogleTest header file +and demonstrates some basic assertions. + +To build the code, add the following to the end of your `CMakeLists.txt` file: + +```cmake +enable_testing() + +add_executable( + hello_test + hello_test.cc +) +target_link_libraries( + hello_test + gtest_main +) + +include(GoogleTest) +gtest_discover_tests(hello_test) +``` + +The above configuration enables testing in CMake, declares the C++ test binary +you want to build (`hello_test`), and links it to GoogleTest (`gtest_main`). The +last two lines enable CMake's test runner to discover the tests included in the +binary, using the +[`GoogleTest` CMake module](https://cmake.org/cmake/help/git-stage/module/GoogleTest.html). + +Now you can build and run your test: + +
+my_project$ cmake -S . -B build
+-- The C compiler identification is GNU 10.2.1
+-- The CXX compiler identification is GNU 10.2.1
+...
+-- Build files have been written to: .../my_project/build
+
+my_project$ cmake --build build
+Scanning dependencies of target gtest
+...
+[100%] Built target gmock_main
+
+my_project$ cd build && ctest
+Test project .../my_project/build
+    Start 1: HelloTest.BasicAssertions
+1/1 Test #1: HelloTest.BasicAssertions ........   Passed    0.00 sec
+
+100% tests passed, 0 tests failed out of 1
+
+Total Test time (real) =   0.01 sec
+
+ +Congratulations! You've successfully built and run a test binary using +GoogleTest. + +## Next steps + +* [Check out the Primer](primer.md) to start learning how to write simple + tests. +* [See the code samples](samples.md) for more examples showing how to use a + variety of GoogleTest features. diff --git a/build/_deps/googletest-src/docs/reference/actions.md b/build/_deps/googletest-src/docs/reference/actions.md new file mode 100644 index 0000000..166d2a8 --- /dev/null +++ b/build/_deps/googletest-src/docs/reference/actions.md @@ -0,0 +1,115 @@ +# Actions Reference + +[**Actions**](../gmock_for_dummies.md#actions-what-should-it-do) specify what a +mock function should do when invoked. This page lists the built-in actions +provided by GoogleTest. All actions are defined in the `::testing` namespace. + +## Returning a Value + +| | | +| :-------------------------------- | :-------------------------------------------- | +| `Return()` | Return from a `void` mock function. | +| `Return(value)` | Return `value`. If the type of `value` is different to the mock function's return type, `value` is converted to the latter type at the time the expectation is set, not when the action is executed. | +| `ReturnArg()` | Return the `N`-th (0-based) argument. | +| `ReturnNew(a1, ..., ak)` | Return `new T(a1, ..., ak)`; a different object is created each time. | +| `ReturnNull()` | Return a null pointer. | +| `ReturnPointee(ptr)` | Return the value pointed to by `ptr`. | +| `ReturnRef(variable)` | Return a reference to `variable`. | +| `ReturnRefOfCopy(value)` | Return a reference to a copy of `value`; the copy lives as long as the action. | +| `ReturnRoundRobin({a1, ..., ak})` | Each call will return the next `ai` in the list, starting at the beginning when the end of the list is reached. | + +## Side Effects + +| | | +| :--------------------------------- | :-------------------------------------- | +| `Assign(&variable, value)` | Assign `value` to variable. | +| `DeleteArg()` | Delete the `N`-th (0-based) argument, which must be a pointer. | +| `SaveArg(pointer)` | Save the `N`-th (0-based) argument to `*pointer`. | +| `SaveArgPointee(pointer)` | Save the value pointed to by the `N`-th (0-based) argument to `*pointer`. | +| `SetArgReferee(value)` | Assign `value` to the variable referenced by the `N`-th (0-based) argument. | +| `SetArgPointee(value)` | Assign `value` to the variable pointed by the `N`-th (0-based) argument. | +| `SetArgumentPointee(value)` | Same as `SetArgPointee(value)`. Deprecated. Will be removed in v1.7.0. | +| `SetArrayArgument(first, last)` | Copies the elements in source range [`first`, `last`) to the array pointed to by the `N`-th (0-based) argument, which can be either a pointer or an iterator. The action does not take ownership of the elements in the source range. | +| `SetErrnoAndReturn(error, value)` | Set `errno` to `error` and return `value`. | +| `Throw(exception)` | Throws the given exception, which can be any copyable value. Available since v1.1.0. | + +## Using a Function, Functor, or Lambda as an Action + +In the following, by "callable" we mean a free function, `std::function`, +functor, or lambda. + +| | | +| :---------------------------------- | :------------------------------------- | +| `f` | Invoke f with the arguments passed to the mock function, where f is a callable. | +| `Invoke(f)` | Invoke `f` with the arguments passed to the mock function, where `f` can be a global/static function or a functor. | +| `Invoke(object_pointer, &class::method)` | Invoke the method on the object with the arguments passed to the mock function. | +| `InvokeWithoutArgs(f)` | Invoke `f`, which can be a global/static function or a functor. `f` must take no arguments. | +| `InvokeWithoutArgs(object_pointer, &class::method)` | Invoke the method on the object, which takes no arguments. | +| `InvokeArgument(arg1, arg2, ..., argk)` | Invoke the mock function's `N`-th (0-based) argument, which must be a function or a functor, with the `k` arguments. | + +The return value of the invoked function is used as the return value of the +action. + +When defining a callable to be used with `Invoke*()`, you can declare any unused +parameters as `Unused`: + +```cpp +using ::testing::Invoke; +double Distance(Unused, double x, double y) { return sqrt(x*x + y*y); } +... +EXPECT_CALL(mock, Foo("Hi", _, _)).WillOnce(Invoke(Distance)); +``` + +`Invoke(callback)` and `InvokeWithoutArgs(callback)` take ownership of +`callback`, which must be permanent. The type of `callback` must be a base +callback type instead of a derived one, e.g. + +```cpp + BlockingClosure* done = new BlockingClosure; + ... Invoke(done) ...; // This won't compile! + + Closure* done2 = new BlockingClosure; + ... Invoke(done2) ...; // This works. +``` + +In `InvokeArgument(...)`, if an argument needs to be passed by reference, +wrap it inside `std::ref()`. For example, + +```cpp +using ::testing::InvokeArgument; +... +InvokeArgument<2>(5, string("Hi"), std::ref(foo)) +``` + +calls the mock function's #2 argument, passing to it `5` and `string("Hi")` by +value, and `foo` by reference. + +## Default Action + +| Matcher | Description | +| :------------ | :----------------------------------------------------- | +| `DoDefault()` | Do the default action (specified by `ON_CALL()` or the built-in one). | + +{: .callout .note} +**Note:** due to technical reasons, `DoDefault()` cannot be used inside a +composite action - trying to do so will result in a run-time error. + +## Composite Actions + +| | | +| :----------------------------- | :------------------------------------------ | +| `DoAll(a1, a2, ..., an)` | Do all actions `a1` to `an` and return the result of `an` in each invocation. The first `n - 1` sub-actions must return void and will receive a readonly view of the arguments. | +| `IgnoreResult(a)` | Perform action `a` and ignore its result. `a` must not return void. | +| `WithArg(a)` | Pass the `N`-th (0-based) argument of the mock function to action `a` and perform it. | +| `WithArgs(a)` | Pass the selected (0-based) arguments of the mock function to action `a` and perform it. | +| `WithoutArgs(a)` | Perform action `a` without any arguments. | + +## Defining Actions + +| | | +| :--------------------------------- | :-------------------------------------- | +| `ACTION(Sum) { return arg0 + arg1; }` | Defines an action `Sum()` to return the sum of the mock function's argument #0 and #1. | +| `ACTION_P(Plus, n) { return arg0 + n; }` | Defines an action `Plus(n)` to return the sum of the mock function's argument #0 and `n`. | +| `ACTION_Pk(Foo, p1, ..., pk) { statements; }` | Defines a parameterized action `Foo(p1, ..., pk)` to execute the given `statements`. | + +The `ACTION*` macros cannot be used inside a function or class. diff --git a/build/_deps/googletest-src/docs/reference/assertions.md b/build/_deps/googletest-src/docs/reference/assertions.md new file mode 100644 index 0000000..7bf03a3 --- /dev/null +++ b/build/_deps/googletest-src/docs/reference/assertions.md @@ -0,0 +1,633 @@ +# Assertions Reference + +This page lists the assertion macros provided by GoogleTest for verifying code +behavior. To use them, include the header `gtest/gtest.h`. + +The majority of the macros listed below come as a pair with an `EXPECT_` variant +and an `ASSERT_` variant. Upon failure, `EXPECT_` macros generate nonfatal +failures and allow the current function to continue running, while `ASSERT_` +macros generate fatal failures and abort the current function. + +All assertion macros support streaming a custom failure message into them with +the `<<` operator, for example: + +```cpp +EXPECT_TRUE(my_condition) << "My condition is not true"; +``` + +Anything that can be streamed to an `ostream` can be streamed to an assertion +macro—in particular, C strings and string objects. If a wide string (`wchar_t*`, +`TCHAR*` in `UNICODE` mode on Windows, or `std::wstring`) is streamed to an +assertion, it will be translated to UTF-8 when printed. + +## Explicit Success and Failure {#success-failure} + +The assertions in this section generate a success or failure directly instead of +testing a value or expression. These are useful when control flow, rather than a +Boolean expression, determines the test's success or failure, as shown by the +following example: + +```c++ +switch(expression) { + case 1: + ... some checks ... + case 2: + ... some other checks ... + default: + FAIL() << "We shouldn't get here."; +} +``` + +### SUCCEED {#SUCCEED} + +`SUCCEED()` + +Generates a success. This *does not* make the overall test succeed. A test is +considered successful only if none of its assertions fail during its execution. + +The `SUCCEED` assertion is purely documentary and currently doesn't generate any +user-visible output. However, we may add `SUCCEED` messages to GoogleTest output +in the future. + +### FAIL {#FAIL} + +`FAIL()` + +Generates a fatal failure, which returns from the current function. + +Can only be used in functions that return `void`. See +[Assertion Placement](../advanced.md#assertion-placement) for more information. + +### ADD_FAILURE {#ADD_FAILURE} + +`ADD_FAILURE()` + +Generates a nonfatal failure, which allows the current function to continue +running. + +### ADD_FAILURE_AT {#ADD_FAILURE_AT} + +`ADD_FAILURE_AT(`*`file_path`*`,`*`line_number`*`)` + +Generates a nonfatal failure at the file and line number specified. + +## Generalized Assertion {#generalized} + +The following assertion allows [matchers](matchers.md) to be used to verify +values. + +### EXPECT_THAT {#EXPECT_THAT} + +`EXPECT_THAT(`*`value`*`,`*`matcher`*`)` \ +`ASSERT_THAT(`*`value`*`,`*`matcher`*`)` + +Verifies that *`value`* matches the [matcher](matchers.md) *`matcher`*. + +For example, the following code verifies that the string `value1` starts with +`"Hello"`, `value2` matches a regular expression, and `value3` is between 5 and +10: + +```cpp +#include "gmock/gmock.h" + +using ::testing::AllOf; +using ::testing::Gt; +using ::testing::Lt; +using ::testing::MatchesRegex; +using ::testing::StartsWith; + +... +EXPECT_THAT(value1, StartsWith("Hello")); +EXPECT_THAT(value2, MatchesRegex("Line \\d+")); +ASSERT_THAT(value3, AllOf(Gt(5), Lt(10))); +``` + +Matchers enable assertions of this form to read like English and generate +informative failure messages. For example, if the above assertion on `value1` +fails, the resulting message will be similar to the following: + +``` +Value of: value1 + Actual: "Hi, world!" +Expected: starts with "Hello" +``` + +GoogleTest provides a built-in library of matchers—see the +[Matchers Reference](matchers.md). It is also possible to write your own +matchers—see [Writing New Matchers Quickly](../gmock_cook_book.md#NewMatchers). +The use of matchers makes `EXPECT_THAT` a powerful, extensible assertion. + +*The idea for this assertion was borrowed from Joe Walnes' Hamcrest project, +which adds `assertThat()` to JUnit.* + +## Boolean Conditions {#boolean} + +The following assertions test Boolean conditions. + +### EXPECT_TRUE {#EXPECT_TRUE} + +`EXPECT_TRUE(`*`condition`*`)` \ +`ASSERT_TRUE(`*`condition`*`)` + +Verifies that *`condition`* is true. + +### EXPECT_FALSE {#EXPECT_FALSE} + +`EXPECT_FALSE(`*`condition`*`)` \ +`ASSERT_FALSE(`*`condition`*`)` + +Verifies that *`condition`* is false. + +## Binary Comparison {#binary-comparison} + +The following assertions compare two values. The value arguments must be +comparable by the assertion's comparison operator, otherwise a compiler error +will result. + +If an argument supports the `<<` operator, it will be called to print the +argument when the assertion fails. Otherwise, GoogleTest will attempt to print +them in the best way it can—see +[Teaching GoogleTest How to Print Your Values](../advanced.md#teaching-googletest-how-to-print-your-values). + +Arguments are always evaluated exactly once, so it's OK for the arguments to +have side effects. However, the argument evaluation order is undefined and +programs should not depend on any particular argument evaluation order. + +These assertions work with both narrow and wide string objects (`string` and +`wstring`). + +See also the [Floating-Point Comparison](#floating-point) assertions to compare +floating-point numbers and avoid problems caused by rounding. + +### EXPECT_EQ {#EXPECT_EQ} + +`EXPECT_EQ(`*`val1`*`,`*`val2`*`)` \ +`ASSERT_EQ(`*`val1`*`,`*`val2`*`)` + +Verifies that *`val1`*`==`*`val2`*. + +Does pointer equality on pointers. If used on two C strings, it tests if they +are in the same memory location, not if they have the same value. Use +[`EXPECT_STREQ`](#EXPECT_STREQ) to compare C strings (e.g. `const char*`) by +value. + +When comparing a pointer to `NULL`, use `EXPECT_EQ(`*`ptr`*`, nullptr)` instead +of `EXPECT_EQ(`*`ptr`*`, NULL)`. + +### EXPECT_NE {#EXPECT_NE} + +`EXPECT_NE(`*`val1`*`,`*`val2`*`)` \ +`ASSERT_NE(`*`val1`*`,`*`val2`*`)` + +Verifies that *`val1`*`!=`*`val2`*. + +Does pointer equality on pointers. If used on two C strings, it tests if they +are in different memory locations, not if they have different values. Use +[`EXPECT_STRNE`](#EXPECT_STRNE) to compare C strings (e.g. `const char*`) by +value. + +When comparing a pointer to `NULL`, use `EXPECT_NE(`*`ptr`*`, nullptr)` instead +of `EXPECT_NE(`*`ptr`*`, NULL)`. + +### EXPECT_LT {#EXPECT_LT} + +`EXPECT_LT(`*`val1`*`,`*`val2`*`)` \ +`ASSERT_LT(`*`val1`*`,`*`val2`*`)` + +Verifies that *`val1`*`<`*`val2`*. + +### EXPECT_LE {#EXPECT_LE} + +`EXPECT_LE(`*`val1`*`,`*`val2`*`)` \ +`ASSERT_LE(`*`val1`*`,`*`val2`*`)` + +Verifies that *`val1`*`<=`*`val2`*. + +### EXPECT_GT {#EXPECT_GT} + +`EXPECT_GT(`*`val1`*`,`*`val2`*`)` \ +`ASSERT_GT(`*`val1`*`,`*`val2`*`)` + +Verifies that *`val1`*`>`*`val2`*. + +### EXPECT_GE {#EXPECT_GE} + +`EXPECT_GE(`*`val1`*`,`*`val2`*`)` \ +`ASSERT_GE(`*`val1`*`,`*`val2`*`)` + +Verifies that *`val1`*`>=`*`val2`*. + +## String Comparison {#c-strings} + +The following assertions compare two **C strings**. To compare two `string` +objects, use [`EXPECT_EQ`](#EXPECT_EQ) or [`EXPECT_NE`](#EXPECT_NE) instead. + +These assertions also accept wide C strings (`wchar_t*`). If a comparison of two +wide strings fails, their values will be printed as UTF-8 narrow strings. + +To compare a C string with `NULL`, use `EXPECT_EQ(`*`c_string`*`, nullptr)` or +`EXPECT_NE(`*`c_string`*`, nullptr)`. + +### EXPECT_STREQ {#EXPECT_STREQ} + +`EXPECT_STREQ(`*`str1`*`,`*`str2`*`)` \ +`ASSERT_STREQ(`*`str1`*`,`*`str2`*`)` + +Verifies that the two C strings *`str1`* and *`str2`* have the same contents. + +### EXPECT_STRNE {#EXPECT_STRNE} + +`EXPECT_STRNE(`*`str1`*`,`*`str2`*`)` \ +`ASSERT_STRNE(`*`str1`*`,`*`str2`*`)` + +Verifies that the two C strings *`str1`* and *`str2`* have different contents. + +### EXPECT_STRCASEEQ {#EXPECT_STRCASEEQ} + +`EXPECT_STRCASEEQ(`*`str1`*`,`*`str2`*`)` \ +`ASSERT_STRCASEEQ(`*`str1`*`,`*`str2`*`)` + +Verifies that the two C strings *`str1`* and *`str2`* have the same contents, +ignoring case. + +### EXPECT_STRCASENE {#EXPECT_STRCASENE} + +`EXPECT_STRCASENE(`*`str1`*`,`*`str2`*`)` \ +`ASSERT_STRCASENE(`*`str1`*`,`*`str2`*`)` + +Verifies that the two C strings *`str1`* and *`str2`* have different contents, +ignoring case. + +## Floating-Point Comparison {#floating-point} + +The following assertions compare two floating-point values. + +Due to rounding errors, it is very unlikely that two floating-point values will +match exactly, so `EXPECT_EQ` is not suitable. In general, for floating-point +comparison to make sense, the user needs to carefully choose the error bound. + +GoogleTest also provides assertions that use a default error bound based on +Units in the Last Place (ULPs). To learn more about ULPs, see the article +[Comparing Floating Point Numbers](https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/). + +### EXPECT_FLOAT_EQ {#EXPECT_FLOAT_EQ} + +`EXPECT_FLOAT_EQ(`*`val1`*`,`*`val2`*`)` \ +`ASSERT_FLOAT_EQ(`*`val1`*`,`*`val2`*`)` + +Verifies that the two `float` values *`val1`* and *`val2`* are approximately +equal, to within 4 ULPs from each other. + +### EXPECT_DOUBLE_EQ {#EXPECT_DOUBLE_EQ} + +`EXPECT_DOUBLE_EQ(`*`val1`*`,`*`val2`*`)` \ +`ASSERT_DOUBLE_EQ(`*`val1`*`,`*`val2`*`)` + +Verifies that the two `double` values *`val1`* and *`val2`* are approximately +equal, to within 4 ULPs from each other. + +### EXPECT_NEAR {#EXPECT_NEAR} + +`EXPECT_NEAR(`*`val1`*`,`*`val2`*`,`*`abs_error`*`)` \ +`ASSERT_NEAR(`*`val1`*`,`*`val2`*`,`*`abs_error`*`)` + +Verifies that the difference between *`val1`* and *`val2`* does not exceed the +absolute error bound *`abs_error`*. + +## Exception Assertions {#exceptions} + +The following assertions verify that a piece of code throws, or does not throw, +an exception. Usage requires exceptions to be enabled in the build environment. + +Note that the piece of code under test can be a compound statement, for example: + +```cpp +EXPECT_NO_THROW({ + int n = 5; + DoSomething(&n); +}); +``` + +### EXPECT_THROW {#EXPECT_THROW} + +`EXPECT_THROW(`*`statement`*`,`*`exception_type`*`)` \ +`ASSERT_THROW(`*`statement`*`,`*`exception_type`*`)` + +Verifies that *`statement`* throws an exception of type *`exception_type`*. + +### EXPECT_ANY_THROW {#EXPECT_ANY_THROW} + +`EXPECT_ANY_THROW(`*`statement`*`)` \ +`ASSERT_ANY_THROW(`*`statement`*`)` + +Verifies that *`statement`* throws an exception of any type. + +### EXPECT_NO_THROW {#EXPECT_NO_THROW} + +`EXPECT_NO_THROW(`*`statement`*`)` \ +`ASSERT_NO_THROW(`*`statement`*`)` + +Verifies that *`statement`* does not throw any exception. + +## Predicate Assertions {#predicates} + +The following assertions enable more complex predicates to be verified while +printing a more clear failure message than if `EXPECT_TRUE` were used alone. + +### EXPECT_PRED* {#EXPECT_PRED} + +`EXPECT_PRED1(`*`pred`*`,`*`val1`*`)` \ +`EXPECT_PRED2(`*`pred`*`,`*`val1`*`,`*`val2`*`)` \ +`EXPECT_PRED3(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`)` \ +`EXPECT_PRED4(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`)` \ +`EXPECT_PRED5(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`,`*`val5`*`)` + +`ASSERT_PRED1(`*`pred`*`,`*`val1`*`)` \ +`ASSERT_PRED2(`*`pred`*`,`*`val1`*`,`*`val2`*`)` \ +`ASSERT_PRED3(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`)` \ +`ASSERT_PRED4(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`)` \ +`ASSERT_PRED5(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`,`*`val5`*`)` + +Verifies that the predicate *`pred`* returns `true` when passed the given values +as arguments. + +The parameter *`pred`* is a function or functor that accepts as many arguments +as the corresponding macro accepts values. If *`pred`* returns `true` for the +given arguments, the assertion succeeds, otherwise the assertion fails. + +When the assertion fails, it prints the value of each argument. Arguments are +always evaluated exactly once. + +As an example, see the following code: + +```cpp +// Returns true if m and n have no common divisors except 1. +bool MutuallyPrime(int m, int n) { ... } +... +const int a = 3; +const int b = 4; +const int c = 10; +... +EXPECT_PRED2(MutuallyPrime, a, b); // Succeeds +EXPECT_PRED2(MutuallyPrime, b, c); // Fails +``` + +In the above example, the first assertion succeeds, and the second fails with +the following message: + +``` +MutuallyPrime(b, c) is false, where +b is 4 +c is 10 +``` + +Note that if the given predicate is an overloaded function or a function +template, the assertion macro might not be able to determine which version to +use, and it might be necessary to explicitly specify the type of the function. +For example, for a Boolean function `IsPositive()` overloaded to take either a +single `int` or `double` argument, it would be necessary to write one of the +following: + +```cpp +EXPECT_PRED1(static_cast(IsPositive), 5); +EXPECT_PRED1(static_cast(IsPositive), 3.14); +``` + +Writing simply `EXPECT_PRED1(IsPositive, 5);` would result in a compiler error. +Similarly, to use a template function, specify the template arguments: + +```cpp +template +bool IsNegative(T x) { + return x < 0; +} +... +EXPECT_PRED1(IsNegative, -5); // Must specify type for IsNegative +``` + +If a template has multiple parameters, wrap the predicate in parentheses so the +macro arguments are parsed correctly: + +```cpp +ASSERT_PRED2((MyPredicate), 5, 0); +``` + +### EXPECT_PRED_FORMAT* {#EXPECT_PRED_FORMAT} + +`EXPECT_PRED_FORMAT1(`*`pred_formatter`*`,`*`val1`*`)` \ +`EXPECT_PRED_FORMAT2(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`)` \ +`EXPECT_PRED_FORMAT3(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`)` \ +`EXPECT_PRED_FORMAT4(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`)` +\ +`EXPECT_PRED_FORMAT5(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`,`*`val5`*`)` + +`ASSERT_PRED_FORMAT1(`*`pred_formatter`*`,`*`val1`*`)` \ +`ASSERT_PRED_FORMAT2(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`)` \ +`ASSERT_PRED_FORMAT3(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`)` \ +`ASSERT_PRED_FORMAT4(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`)` +\ +`ASSERT_PRED_FORMAT5(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`,`*`val5`*`)` + +Verifies that the predicate *`pred_formatter`* succeeds when passed the given +values as arguments. + +The parameter *`pred_formatter`* is a *predicate-formatter*, which is a function +or functor with the signature: + +```cpp +testing::AssertionResult PredicateFormatter(const char* expr1, + const char* expr2, + ... + const char* exprn, + T1 val1, + T2 val2, + ... + Tn valn); +``` + +where *`val1`*, *`val2`*, ..., *`valn`* are the values of the predicate +arguments, and *`expr1`*, *`expr2`*, ..., *`exprn`* are the corresponding +expressions as they appear in the source code. The types `T1`, `T2`, ..., `Tn` +can be either value types or reference types; if an argument has type `T`, it +can be declared as either `T` or `const T&`, whichever is appropriate. For more +about the return type `testing::AssertionResult`, see +[Using a Function That Returns an AssertionResult](../advanced.md#using-a-function-that-returns-an-assertionresult). + +As an example, see the following code: + +```cpp +// Returns the smallest prime common divisor of m and n, +// or 1 when m and n are mutually prime. +int SmallestPrimeCommonDivisor(int m, int n) { ... } + +// Returns true if m and n have no common divisors except 1. +bool MutuallyPrime(int m, int n) { ... } + +// A predicate-formatter for asserting that two integers are mutually prime. +testing::AssertionResult AssertMutuallyPrime(const char* m_expr, + const char* n_expr, + int m, + int n) { + if (MutuallyPrime(m, n)) return testing::AssertionSuccess(); + + return testing::AssertionFailure() << m_expr << " and " << n_expr + << " (" << m << " and " << n << ") are not mutually prime, " + << "as they have a common divisor " << SmallestPrimeCommonDivisor(m, n); +} + +... +const int a = 3; +const int b = 4; +const int c = 10; +... +EXPECT_PRED_FORMAT2(AssertMutuallyPrime, a, b); // Succeeds +EXPECT_PRED_FORMAT2(AssertMutuallyPrime, b, c); // Fails +``` + +In the above example, the final assertion fails and the predicate-formatter +produces the following failure message: + +``` +b and c (4 and 10) are not mutually prime, as they have a common divisor 2 +``` + +## Windows HRESULT Assertions {#HRESULT} + +The following assertions test for `HRESULT` success or failure. For example: + +```cpp +CComPtr shell; +ASSERT_HRESULT_SUCCEEDED(shell.CoCreateInstance(L"Shell.Application")); +CComVariant empty; +ASSERT_HRESULT_SUCCEEDED(shell->ShellExecute(CComBSTR(url), empty, empty, empty, empty)); +``` + +The generated output contains the human-readable error message associated with +the returned `HRESULT` code. + +### EXPECT_HRESULT_SUCCEEDED {#EXPECT_HRESULT_SUCCEEDED} + +`EXPECT_HRESULT_SUCCEEDED(`*`expression`*`)` \ +`ASSERT_HRESULT_SUCCEEDED(`*`expression`*`)` + +Verifies that *`expression`* is a success `HRESULT`. + +### EXPECT_HRESULT_FAILED {#EXPECT_HRESULT_FAILED} + +`EXPECT_HRESULT_FAILED(`*`expression`*`)` \ +`EXPECT_HRESULT_FAILED(`*`expression`*`)` + +Verifies that *`expression`* is a failure `HRESULT`. + +## Death Assertions {#death} + +The following assertions verify that a piece of code causes the process to +terminate. For context, see [Death Tests](../advanced.md#death-tests). + +These assertions spawn a new process and execute the code under test in that +process. How that happens depends on the platform and the variable +`::testing::GTEST_FLAG(death_test_style)`, which is initialized from the +command-line flag `--gtest_death_test_style`. + +* On POSIX systems, `fork()` (or `clone()` on Linux) is used to spawn the + child, after which: + * If the variable's value is `"fast"`, the death test statement is + immediately executed. + * If the variable's value is `"threadsafe"`, the child process re-executes + the unit test binary just as it was originally invoked, but with some + extra flags to cause just the single death test under consideration to + be run. +* On Windows, the child is spawned using the `CreateProcess()` API, and + re-executes the binary to cause just the single death test under + consideration to be run - much like the `"threadsafe"` mode on POSIX. + +Other values for the variable are illegal and will cause the death test to fail. +Currently, the flag's default value is +**`"fast"`**. + +If the death test statement runs to completion without dying, the child process +will nonetheless terminate, and the assertion fails. + +Note that the piece of code under test can be a compound statement, for example: + +```cpp +EXPECT_DEATH({ + int n = 5; + DoSomething(&n); +}, "Error on line .* of DoSomething()"); +``` + +### EXPECT_DEATH {#EXPECT_DEATH} + +`EXPECT_DEATH(`*`statement`*`,`*`matcher`*`)` \ +`ASSERT_DEATH(`*`statement`*`,`*`matcher`*`)` + +Verifies that *`statement`* causes the process to terminate with a nonzero exit +status and produces `stderr` output that matches *`matcher`*. + +The parameter *`matcher`* is either a [matcher](matchers.md) for a `const +std::string&`, or a regular expression (see +[Regular Expression Syntax](../advanced.md#regular-expression-syntax))—a bare +string *`s`* (with no matcher) is treated as +[`ContainsRegex(s)`](matchers.md#string-matchers), **not** +[`Eq(s)`](matchers.md#generic-comparison). + +For example, the following code verifies that calling `DoSomething(42)` causes +the process to die with an error message that contains the text `My error`: + +```cpp +EXPECT_DEATH(DoSomething(42), "My error"); +``` + +### EXPECT_DEATH_IF_SUPPORTED {#EXPECT_DEATH_IF_SUPPORTED} + +`EXPECT_DEATH_IF_SUPPORTED(`*`statement`*`,`*`matcher`*`)` \ +`ASSERT_DEATH_IF_SUPPORTED(`*`statement`*`,`*`matcher`*`)` + +If death tests are supported, behaves the same as +[`EXPECT_DEATH`](#EXPECT_DEATH). Otherwise, verifies nothing. + +### EXPECT_DEBUG_DEATH {#EXPECT_DEBUG_DEATH} + +`EXPECT_DEBUG_DEATH(`*`statement`*`,`*`matcher`*`)` \ +`ASSERT_DEBUG_DEATH(`*`statement`*`,`*`matcher`*`)` + +In debug mode, behaves the same as [`EXPECT_DEATH`](#EXPECT_DEATH). When not in +debug mode (i.e. `NDEBUG` is defined), just executes *`statement`*. + +### EXPECT_EXIT {#EXPECT_EXIT} + +`EXPECT_EXIT(`*`statement`*`,`*`predicate`*`,`*`matcher`*`)` \ +`ASSERT_EXIT(`*`statement`*`,`*`predicate`*`,`*`matcher`*`)` + +Verifies that *`statement`* causes the process to terminate with an exit status +that satisfies *`predicate`*, and produces `stderr` output that matches +*`matcher`*. + +The parameter *`predicate`* is a function or functor that accepts an `int` exit +status and returns a `bool`. GoogleTest provides two predicates to handle common +cases: + +```cpp +// Returns true if the program exited normally with the given exit status code. +::testing::ExitedWithCode(exit_code); + +// Returns true if the program was killed by the given signal. +// Not available on Windows. +::testing::KilledBySignal(signal_number); +``` + +The parameter *`matcher`* is either a [matcher](matchers.md) for a `const +std::string&`, or a regular expression (see +[Regular Expression Syntax](../advanced.md#regular-expression-syntax))—a bare +string *`s`* (with no matcher) is treated as +[`ContainsRegex(s)`](matchers.md#string-matchers), **not** +[`Eq(s)`](matchers.md#generic-comparison). + +For example, the following code verifies that calling `NormalExit()` causes the +process to print a message containing the text `Success` to `stderr` and exit +with exit status code 0: + +```cpp +EXPECT_EXIT(NormalExit(), testing::ExitedWithCode(0), "Success"); +``` diff --git a/build/_deps/googletest-src/docs/reference/matchers.md b/build/_deps/googletest-src/docs/reference/matchers.md new file mode 100644 index 0000000..9e40cab --- /dev/null +++ b/build/_deps/googletest-src/docs/reference/matchers.md @@ -0,0 +1,283 @@ +# Matchers Reference + +A **matcher** matches a *single* argument. You can use it inside `ON_CALL()` or +`EXPECT_CALL()`, or use it to validate a value directly using two macros: + +| Macro | Description | +| :----------------------------------- | :------------------------------------ | +| `EXPECT_THAT(actual_value, matcher)` | Asserts that `actual_value` matches `matcher`. | +| `ASSERT_THAT(actual_value, matcher)` | The same as `EXPECT_THAT(actual_value, matcher)`, except that it generates a **fatal** failure. | + +{: .callout .note} +**Note:** Although equality matching via `EXPECT_THAT(actual_value, +expected_value)` is supported, prefer to make the comparison explicit via +`EXPECT_THAT(actual_value, Eq(expected_value))` or `EXPECT_EQ(actual_value, +expected_value)`. + +Built-in matchers (where `argument` is the function argument, e.g. +`actual_value` in the example above, or when used in the context of +`EXPECT_CALL(mock_object, method(matchers))`, the arguments of `method`) are +divided into several categories. All matchers are defined in the `::testing` +namespace unless otherwise noted. + +## Wildcard + +Matcher | Description +:-------------------------- | :----------------------------------------------- +`_` | `argument` can be any value of the correct type. +`A()` or `An()` | `argument` can be any value of type `type`. + +## Generic Comparison + +| Matcher | Description | +| :--------------------- | :-------------------------------------------------- | +| `Eq(value)` or `value` | `argument == value` | +| `Ge(value)` | `argument >= value` | +| `Gt(value)` | `argument > value` | +| `Le(value)` | `argument <= value` | +| `Lt(value)` | `argument < value` | +| `Ne(value)` | `argument != value` | +| `IsFalse()` | `argument` evaluates to `false` in a Boolean context. | +| `IsTrue()` | `argument` evaluates to `true` in a Boolean context. | +| `IsNull()` | `argument` is a `NULL` pointer (raw or smart). | +| `NotNull()` | `argument` is a non-null pointer (raw or smart). | +| `Optional(m)` | `argument` is `optional<>` that contains a value matching `m`. (For testing whether an `optional<>` is set, check for equality with `nullopt`. You may need to use `Eq(nullopt)` if the inner type doesn't have `==`.)| +| `VariantWith(m)` | `argument` is `variant<>` that holds the alternative of type T with a value matching `m`. | +| `Ref(variable)` | `argument` is a reference to `variable`. | +| `TypedEq(value)` | `argument` has type `type` and is equal to `value`. You may need to use this instead of `Eq(value)` when the mock function is overloaded. | + +Except `Ref()`, these matchers make a *copy* of `value` in case it's modified or +destructed later. If the compiler complains that `value` doesn't have a public +copy constructor, try wrap it in `std::ref()`, e.g. +`Eq(std::ref(non_copyable_value))`. If you do that, make sure +`non_copyable_value` is not changed afterwards, or the meaning of your matcher +will be changed. + +`IsTrue` and `IsFalse` are useful when you need to use a matcher, or for types +that can be explicitly converted to Boolean, but are not implicitly converted to +Boolean. In other cases, you can use the basic +[`EXPECT_TRUE` and `EXPECT_FALSE`](assertions.md#boolean) assertions. + +## Floating-Point Matchers {#FpMatchers} + +| Matcher | Description | +| :------------------------------- | :--------------------------------- | +| `DoubleEq(a_double)` | `argument` is a `double` value approximately equal to `a_double`, treating two NaNs as unequal. | +| `FloatEq(a_float)` | `argument` is a `float` value approximately equal to `a_float`, treating two NaNs as unequal. | +| `NanSensitiveDoubleEq(a_double)` | `argument` is a `double` value approximately equal to `a_double`, treating two NaNs as equal. | +| `NanSensitiveFloatEq(a_float)` | `argument` is a `float` value approximately equal to `a_float`, treating two NaNs as equal. | +| `IsNan()` | `argument` is any floating-point type with a NaN value. | + +The above matchers use ULP-based comparison (the same as used in googletest). +They automatically pick a reasonable error bound based on the absolute value of +the expected value. `DoubleEq()` and `FloatEq()` conform to the IEEE standard, +which requires comparing two NaNs for equality to return false. The +`NanSensitive*` version instead treats two NaNs as equal, which is often what a +user wants. + +| Matcher | Description | +| :------------------------------------------------ | :----------------------- | +| `DoubleNear(a_double, max_abs_error)` | `argument` is a `double` value close to `a_double` (absolute error <= `max_abs_error`), treating two NaNs as unequal. | +| `FloatNear(a_float, max_abs_error)` | `argument` is a `float` value close to `a_float` (absolute error <= `max_abs_error`), treating two NaNs as unequal. | +| `NanSensitiveDoubleNear(a_double, max_abs_error)` | `argument` is a `double` value close to `a_double` (absolute error <= `max_abs_error`), treating two NaNs as equal. | +| `NanSensitiveFloatNear(a_float, max_abs_error)` | `argument` is a `float` value close to `a_float` (absolute error <= `max_abs_error`), treating two NaNs as equal. | + +## String Matchers + +The `argument` can be either a C string or a C++ string object: + +| Matcher | Description | +| :---------------------- | :------------------------------------------------- | +| `ContainsRegex(string)` | `argument` matches the given regular expression. | +| `EndsWith(suffix)` | `argument` ends with string `suffix`. | +| `HasSubstr(string)` | `argument` contains `string` as a sub-string. | +| `IsEmpty()` | `argument` is an empty string. | +| `MatchesRegex(string)` | `argument` matches the given regular expression with the match starting at the first character and ending at the last character. | +| `StartsWith(prefix)` | `argument` starts with string `prefix`. | +| `StrCaseEq(string)` | `argument` is equal to `string`, ignoring case. | +| `StrCaseNe(string)` | `argument` is not equal to `string`, ignoring case. | +| `StrEq(string)` | `argument` is equal to `string`. | +| `StrNe(string)` | `argument` is not equal to `string`. | + +`ContainsRegex()` and `MatchesRegex()` take ownership of the `RE` object. They +use the regular expression syntax defined +[here](../advanced.md#regular-expression-syntax). All of these matchers, except +`ContainsRegex()` and `MatchesRegex()` work for wide strings as well. + +## Container Matchers + +Most STL-style containers support `==`, so you can use `Eq(expected_container)` +or simply `expected_container` to match a container exactly. If you want to +write the elements in-line, match them more flexibly, or get more informative +messages, you can use: + +| Matcher | Description | +| :---------------------------------------- | :------------------------------- | +| `BeginEndDistanceIs(m)` | `argument` is a container whose `begin()` and `end()` iterators are separated by a number of increments matching `m`. E.g. `BeginEndDistanceIs(2)` or `BeginEndDistanceIs(Lt(2))`. For containers that define a `size()` method, `SizeIs(m)` may be more efficient. | +| `ContainerEq(container)` | The same as `Eq(container)` except that the failure message also includes which elements are in one container but not the other. | +| `Contains(e)` | `argument` contains an element that matches `e`, which can be either a value or a matcher. | +| `Each(e)` | `argument` is a container where *every* element matches `e`, which can be either a value or a matcher. | +| `ElementsAre(e0, e1, ..., en)` | `argument` has `n + 1` elements, where the *i*-th element matches `ei`, which can be a value or a matcher. | +| `ElementsAreArray({e0, e1, ..., en})`, `ElementsAreArray(a_container)`, `ElementsAreArray(begin, end)`, `ElementsAreArray(array)`, or `ElementsAreArray(array, count)` | The same as `ElementsAre()` except that the expected element values/matchers come from an initializer list, STL-style container, iterator range, or C-style array. | +| `IsEmpty()` | `argument` is an empty container (`container.empty()`). | +| `IsSubsetOf({e0, e1, ..., en})`, `IsSubsetOf(a_container)`, `IsSubsetOf(begin, end)`, `IsSubsetOf(array)`, or `IsSubsetOf(array, count)` | `argument` matches `UnorderedElementsAre(x0, x1, ..., xk)` for some subset `{x0, x1, ..., xk}` of the expected matchers. | +| `IsSupersetOf({e0, e1, ..., en})`, `IsSupersetOf(a_container)`, `IsSupersetOf(begin, end)`, `IsSupersetOf(array)`, or `IsSupersetOf(array, count)` | Some subset of `argument` matches `UnorderedElementsAre(`expected matchers`)`. | +| `Pointwise(m, container)`, `Pointwise(m, {e0, e1, ..., en})` | `argument` contains the same number of elements as in `container`, and for all i, (the i-th element in `argument`, the i-th element in `container`) match `m`, which is a matcher on 2-tuples. E.g. `Pointwise(Le(), upper_bounds)` verifies that each element in `argument` doesn't exceed the corresponding element in `upper_bounds`. See more detail below. | +| `SizeIs(m)` | `argument` is a container whose size matches `m`. E.g. `SizeIs(2)` or `SizeIs(Lt(2))`. | +| `UnorderedElementsAre(e0, e1, ..., en)` | `argument` has `n + 1` elements, and under *some* permutation of the elements, each element matches an `ei` (for a different `i`), which can be a value or a matcher. | +| `UnorderedElementsAreArray({e0, e1, ..., en})`, `UnorderedElementsAreArray(a_container)`, `UnorderedElementsAreArray(begin, end)`, `UnorderedElementsAreArray(array)`, or `UnorderedElementsAreArray(array, count)` | The same as `UnorderedElementsAre()` except that the expected element values/matchers come from an initializer list, STL-style container, iterator range, or C-style array. | +| `UnorderedPointwise(m, container)`, `UnorderedPointwise(m, {e0, e1, ..., en})` | Like `Pointwise(m, container)`, but ignores the order of elements. | +| `WhenSorted(m)` | When `argument` is sorted using the `<` operator, it matches container matcher `m`. E.g. `WhenSorted(ElementsAre(1, 2, 3))` verifies that `argument` contains elements 1, 2, and 3, ignoring order. | +| `WhenSortedBy(comparator, m)` | The same as `WhenSorted(m)`, except that the given comparator instead of `<` is used to sort `argument`. E.g. `WhenSortedBy(std::greater(), ElementsAre(3, 2, 1))`. | + +**Notes:** + +* These matchers can also match: + 1. a native array passed by reference (e.g. in `Foo(const int (&a)[5])`), + and + 2. an array passed as a pointer and a count (e.g. in `Bar(const T* buffer, + int len)` -- see [Multi-argument Matchers](#MultiArgMatchers)). +* The array being matched may be multi-dimensional (i.e. its elements can be + arrays). +* `m` in `Pointwise(m, ...)` and `UnorderedPointwise(m, ...)` should be a + matcher for `::std::tuple` where `T` and `U` are the element type of + the actual container and the expected container, respectively. For example, + to compare two `Foo` containers where `Foo` doesn't support `operator==`, + one might write: + + ```cpp + using ::std::get; + MATCHER(FooEq, "") { + return std::get<0>(arg).Equals(std::get<1>(arg)); + } + ... + EXPECT_THAT(actual_foos, Pointwise(FooEq(), expected_foos)); + ``` + +## Member Matchers + +| Matcher | Description | +| :------------------------------ | :----------------------------------------- | +| `Field(&class::field, m)` | `argument.field` (or `argument->field` when `argument` is a plain pointer) matches matcher `m`, where `argument` is an object of type _class_. | +| `Field(field_name, &class::field, m)` | The same as the two-parameter version, but provides a better error message. | +| `Key(e)` | `argument.first` matches `e`, which can be either a value or a matcher. E.g. `Contains(Key(Le(5)))` can verify that a `map` contains a key `<= 5`. | +| `Pair(m1, m2)` | `argument` is an `std::pair` whose `first` field matches `m1` and `second` field matches `m2`. | +| `FieldsAre(m...)` | `argument` is a compatible object where each field matches piecewise with the matchers `m...`. A compatible object is any that supports the `std::tuple_size`+`get(obj)` protocol. In C++17 and up this also supports types compatible with structured bindings, like aggregates. | +| `Property(&class::property, m)` | `argument.property()` (or `argument->property()` when `argument` is a plain pointer) matches matcher `m`, where `argument` is an object of type _class_. The method `property()` must take no argument and be declared as `const`. | +| `Property(property_name, &class::property, m)` | The same as the two-parameter version, but provides a better error message. + +**Notes:** + +* You can use `FieldsAre()` to match any type that supports structured + bindings, such as `std::tuple`, `std::pair`, `std::array`, and aggregate + types. For example: + + ```cpp + std::tuple my_tuple{7, "hello world"}; + EXPECT_THAT(my_tuple, FieldsAre(Ge(0), HasSubstr("hello"))); + + struct MyStruct { + int value = 42; + std::string greeting = "aloha"; + }; + MyStruct s; + EXPECT_THAT(s, FieldsAre(42, "aloha")); + ``` + +* Don't use `Property()` against member functions that you do not own, because + taking addresses of functions is fragile and generally not part of the + contract of the function. + +## Matching the Result of a Function, Functor, or Callback + +| Matcher | Description | +| :--------------- | :------------------------------------------------ | +| `ResultOf(f, m)` | `f(argument)` matches matcher `m`, where `f` is a function or functor. | + +## Pointer Matchers + +| Matcher | Description | +| :------------------------ | :---------------------------------------------- | +| `Address(m)` | the result of `std::addressof(argument)` matches `m`. | +| `Pointee(m)` | `argument` (either a smart pointer or a raw pointer) points to a value that matches matcher `m`. | +| `Pointer(m)` | `argument` (either a smart pointer or a raw pointer) contains a pointer that matches `m`. `m` will match against the raw pointer regardless of the type of `argument`. | +| `WhenDynamicCastTo(m)` | when `argument` is passed through `dynamic_cast()`, it matches matcher `m`. | + +## Multi-argument Matchers {#MultiArgMatchers} + +Technically, all matchers match a *single* value. A "multi-argument" matcher is +just one that matches a *tuple*. The following matchers can be used to match a +tuple `(x, y)`: + +Matcher | Description +:------ | :---------- +`Eq()` | `x == y` +`Ge()` | `x >= y` +`Gt()` | `x > y` +`Le()` | `x <= y` +`Lt()` | `x < y` +`Ne()` | `x != y` + +You can use the following selectors to pick a subset of the arguments (or +reorder them) to participate in the matching: + +| Matcher | Description | +| :------------------------- | :---------------------------------------------- | +| `AllArgs(m)` | Equivalent to `m`. Useful as syntactic sugar in `.With(AllArgs(m))`. | +| `Args(m)` | The tuple of the `k` selected (using 0-based indices) arguments matches `m`, e.g. `Args<1, 2>(Eq())`. | + +## Composite Matchers + +You can make a matcher from one or more other matchers: + +| Matcher | Description | +| :------------------------------- | :-------------------------------------- | +| `AllOf(m1, m2, ..., mn)` | `argument` matches all of the matchers `m1` to `mn`. | +| `AllOfArray({m0, m1, ..., mn})`, `AllOfArray(a_container)`, `AllOfArray(begin, end)`, `AllOfArray(array)`, or `AllOfArray(array, count)` | The same as `AllOf()` except that the matchers come from an initializer list, STL-style container, iterator range, or C-style array. | +| `AnyOf(m1, m2, ..., mn)` | `argument` matches at least one of the matchers `m1` to `mn`. | +| `AnyOfArray({m0, m1, ..., mn})`, `AnyOfArray(a_container)`, `AnyOfArray(begin, end)`, `AnyOfArray(array)`, or `AnyOfArray(array, count)` | The same as `AnyOf()` except that the matchers come from an initializer list, STL-style container, iterator range, or C-style array. | +| `Not(m)` | `argument` doesn't match matcher `m`. | + +## Adapters for Matchers + +| Matcher | Description | +| :---------------------- | :------------------------------------ | +| `MatcherCast(m)` | casts matcher `m` to type `Matcher`. | +| `SafeMatcherCast(m)` | [safely casts](../gmock_cook_book.md#SafeMatcherCast) matcher `m` to type `Matcher`. | +| `Truly(predicate)` | `predicate(argument)` returns something considered by C++ to be true, where `predicate` is a function or functor. | + +`AddressSatisfies(callback)` and `Truly(callback)` take ownership of `callback`, +which must be a permanent callback. + +## Using Matchers as Predicates {#MatchersAsPredicatesCheat} + +| Matcher | Description | +| :---------------------------- | :------------------------------------------ | +| `Matches(m)(value)` | evaluates to `true` if `value` matches `m`. You can use `Matches(m)` alone as a unary functor. | +| `ExplainMatchResult(m, value, result_listener)` | evaluates to `true` if `value` matches `m`, explaining the result to `result_listener`. | +| `Value(value, m)` | evaluates to `true` if `value` matches `m`. | + +## Defining Matchers + +| Matcher | Description | +| :----------------------------------- | :------------------------------------ | +| `MATCHER(IsEven, "") { return (arg % 2) == 0; }` | Defines a matcher `IsEven()` to match an even number. | +| `MATCHER_P(IsDivisibleBy, n, "") { *result_listener << "where the remainder is " << (arg % n); return (arg % n) == 0; }` | Defines a matcher `IsDivisibleBy(n)` to match a number divisible by `n`. | +| `MATCHER_P2(IsBetween, a, b, absl::StrCat(negation ? "isn't" : "is", " between ", PrintToString(a), " and ", PrintToString(b))) { return a <= arg && arg <= b; }` | Defines a matcher `IsBetween(a, b)` to match a value in the range [`a`, `b`]. | + +**Notes:** + +1. The `MATCHER*` macros cannot be used inside a function or class. +2. The matcher body must be *purely functional* (i.e. it cannot have any side + effect, and the result must not depend on anything other than the value + being matched and the matcher parameters). +3. You can use `PrintToString(x)` to convert a value `x` of any type to a + string. +4. You can use `ExplainMatchResult()` in a custom matcher to wrap another + matcher, for example: + + ```cpp + MATCHER_P(NestedPropertyMatches, matcher, "") { + return ExplainMatchResult(matcher, arg.nested().property(), result_listener); + } + ``` diff --git a/build/_deps/googletest-src/docs/reference/mocking.md b/build/_deps/googletest-src/docs/reference/mocking.md new file mode 100644 index 0000000..c29f716 --- /dev/null +++ b/build/_deps/googletest-src/docs/reference/mocking.md @@ -0,0 +1,587 @@ +# Mocking Reference + +This page lists the facilities provided by GoogleTest for creating and working +with mock objects. To use them, include the header +`gmock/gmock.h`. + +## Macros {#macros} + +GoogleTest defines the following macros for working with mocks. + +### MOCK_METHOD {#MOCK_METHOD} + +`MOCK_METHOD(`*`return_type`*`,`*`method_name`*`, (`*`args...`*`));` \ +`MOCK_METHOD(`*`return_type`*`,`*`method_name`*`, (`*`args...`*`), +(`*`specs...`*`));` + +Defines a mock method *`method_name`* with arguments `(`*`args...`*`)` and +return type *`return_type`* within a mock class. + +The parameters of `MOCK_METHOD` mirror the method declaration. The optional +fourth parameter *`specs...`* is a comma-separated list of qualifiers. The +following qualifiers are accepted: + +| Qualifier | Meaning | +| -------------------------- | -------------------------------------------- | +| `const` | Makes the mocked method a `const` method. Required if overriding a `const` method. | +| `override` | Marks the method with `override`. Recommended if overriding a `virtual` method. | +| `noexcept` | Marks the method with `noexcept`. Required if overriding a `noexcept` method. | +| `Calltype(`*`calltype`*`)` | Sets the call type for the method, for example `Calltype(STDMETHODCALLTYPE)`. Useful on Windows. | +| `ref(`*`qualifier`*`)` | Marks the method with the given reference qualifier, for example `ref(&)` or `ref(&&)`. Required if overriding a method that has a reference qualifier. | + +Note that commas in arguments prevent `MOCK_METHOD` from parsing the arguments +correctly if they are not appropriately surrounded by parentheses. See the +following example: + +```cpp +class MyMock { + public: + // The following 2 lines will not compile due to commas in the arguments: + MOCK_METHOD(std::pair, GetPair, ()); // Error! + MOCK_METHOD(bool, CheckMap, (std::map, bool)); // Error! + + // One solution - wrap arguments that contain commas in parentheses: + MOCK_METHOD((std::pair), GetPair, ()); + MOCK_METHOD(bool, CheckMap, ((std::map), bool)); + + // Another solution - use type aliases: + using BoolAndInt = std::pair; + MOCK_METHOD(BoolAndInt, GetPair, ()); + using MapIntDouble = std::map; + MOCK_METHOD(bool, CheckMap, (MapIntDouble, bool)); +}; +``` + +`MOCK_METHOD` must be used in the `public:` section of a mock class definition, +regardless of whether the method being mocked is `public`, `protected`, or +`private` in the base class. + +### EXPECT_CALL {#EXPECT_CALL} + +`EXPECT_CALL(`*`mock_object`*`,`*`method_name`*`(`*`matchers...`*`))` + +Creates an [expectation](../gmock_for_dummies.md#setting-expectations) that the +method *`method_name`* of the object *`mock_object`* is called with arguments +that match the given matchers *`matchers...`*. `EXPECT_CALL` must precede any +code that exercises the mock object. + +The parameter *`matchers...`* is a comma-separated list of +[matchers](../gmock_for_dummies.md#matchers-what-arguments-do-we-expect) that +correspond to each argument of the method *`method_name`*. The expectation will +apply only to calls of *`method_name`* whose arguments match all of the +matchers. If `(`*`matchers...`*`)` is omitted, the expectation behaves as if +each argument's matcher were a [wildcard matcher (`_`)](matchers.md#wildcard). +See the [Matchers Reference](matchers.md) for a list of all built-in matchers. + +The following chainable clauses can be used to modify the expectation, and they +must be used in the following order: + +```cpp +EXPECT_CALL(mock_object, method_name(matchers...)) + .With(multi_argument_matcher) // Can be used at most once + .Times(cardinality) // Can be used at most once + .InSequence(sequences...) // Can be used any number of times + .After(expectations...) // Can be used any number of times + .WillOnce(action) // Can be used any number of times + .WillRepeatedly(action) // Can be used at most once + .RetiresOnSaturation(); // Can be used at most once +``` + +See details for each modifier clause below. + +#### With {#EXPECT_CALL.With} + +`.With(`*`multi_argument_matcher`*`)` + +Restricts the expectation to apply only to mock function calls whose arguments +as a whole match the multi-argument matcher *`multi_argument_matcher`*. + +GoogleTest passes all of the arguments as one tuple into the matcher. The +parameter *`multi_argument_matcher`* must thus be a matcher of type +`Matcher>`, where `A1, ..., An` are the types of the +function arguments. + +For example, the following code sets the expectation that +`my_mock.SetPosition()` is called with any two arguments, the first argument +being less than the second: + +```cpp +using ::testing::_; +using ::testing::Lt; +... +EXPECT_CALL(my_mock, SetPosition(_, _)) + .With(Lt()); +``` + +GoogleTest provides some built-in matchers for 2-tuples, including the `Lt()` +matcher above. See [Multi-argument Matchers](matchers.md#MultiArgMatchers). + +The `With` clause can be used at most once on an expectation and must be the +first clause. + +#### Times {#EXPECT_CALL.Times} + +`.Times(`*`cardinality`*`)` + +Specifies how many times the mock function call is expected. + +The parameter *`cardinality`* represents the number of expected calls and can be +one of the following, all defined in the `::testing` namespace: + +| Cardinality | Meaning | +| ------------------- | --------------------------------------------------- | +| `AnyNumber()` | The function can be called any number of times. | +| `AtLeast(n)` | The function call is expected at least *n* times. | +| `AtMost(n)` | The function call is expected at most *n* times. | +| `Between(m, n)` | The function call is expected between *m* and *n* times, inclusive. | +| `Exactly(n)` or `n` | The function call is expected exactly *n* times. If *n* is 0, the call should never happen. | + +If the `Times` clause is omitted, GoogleTest infers the cardinality as follows: + +* If neither [`WillOnce`](#EXPECT_CALL.WillOnce) nor + [`WillRepeatedly`](#EXPECT_CALL.WillRepeatedly) are specified, the inferred + cardinality is `Times(1)`. +* If there are *n* `WillOnce` clauses and no `WillRepeatedly` clause, where + *n* >= 1, the inferred cardinality is `Times(n)`. +* If there are *n* `WillOnce` clauses and one `WillRepeatedly` clause, where + *n* >= 0, the inferred cardinality is `Times(AtLeast(n))`. + +The `Times` clause can be used at most once on an expectation. + +#### InSequence {#EXPECT_CALL.InSequence} + +`.InSequence(`*`sequences...`*`)` + +Specifies that the mock function call is expected in a certain sequence. + +The parameter *`sequences...`* is any number of [`Sequence`](#Sequence) objects. +Expected calls assigned to the same sequence are expected to occur in the order +the expectations are declared. + +For example, the following code sets the expectation that the `Reset()` method +of `my_mock` is called before both `GetSize()` and `Describe()`, and `GetSize()` +and `Describe()` can occur in any order relative to each other: + +```cpp +using ::testing::Sequence; +Sequence s1, s2; +... +EXPECT_CALL(my_mock, Reset()) + .InSequence(s1, s2); +EXPECT_CALL(my_mock, GetSize()) + .InSequence(s1); +EXPECT_CALL(my_mock, Describe()) + .InSequence(s2); +``` + +The `InSequence` clause can be used any number of times on an expectation. + +See also the [`InSequence` class](#InSequence). + +#### After {#EXPECT_CALL.After} + +`.After(`*`expectations...`*`)` + +Specifies that the mock function call is expected to occur after one or more +other calls. + +The parameter *`expectations...`* can be up to five +[`Expectation`](#Expectation) or [`ExpectationSet`](#ExpectationSet) objects. +The mock function call is expected to occur after all of the given expectations. + +For example, the following code sets the expectation that the `Describe()` +method of `my_mock` is called only after both `InitX()` and `InitY()` have been +called. + +```cpp +using ::testing::Expectation; +... +Expectation init_x = EXPECT_CALL(my_mock, InitX()); +Expectation init_y = EXPECT_CALL(my_mock, InitY()); +EXPECT_CALL(my_mock, Describe()) + .After(init_x, init_y); +``` + +The `ExpectationSet` object is helpful when the number of prerequisites for an +expectation is large or variable, for example: + +```cpp +using ::testing::ExpectationSet; +... +ExpectationSet all_inits; +// Collect all expectations of InitElement() calls +for (int i = 0; i < element_count; i++) { + all_inits += EXPECT_CALL(my_mock, InitElement(i)); +} +EXPECT_CALL(my_mock, Describe()) + .After(all_inits); // Expect Describe() call after all InitElement() calls +``` + +The `After` clause can be used any number of times on an expectation. + +#### WillOnce {#EXPECT_CALL.WillOnce} + +`.WillOnce(`*`action`*`)` + +Specifies the mock function's actual behavior when invoked, for a single +matching function call. + +The parameter *`action`* represents the +[action](../gmock_for_dummies.md#actions-what-should-it-do) that the function +call will perform. See the [Actions Reference](actions.md) for a list of +built-in actions. + +The use of `WillOnce` implicitly sets a cardinality on the expectation when +`Times` is not specified. See [`Times`](#EXPECT_CALL.Times). + +Each matching function call will perform the next action in the order declared. +For example, the following code specifies that `my_mock.GetNumber()` is expected +to be called exactly 3 times and will return `1`, `2`, and `3` respectively on +the first, second, and third calls: + +```cpp +using ::testing::Return; +... +EXPECT_CALL(my_mock, GetNumber()) + .WillOnce(Return(1)) + .WillOnce(Return(2)) + .WillOnce(Return(3)); +``` + +The `WillOnce` clause can be used any number of times on an expectation. + +#### WillRepeatedly {#EXPECT_CALL.WillRepeatedly} + +`.WillRepeatedly(`*`action`*`)` + +Specifies the mock function's actual behavior when invoked, for all subsequent +matching function calls. Takes effect after the actions specified in the +[`WillOnce`](#EXPECT_CALL.WillOnce) clauses, if any, have been performed. + +The parameter *`action`* represents the +[action](../gmock_for_dummies.md#actions-what-should-it-do) that the function +call will perform. See the [Actions Reference](actions.md) for a list of +built-in actions. + +The use of `WillRepeatedly` implicitly sets a cardinality on the expectation +when `Times` is not specified. See [`Times`](#EXPECT_CALL.Times). + +If any `WillOnce` clauses have been specified, matching function calls will +perform those actions before the action specified by `WillRepeatedly`. See the +following example: + +```cpp +using ::testing::Return; +... +EXPECT_CALL(my_mock, GetName()) + .WillRepeatedly(Return("John Doe")); // Return "John Doe" on all calls + +EXPECT_CALL(my_mock, GetNumber()) + .WillOnce(Return(42)) // Return 42 on the first call + .WillRepeatedly(Return(7)); // Return 7 on all subsequent calls +``` + +The `WillRepeatedly` clause can be used at most once on an expectation. + +#### RetiresOnSaturation {#EXPECT_CALL.RetiresOnSaturation} + +`.RetiresOnSaturation()` + +Indicates that the expectation will no longer be active after the expected +number of matching function calls has been reached. + +The `RetiresOnSaturation` clause is only meaningful for expectations with an +upper-bounded cardinality. The expectation will *retire* (no longer match any +function calls) after it has been *saturated* (the upper bound has been +reached). See the following example: + +```cpp +using ::testing::_; +using ::testing::AnyNumber; +... +EXPECT_CALL(my_mock, SetNumber(_)) // Expectation 1 + .Times(AnyNumber()); +EXPECT_CALL(my_mock, SetNumber(7)) // Expectation 2 + .Times(2) + .RetiresOnSaturation(); +``` + +In the above example, the first two calls to `my_mock.SetNumber(7)` match +expectation 2, which then becomes inactive and no longer matches any calls. A +third call to `my_mock.SetNumber(7)` would then match expectation 1. Without +`RetiresOnSaturation()` on expectation 2, a third call to `my_mock.SetNumber(7)` +would match expectation 2 again, producing a failure since the limit of 2 calls +was exceeded. + +The `RetiresOnSaturation` clause can be used at most once on an expectation and +must be the last clause. + +### ON_CALL {#ON_CALL} + +`ON_CALL(`*`mock_object`*`,`*`method_name`*`(`*`matchers...`*`))` + +Defines what happens when the method *`method_name`* of the object +*`mock_object`* is called with arguments that match the given matchers +*`matchers...`*. Requires a modifier clause to specify the method's behavior. +*Does not* set any expectations that the method will be called. + +The parameter *`matchers...`* is a comma-separated list of +[matchers](../gmock_for_dummies.md#matchers-what-arguments-do-we-expect) that +correspond to each argument of the method *`method_name`*. The `ON_CALL` +specification will apply only to calls of *`method_name`* whose arguments match +all of the matchers. If `(`*`matchers...`*`)` is omitted, the behavior is as if +each argument's matcher were a [wildcard matcher (`_`)](matchers.md#wildcard). +See the [Matchers Reference](matchers.md) for a list of all built-in matchers. + +The following chainable clauses can be used to set the method's behavior, and +they must be used in the following order: + +```cpp +ON_CALL(mock_object, method_name(matchers...)) + .With(multi_argument_matcher) // Can be used at most once + .WillByDefault(action); // Required +``` + +See details for each modifier clause below. + +#### With {#ON_CALL.With} + +`.With(`*`multi_argument_matcher`*`)` + +Restricts the specification to only mock function calls whose arguments as a +whole match the multi-argument matcher *`multi_argument_matcher`*. + +GoogleTest passes all of the arguments as one tuple into the matcher. The +parameter *`multi_argument_matcher`* must thus be a matcher of type +`Matcher>`, where `A1, ..., An` are the types of the +function arguments. + +For example, the following code sets the default behavior when +`my_mock.SetPosition()` is called with any two arguments, the first argument +being less than the second: + +```cpp +using ::testing::_; +using ::testing::Lt; +using ::testing::Return; +... +ON_CALL(my_mock, SetPosition(_, _)) + .With(Lt()) + .WillByDefault(Return(true)); +``` + +GoogleTest provides some built-in matchers for 2-tuples, including the `Lt()` +matcher above. See [Multi-argument Matchers](matchers.md#MultiArgMatchers). + +The `With` clause can be used at most once with each `ON_CALL` statement. + +#### WillByDefault {#ON_CALL.WillByDefault} + +`.WillByDefault(`*`action`*`)` + +Specifies the default behavior of a matching mock function call. + +The parameter *`action`* represents the +[action](../gmock_for_dummies.md#actions-what-should-it-do) that the function +call will perform. See the [Actions Reference](actions.md) for a list of +built-in actions. + +For example, the following code specifies that by default, a call to +`my_mock.Greet()` will return `"hello"`: + +```cpp +using ::testing::Return; +... +ON_CALL(my_mock, Greet()) + .WillByDefault(Return("hello")); +``` + +The action specified by `WillByDefault` is superseded by the actions specified +on a matching `EXPECT_CALL` statement, if any. See the +[`WillOnce`](#EXPECT_CALL.WillOnce) and +[`WillRepeatedly`](#EXPECT_CALL.WillRepeatedly) clauses of `EXPECT_CALL`. + +The `WillByDefault` clause must be used exactly once with each `ON_CALL` +statement. + +## Classes {#classes} + +GoogleTest defines the following classes for working with mocks. + +### DefaultValue {#DefaultValue} + +`::testing::DefaultValue` + +Allows a user to specify the default value for a type `T` that is both copyable +and publicly destructible (i.e. anything that can be used as a function return +type). For mock functions with a return type of `T`, this default value is +returned from function calls that do not specify an action. + +Provides the static methods `Set()`, `SetFactory()`, and `Clear()` to manage the +default value: + +```cpp +// Sets the default value to be returned. T must be copy constructible. +DefaultValue::Set(value); + +// Sets a factory. Will be invoked on demand. T must be move constructible. +T MakeT(); +DefaultValue::SetFactory(&MakeT); + +// Unsets the default value. +DefaultValue::Clear(); +``` + +### NiceMock {#NiceMock} + +`::testing::NiceMock` + +Represents a mock object that suppresses warnings on +[uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The +template parameter `T` is any mock class, except for another `NiceMock`, +`NaggyMock`, or `StrictMock`. + +Usage of `NiceMock` is analogous to usage of `T`. `NiceMock` is a subclass +of `T`, so it can be used wherever an object of type `T` is accepted. In +addition, `NiceMock` can be constructed with any arguments that a constructor +of `T` accepts. + +For example, the following code suppresses warnings on the mock `my_mock` of +type `MockClass` if a method other than `DoSomething()` is called: + +```cpp +using ::testing::NiceMock; +... +NiceMock my_mock("some", "args"); +EXPECT_CALL(my_mock, DoSomething()); +... code that uses my_mock ... +``` + +`NiceMock` only works for mock methods defined using the `MOCK_METHOD` macro +directly in the definition of class `T`. If a mock method is defined in a base +class of `T`, a warning might still be generated. + +`NiceMock` might not work correctly if the destructor of `T` is not virtual. + +### NaggyMock {#NaggyMock} + +`::testing::NaggyMock` + +Represents a mock object that generates warnings on +[uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The +template parameter `T` is any mock class, except for another `NiceMock`, +`NaggyMock`, or `StrictMock`. + +Usage of `NaggyMock` is analogous to usage of `T`. `NaggyMock` is a +subclass of `T`, so it can be used wherever an object of type `T` is accepted. +In addition, `NaggyMock` can be constructed with any arguments that a +constructor of `T` accepts. + +For example, the following code generates warnings on the mock `my_mock` of type +`MockClass` if a method other than `DoSomething()` is called: + +```cpp +using ::testing::NaggyMock; +... +NaggyMock my_mock("some", "args"); +EXPECT_CALL(my_mock, DoSomething()); +... code that uses my_mock ... +``` + +Mock objects of type `T` by default behave the same way as `NaggyMock`. + +### StrictMock {#StrictMock} + +`::testing::StrictMock` + +Represents a mock object that generates test failures on +[uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The +template parameter `T` is any mock class, except for another `NiceMock`, +`NaggyMock`, or `StrictMock`. + +Usage of `StrictMock` is analogous to usage of `T`. `StrictMock` is a +subclass of `T`, so it can be used wherever an object of type `T` is accepted. +In addition, `StrictMock` can be constructed with any arguments that a +constructor of `T` accepts. + +For example, the following code generates a test failure on the mock `my_mock` +of type `MockClass` if a method other than `DoSomething()` is called: + +```cpp +using ::testing::StrictMock; +... +StrictMock my_mock("some", "args"); +EXPECT_CALL(my_mock, DoSomething()); +... code that uses my_mock ... +``` + +`StrictMock` only works for mock methods defined using the `MOCK_METHOD` +macro directly in the definition of class `T`. If a mock method is defined in a +base class of `T`, a failure might not be generated. + +`StrictMock` might not work correctly if the destructor of `T` is not +virtual. + +### Sequence {#Sequence} + +`::testing::Sequence` + +Represents a chronological sequence of expectations. See the +[`InSequence`](#EXPECT_CALL.InSequence) clause of `EXPECT_CALL` for usage. + +### InSequence {#InSequence} + +`::testing::InSequence` + +An object of this type causes all expectations encountered in its scope to be +put in an anonymous sequence. + +This allows more convenient expression of multiple expectations in a single +sequence: + +```cpp +using ::testing::InSequence; +{ + InSequence seq; + + // The following are expected to occur in the order declared. + EXPECT_CALL(...); + EXPECT_CALL(...); + ... + EXPECT_CALL(...); +} +``` + +The name of the `InSequence` object does not matter. + +### Expectation {#Expectation} + +`::testing::Expectation` + +Represents a mock function call expectation as created by +[`EXPECT_CALL`](#EXPECT_CALL): + +```cpp +using ::testing::Expectation; +Expectation my_expectation = EXPECT_CALL(...); +``` + +Useful for specifying sequences of expectations; see the +[`After`](#EXPECT_CALL.After) clause of `EXPECT_CALL`. + +### ExpectationSet {#ExpectationSet} + +`::testing::ExpectationSet` + +Represents a set of mock function call expectations. + +Use the `+=` operator to add [`Expectation`](#Expectation) objects to the set: + +```cpp +using ::testing::ExpectationSet; +ExpectationSet my_expectations; +my_expectations += EXPECT_CALL(...); +``` + +Useful for specifying sequences of expectations; see the +[`After`](#EXPECT_CALL.After) clause of `EXPECT_CALL`. diff --git a/build/_deps/googletest-src/docs/reference/testing.md b/build/_deps/googletest-src/docs/reference/testing.md new file mode 100644 index 0000000..554d6c9 --- /dev/null +++ b/build/_deps/googletest-src/docs/reference/testing.md @@ -0,0 +1,1431 @@ +# Testing Reference + + + +This page lists the facilities provided by GoogleTest for writing test programs. +To use them, include the header `gtest/gtest.h`. + +## Macros + +GoogleTest defines the following macros for writing tests. + +### TEST {#TEST} + +
+TEST(TestSuiteName, TestName) {
+  ... statements ...
+}
+
+ +Defines an individual test named *`TestName`* in the test suite +*`TestSuiteName`*, consisting of the given statements. + +Both arguments *`TestSuiteName`* and *`TestName`* must be valid C++ identifiers +and must not contain underscores (`_`). Tests in different test suites can have +the same individual name. + +The statements within the test body can be any code under test. +[Assertions](assertions.md) used within the test body determine the outcome of +the test. + +### TEST_F {#TEST_F} + +
+TEST_F(TestFixtureName, TestName) {
+  ... statements ...
+}
+
+ +Defines an individual test named *`TestName`* that uses the test fixture class +*`TestFixtureName`*. The test suite name is *`TestFixtureName`*. + +Both arguments *`TestFixtureName`* and *`TestName`* must be valid C++ +identifiers and must not contain underscores (`_`). *`TestFixtureName`* must be +the name of a test fixture class—see +[Test Fixtures](../primer.md#same-data-multiple-tests). + +The statements within the test body can be any code under test. +[Assertions](assertions.md) used within the test body determine the outcome of +the test. + +### TEST_P {#TEST_P} + +
+TEST_P(TestFixtureName, TestName) {
+  ... statements ...
+}
+
+ +Defines an individual value-parameterized test named *`TestName`* that uses the +test fixture class *`TestFixtureName`*. The test suite name is +*`TestFixtureName`*. + +Both arguments *`TestFixtureName`* and *`TestName`* must be valid C++ +identifiers and must not contain underscores (`_`). *`TestFixtureName`* must be +the name of a value-parameterized test fixture class—see +[Value-Parameterized Tests](../advanced.md#value-parameterized-tests). + +The statements within the test body can be any code under test. Within the test +body, the test parameter can be accessed with the `GetParam()` function (see +[`WithParamInterface`](#WithParamInterface)). For example: + +```cpp +TEST_P(MyTestSuite, DoesSomething) { + ... + EXPECT_TRUE(DoSomething(GetParam())); + ... +} +``` + +[Assertions](assertions.md) used within the test body determine the outcome of +the test. + +See also [`INSTANTIATE_TEST_SUITE_P`](#INSTANTIATE_TEST_SUITE_P). + +### INSTANTIATE_TEST_SUITE_P {#INSTANTIATE_TEST_SUITE_P} + +`INSTANTIATE_TEST_SUITE_P(`*`InstantiationName`*`,`*`TestSuiteName`*`,`*`param_generator`*`)` +\ +`INSTANTIATE_TEST_SUITE_P(`*`InstantiationName`*`,`*`TestSuiteName`*`,`*`param_generator`*`,`*`name_generator`*`)` + +Instantiates the value-parameterized test suite *`TestSuiteName`* (defined with +[`TEST_P`](#TEST_P)). + +The argument *`InstantiationName`* is a unique name for the instantiation of the +test suite, to distinguish between multiple instantiations. In test output, the +instantiation name is added as a prefix to the test suite name +*`TestSuiteName`*. + +The argument *`param_generator`* is one of the following GoogleTest-provided +functions that generate the test parameters, all defined in the `::testing` +namespace: + + + +| Parameter Generator | Behavior | +| ------------------- | ---------------------------------------------------- | +| `Range(begin, end [, step])` | Yields values `{begin, begin+step, begin+step+step, ...}`. The values do not include `end`. `step` defaults to 1. | +| `Values(v1, v2, ..., vN)` | Yields values `{v1, v2, ..., vN}`. | +| `ValuesIn(container)` or `ValuesIn(begin,end)` | Yields values from a C-style array, an STL-style container, or an iterator range `[begin, end)`. | +| `Bool()` | Yields sequence `{false, true}`. | +| `Combine(g1, g2, ..., gN)` | Yields as `std::tuple` *n*-tuples all combinations (Cartesian product) of the values generated by the given *n* generators `g1`, `g2`, ..., `gN`. | + +The optional last argument *`name_generator`* is a function or functor that +generates custom test name suffixes based on the test parameters. The function +must accept an argument of type +[`TestParamInfo`](#TestParamInfo) and return a `std::string`. +The test name suffix can only contain alphanumeric characters and underscores. +GoogleTest provides [`PrintToStringParamName`](#PrintToStringParamName), or a +custom function can be used for more control: + +```cpp +INSTANTIATE_TEST_SUITE_P( + MyInstantiation, MyTestSuite, + ::testing::Values(...), + [](const ::testing::TestParamInfo& info) { + // Can use info.param here to generate the test suffix + std::string name = ... + return name; + }); +``` + +For more information, see +[Value-Parameterized Tests](../advanced.md#value-parameterized-tests). + +See also +[`GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST`](#GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST). + +### TYPED_TEST_SUITE {#TYPED_TEST_SUITE} + +`TYPED_TEST_SUITE(`*`TestFixtureName`*`,`*`Types`*`)` + +Defines a typed test suite based on the test fixture *`TestFixtureName`*. The +test suite name is *`TestFixtureName`*. + +The argument *`TestFixtureName`* is a fixture class template, parameterized by a +type, for example: + +```cpp +template +class MyFixture : public ::testing::Test { + public: + ... + using List = std::list; + static T shared_; + T value_; +}; +``` + +The argument *`Types`* is a [`Types`](#Types) object representing the list of +types to run the tests on, for example: + +```cpp +using MyTypes = ::testing::Types; +TYPED_TEST_SUITE(MyFixture, MyTypes); +``` + +The type alias (`using` or `typedef`) is necessary for the `TYPED_TEST_SUITE` +macro to parse correctly. + +See also [`TYPED_TEST`](#TYPED_TEST) and +[Typed Tests](../advanced.md#typed-tests) for more information. + +### TYPED_TEST {#TYPED_TEST} + +
+TYPED_TEST(TestSuiteName, TestName) {
+  ... statements ...
+}
+
+ +Defines an individual typed test named *`TestName`* in the typed test suite +*`TestSuiteName`*. The test suite must be defined with +[`TYPED_TEST_SUITE`](#TYPED_TEST_SUITE). + +Within the test body, the special name `TypeParam` refers to the type parameter, +and `TestFixture` refers to the fixture class. See the following example: + +```cpp +TYPED_TEST(MyFixture, Example) { + // Inside a test, refer to the special name TypeParam to get the type + // parameter. Since we are inside a derived class template, C++ requires + // us to visit the members of MyFixture via 'this'. + TypeParam n = this->value_; + + // To visit static members of the fixture, add the 'TestFixture::' + // prefix. + n += TestFixture::shared_; + + // To refer to typedefs in the fixture, add the 'typename TestFixture::' + // prefix. The 'typename' is required to satisfy the compiler. + typename TestFixture::List values; + + values.push_back(n); + ... +} +``` + +For more information, see [Typed Tests](../advanced.md#typed-tests). + +### TYPED_TEST_SUITE_P {#TYPED_TEST_SUITE_P} + +`TYPED_TEST_SUITE_P(`*`TestFixtureName`*`)` + +Defines a type-parameterized test suite based on the test fixture +*`TestFixtureName`*. The test suite name is *`TestFixtureName`*. + +The argument *`TestFixtureName`* is a fixture class template, parameterized by a +type. See [`TYPED_TEST_SUITE`](#TYPED_TEST_SUITE) for an example. + +See also [`TYPED_TEST_P`](#TYPED_TEST_P) and +[Type-Parameterized Tests](../advanced.md#type-parameterized-tests) for more +information. + +### TYPED_TEST_P {#TYPED_TEST_P} + +
+TYPED_TEST_P(TestSuiteName, TestName) {
+  ... statements ...
+}
+
+ +Defines an individual type-parameterized test named *`TestName`* in the +type-parameterized test suite *`TestSuiteName`*. The test suite must be defined +with [`TYPED_TEST_SUITE_P`](#TYPED_TEST_SUITE_P). + +Within the test body, the special name `TypeParam` refers to the type parameter, +and `TestFixture` refers to the fixture class. See [`TYPED_TEST`](#TYPED_TEST) +for an example. + +See also [`REGISTER_TYPED_TEST_SUITE_P`](#REGISTER_TYPED_TEST_SUITE_P) and +[Type-Parameterized Tests](../advanced.md#type-parameterized-tests) for more +information. + +### REGISTER_TYPED_TEST_SUITE_P {#REGISTER_TYPED_TEST_SUITE_P} + +`REGISTER_TYPED_TEST_SUITE_P(`*`TestSuiteName`*`,`*`TestNames...`*`)` + +Registers the type-parameterized tests *`TestNames...`* of the test suite +*`TestSuiteName`*. The test suite and tests must be defined with +[`TYPED_TEST_SUITE_P`](#TYPED_TEST_SUITE_P) and [`TYPED_TEST_P`](#TYPED_TEST_P). + +For example: + +```cpp +// Define the test suite and tests. +TYPED_TEST_SUITE_P(MyFixture); +TYPED_TEST_P(MyFixture, HasPropertyA) { ... } +TYPED_TEST_P(MyFixture, HasPropertyB) { ... } + +// Register the tests in the test suite. +REGISTER_TYPED_TEST_SUITE_P(MyFixture, HasPropertyA, HasPropertyB); +``` + +See also [`INSTANTIATE_TYPED_TEST_SUITE_P`](#INSTANTIATE_TYPED_TEST_SUITE_P) and +[Type-Parameterized Tests](../advanced.md#type-parameterized-tests) for more +information. + +### INSTANTIATE_TYPED_TEST_SUITE_P {#INSTANTIATE_TYPED_TEST_SUITE_P} + +`INSTANTIATE_TYPED_TEST_SUITE_P(`*`InstantiationName`*`,`*`TestSuiteName`*`,`*`Types`*`)` + +Instantiates the type-parameterized test suite *`TestSuiteName`*. The test suite +must be registered with +[`REGISTER_TYPED_TEST_SUITE_P`](#REGISTER_TYPED_TEST_SUITE_P). + +The argument *`InstantiationName`* is a unique name for the instantiation of the +test suite, to distinguish between multiple instantiations. In test output, the +instantiation name is added as a prefix to the test suite name +*`TestSuiteName`*. + +The argument *`Types`* is a [`Types`](#Types) object representing the list of +types to run the tests on, for example: + +```cpp +using MyTypes = ::testing::Types; +INSTANTIATE_TYPED_TEST_SUITE_P(MyInstantiation, MyFixture, MyTypes); +``` + +The type alias (`using` or `typedef`) is necessary for the +`INSTANTIATE_TYPED_TEST_SUITE_P` macro to parse correctly. + +For more information, see +[Type-Parameterized Tests](../advanced.md#type-parameterized-tests). + +### FRIEND_TEST {#FRIEND_TEST} + +`FRIEND_TEST(`*`TestSuiteName`*`,`*`TestName`*`)` + +Within a class body, declares an individual test as a friend of the class, +enabling the test to access private class members. + +If the class is defined in a namespace, then in order to be friends of the +class, test fixtures and tests must be defined in the exact same namespace, +without inline or anonymous namespaces. + +For example, if the class definition looks like the following: + +```cpp +namespace my_namespace { + +class MyClass { + friend class MyClassTest; + FRIEND_TEST(MyClassTest, HasPropertyA); + FRIEND_TEST(MyClassTest, HasPropertyB); + ... definition of class MyClass ... +}; + +} // namespace my_namespace +``` + +Then the test code should look like: + +```cpp +namespace my_namespace { + +class MyClassTest : public ::testing::Test { + ... +}; + +TEST_F(MyClassTest, HasPropertyA) { ... } +TEST_F(MyClassTest, HasPropertyB) { ... } + +} // namespace my_namespace +``` + +See [Testing Private Code](../advanced.md#testing-private-code) for more +information. + +### SCOPED_TRACE {#SCOPED_TRACE} + +`SCOPED_TRACE(`*`message`*`)` + +Causes the current file name, line number, and the given message *`message`* to +be added to the failure message for each assertion failure that occurs in the +scope. + +For more information, see +[Adding Traces to Assertions](../advanced.md#adding-traces-to-assertions). + +See also the [`ScopedTrace` class](#ScopedTrace). + +### GTEST_SKIP {#GTEST_SKIP} + +`GTEST_SKIP()` + +Prevents further test execution at runtime. + +Can be used in individual test cases or in the `SetUp()` methods of test +environments or test fixtures (classes derived from the +[`Environment`](#Environment) or [`Test`](#Test) classes). If used in a global +test environment `SetUp()` method, it skips all tests in the test program. If +used in a test fixture `SetUp()` method, it skips all tests in the corresponding +test suite. + +Similar to assertions, `GTEST_SKIP` allows streaming a custom message into it. + +See [Skipping Test Execution](../advanced.md#skipping-test-execution) for more +information. + +### GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST {#GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST} + +`GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(`*`TestSuiteName`*`)` + +Allows the value-parameterized test suite *`TestSuiteName`* to be +uninstantiated. + +By default, every [`TEST_P`](#TEST_P) call without a corresponding +[`INSTANTIATE_TEST_SUITE_P`](#INSTANTIATE_TEST_SUITE_P) call causes a failing +test in the test suite `GoogleTestVerification`. +`GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST` suppresses this failure for the +given test suite. + +## Classes and types + +GoogleTest defines the following classes and types to help with writing tests. + +### AssertionResult {#AssertionResult} + +`::testing::AssertionResult` + +A class for indicating whether an assertion was successful. + +When the assertion wasn't successful, the `AssertionResult` object stores a +non-empty failure message that can be retrieved with the object's `message()` +method. + +To create an instance of this class, use one of the factory functions +[`AssertionSuccess()`](#AssertionSuccess) or +[`AssertionFailure()`](#AssertionFailure). + +### AssertionException {#AssertionException} + +`::testing::AssertionException` + +Exception which can be thrown from +[`TestEventListener::OnTestPartResult`](#TestEventListener::OnTestPartResult). + +### EmptyTestEventListener {#EmptyTestEventListener} + +`::testing::EmptyTestEventListener` + +Provides an empty implementation of all methods in the +[`TestEventListener`](#TestEventListener) interface, such that a subclass only +needs to override the methods it cares about. + +### Environment {#Environment} + +`::testing::Environment` + +Represents a global test environment. See +[Global Set-Up and Tear-Down](../advanced.md#global-set-up-and-tear-down). + +#### Protected Methods {#Environment-protected} + +##### SetUp {#Environment::SetUp} + +`virtual void Environment::SetUp()` + +Override this to define how to set up the environment. + +##### TearDown {#Environment::TearDown} + +`virtual void Environment::TearDown()` + +Override this to define how to tear down the environment. + +### ScopedTrace {#ScopedTrace} + +`::testing::ScopedTrace` + +An instance of this class causes a trace to be included in every test failure +message generated by code in the scope of the lifetime of the `ScopedTrace` +instance. The effect is undone with the destruction of the instance. + +The `ScopedTrace` constructor has the following form: + +```cpp +template +ScopedTrace(const char* file, int line, const T& message) +``` + +Example usage: + +```cpp +::testing::ScopedTrace trace("file.cc", 123, "message"); +``` + +The resulting trace includes the given source file path and line number, and the +given message. The `message` argument can be anything streamable to +`std::ostream`. + +See also [`SCOPED_TRACE`](#SCOPED_TRACE). + +### Test {#Test} + +`::testing::Test` + +The abstract class that all tests inherit from. `Test` is not copyable. + +#### Public Methods {#Test-public} + +##### SetUpTestSuite {#Test::SetUpTestSuite} + +`static void Test::SetUpTestSuite()` + +Performs shared setup for all tests in the test suite. GoogleTest calls +`SetUpTestSuite()` before running the first test in the test suite. + +##### TearDownTestSuite {#Test::TearDownTestSuite} + +`static void Test::TearDownTestSuite()` + +Performs shared teardown for all tests in the test suite. GoogleTest calls +`TearDownTestSuite()` after running the last test in the test suite. + +##### HasFatalFailure {#Test::HasFatalFailure} + +`static bool Test::HasFatalFailure()` + +Returns true if and only if the current test has a fatal failure. + +##### HasNonfatalFailure {#Test::HasNonfatalFailure} + +`static bool Test::HasNonfatalFailure()` + +Returns true if and only if the current test has a nonfatal failure. + +##### HasFailure {#Test::HasFailure} + +`static bool Test::HasFailure()` + +Returns true if and only if the current test has any failure, either fatal or +nonfatal. + +##### IsSkipped {#Test::IsSkipped} + +`static bool Test::IsSkipped()` + +Returns true if and only if the current test was skipped. + +##### RecordProperty {#Test::RecordProperty} + +`static void Test::RecordProperty(const std::string& key, const std::string& +value)` \ +`static void Test::RecordProperty(const std::string& key, int value)` + +Logs a property for the current test, test suite, or entire invocation of the +test program. Only the last value for a given key is logged. + +The key must be a valid XML attribute name, and cannot conflict with the ones +already used by GoogleTest (`name`, `status`, `time`, `classname`, `type_param`, +and `value_param`). + +`RecordProperty` is `public static` so it can be called from utility functions +that are not members of the test fixture. + +Calls to `RecordProperty` made during the lifespan of the test (from the moment +its constructor starts to the moment its destructor finishes) are output in XML +as attributes of the `` element. Properties recorded from a fixture's +`SetUpTestSuite` or `TearDownTestSuite` methods are logged as attributes of the +corresponding `` element. Calls to `RecordProperty` made in the +global context (before or after invocation of `RUN_ALL_TESTS` or from the +`SetUp`/`TearDown` methods of registered `Environment` objects) are output as +attributes of the `` element. + +#### Protected Methods {#Test-protected} + +##### SetUp {#Test::SetUp} + +`virtual void Test::SetUp()` + +Override this to perform test fixture setup. GoogleTest calls `SetUp()` before +running each individual test. + +##### TearDown {#Test::TearDown} + +`virtual void Test::TearDown()` + +Override this to perform test fixture teardown. GoogleTest calls `TearDown()` +after running each individual test. + +### TestWithParam {#TestWithParam} + +`::testing::TestWithParam` + +A convenience class which inherits from both [`Test`](#Test) and +[`WithParamInterface`](#WithParamInterface). + +### TestSuite {#TestSuite} + +Represents a test suite. `TestSuite` is not copyable. + +#### Public Methods {#TestSuite-public} + +##### name {#TestSuite::name} + +`const char* TestSuite::name() const` + +Gets the name of the test suite. + +##### type_param {#TestSuite::type_param} + +`const char* TestSuite::type_param() const` + +Returns the name of the parameter type, or `NULL` if this is not a typed or +type-parameterized test suite. See [Typed Tests](../advanced.md#typed-tests) and +[Type-Parameterized Tests](../advanced.md#type-parameterized-tests). + +##### should_run {#TestSuite::should_run} + +`bool TestSuite::should_run() const` + +Returns true if any test in this test suite should run. + +##### successful_test_count {#TestSuite::successful_test_count} + +`int TestSuite::successful_test_count() const` + +Gets the number of successful tests in this test suite. + +##### skipped_test_count {#TestSuite::skipped_test_count} + +`int TestSuite::skipped_test_count() const` + +Gets the number of skipped tests in this test suite. + +##### failed_test_count {#TestSuite::failed_test_count} + +`int TestSuite::failed_test_count() const` + +Gets the number of failed tests in this test suite. + +##### reportable_disabled_test_count {#TestSuite::reportable_disabled_test_count} + +`int TestSuite::reportable_disabled_test_count() const` + +Gets the number of disabled tests that will be reported in the XML report. + +##### disabled_test_count {#TestSuite::disabled_test_count} + +`int TestSuite::disabled_test_count() const` + +Gets the number of disabled tests in this test suite. + +##### reportable_test_count {#TestSuite::reportable_test_count} + +`int TestSuite::reportable_test_count() const` + +Gets the number of tests to be printed in the XML report. + +##### test_to_run_count {#TestSuite::test_to_run_count} + +`int TestSuite::test_to_run_count() const` + +Get the number of tests in this test suite that should run. + +##### total_test_count {#TestSuite::total_test_count} + +`int TestSuite::total_test_count() const` + +Gets the number of all tests in this test suite. + +##### Passed {#TestSuite::Passed} + +`bool TestSuite::Passed() const` + +Returns true if and only if the test suite passed. + +##### Failed {#TestSuite::Failed} + +`bool TestSuite::Failed() const` + +Returns true if and only if the test suite failed. + +##### elapsed_time {#TestSuite::elapsed_time} + +`TimeInMillis TestSuite::elapsed_time() const` + +Returns the elapsed time, in milliseconds. + +##### start_timestamp {#TestSuite::start_timestamp} + +`TimeInMillis TestSuite::start_timestamp() const` + +Gets the time of the test suite start, in ms from the start of the UNIX epoch. + +##### GetTestInfo {#TestSuite::GetTestInfo} + +`const TestInfo* TestSuite::GetTestInfo(int i) const` + +Returns the [`TestInfo`](#TestInfo) for the `i`-th test among all the tests. `i` +can range from 0 to `total_test_count() - 1`. If `i` is not in that range, +returns `NULL`. + +##### ad_hoc_test_result {#TestSuite::ad_hoc_test_result} + +`const TestResult& TestSuite::ad_hoc_test_result() const` + +Returns the [`TestResult`](#TestResult) that holds test properties recorded +during execution of `SetUpTestSuite` and `TearDownTestSuite`. + +### TestInfo {#TestInfo} + +`::testing::TestInfo` + +Stores information about a test. + +#### Public Methods {#TestInfo-public} + +##### test_suite_name {#TestInfo::test_suite_name} + +`const char* TestInfo::test_suite_name() const` + +Returns the test suite name. + +##### name {#TestInfo::name} + +`const char* TestInfo::name() const` + +Returns the test name. + +##### type_param {#TestInfo::type_param} + +`const char* TestInfo::type_param() const` + +Returns the name of the parameter type, or `NULL` if this is not a typed or +type-parameterized test. See [Typed Tests](../advanced.md#typed-tests) and +[Type-Parameterized Tests](../advanced.md#type-parameterized-tests). + +##### value_param {#TestInfo::value_param} + +`const char* TestInfo::value_param() const` + +Returns the text representation of the value parameter, or `NULL` if this is not +a value-parameterized test. See +[Value-Parameterized Tests](../advanced.md#value-parameterized-tests). + +##### file {#TestInfo::file} + +`const char* TestInfo::file() const` + +Returns the file name where this test is defined. + +##### line {#TestInfo::line} + +`int TestInfo::line() const` + +Returns the line where this test is defined. + +##### is_in_another_shard {#TestInfo::is_in_another_shard} + +`bool TestInfo::is_in_another_shard() const` + +Returns true if this test should not be run because it's in another shard. + +##### should_run {#TestInfo::should_run} + +`bool TestInfo::should_run() const` + +Returns true if this test should run, that is if the test is not disabled (or it +is disabled but the `also_run_disabled_tests` flag has been specified) and its +full name matches the user-specified filter. + +GoogleTest allows the user to filter the tests by their full names. Only the +tests that match the filter will run. See +[Running a Subset of the Tests](../advanced.md#running-a-subset-of-the-tests) +for more information. + +##### is_reportable {#TestInfo::is_reportable} + +`bool TestInfo::is_reportable() const` + +Returns true if and only if this test will appear in the XML report. + +##### result {#TestInfo::result} + +`const TestResult* TestInfo::result() const` + +Returns the result of the test. See [`TestResult`](#TestResult). + +### TestParamInfo {#TestParamInfo} + +`::testing::TestParamInfo` + +Describes a parameter to a value-parameterized test. The type `T` is the type of +the parameter. + +Contains the fields `param` and `index` which hold the value of the parameter +and its integer index respectively. + +### UnitTest {#UnitTest} + +`::testing::UnitTest` + +This class contains information about the test program. + +`UnitTest` is a singleton class. The only instance is created when +`UnitTest::GetInstance()` is first called. This instance is never deleted. + +`UnitTest` is not copyable. + +#### Public Methods {#UnitTest-public} + +##### GetInstance {#UnitTest::GetInstance} + +`static UnitTest* UnitTest::GetInstance()` + +Gets the singleton `UnitTest` object. The first time this method is called, a +`UnitTest` object is constructed and returned. Consecutive calls will return the +same object. + +##### original_working_dir {#UnitTest::original_working_dir} + +`const char* UnitTest::original_working_dir() const` + +Returns the working directory when the first [`TEST()`](#TEST) or +[`TEST_F()`](#TEST_F) was executed. The `UnitTest` object owns the string. + +##### current_test_suite {#UnitTest::current_test_suite} + +`const TestSuite* UnitTest::current_test_suite() const` + +Returns the [`TestSuite`](#TestSuite) object for the test that's currently +running, or `NULL` if no test is running. + +##### current_test_info {#UnitTest::current_test_info} + +`const TestInfo* UnitTest::current_test_info() const` + +Returns the [`TestInfo`](#TestInfo) object for the test that's currently +running, or `NULL` if no test is running. + +##### random_seed {#UnitTest::random_seed} + +`int UnitTest::random_seed() const` + +Returns the random seed used at the start of the current test run. + +##### successful_test_suite_count {#UnitTest::successful_test_suite_count} + +`int UnitTest::successful_test_suite_count() const` + +Gets the number of successful test suites. + +##### failed_test_suite_count {#UnitTest::failed_test_suite_count} + +`int UnitTest::failed_test_suite_count() const` + +Gets the number of failed test suites. + +##### total_test_suite_count {#UnitTest::total_test_suite_count} + +`int UnitTest::total_test_suite_count() const` + +Gets the number of all test suites. + +##### test_suite_to_run_count {#UnitTest::test_suite_to_run_count} + +`int UnitTest::test_suite_to_run_count() const` + +Gets the number of all test suites that contain at least one test that should +run. + +##### successful_test_count {#UnitTest::successful_test_count} + +`int UnitTest::successful_test_count() const` + +Gets the number of successful tests. + +##### skipped_test_count {#UnitTest::skipped_test_count} + +`int UnitTest::skipped_test_count() const` + +Gets the number of skipped tests. + +##### failed_test_count {#UnitTest::failed_test_count} + +`int UnitTest::failed_test_count() const` + +Gets the number of failed tests. + +##### reportable_disabled_test_count {#UnitTest::reportable_disabled_test_count} + +`int UnitTest::reportable_disabled_test_count() const` + +Gets the number of disabled tests that will be reported in the XML report. + +##### disabled_test_count {#UnitTest::disabled_test_count} + +`int UnitTest::disabled_test_count() const` + +Gets the number of disabled tests. + +##### reportable_test_count {#UnitTest::reportable_test_count} + +`int UnitTest::reportable_test_count() const` + +Gets the number of tests to be printed in the XML report. + +##### total_test_count {#UnitTest::total_test_count} + +`int UnitTest::total_test_count() const` + +Gets the number of all tests. + +##### test_to_run_count {#UnitTest::test_to_run_count} + +`int UnitTest::test_to_run_count() const` + +Gets the number of tests that should run. + +##### start_timestamp {#UnitTest::start_timestamp} + +`TimeInMillis UnitTest::start_timestamp() const` + +Gets the time of the test program start, in ms from the start of the UNIX epoch. + +##### elapsed_time {#UnitTest::elapsed_time} + +`TimeInMillis UnitTest::elapsed_time() const` + +Gets the elapsed time, in milliseconds. + +##### Passed {#UnitTest::Passed} + +`bool UnitTest::Passed() const` + +Returns true if and only if the unit test passed (i.e. all test suites passed). + +##### Failed {#UnitTest::Failed} + +`bool UnitTest::Failed() const` + +Returns true if and only if the unit test failed (i.e. some test suite failed or +something outside of all tests failed). + +##### GetTestSuite {#UnitTest::GetTestSuite} + +`const TestSuite* UnitTest::GetTestSuite(int i) const` + +Gets the [`TestSuite`](#TestSuite) object for the `i`-th test suite among all +the test suites. `i` can range from 0 to `total_test_suite_count() - 1`. If `i` +is not in that range, returns `NULL`. + +##### ad_hoc_test_result {#UnitTest::ad_hoc_test_result} + +`const TestResult& UnitTest::ad_hoc_test_result() const` + +Returns the [`TestResult`](#TestResult) containing information on test failures +and properties logged outside of individual test suites. + +##### listeners {#UnitTest::listeners} + +`TestEventListeners& UnitTest::listeners()` + +Returns the list of event listeners that can be used to track events inside +GoogleTest. See [`TestEventListeners`](#TestEventListeners). + +### TestEventListener {#TestEventListener} + +`::testing::TestEventListener` + +The interface for tracing execution of tests. The methods below are listed in +the order the corresponding events are fired. + +#### Public Methods {#TestEventListener-public} + +##### OnTestProgramStart {#TestEventListener::OnTestProgramStart} + +`virtual void TestEventListener::OnTestProgramStart(const UnitTest& unit_test)` + +Fired before any test activity starts. + +##### OnTestIterationStart {#TestEventListener::OnTestIterationStart} + +`virtual void TestEventListener::OnTestIterationStart(const UnitTest& unit_test, +int iteration)` + +Fired before each iteration of tests starts. There may be more than one +iteration if `GTEST_FLAG(repeat)` is set. `iteration` is the iteration index, +starting from 0. + +##### OnEnvironmentsSetUpStart {#TestEventListener::OnEnvironmentsSetUpStart} + +`virtual void TestEventListener::OnEnvironmentsSetUpStart(const UnitTest& +unit_test)` + +Fired before environment set-up for each iteration of tests starts. + +##### OnEnvironmentsSetUpEnd {#TestEventListener::OnEnvironmentsSetUpEnd} + +`virtual void TestEventListener::OnEnvironmentsSetUpEnd(const UnitTest& +unit_test)` + +Fired after environment set-up for each iteration of tests ends. + +##### OnTestSuiteStart {#TestEventListener::OnTestSuiteStart} + +`virtual void TestEventListener::OnTestSuiteStart(const TestSuite& test_suite)` + +Fired before the test suite starts. + +##### OnTestStart {#TestEventListener::OnTestStart} + +`virtual void TestEventListener::OnTestStart(const TestInfo& test_info)` + +Fired before the test starts. + +##### OnTestPartResult {#TestEventListener::OnTestPartResult} + +`virtual void TestEventListener::OnTestPartResult(const TestPartResult& +test_part_result)` + +Fired after a failed assertion or a `SUCCEED()` invocation. If you want to throw +an exception from this function to skip to the next test, it must be an +[`AssertionException`](#AssertionException) or inherited from it. + +##### OnTestEnd {#TestEventListener::OnTestEnd} + +`virtual void TestEventListener::OnTestEnd(const TestInfo& test_info)` + +Fired after the test ends. + +##### OnTestSuiteEnd {#TestEventListener::OnTestSuiteEnd} + +`virtual void TestEventListener::OnTestSuiteEnd(const TestSuite& test_suite)` + +Fired after the test suite ends. + +##### OnEnvironmentsTearDownStart {#TestEventListener::OnEnvironmentsTearDownStart} + +`virtual void TestEventListener::OnEnvironmentsTearDownStart(const UnitTest& +unit_test)` + +Fired before environment tear-down for each iteration of tests starts. + +##### OnEnvironmentsTearDownEnd {#TestEventListener::OnEnvironmentsTearDownEnd} + +`virtual void TestEventListener::OnEnvironmentsTearDownEnd(const UnitTest& +unit_test)` + +Fired after environment tear-down for each iteration of tests ends. + +##### OnTestIterationEnd {#TestEventListener::OnTestIterationEnd} + +`virtual void TestEventListener::OnTestIterationEnd(const UnitTest& unit_test, +int iteration)` + +Fired after each iteration of tests finishes. + +##### OnTestProgramEnd {#TestEventListener::OnTestProgramEnd} + +`virtual void TestEventListener::OnTestProgramEnd(const UnitTest& unit_test)` + +Fired after all test activities have ended. + +### TestEventListeners {#TestEventListeners} + +`::testing::TestEventListeners` + +Lets users add listeners to track events in GoogleTest. + +#### Public Methods {#TestEventListeners-public} + +##### Append {#TestEventListeners::Append} + +`void TestEventListeners::Append(TestEventListener* listener)` + +Appends an event listener to the end of the list. GoogleTest assumes ownership +of the listener (i.e. it will delete the listener when the test program +finishes). + +##### Release {#TestEventListeners::Release} + +`TestEventListener* TestEventListeners::Release(TestEventListener* listener)` + +Removes the given event listener from the list and returns it. It then becomes +the caller's responsibility to delete the listener. Returns `NULL` if the +listener is not found in the list. + +##### default_result_printer {#TestEventListeners::default_result_printer} + +`TestEventListener* TestEventListeners::default_result_printer() const` + +Returns the standard listener responsible for the default console output. Can be +removed from the listeners list to shut down default console output. Note that +removing this object from the listener list with +[`Release()`](#TestEventListeners::Release) transfers its ownership to the +caller and makes this function return `NULL` the next time. + +##### default_xml_generator {#TestEventListeners::default_xml_generator} + +`TestEventListener* TestEventListeners::default_xml_generator() const` + +Returns the standard listener responsible for the default XML output controlled +by the `--gtest_output=xml` flag. Can be removed from the listeners list by +users who want to shut down the default XML output controlled by this flag and +substitute it with custom one. Note that removing this object from the listener +list with [`Release()`](#TestEventListeners::Release) transfers its ownership to +the caller and makes this function return `NULL` the next time. + +### TestPartResult {#TestPartResult} + +`::testing::TestPartResult` + +A copyable object representing the result of a test part (i.e. an assertion or +an explicit `FAIL()`, `ADD_FAILURE()`, or `SUCCESS()`). + +#### Public Methods {#TestPartResult-public} + +##### type {#TestPartResult::type} + +`Type TestPartResult::type() const` + +Gets the outcome of the test part. + +The return type `Type` is an enum defined as follows: + +```cpp +enum Type { + kSuccess, // Succeeded. + kNonFatalFailure, // Failed but the test can continue. + kFatalFailure, // Failed and the test should be terminated. + kSkip // Skipped. +}; +``` + +##### file_name {#TestPartResult::file_name} + +`const char* TestPartResult::file_name() const` + +Gets the name of the source file where the test part took place, or `NULL` if +it's unknown. + +##### line_number {#TestPartResult::line_number} + +`int TestPartResult::line_number() const` + +Gets the line in the source file where the test part took place, or `-1` if it's +unknown. + +##### summary {#TestPartResult::summary} + +`const char* TestPartResult::summary() const` + +Gets the summary of the failure message. + +##### message {#TestPartResult::message} + +`const char* TestPartResult::message() const` + +Gets the message associated with the test part. + +##### skipped {#TestPartResult::skipped} + +`bool TestPartResult::skipped() const` + +Returns true if and only if the test part was skipped. + +##### passed {#TestPartResult::passed} + +`bool TestPartResult::passed() const` + +Returns true if and only if the test part passed. + +##### nonfatally_failed {#TestPartResult::nonfatally_failed} + +`bool TestPartResult::nonfatally_failed() const` + +Returns true if and only if the test part non-fatally failed. + +##### fatally_failed {#TestPartResult::fatally_failed} + +`bool TestPartResult::fatally_failed() const` + +Returns true if and only if the test part fatally failed. + +##### failed {#TestPartResult::failed} + +`bool TestPartResult::failed() const` + +Returns true if and only if the test part failed. + +### TestProperty {#TestProperty} + +`::testing::TestProperty` + +A copyable object representing a user-specified test property which can be +output as a key/value string pair. + +#### Public Methods {#TestProperty-public} + +##### key {#key} + +`const char* key() const` + +Gets the user-supplied key. + +##### value {#value} + +`const char* value() const` + +Gets the user-supplied value. + +##### SetValue {#SetValue} + +`void SetValue(const std::string& new_value)` + +Sets a new value, overriding the previous one. + +### TestResult {#TestResult} + +`::testing::TestResult` + +Contains information about the result of a single test. + +`TestResult` is not copyable. + +#### Public Methods {#TestResult-public} + +##### total_part_count {#TestResult::total_part_count} + +`int TestResult::total_part_count() const` + +Gets the number of all test parts. This is the sum of the number of successful +test parts and the number of failed test parts. + +##### test_property_count {#TestResult::test_property_count} + +`int TestResult::test_property_count() const` + +Returns the number of test properties. + +##### Passed {#TestResult::Passed} + +`bool TestResult::Passed() const` + +Returns true if and only if the test passed (i.e. no test part failed). + +##### Skipped {#TestResult::Skipped} + +`bool TestResult::Skipped() const` + +Returns true if and only if the test was skipped. + +##### Failed {#TestResult::Failed} + +`bool TestResult::Failed() const` + +Returns true if and only if the test failed. + +##### HasFatalFailure {#TestResult::HasFatalFailure} + +`bool TestResult::HasFatalFailure() const` + +Returns true if and only if the test fatally failed. + +##### HasNonfatalFailure {#TestResult::HasNonfatalFailure} + +`bool TestResult::HasNonfatalFailure() const` + +Returns true if and only if the test has a non-fatal failure. + +##### elapsed_time {#TestResult::elapsed_time} + +`TimeInMillis TestResult::elapsed_time() const` + +Returns the elapsed time, in milliseconds. + +##### start_timestamp {#TestResult::start_timestamp} + +`TimeInMillis TestResult::start_timestamp() const` + +Gets the time of the test case start, in ms from the start of the UNIX epoch. + +##### GetTestPartResult {#TestResult::GetTestPartResult} + +`const TestPartResult& TestResult::GetTestPartResult(int i) const` + +Returns the [`TestPartResult`](#TestPartResult) for the `i`-th test part result +among all the results. `i` can range from 0 to `total_part_count() - 1`. If `i` +is not in that range, aborts the program. + +##### GetTestProperty {#TestResult::GetTestProperty} + +`const TestProperty& TestResult::GetTestProperty(int i) const` + +Returns the [`TestProperty`](#TestProperty) object for the `i`-th test property. +`i` can range from 0 to `test_property_count() - 1`. If `i` is not in that +range, aborts the program. + +### TimeInMillis {#TimeInMillis} + +`::testing::TimeInMillis` + +An integer type representing time in milliseconds. + +### Types {#Types} + +`::testing::Types` + +Represents a list of types for use in typed tests and type-parameterized tests. + +The template argument `T...` can be any number of types, for example: + +``` +::testing::Types +``` + +See [Typed Tests](../advanced.md#typed-tests) and +[Type-Parameterized Tests](../advanced.md#type-parameterized-tests) for more +information. + +### WithParamInterface {#WithParamInterface} + +`::testing::WithParamInterface` + +The pure interface class that all value-parameterized tests inherit from. + +A value-parameterized test fixture class must inherit from both [`Test`](#Test) +and `WithParamInterface`. In most cases that just means inheriting from +[`TestWithParam`](#TestWithParam), but more complicated test hierarchies may +need to inherit from `Test` and `WithParamInterface` at different levels. + +This interface defines the type alias `ParamType` for the parameter type `T` and +has support for accessing the test parameter value via the `GetParam()` method: + +``` +static const ParamType& GetParam() +``` + +For more information, see +[Value-Parameterized Tests](../advanced.md#value-parameterized-tests). + +## Functions + +GoogleTest defines the following functions to help with writing and running +tests. + +### InitGoogleTest {#InitGoogleTest} + +`void ::testing::InitGoogleTest(int* argc, char** argv)` \ +`void ::testing::InitGoogleTest(int* argc, wchar_t** argv)` \ +`void ::testing::InitGoogleTest()` + +Initializes GoogleTest. This must be called before calling +[`RUN_ALL_TESTS()`](#RUN_ALL_TESTS). In particular, it parses the command line +for the flags that GoogleTest recognizes. Whenever a GoogleTest flag is seen, it +is removed from `argv`, and `*argc` is decremented. + +No value is returned. Instead, the GoogleTest flag variables are updated. + +The `InitGoogleTest(int* argc, wchar_t** argv)` overload can be used in Windows +programs compiled in `UNICODE` mode. + +The argument-less `InitGoogleTest()` overload can be used on Arduino/embedded +platforms where there is no `argc`/`argv`. + +### AddGlobalTestEnvironment {#AddGlobalTestEnvironment} + +`Environment* ::testing::AddGlobalTestEnvironment(Environment* env)` + +Adds a test environment to the test program. Must be called before +[`RUN_ALL_TESTS()`](#RUN_ALL_TESTS) is called. See +[Global Set-Up and Tear-Down](../advanced.md#global-set-up-and-tear-down) for +more information. + +See also [`Environment`](#Environment). + +### RegisterTest {#RegisterTest} + +```cpp +template +TestInfo* ::testing::RegisterTest(const char* test_suite_name, const char* test_name, + const char* type_param, const char* value_param, + const char* file, int line, Factory factory) +``` + +Dynamically registers a test with the framework. + +The `factory` argument is a factory callable (move-constructible) object or +function pointer that creates a new instance of the `Test` object. It handles +ownership to the caller. The signature of the callable is `Fixture*()`, where +`Fixture` is the test fixture class for the test. All tests registered with the +same `test_suite_name` must return the same fixture type. This is checked at +runtime. + +The framework will infer the fixture class from the factory and will call the +`SetUpTestSuite` and `TearDownTestSuite` methods for it. + +Must be called before [`RUN_ALL_TESTS()`](#RUN_ALL_TESTS) is invoked, otherwise +behavior is undefined. + +See +[Registering tests programmatically](../advanced.md#registering-tests-programmatically) +for more information. + +### RUN_ALL_TESTS {#RUN_ALL_TESTS} + +`int RUN_ALL_TESTS()` + +Use this function in `main()` to run all tests. It returns `0` if all tests are +successful, or `1` otherwise. + +`RUN_ALL_TESTS()` should be invoked after the command line has been parsed by +[`InitGoogleTest()`](#InitGoogleTest). + +This function was formerly a macro; thus, it is in the global namespace and has +an all-caps name. + +### AssertionSuccess {#AssertionSuccess} + +`AssertionResult ::testing::AssertionSuccess()` + +Creates a successful assertion result. See +[`AssertionResult`](#AssertionResult). + +### AssertionFailure {#AssertionFailure} + +`AssertionResult ::testing::AssertionFailure()` + +Creates a failed assertion result. Use the `<<` operator to store a failure +message: + +```cpp +::testing::AssertionFailure() << "My failure message"; +``` + +See [`AssertionResult`](#AssertionResult). + +### StaticAssertTypeEq {#StaticAssertTypeEq} + +`::testing::StaticAssertTypeEq()` + +Compile-time assertion for type equality. Compiles if and only if `T1` and `T2` +are the same type. The value it returns is irrelevant. + +See [Type Assertions](../advanced.md#type-assertions) for more information. + +### PrintToString {#PrintToString} + +`std::string ::testing::PrintToString(x)` + +Prints any value `x` using GoogleTest's value printer. + +See +[Teaching GoogleTest How to Print Your Values](../advanced.md#teaching-googletest-how-to-print-your-values) +for more information. + +### PrintToStringParamName {#PrintToStringParamName} + +`std::string ::testing::PrintToStringParamName(TestParamInfo& info)` + +A built-in parameterized test name generator which returns the result of +[`PrintToString`](#PrintToString) called on `info.param`. Does not work when the +test parameter is a `std::string` or C string. See +[Specifying Names for Value-Parameterized Test Parameters](../advanced.md#specifying-names-for-value-parameterized-test-parameters) +for more information. + +See also [`TestParamInfo`](#TestParamInfo) and +[`INSTANTIATE_TEST_SUITE_P`](#INSTANTIATE_TEST_SUITE_P). diff --git a/build/_deps/googletest-src/docs/samples.md b/build/_deps/googletest-src/docs/samples.md new file mode 100644 index 0000000..2d97ca5 --- /dev/null +++ b/build/_deps/googletest-src/docs/samples.md @@ -0,0 +1,22 @@ +# Googletest Samples + +If you're like us, you'd like to look at +[googletest samples.](https://github.com/google/googletest/tree/master/googletest/samples) +The sample directory has a number of well-commented samples showing how to use a +variety of googletest features. + +* Sample #1 shows the basic steps of using googletest to test C++ functions. +* Sample #2 shows a more complex unit test for a class with multiple member + functions. +* Sample #3 uses a test fixture. +* Sample #4 teaches you how to use googletest and `googletest.h` together to + get the best of both libraries. +* Sample #5 puts shared testing logic in a base test fixture, and reuses it in + derived fixtures. +* Sample #6 demonstrates type-parameterized tests. +* Sample #7 teaches the basics of value-parameterized tests. +* Sample #8 shows using `Combine()` in value-parameterized tests. +* Sample #9 shows use of the listener API to modify Google Test's console + output and the use of its reflection API to inspect test results. +* Sample #10 shows use of the listener API to implement a primitive memory + leak checker. diff --git a/build/_deps/googletest-src/googlemock/CMakeLists.txt b/build/_deps/googletest-src/googlemock/CMakeLists.txt new file mode 100644 index 0000000..e7df8ec --- /dev/null +++ b/build/_deps/googletest-src/googlemock/CMakeLists.txt @@ -0,0 +1,218 @@ +######################################################################## +# Note: CMake support is community-based. The maintainers do not use CMake +# internally. +# +# CMake build script for Google Mock. +# +# To run the tests for Google Mock itself on Linux, use 'make test' or +# ctest. You can select which tests to run using 'ctest -R regex'. +# For more options, run 'ctest --help'. + +option(gmock_build_tests "Build all of Google Mock's own tests." OFF) + +# A directory to find Google Test sources. +if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/gtest/CMakeLists.txt") + set(gtest_dir gtest) +else() + set(gtest_dir ../googletest) +endif() + +# Defines pre_project_set_up_hermetic_build() and set_up_hermetic_build(). +include("${gtest_dir}/cmake/hermetic_build.cmake" OPTIONAL) + +if (COMMAND pre_project_set_up_hermetic_build) + # Google Test also calls hermetic setup functions from add_subdirectory, + # although its changes will not affect things at the current scope. + pre_project_set_up_hermetic_build() +endif() + +######################################################################## +# +# Project-wide settings + +# Name of the project. +# +# CMake files in this project can refer to the root source directory +# as ${gmock_SOURCE_DIR} and to the root binary directory as +# ${gmock_BINARY_DIR}. +# Language "C" is required for find_package(Threads). +if (CMAKE_VERSION VERSION_LESS 3.0) + project(gmock CXX C) +else() + cmake_policy(SET CMP0048 NEW) + project(gmock VERSION ${GOOGLETEST_VERSION} LANGUAGES CXX C) +endif() +cmake_minimum_required(VERSION 2.8.12) + +if (COMMAND set_up_hermetic_build) + set_up_hermetic_build() +endif() + +# Instructs CMake to process Google Test's CMakeLists.txt and add its +# targets to the current scope. We are placing Google Test's binary +# directory in a subdirectory of our own as VC compilation may break +# if they are the same (the default). +add_subdirectory("${gtest_dir}" "${gmock_BINARY_DIR}/${gtest_dir}") + + +# These commands only run if this is the main project +if(CMAKE_PROJECT_NAME STREQUAL "gmock" OR CMAKE_PROJECT_NAME STREQUAL "googletest-distribution") + # BUILD_SHARED_LIBS is a standard CMake variable, but we declare it here to + # make it prominent in the GUI. + option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)." OFF) +else() + mark_as_advanced(gmock_build_tests) +endif() + +# Although Google Test's CMakeLists.txt calls this function, the +# changes there don't affect the current scope. Therefore we have to +# call it again here. +config_compiler_and_linker() # from ${gtest_dir}/cmake/internal_utils.cmake + +# Adds Google Mock's and Google Test's header directories to the search path. +set(gmock_build_include_dirs + "${gmock_SOURCE_DIR}/include" + "${gmock_SOURCE_DIR}" + "${gtest_SOURCE_DIR}/include" + # This directory is needed to build directly from Google Test sources. + "${gtest_SOURCE_DIR}") +include_directories(${gmock_build_include_dirs}) + +######################################################################## +# +# Defines the gmock & gmock_main libraries. User tests should link +# with one of them. + +# Google Mock libraries. We build them using more strict warnings than what +# are used for other targets, to ensure that Google Mock can be compiled by +# a user aggressive about warnings. +if (MSVC) + cxx_library(gmock + "${cxx_strict}" + "${gtest_dir}/src/gtest-all.cc" + src/gmock-all.cc) + + cxx_library(gmock_main + "${cxx_strict}" + "${gtest_dir}/src/gtest-all.cc" + src/gmock-all.cc + src/gmock_main.cc) +else() + cxx_library(gmock "${cxx_strict}" src/gmock-all.cc) + target_link_libraries(gmock PUBLIC gtest) + set_target_properties(gmock PROPERTIES VERSION ${GOOGLETEST_VERSION}) + cxx_library(gmock_main "${cxx_strict}" src/gmock_main.cc) + target_link_libraries(gmock_main PUBLIC gmock) + set_target_properties(gmock_main PROPERTIES VERSION ${GOOGLETEST_VERSION}) +endif() +# If the CMake version supports it, attach header directory information +# to the targets for when we are part of a parent build (ie being pulled +# in via add_subdirectory() rather than being a standalone build). +if (DEFINED CMAKE_VERSION AND NOT "${CMAKE_VERSION}" VERSION_LESS "2.8.11") + target_include_directories(gmock SYSTEM INTERFACE + "$" + "$/${CMAKE_INSTALL_INCLUDEDIR}>") + target_include_directories(gmock_main SYSTEM INTERFACE + "$" + "$/${CMAKE_INSTALL_INCLUDEDIR}>") +endif() + +######################################################################## +# +# Install rules +install_project(gmock gmock_main) + +######################################################################## +# +# Google Mock's own tests. +# +# You can skip this section if you aren't interested in testing +# Google Mock itself. +# +# The tests are not built by default. To build them, set the +# gmock_build_tests option to ON. You can do it by running ccmake +# or specifying the -Dgmock_build_tests=ON flag when running cmake. + +if (gmock_build_tests) + # This must be set in the root directory for the tests to be run by + # 'make test' or ctest. + enable_testing() + + if (MINGW OR CYGWIN) + if (CMAKE_VERSION VERSION_LESS "2.8.12") + add_compile_options("-Wa,-mbig-obj") + else() + add_definitions("-Wa,-mbig-obj") + endif() + endif() + + ############################################################ + # C++ tests built with standard compiler flags. + + cxx_test(gmock-actions_test gmock_main) + cxx_test(gmock-cardinalities_test gmock_main) + cxx_test(gmock_ex_test gmock_main) + cxx_test(gmock-function-mocker_test gmock_main) + cxx_test(gmock-internal-utils_test gmock_main) + cxx_test(gmock-matchers_test gmock_main) + cxx_test(gmock-more-actions_test gmock_main) + cxx_test(gmock-nice-strict_test gmock_main) + cxx_test(gmock-port_test gmock_main) + cxx_test(gmock-spec-builders_test gmock_main) + cxx_test(gmock_link_test gmock_main test/gmock_link2_test.cc) + cxx_test(gmock_test gmock_main) + + if (DEFINED GTEST_HAS_PTHREAD) + cxx_test(gmock_stress_test gmock) + endif() + + # gmock_all_test is commented to save time building and running tests. + # Uncomment if necessary. + # cxx_test(gmock_all_test gmock_main) + + ############################################################ + # C++ tests built with non-standard compiler flags. + + if (MSVC) + cxx_library(gmock_main_no_exception "${cxx_no_exception}" + "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) + + cxx_library(gmock_main_no_rtti "${cxx_no_rtti}" + "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) + + else() + cxx_library(gmock_main_no_exception "${cxx_no_exception}" src/gmock_main.cc) + target_link_libraries(gmock_main_no_exception PUBLIC gmock) + + cxx_library(gmock_main_no_rtti "${cxx_no_rtti}" src/gmock_main.cc) + target_link_libraries(gmock_main_no_rtti PUBLIC gmock) + endif() + cxx_test_with_flags(gmock-more-actions_no_exception_test "${cxx_no_exception}" + gmock_main_no_exception test/gmock-more-actions_test.cc) + + cxx_test_with_flags(gmock_no_rtti_test "${cxx_no_rtti}" + gmock_main_no_rtti test/gmock-spec-builders_test.cc) + + cxx_shared_library(shared_gmock_main "${cxx_default}" + "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) + + # Tests that a binary can be built with Google Mock as a shared library. On + # some system configurations, it may not possible to run the binary without + # knowing more details about the system configurations. We do not try to run + # this binary. To get a more robust shared library coverage, configure with + # -DBUILD_SHARED_LIBS=ON. + cxx_executable_with_flags(shared_gmock_test_ "${cxx_default}" + shared_gmock_main test/gmock-spec-builders_test.cc) + set_target_properties(shared_gmock_test_ + PROPERTIES + COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") + + ############################################################ + # Python tests. + + cxx_executable(gmock_leak_test_ test gmock_main) + py_test(gmock_leak_test) + + cxx_executable(gmock_output_test_ test gmock) + py_test(gmock_output_test) +endif() diff --git a/build/_deps/googletest-src/googlemock/README.md b/build/_deps/googletest-src/googlemock/README.md new file mode 100644 index 0000000..ead6883 --- /dev/null +++ b/build/_deps/googletest-src/googlemock/README.md @@ -0,0 +1,44 @@ +# Googletest Mocking (gMock) Framework + +### Overview + +Google's framework for writing and using C++ mock classes. It can help you +derive better designs of your system and write better tests. + +It is inspired by: + +* [jMock](http://www.jmock.org/) +* [EasyMock](http://www.easymock.org/) +* [Hamcrest](http://code.google.com/p/hamcrest/) + +It is designed with C++'s specifics in mind. + +gMock: + +- Provides a declarative syntax for defining mocks. +- Can define partial (hybrid) mocks, which are a cross of real and mock + objects. +- Handles functions of arbitrary types and overloaded functions. +- Comes with a rich set of matchers for validating function arguments. +- Uses an intuitive syntax for controlling the behavior of a mock. +- Does automatic verification of expectations (no record-and-replay needed). +- Allows arbitrary (partial) ordering constraints on function calls to be + expressed. +- Lets a user extend it by defining new matchers and actions. +- Does not use exceptions. +- Is easy to learn and use. + +Details and examples can be found here: + +* [gMock for Dummies](https://google.github.io/googletest/gmock_for_dummies.html) +* [Legacy gMock FAQ](https://google.github.io/googletest/gmock_faq.html) +* [gMock Cookbook](https://google.github.io/googletest/gmock_cook_book.html) +* [gMock Cheat Sheet](https://google.github.io/googletest/gmock_cheat_sheet.html) + +Please note that code under scripts/generator/ is from the +[cppclean project](http://code.google.com/p/cppclean/) and under the Apache +License, which is different from GoogleMock's license. + +GoogleMock is a part of +[GoogleTest C++ testing framework](http://github.com/google/googletest/) and a +subject to the same requirements. diff --git a/build/_deps/googletest-src/googlemock/cmake/gmock.pc.in b/build/_deps/googletest-src/googlemock/cmake/gmock.pc.in new file mode 100644 index 0000000..23c67b5 --- /dev/null +++ b/build/_deps/googletest-src/googlemock/cmake/gmock.pc.in @@ -0,0 +1,10 @@ +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ + +Name: gmock +Description: GoogleMock (without main() function) +Version: @PROJECT_VERSION@ +URL: https://github.com/google/googletest +Requires: gtest = @PROJECT_VERSION@ +Libs: -L${libdir} -lgmock @CMAKE_THREAD_LIBS_INIT@ +Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ diff --git a/build/_deps/googletest-src/googlemock/cmake/gmock_main.pc.in b/build/_deps/googletest-src/googlemock/cmake/gmock_main.pc.in new file mode 100644 index 0000000..66ffea7 --- /dev/null +++ b/build/_deps/googletest-src/googlemock/cmake/gmock_main.pc.in @@ -0,0 +1,10 @@ +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ + +Name: gmock_main +Description: GoogleMock (with main() function) +Version: @PROJECT_VERSION@ +URL: https://github.com/google/googletest +Requires: gmock = @PROJECT_VERSION@ +Libs: -L${libdir} -lgmock_main @CMAKE_THREAD_LIBS_INIT@ +Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ diff --git a/build/_deps/googletest-src/googlemock/docs/README.md b/build/_deps/googletest-src/googlemock/docs/README.md new file mode 100644 index 0000000..1bc57b7 --- /dev/null +++ b/build/_deps/googletest-src/googlemock/docs/README.md @@ -0,0 +1,4 @@ +# Content Moved + +We are working on updates to the GoogleTest documentation, which has moved to +the top-level [docs](../../docs) directory. diff --git a/build/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h b/build/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h new file mode 100644 index 0000000..f2393bd --- /dev/null +++ b/build/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h @@ -0,0 +1,1687 @@ +// Copyright 2007, 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. + + +// Google Mock - a framework for writing C++ mock classes. +// +// The ACTION* family of macros can be used in a namespace scope to +// define custom actions easily. The syntax: +// +// ACTION(name) { statements; } +// +// will define an action with the given name that executes the +// statements. The value returned by the statements will be used as +// the return value of the action. Inside the statements, you can +// refer to the K-th (0-based) argument of the mock function by +// 'argK', and refer to its type by 'argK_type'. For example: +// +// ACTION(IncrementArg1) { +// arg1_type temp = arg1; +// return ++(*temp); +// } +// +// allows you to write +// +// ...WillOnce(IncrementArg1()); +// +// You can also refer to the entire argument tuple and its type by +// 'args' and 'args_type', and refer to the mock function type and its +// return type by 'function_type' and 'return_type'. +// +// Note that you don't need to specify the types of the mock function +// arguments. However rest assured that your code is still type-safe: +// you'll get a compiler error if *arg1 doesn't support the ++ +// operator, or if the type of ++(*arg1) isn't compatible with the +// mock function's return type, for example. +// +// Sometimes you'll want to parameterize the action. For that you can use +// another macro: +// +// ACTION_P(name, param_name) { statements; } +// +// For example: +// +// ACTION_P(Add, n) { return arg0 + n; } +// +// will allow you to write: +// +// ...WillOnce(Add(5)); +// +// Note that you don't need to provide the type of the parameter +// either. If you need to reference the type of a parameter named +// 'foo', you can write 'foo_type'. For example, in the body of +// ACTION_P(Add, n) above, you can write 'n_type' to refer to the type +// of 'n'. +// +// We also provide ACTION_P2, ACTION_P3, ..., up to ACTION_P10 to support +// multi-parameter actions. +// +// For the purpose of typing, you can view +// +// ACTION_Pk(Foo, p1, ..., pk) { ... } +// +// as shorthand for +// +// template +// FooActionPk Foo(p1_type p1, ..., pk_type pk) { ... } +// +// In particular, you can provide the template type arguments +// explicitly when invoking Foo(), as in Foo(5, false); +// although usually you can rely on the compiler to infer the types +// for you automatically. You can assign the result of expression +// Foo(p1, ..., pk) to a variable of type FooActionPk. This can be useful when composing actions. +// +// You can also overload actions with different numbers of parameters: +// +// ACTION_P(Plus, a) { ... } +// ACTION_P2(Plus, a, b) { ... } +// +// While it's tempting to always use the ACTION* macros when defining +// a new action, you should also consider implementing ActionInterface +// or using MakePolymorphicAction() instead, especially if you need to +// use the action a lot. While these approaches require more work, +// they give you more control on the types of the mock function +// arguments and the action parameters, which in general leads to +// better compiler error messages that pay off in the long run. They +// also allow overloading actions based on parameter types (as opposed +// to just based on the number of parameters). +// +// CAVEAT: +// +// ACTION*() can only be used in a namespace scope as templates cannot be +// declared inside of a local class. +// Users can, however, define any local functors (e.g. a lambda) that +// can be used as actions. +// +// MORE INFORMATION: +// +// To learn more about using these macros, please search for 'ACTION' on +// https://github.com/google/googletest/blob/master/docs/gmock_cook_book.md + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ +#define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ + +#ifndef _WIN32_WCE +# include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "gmock/internal/gmock-internal-utils.h" +#include "gmock/internal/gmock-port.h" +#include "gmock/internal/gmock-pp.h" + +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable:4100) +#endif + +namespace testing { + +// To implement an action Foo, define: +// 1. a class FooAction that implements the ActionInterface interface, and +// 2. a factory function that creates an Action object from a +// const FooAction*. +// +// The two-level delegation design follows that of Matcher, providing +// consistency for extension developers. It also eases ownership +// management as Action objects can now be copied like plain values. + +namespace internal { + +// BuiltInDefaultValueGetter::Get() returns a +// default-constructed T value. BuiltInDefaultValueGetter::Get() crashes with an error. +// +// This primary template is used when kDefaultConstructible is true. +template +struct BuiltInDefaultValueGetter { + static T Get() { return T(); } +}; +template +struct BuiltInDefaultValueGetter { + static T Get() { + Assert(false, __FILE__, __LINE__, + "Default action undefined for the function return type."); + return internal::Invalid(); + // The above statement will never be reached, but is required in + // order for this function to compile. + } +}; + +// BuiltInDefaultValue::Get() returns the "built-in" default value +// for type T, which is NULL when T is a raw pointer type, 0 when T is +// a numeric type, false when T is bool, or "" when T is string or +// std::string. In addition, in C++11 and above, it turns a +// default-constructed T value if T is default constructible. For any +// other type T, the built-in default T value is undefined, and the +// function will abort the process. +template +class BuiltInDefaultValue { + public: + // This function returns true if and only if type T has a built-in default + // value. + static bool Exists() { + return ::std::is_default_constructible::value; + } + + static T Get() { + return BuiltInDefaultValueGetter< + T, ::std::is_default_constructible::value>::Get(); + } +}; + +// This partial specialization says that we use the same built-in +// default value for T and const T. +template +class BuiltInDefaultValue { + public: + static bool Exists() { return BuiltInDefaultValue::Exists(); } + static T Get() { return BuiltInDefaultValue::Get(); } +}; + +// This partial specialization defines the default values for pointer +// types. +template +class BuiltInDefaultValue { + public: + static bool Exists() { return true; } + static T* Get() { return nullptr; } +}; + +// The following specializations define the default values for +// specific types we care about. +#define GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(type, value) \ + template <> \ + class BuiltInDefaultValue { \ + public: \ + static bool Exists() { return true; } \ + static type Get() { return value; } \ + } + +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(void, ); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(::std::string, ""); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(bool, false); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned char, '\0'); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed char, '\0'); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(char, '\0'); + +// There's no need for a default action for signed wchar_t, as that +// type is the same as wchar_t for gcc, and invalid for MSVC. +// +// There's also no need for a default action for unsigned wchar_t, as +// that type is the same as unsigned int for gcc, and invalid for +// MSVC. +#if GMOCK_WCHAR_T_IS_NATIVE_ +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(wchar_t, 0U); // NOLINT +#endif + +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned short, 0U); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed short, 0); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned int, 0U); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed int, 0); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned long, 0UL); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed long, 0L); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned long long, 0); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed long long, 0); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(float, 0); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(double, 0); + +#undef GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_ + +// Simple two-arg form of std::disjunction. +template +using disjunction = typename ::std::conditional::type; + +} // namespace internal + +// When an unexpected function call is encountered, Google Mock will +// let it return a default value if the user has specified one for its +// return type, or if the return type has a built-in default value; +// otherwise Google Mock won't know what value to return and will have +// to abort the process. +// +// The DefaultValue class allows a user to specify the +// default value for a type T that is both copyable and publicly +// destructible (i.e. anything that can be used as a function return +// type). The usage is: +// +// // Sets the default value for type T to be foo. +// DefaultValue::Set(foo); +template +class DefaultValue { + public: + // Sets the default value for type T; requires T to be + // copy-constructable and have a public destructor. + static void Set(T x) { + delete producer_; + producer_ = new FixedValueProducer(x); + } + + // Provides a factory function to be called to generate the default value. + // This method can be used even if T is only move-constructible, but it is not + // limited to that case. + typedef T (*FactoryFunction)(); + static void SetFactory(FactoryFunction factory) { + delete producer_; + producer_ = new FactoryValueProducer(factory); + } + + // Unsets the default value for type T. + static void Clear() { + delete producer_; + producer_ = nullptr; + } + + // Returns true if and only if the user has set the default value for type T. + static bool IsSet() { return producer_ != nullptr; } + + // Returns true if T has a default return value set by the user or there + // exists a built-in default value. + static bool Exists() { + return IsSet() || internal::BuiltInDefaultValue::Exists(); + } + + // Returns the default value for type T if the user has set one; + // otherwise returns the built-in default value. Requires that Exists() + // is true, which ensures that the return value is well-defined. + static T Get() { + return producer_ == nullptr ? internal::BuiltInDefaultValue::Get() + : producer_->Produce(); + } + + private: + class ValueProducer { + public: + virtual ~ValueProducer() {} + virtual T Produce() = 0; + }; + + class FixedValueProducer : public ValueProducer { + public: + explicit FixedValueProducer(T value) : value_(value) {} + T Produce() override { return value_; } + + private: + const T value_; + GTEST_DISALLOW_COPY_AND_ASSIGN_(FixedValueProducer); + }; + + class FactoryValueProducer : public ValueProducer { + public: + explicit FactoryValueProducer(FactoryFunction factory) + : factory_(factory) {} + T Produce() override { return factory_(); } + + private: + const FactoryFunction factory_; + GTEST_DISALLOW_COPY_AND_ASSIGN_(FactoryValueProducer); + }; + + static ValueProducer* producer_; +}; + +// This partial specialization allows a user to set default values for +// reference types. +template +class DefaultValue { + public: + // Sets the default value for type T&. + static void Set(T& x) { // NOLINT + address_ = &x; + } + + // Unsets the default value for type T&. + static void Clear() { address_ = nullptr; } + + // Returns true if and only if the user has set the default value for type T&. + static bool IsSet() { return address_ != nullptr; } + + // Returns true if T has a default return value set by the user or there + // exists a built-in default value. + static bool Exists() { + return IsSet() || internal::BuiltInDefaultValue::Exists(); + } + + // Returns the default value for type T& if the user has set one; + // otherwise returns the built-in default value if there is one; + // otherwise aborts the process. + static T& Get() { + return address_ == nullptr ? internal::BuiltInDefaultValue::Get() + : *address_; + } + + private: + static T* address_; +}; + +// This specialization allows DefaultValue::Get() to +// compile. +template <> +class DefaultValue { + public: + static bool Exists() { return true; } + static void Get() {} +}; + +// Points to the user-set default value for type T. +template +typename DefaultValue::ValueProducer* DefaultValue::producer_ = nullptr; + +// Points to the user-set default value for type T&. +template +T* DefaultValue::address_ = nullptr; + +// Implement this interface to define an action for function type F. +template +class ActionInterface { + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + ActionInterface() {} + virtual ~ActionInterface() {} + + // Performs the action. This method is not const, as in general an + // action can have side effects and be stateful. For example, a + // get-the-next-element-from-the-collection action will need to + // remember the current element. + virtual Result Perform(const ArgumentTuple& args) = 0; + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(ActionInterface); +}; + +// An Action is a copyable and IMMUTABLE (except by assignment) +// object that represents an action to be taken when a mock function +// of type F is called. The implementation of Action is just a +// std::shared_ptr to const ActionInterface. Don't inherit from Action! +// You can view an object implementing ActionInterface as a +// concrete action (including its current state), and an Action +// object as a handle to it. +template +class Action { + // Adapter class to allow constructing Action from a legacy ActionInterface. + // New code should create Actions from functors instead. + struct ActionAdapter { + // Adapter must be copyable to satisfy std::function requirements. + ::std::shared_ptr> impl_; + + template + typename internal::Function::Result operator()(Args&&... args) { + return impl_->Perform( + ::std::forward_as_tuple(::std::forward(args)...)); + } + }; + + template + using IsCompatibleFunctor = std::is_constructible, G>; + + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + // Constructs a null Action. Needed for storing Action objects in + // STL containers. + Action() {} + + // Construct an Action from a specified callable. + // This cannot take std::function directly, because then Action would not be + // directly constructible from lambda (it would require two conversions). + template < + typename G, + typename = typename std::enable_if, std::is_constructible, + G>>::value>::type> + Action(G&& fun) { // NOLINT + Init(::std::forward(fun), IsCompatibleFunctor()); + } + + // Constructs an Action from its implementation. + explicit Action(ActionInterface* impl) + : fun_(ActionAdapter{::std::shared_ptr>(impl)}) {} + + // This constructor allows us to turn an Action object into an + // Action, as long as F's arguments can be implicitly converted + // to Func's and Func's return type can be implicitly converted to F's. + template + explicit Action(const Action& action) : fun_(action.fun_) {} + + // Returns true if and only if this is the DoDefault() action. + bool IsDoDefault() const { return fun_ == nullptr; } + + // Performs the action. Note that this method is const even though + // the corresponding method in ActionInterface is not. The reason + // is that a const Action means that it cannot be re-bound to + // another concrete action, not that the concrete action it binds to + // cannot change state. (Think of the difference between a const + // pointer and a pointer to const.) + Result Perform(ArgumentTuple args) const { + if (IsDoDefault()) { + internal::IllegalDoDefault(__FILE__, __LINE__); + } + return internal::Apply(fun_, ::std::move(args)); + } + + private: + template + friend class Action; + + template + void Init(G&& g, ::std::true_type) { + fun_ = ::std::forward(g); + } + + template + void Init(G&& g, ::std::false_type) { + fun_ = IgnoreArgs::type>{::std::forward(g)}; + } + + template + struct IgnoreArgs { + template + Result operator()(const Args&...) const { + return function_impl(); + } + + FunctionImpl function_impl; + }; + + // fun_ is an empty function if and only if this is the DoDefault() action. + ::std::function fun_; +}; + +// The PolymorphicAction class template makes it easy to implement a +// polymorphic action (i.e. an action that can be used in mock +// functions of than one type, e.g. Return()). +// +// To define a polymorphic action, a user first provides a COPYABLE +// implementation class that has a Perform() method template: +// +// class FooAction { +// public: +// template +// Result Perform(const ArgumentTuple& args) const { +// // Processes the arguments and returns a result, using +// // std::get(args) to get the N-th (0-based) argument in the tuple. +// } +// ... +// }; +// +// Then the user creates the polymorphic action using +// MakePolymorphicAction(object) where object has type FooAction. See +// the definition of Return(void) and SetArgumentPointee(value) for +// complete examples. +template +class PolymorphicAction { + public: + explicit PolymorphicAction(const Impl& impl) : impl_(impl) {} + + template + operator Action() const { + return Action(new MonomorphicImpl(impl_)); + } + + private: + template + class MonomorphicImpl : public ActionInterface { + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {} + + Result Perform(const ArgumentTuple& args) override { + return impl_.template Perform(args); + } + + private: + Impl impl_; + }; + + Impl impl_; +}; + +// Creates an Action from its implementation and returns it. The +// created Action object owns the implementation. +template +Action MakeAction(ActionInterface* impl) { + return Action(impl); +} + +// Creates a polymorphic action from its implementation. This is +// easier to use than the PolymorphicAction constructor as it +// doesn't require you to explicitly write the template argument, e.g. +// +// MakePolymorphicAction(foo); +// vs +// PolymorphicAction(foo); +template +inline PolymorphicAction MakePolymorphicAction(const Impl& impl) { + return PolymorphicAction(impl); +} + +namespace internal { + +// Helper struct to specialize ReturnAction to execute a move instead of a copy +// on return. Useful for move-only types, but could be used on any type. +template +struct ByMoveWrapper { + explicit ByMoveWrapper(T value) : payload(std::move(value)) {} + T payload; +}; + +// Implements the polymorphic Return(x) action, which can be used in +// any function that returns the type of x, regardless of the argument +// types. +// +// Note: The value passed into Return must be converted into +// Function::Result when this action is cast to Action rather than +// when that action is performed. This is important in scenarios like +// +// MOCK_METHOD1(Method, T(U)); +// ... +// { +// Foo foo; +// X x(&foo); +// EXPECT_CALL(mock, Method(_)).WillOnce(Return(x)); +// } +// +// In the example above the variable x holds reference to foo which leaves +// scope and gets destroyed. If copying X just copies a reference to foo, +// that copy will be left with a hanging reference. If conversion to T +// makes a copy of foo, the above code is safe. To support that scenario, we +// need to make sure that the type conversion happens inside the EXPECT_CALL +// statement, and conversion of the result of Return to Action is a +// good place for that. +// +// The real life example of the above scenario happens when an invocation +// of gtl::Container() is passed into Return. +// +template +class ReturnAction { + public: + // Constructs a ReturnAction object from the value to be returned. + // 'value' is passed by value instead of by const reference in order + // to allow Return("string literal") to compile. + explicit ReturnAction(R value) : value_(new R(std::move(value))) {} + + // This template type conversion operator allows Return(x) to be + // used in ANY function that returns x's type. + template + operator Action() const { // NOLINT + // Assert statement belongs here because this is the best place to verify + // conditions on F. It produces the clearest error messages + // in most compilers. + // Impl really belongs in this scope as a local class but can't + // because MSVC produces duplicate symbols in different translation units + // in this case. Until MS fixes that bug we put Impl into the class scope + // and put the typedef both here (for use in assert statement) and + // in the Impl class. But both definitions must be the same. + typedef typename Function::Result Result; + GTEST_COMPILE_ASSERT_( + !std::is_reference::value, + use_ReturnRef_instead_of_Return_to_return_a_reference); + static_assert(!std::is_void::value, + "Can't use Return() on an action expected to return `void`."); + return Action(new Impl(value_)); + } + + private: + // Implements the Return(x) action for a particular function type F. + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + // The implicit cast is necessary when Result has more than one + // single-argument constructor (e.g. Result is std::vector) and R + // has a type conversion operator template. In that case, value_(value) + // won't compile as the compiler doesn't known which constructor of + // Result to call. ImplicitCast_ forces the compiler to convert R to + // Result without considering explicit constructors, thus resolving the + // ambiguity. value_ is then initialized using its copy constructor. + explicit Impl(const std::shared_ptr& value) + : value_before_cast_(*value), + value_(ImplicitCast_(value_before_cast_)) {} + + Result Perform(const ArgumentTuple&) override { return value_; } + + private: + GTEST_COMPILE_ASSERT_(!std::is_reference::value, + Result_cannot_be_a_reference_type); + // We save the value before casting just in case it is being cast to a + // wrapper type. + R value_before_cast_; + Result value_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(Impl); + }; + + // Partially specialize for ByMoveWrapper. This version of ReturnAction will + // move its contents instead. + template + class Impl, F> : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + explicit Impl(const std::shared_ptr& wrapper) + : performed_(false), wrapper_(wrapper) {} + + Result Perform(const ArgumentTuple&) override { + GTEST_CHECK_(!performed_) + << "A ByMove() action should only be performed once."; + performed_ = true; + return std::move(wrapper_->payload); + } + + private: + bool performed_; + const std::shared_ptr wrapper_; + }; + + const std::shared_ptr value_; +}; + +// Implements the ReturnNull() action. +class ReturnNullAction { + public: + // Allows ReturnNull() to be used in any pointer-returning function. In C++11 + // this is enforced by returning nullptr, and in non-C++11 by asserting a + // pointer type on compile time. + template + static Result Perform(const ArgumentTuple&) { + return nullptr; + } +}; + +// Implements the Return() action. +class ReturnVoidAction { + public: + // Allows Return() to be used in any void-returning function. + template + static void Perform(const ArgumentTuple&) { + static_assert(std::is_void::value, "Result should be void."); + } +}; + +// Implements the polymorphic ReturnRef(x) action, which can be used +// in any function that returns a reference to the type of x, +// regardless of the argument types. +template +class ReturnRefAction { + public: + // Constructs a ReturnRefAction object from the reference to be returned. + explicit ReturnRefAction(T& ref) : ref_(ref) {} // NOLINT + + // This template type conversion operator allows ReturnRef(x) to be + // used in ANY function that returns a reference to x's type. + template + operator Action() const { + typedef typename Function::Result Result; + // Asserts that the function return type is a reference. This + // catches the user error of using ReturnRef(x) when Return(x) + // should be used, and generates some helpful error message. + GTEST_COMPILE_ASSERT_(std::is_reference::value, + use_Return_instead_of_ReturnRef_to_return_a_value); + return Action(new Impl(ref_)); + } + + private: + // Implements the ReturnRef(x) action for a particular function type F. + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + explicit Impl(T& ref) : ref_(ref) {} // NOLINT + + Result Perform(const ArgumentTuple&) override { return ref_; } + + private: + T& ref_; + }; + + T& ref_; +}; + +// Implements the polymorphic ReturnRefOfCopy(x) action, which can be +// used in any function that returns a reference to the type of x, +// regardless of the argument types. +template +class ReturnRefOfCopyAction { + public: + // Constructs a ReturnRefOfCopyAction object from the reference to + // be returned. + explicit ReturnRefOfCopyAction(const T& value) : value_(value) {} // NOLINT + + // This template type conversion operator allows ReturnRefOfCopy(x) to be + // used in ANY function that returns a reference to x's type. + template + operator Action() const { + typedef typename Function::Result Result; + // Asserts that the function return type is a reference. This + // catches the user error of using ReturnRefOfCopy(x) when Return(x) + // should be used, and generates some helpful error message. + GTEST_COMPILE_ASSERT_( + std::is_reference::value, + use_Return_instead_of_ReturnRefOfCopy_to_return_a_value); + return Action(new Impl(value_)); + } + + private: + // Implements the ReturnRefOfCopy(x) action for a particular function type F. + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + explicit Impl(const T& value) : value_(value) {} // NOLINT + + Result Perform(const ArgumentTuple&) override { return value_; } + + private: + T value_; + }; + + const T value_; +}; + +// Implements the polymorphic ReturnRoundRobin(v) action, which can be +// used in any function that returns the element_type of v. +template +class ReturnRoundRobinAction { + public: + explicit ReturnRoundRobinAction(std::vector values) { + GTEST_CHECK_(!values.empty()) + << "ReturnRoundRobin requires at least one element."; + state_->values = std::move(values); + } + + template + T operator()(Args&&...) const { + return state_->Next(); + } + + private: + struct State { + T Next() { + T ret_val = values[i++]; + if (i == values.size()) i = 0; + return ret_val; + } + + std::vector values; + size_t i = 0; + }; + std::shared_ptr state_ = std::make_shared(); +}; + +// Implements the polymorphic DoDefault() action. +class DoDefaultAction { + public: + // This template type conversion operator allows DoDefault() to be + // used in any function. + template + operator Action() const { return Action(); } // NOLINT +}; + +// Implements the Assign action to set a given pointer referent to a +// particular value. +template +class AssignAction { + public: + AssignAction(T1* ptr, T2 value) : ptr_(ptr), value_(value) {} + + template + void Perform(const ArgumentTuple& /* args */) const { + *ptr_ = value_; + } + + private: + T1* const ptr_; + const T2 value_; +}; + +#if !GTEST_OS_WINDOWS_MOBILE + +// Implements the SetErrnoAndReturn action to simulate return from +// various system calls and libc functions. +template +class SetErrnoAndReturnAction { + public: + SetErrnoAndReturnAction(int errno_value, T result) + : errno_(errno_value), + result_(result) {} + template + Result Perform(const ArgumentTuple& /* args */) const { + errno = errno_; + return result_; + } + + private: + const int errno_; + const T result_; +}; + +#endif // !GTEST_OS_WINDOWS_MOBILE + +// Implements the SetArgumentPointee(x) action for any function +// whose N-th argument (0-based) is a pointer to x's type. +template +struct SetArgumentPointeeAction { + A value; + + template + void operator()(const Args&... args) const { + *::std::get(std::tie(args...)) = value; + } +}; + +// Implements the Invoke(object_ptr, &Class::Method) action. +template +struct InvokeMethodAction { + Class* const obj_ptr; + const MethodPtr method_ptr; + + template + auto operator()(Args&&... args) const + -> decltype((obj_ptr->*method_ptr)(std::forward(args)...)) { + return (obj_ptr->*method_ptr)(std::forward(args)...); + } +}; + +// Implements the InvokeWithoutArgs(f) action. The template argument +// FunctionImpl is the implementation type of f, which can be either a +// function pointer or a functor. InvokeWithoutArgs(f) can be used as an +// Action as long as f's type is compatible with F. +template +struct InvokeWithoutArgsAction { + FunctionImpl function_impl; + + // Allows InvokeWithoutArgs(f) to be used as any action whose type is + // compatible with f. + template + auto operator()(const Args&...) -> decltype(function_impl()) { + return function_impl(); + } +}; + +// Implements the InvokeWithoutArgs(object_ptr, &Class::Method) action. +template +struct InvokeMethodWithoutArgsAction { + Class* const obj_ptr; + const MethodPtr method_ptr; + + using ReturnType = + decltype((std::declval()->*std::declval())()); + + template + ReturnType operator()(const Args&...) const { + return (obj_ptr->*method_ptr)(); + } +}; + +// Implements the IgnoreResult(action) action. +template +class IgnoreResultAction { + public: + explicit IgnoreResultAction(const A& action) : action_(action) {} + + template + operator Action() const { + // Assert statement belongs here because this is the best place to verify + // conditions on F. It produces the clearest error messages + // in most compilers. + // Impl really belongs in this scope as a local class but can't + // because MSVC produces duplicate symbols in different translation units + // in this case. Until MS fixes that bug we put Impl into the class scope + // and put the typedef both here (for use in assert statement) and + // in the Impl class. But both definitions must be the same. + typedef typename internal::Function::Result Result; + + // Asserts at compile time that F returns void. + static_assert(std::is_void::value, "Result type should be void."); + + return Action(new Impl(action_)); + } + + private: + template + class Impl : public ActionInterface { + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + explicit Impl(const A& action) : action_(action) {} + + void Perform(const ArgumentTuple& args) override { + // Performs the action and ignores its result. + action_.Perform(args); + } + + private: + // Type OriginalFunction is the same as F except that its return + // type is IgnoredValue. + typedef typename internal::Function::MakeResultIgnoredValue + OriginalFunction; + + const Action action_; + }; + + const A action_; +}; + +template +struct WithArgsAction { + InnerAction action; + + // The inner action could be anything convertible to Action. + // We use the conversion operator to detect the signature of the inner Action. + template + operator Action() const { // NOLINT + using TupleType = std::tuple; + Action::type...)> + converted(action); + + return [converted](Args... args) -> R { + return converted.Perform(std::forward_as_tuple( + std::get(std::forward_as_tuple(std::forward(args)...))...)); + }; + } +}; + +template +struct DoAllAction { + private: + template + using NonFinalType = + typename std::conditional::value, T, const T&>::type; + + template + std::vector Convert(IndexSequence) const { + return {ActionT(std::get(actions))...}; + } + + public: + std::tuple actions; + + template + operator Action() const { // NOLINT + struct Op { + std::vector...)>> converted; + Action last; + R operator()(Args... args) const { + auto tuple_args = std::forward_as_tuple(std::forward(args)...); + for (auto& a : converted) { + a.Perform(tuple_args); + } + return last.Perform(std::move(tuple_args)); + } + }; + return Op{Convert...)>>( + MakeIndexSequence()), + std::get(actions)}; + } +}; + +template +struct ReturnNewAction { + T* operator()() const { + return internal::Apply( + [](const Params&... unpacked_params) { + return new T(unpacked_params...); + }, + params); + } + std::tuple params; +}; + +template +struct ReturnArgAction { + template + auto operator()(const Args&... args) const -> + typename std::tuple_element>::type { + return std::get(std::tie(args...)); + } +}; + +template +struct SaveArgAction { + Ptr pointer; + + template + void operator()(const Args&... args) const { + *pointer = std::get(std::tie(args...)); + } +}; + +template +struct SaveArgPointeeAction { + Ptr pointer; + + template + void operator()(const Args&... args) const { + *pointer = *std::get(std::tie(args...)); + } +}; + +template +struct SetArgRefereeAction { + T value; + + template + void operator()(Args&&... args) const { + using argk_type = + typename ::std::tuple_element>::type; + static_assert(std::is_lvalue_reference::value, + "Argument must be a reference type."); + std::get(std::tie(args...)) = value; + } +}; + +template +struct SetArrayArgumentAction { + I1 first; + I2 last; + + template + void operator()(const Args&... args) const { + auto value = std::get(std::tie(args...)); + for (auto it = first; it != last; ++it, (void)++value) { + *value = *it; + } + } +}; + +template +struct DeleteArgAction { + template + void operator()(const Args&... args) const { + delete std::get(std::tie(args...)); + } +}; + +template +struct ReturnPointeeAction { + Ptr pointer; + template + auto operator()(const Args&...) const -> decltype(*pointer) { + return *pointer; + } +}; + +#if GTEST_HAS_EXCEPTIONS +template +struct ThrowAction { + T exception; + // We use a conversion operator to adapt to any return type. + template + operator Action() const { // NOLINT + T copy = exception; + return [copy](Args...) -> R { throw copy; }; + } +}; +#endif // GTEST_HAS_EXCEPTIONS + +} // namespace internal + +// An Unused object can be implicitly constructed from ANY value. +// This is handy when defining actions that ignore some or all of the +// mock function arguments. For example, given +// +// MOCK_METHOD3(Foo, double(const string& label, double x, double y)); +// MOCK_METHOD3(Bar, double(int index, double x, double y)); +// +// instead of +// +// double DistanceToOriginWithLabel(const string& label, double x, double y) { +// return sqrt(x*x + y*y); +// } +// double DistanceToOriginWithIndex(int index, double x, double y) { +// return sqrt(x*x + y*y); +// } +// ... +// EXPECT_CALL(mock, Foo("abc", _, _)) +// .WillOnce(Invoke(DistanceToOriginWithLabel)); +// EXPECT_CALL(mock, Bar(5, _, _)) +// .WillOnce(Invoke(DistanceToOriginWithIndex)); +// +// you could write +// +// // We can declare any uninteresting argument as Unused. +// double DistanceToOrigin(Unused, double x, double y) { +// return sqrt(x*x + y*y); +// } +// ... +// EXPECT_CALL(mock, Foo("abc", _, _)).WillOnce(Invoke(DistanceToOrigin)); +// EXPECT_CALL(mock, Bar(5, _, _)).WillOnce(Invoke(DistanceToOrigin)); +typedef internal::IgnoredValue Unused; + +// Creates an action that does actions a1, a2, ..., sequentially in +// each invocation. All but the last action will have a readonly view of the +// arguments. +template +internal::DoAllAction::type...> DoAll( + Action&&... action) { + return {std::forward_as_tuple(std::forward(action)...)}; +} + +// WithArg(an_action) creates an action that passes the k-th +// (0-based) argument of the mock function to an_action and performs +// it. It adapts an action accepting one argument to one that accepts +// multiple arguments. For convenience, we also provide +// WithArgs(an_action) (defined below) as a synonym. +template +internal::WithArgsAction::type, k> +WithArg(InnerAction&& action) { + return {std::forward(action)}; +} + +// WithArgs(an_action) creates an action that passes +// the selected arguments of the mock function to an_action and +// performs it. It serves as an adaptor between actions with +// different argument lists. +template +internal::WithArgsAction::type, k, ks...> +WithArgs(InnerAction&& action) { + return {std::forward(action)}; +} + +// WithoutArgs(inner_action) can be used in a mock function with a +// non-empty argument list to perform inner_action, which takes no +// argument. In other words, it adapts an action accepting no +// argument to one that accepts (and ignores) arguments. +template +internal::WithArgsAction::type> +WithoutArgs(InnerAction&& action) { + return {std::forward(action)}; +} + +// Creates an action that returns 'value'. 'value' is passed by value +// instead of const reference - otherwise Return("string literal") +// will trigger a compiler error about using array as initializer. +template +internal::ReturnAction Return(R value) { + return internal::ReturnAction(std::move(value)); +} + +// Creates an action that returns NULL. +inline PolymorphicAction ReturnNull() { + return MakePolymorphicAction(internal::ReturnNullAction()); +} + +// Creates an action that returns from a void function. +inline PolymorphicAction Return() { + return MakePolymorphicAction(internal::ReturnVoidAction()); +} + +// Creates an action that returns the reference to a variable. +template +inline internal::ReturnRefAction ReturnRef(R& x) { // NOLINT + return internal::ReturnRefAction(x); +} + +// Prevent using ReturnRef on reference to temporary. +template +internal::ReturnRefAction ReturnRef(R&&) = delete; + +// Creates an action that returns the reference to a copy of the +// argument. The copy is created when the action is constructed and +// lives as long as the action. +template +inline internal::ReturnRefOfCopyAction ReturnRefOfCopy(const R& x) { + return internal::ReturnRefOfCopyAction(x); +} + +// Modifies the parent action (a Return() action) to perform a move of the +// argument instead of a copy. +// Return(ByMove()) actions can only be executed once and will assert this +// invariant. +template +internal::ByMoveWrapper ByMove(R x) { + return internal::ByMoveWrapper(std::move(x)); +} + +// Creates an action that returns an element of `vals`. Calling this action will +// repeatedly return the next value from `vals` until it reaches the end and +// will restart from the beginning. +template +internal::ReturnRoundRobinAction ReturnRoundRobin(std::vector vals) { + return internal::ReturnRoundRobinAction(std::move(vals)); +} + +// Creates an action that returns an element of `vals`. Calling this action will +// repeatedly return the next value from `vals` until it reaches the end and +// will restart from the beginning. +template +internal::ReturnRoundRobinAction ReturnRoundRobin( + std::initializer_list vals) { + return internal::ReturnRoundRobinAction(std::vector(vals)); +} + +// Creates an action that does the default action for the give mock function. +inline internal::DoDefaultAction DoDefault() { + return internal::DoDefaultAction(); +} + +// Creates an action that sets the variable pointed by the N-th +// (0-based) function argument to 'value'. +template +internal::SetArgumentPointeeAction SetArgPointee(T value) { + return {std::move(value)}; +} + +// The following version is DEPRECATED. +template +internal::SetArgumentPointeeAction SetArgumentPointee(T value) { + return {std::move(value)}; +} + +// Creates an action that sets a pointer referent to a given value. +template +PolymorphicAction > Assign(T1* ptr, T2 val) { + return MakePolymorphicAction(internal::AssignAction(ptr, val)); +} + +#if !GTEST_OS_WINDOWS_MOBILE + +// Creates an action that sets errno and returns the appropriate error. +template +PolymorphicAction > +SetErrnoAndReturn(int errval, T result) { + return MakePolymorphicAction( + internal::SetErrnoAndReturnAction(errval, result)); +} + +#endif // !GTEST_OS_WINDOWS_MOBILE + +// Various overloads for Invoke(). + +// Legacy function. +// Actions can now be implicitly constructed from callables. No need to create +// wrapper objects. +// This function exists for backwards compatibility. +template +typename std::decay::type Invoke(FunctionImpl&& function_impl) { + return std::forward(function_impl); +} + +// Creates an action that invokes the given method on the given object +// with the mock function's arguments. +template +internal::InvokeMethodAction Invoke(Class* obj_ptr, + MethodPtr method_ptr) { + return {obj_ptr, method_ptr}; +} + +// Creates an action that invokes 'function_impl' with no argument. +template +internal::InvokeWithoutArgsAction::type> +InvokeWithoutArgs(FunctionImpl function_impl) { + return {std::move(function_impl)}; +} + +// Creates an action that invokes the given method on the given object +// with no argument. +template +internal::InvokeMethodWithoutArgsAction InvokeWithoutArgs( + Class* obj_ptr, MethodPtr method_ptr) { + return {obj_ptr, method_ptr}; +} + +// Creates an action that performs an_action and throws away its +// result. In other words, it changes the return type of an_action to +// void. an_action MUST NOT return void, or the code won't compile. +template +inline internal::IgnoreResultAction IgnoreResult(const A& an_action) { + return internal::IgnoreResultAction(an_action); +} + +// Creates a reference wrapper for the given L-value. If necessary, +// you can explicitly specify the type of the reference. For example, +// suppose 'derived' is an object of type Derived, ByRef(derived) +// would wrap a Derived&. If you want to wrap a const Base& instead, +// where Base is a base class of Derived, just write: +// +// ByRef(derived) +// +// N.B. ByRef is redundant with std::ref, std::cref and std::reference_wrapper. +// However, it may still be used for consistency with ByMove(). +template +inline ::std::reference_wrapper ByRef(T& l_value) { // NOLINT + return ::std::reference_wrapper(l_value); +} + +// The ReturnNew(a1, a2, ..., a_k) action returns a pointer to a new +// instance of type T, constructed on the heap with constructor arguments +// a1, a2, ..., and a_k. The caller assumes ownership of the returned value. +template +internal::ReturnNewAction::type...> ReturnNew( + Params&&... params) { + return {std::forward_as_tuple(std::forward(params)...)}; +} + +// Action ReturnArg() returns the k-th argument of the mock function. +template +internal::ReturnArgAction ReturnArg() { + return {}; +} + +// Action SaveArg(pointer) saves the k-th (0-based) argument of the +// mock function to *pointer. +template +internal::SaveArgAction SaveArg(Ptr pointer) { + return {pointer}; +} + +// Action SaveArgPointee(pointer) saves the value pointed to +// by the k-th (0-based) argument of the mock function to *pointer. +template +internal::SaveArgPointeeAction SaveArgPointee(Ptr pointer) { + return {pointer}; +} + +// Action SetArgReferee(value) assigns 'value' to the variable +// referenced by the k-th (0-based) argument of the mock function. +template +internal::SetArgRefereeAction::type> SetArgReferee( + T&& value) { + return {std::forward(value)}; +} + +// Action SetArrayArgument(first, last) copies the elements in +// source range [first, last) to the array pointed to by the k-th +// (0-based) argument, which can be either a pointer or an +// iterator. The action does not take ownership of the elements in the +// source range. +template +internal::SetArrayArgumentAction SetArrayArgument(I1 first, + I2 last) { + return {first, last}; +} + +// Action DeleteArg() deletes the k-th (0-based) argument of the mock +// function. +template +internal::DeleteArgAction DeleteArg() { + return {}; +} + +// This action returns the value pointed to by 'pointer'. +template +internal::ReturnPointeeAction ReturnPointee(Ptr pointer) { + return {pointer}; +} + +// Action Throw(exception) can be used in a mock function of any type +// to throw the given exception. Any copyable value can be thrown. +#if GTEST_HAS_EXCEPTIONS +template +internal::ThrowAction::type> Throw(T&& exception) { + return {std::forward(exception)}; +} +#endif // GTEST_HAS_EXCEPTIONS + +namespace internal { + +// A macro from the ACTION* family (defined later in gmock-generated-actions.h) +// defines an action that can be used in a mock function. Typically, +// these actions only care about a subset of the arguments of the mock +// function. For example, if such an action only uses the second +// argument, it can be used in any mock function that takes >= 2 +// arguments where the type of the second argument is compatible. +// +// Therefore, the action implementation must be prepared to take more +// arguments than it needs. The ExcessiveArg type is used to +// represent those excessive arguments. In order to keep the compiler +// error messages tractable, we define it in the testing namespace +// instead of testing::internal. However, this is an INTERNAL TYPE +// and subject to change without notice, so a user MUST NOT USE THIS +// TYPE DIRECTLY. +struct ExcessiveArg {}; + +// Builds an implementation of an Action<> for some particular signature, using +// a class defined by an ACTION* macro. +template struct ActionImpl; + +template +struct ImplBase { + struct Holder { + // Allows each copy of the Action<> to get to the Impl. + explicit operator const Impl&() const { return *ptr; } + std::shared_ptr ptr; + }; + using type = typename std::conditional::value, + Impl, Holder>::type; +}; + +template +struct ActionImpl : ImplBase::type { + using Base = typename ImplBase::type; + using function_type = R(Args...); + using args_type = std::tuple; + + ActionImpl() = default; // Only defined if appropriate for Base. + explicit ActionImpl(std::shared_ptr impl) : Base{std::move(impl)} { } + + R operator()(Args&&... arg) const { + static constexpr size_t kMaxArgs = + sizeof...(Args) <= 10 ? sizeof...(Args) : 10; + return Apply(MakeIndexSequence{}, + MakeIndexSequence<10 - kMaxArgs>{}, + args_type{std::forward(arg)...}); + } + + template + R Apply(IndexSequence, IndexSequence, + const args_type& args) const { + // Impl need not be specific to the signature of action being implemented; + // only the implementing function body needs to have all of the specific + // types instantiated. Up to 10 of the args that are provided by the + // args_type get passed, followed by a dummy of unspecified type for the + // remainder up to 10 explicit args. + static constexpr ExcessiveArg kExcessArg{}; + return static_cast(*this).template gmock_PerformImpl< + /*function_type=*/function_type, /*return_type=*/R, + /*args_type=*/args_type, + /*argN_type=*/typename std::tuple_element::type...>( + /*args=*/args, std::get(args)..., + ((void)excess_id, kExcessArg)...); + } +}; + +// Stores a default-constructed Impl as part of the Action<>'s +// std::function<>. The Impl should be trivial to copy. +template +::testing::Action MakeAction() { + return ::testing::Action(ActionImpl()); +} + +// Stores just the one given instance of Impl. +template +::testing::Action MakeAction(std::shared_ptr impl) { + return ::testing::Action(ActionImpl(std::move(impl))); +} + +#define GMOCK_INTERNAL_ARG_UNUSED(i, data, el) \ + , const arg##i##_type& arg##i GTEST_ATTRIBUTE_UNUSED_ +#define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_ \ + const args_type& args GTEST_ATTRIBUTE_UNUSED_ GMOCK_PP_REPEAT( \ + GMOCK_INTERNAL_ARG_UNUSED, , 10) + +#define GMOCK_INTERNAL_ARG(i, data, el) , const arg##i##_type& arg##i +#define GMOCK_ACTION_ARG_TYPES_AND_NAMES_ \ + const args_type& args GMOCK_PP_REPEAT(GMOCK_INTERNAL_ARG, , 10) + +#define GMOCK_INTERNAL_TEMPLATE_ARG(i, data, el) , typename arg##i##_type +#define GMOCK_ACTION_TEMPLATE_ARGS_NAMES_ \ + GMOCK_PP_TAIL(GMOCK_PP_REPEAT(GMOCK_INTERNAL_TEMPLATE_ARG, , 10)) + +#define GMOCK_INTERNAL_TYPENAME_PARAM(i, data, param) , typename param##_type +#define GMOCK_ACTION_TYPENAME_PARAMS_(params) \ + GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_TYPENAME_PARAM, , params)) + +#define GMOCK_INTERNAL_TYPE_PARAM(i, data, param) , param##_type +#define GMOCK_ACTION_TYPE_PARAMS_(params) \ + GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_TYPE_PARAM, , params)) + +#define GMOCK_INTERNAL_TYPE_GVALUE_PARAM(i, data, param) \ + , param##_type gmock_p##i +#define GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params) \ + GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_TYPE_GVALUE_PARAM, , params)) + +#define GMOCK_INTERNAL_GVALUE_PARAM(i, data, param) \ + , std::forward(gmock_p##i) +#define GMOCK_ACTION_GVALUE_PARAMS_(params) \ + GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_GVALUE_PARAM, , params)) + +#define GMOCK_INTERNAL_INIT_PARAM(i, data, param) \ + , param(::std::forward(gmock_p##i)) +#define GMOCK_ACTION_INIT_PARAMS_(params) \ + GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_INIT_PARAM, , params)) + +#define GMOCK_INTERNAL_FIELD_PARAM(i, data, param) param##_type param; +#define GMOCK_ACTION_FIELD_PARAMS_(params) \ + GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_FIELD_PARAM, , params) + +#define GMOCK_INTERNAL_ACTION(name, full_name, params) \ + template \ + class full_name { \ + public: \ + explicit full_name(GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) \ + : impl_(std::make_shared( \ + GMOCK_ACTION_GVALUE_PARAMS_(params))) { } \ + full_name(const full_name&) = default; \ + full_name(full_name&&) noexcept = default; \ + template \ + operator ::testing::Action() const { \ + return ::testing::internal::MakeAction(impl_); \ + } \ + private: \ + class gmock_Impl { \ + public: \ + explicit gmock_Impl(GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) \ + : GMOCK_ACTION_INIT_PARAMS_(params) {} \ + template \ + return_type gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_) const; \ + GMOCK_ACTION_FIELD_PARAMS_(params) \ + }; \ + std::shared_ptr impl_; \ + }; \ + template \ + inline full_name name( \ + GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) { \ + return full_name( \ + GMOCK_ACTION_GVALUE_PARAMS_(params)); \ + } \ + template \ + template \ + return_type full_name::gmock_Impl:: \ + gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +} // namespace internal + +// Similar to GMOCK_INTERNAL_ACTION, but no bound parameters are stored. +#define ACTION(name) \ + class name##Action { \ + public: \ + explicit name##Action() noexcept {} \ + name##Action(const name##Action&) noexcept {} \ + template \ + operator ::testing::Action() const { \ + return ::testing::internal::MakeAction(); \ + } \ + private: \ + class gmock_Impl { \ + public: \ + template \ + return_type gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_) const; \ + }; \ + }; \ + inline name##Action name() GTEST_MUST_USE_RESULT_; \ + inline name##Action name() { return name##Action(); } \ + template \ + return_type name##Action::gmock_Impl::gmock_PerformImpl( \ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP, (__VA_ARGS__)) + +#define ACTION_P2(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP2, (__VA_ARGS__)) + +#define ACTION_P3(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP3, (__VA_ARGS__)) + +#define ACTION_P4(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP4, (__VA_ARGS__)) + +#define ACTION_P5(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP5, (__VA_ARGS__)) + +#define ACTION_P6(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP6, (__VA_ARGS__)) + +#define ACTION_P7(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP7, (__VA_ARGS__)) + +#define ACTION_P8(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP8, (__VA_ARGS__)) + +#define ACTION_P9(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP9, (__VA_ARGS__)) + +#define ACTION_P10(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP10, (__VA_ARGS__)) + +} // namespace testing + +#ifdef _MSC_VER +# pragma warning(pop) +#endif + +#endif // GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ diff --git a/build/_deps/googletest-src/googlemock/include/gmock/gmock-cardinalities.h b/build/_deps/googletest-src/googlemock/include/gmock/gmock-cardinalities.h new file mode 100644 index 0000000..fc7f803 --- /dev/null +++ b/build/_deps/googletest-src/googlemock/include/gmock/gmock-cardinalities.h @@ -0,0 +1,157 @@ +// Copyright 2007, 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. + + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements some commonly used cardinalities. More +// cardinalities can be defined by the user implementing the +// CardinalityInterface interface if necessary. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_ +#define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_ + +#include +#include +#include // NOLINT +#include "gmock/internal/gmock-port.h" +#include "gtest/gtest.h" + +GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ +/* class A needs to have dll-interface to be used by clients of class B */) + +namespace testing { + +// To implement a cardinality Foo, define: +// 1. a class FooCardinality that implements the +// CardinalityInterface interface, and +// 2. a factory function that creates a Cardinality object from a +// const FooCardinality*. +// +// The two-level delegation design follows that of Matcher, providing +// consistency for extension developers. It also eases ownership +// management as Cardinality objects can now be copied like plain values. + +// The implementation of a cardinality. +class CardinalityInterface { + public: + virtual ~CardinalityInterface() {} + + // Conservative estimate on the lower/upper bound of the number of + // calls allowed. + virtual int ConservativeLowerBound() const { return 0; } + virtual int ConservativeUpperBound() const { return INT_MAX; } + + // Returns true if and only if call_count calls will satisfy this + // cardinality. + virtual bool IsSatisfiedByCallCount(int call_count) const = 0; + + // Returns true if and only if call_count calls will saturate this + // cardinality. + virtual bool IsSaturatedByCallCount(int call_count) const = 0; + + // Describes self to an ostream. + virtual void DescribeTo(::std::ostream* os) const = 0; +}; + +// A Cardinality is a copyable and IMMUTABLE (except by assignment) +// object that specifies how many times a mock function is expected to +// be called. The implementation of Cardinality is just a std::shared_ptr +// to const CardinalityInterface. Don't inherit from Cardinality! +class GTEST_API_ Cardinality { + public: + // Constructs a null cardinality. Needed for storing Cardinality + // objects in STL containers. + Cardinality() {} + + // Constructs a Cardinality from its implementation. + explicit Cardinality(const CardinalityInterface* impl) : impl_(impl) {} + + // Conservative estimate on the lower/upper bound of the number of + // calls allowed. + int ConservativeLowerBound() const { return impl_->ConservativeLowerBound(); } + int ConservativeUpperBound() const { return impl_->ConservativeUpperBound(); } + + // Returns true if and only if call_count calls will satisfy this + // cardinality. + bool IsSatisfiedByCallCount(int call_count) const { + return impl_->IsSatisfiedByCallCount(call_count); + } + + // Returns true if and only if call_count calls will saturate this + // cardinality. + bool IsSaturatedByCallCount(int call_count) const { + return impl_->IsSaturatedByCallCount(call_count); + } + + // Returns true if and only if call_count calls will over-saturate this + // cardinality, i.e. exceed the maximum number of allowed calls. + bool IsOverSaturatedByCallCount(int call_count) const { + return impl_->IsSaturatedByCallCount(call_count) && + !impl_->IsSatisfiedByCallCount(call_count); + } + + // Describes self to an ostream + void DescribeTo(::std::ostream* os) const { impl_->DescribeTo(os); } + + // Describes the given actual call count to an ostream. + static void DescribeActualCallCountTo(int actual_call_count, + ::std::ostream* os); + + private: + std::shared_ptr impl_; +}; + +// Creates a cardinality that allows at least n calls. +GTEST_API_ Cardinality AtLeast(int n); + +// Creates a cardinality that allows at most n calls. +GTEST_API_ Cardinality AtMost(int n); + +// Creates a cardinality that allows any number of calls. +GTEST_API_ Cardinality AnyNumber(); + +// Creates a cardinality that allows between min and max calls. +GTEST_API_ Cardinality Between(int min, int max); + +// Creates a cardinality that allows exactly n calls. +GTEST_API_ Cardinality Exactly(int n); + +// Creates a cardinality from its implementation. +inline Cardinality MakeCardinality(const CardinalityInterface* c) { + return Cardinality(c); +} + +} // namespace testing + +GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 + +#endif // GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_ diff --git a/build/_deps/googletest-src/googlemock/include/gmock/gmock-function-mocker.h b/build/_deps/googletest-src/googlemock/include/gmock/gmock-function-mocker.h new file mode 100644 index 0000000..0fc6f6f --- /dev/null +++ b/build/_deps/googletest-src/googlemock/include/gmock/gmock-function-mocker.h @@ -0,0 +1,479 @@ +// Copyright 2007, 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. + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements MOCK_METHOD. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GOOGLEMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_FUNCTION_MOCKER_H_ // NOLINT +#define GOOGLEMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_FUNCTION_MOCKER_H_ // NOLINT + +#include // IWYU pragma: keep +#include // IWYU pragma: keep + +#include "gmock/gmock-spec-builders.h" +#include "gmock/internal/gmock-internal-utils.h" +#include "gmock/internal/gmock-pp.h" + +namespace testing { +namespace internal { +template +using identity_t = T; + +template +struct ThisRefAdjuster { + template + using AdjustT = typename std::conditional< + std::is_const::type>::value, + typename std::conditional::value, + const T&, const T&&>::type, + typename std::conditional::value, T&, + T&&>::type>::type; + + template + static AdjustT Adjust(const MockType& mock) { + return static_cast>(const_cast(mock)); + } +}; + +} // namespace internal + +// The style guide prohibits "using" statements in a namespace scope +// inside a header file. However, the FunctionMocker class template +// is meant to be defined in the ::testing namespace. The following +// line is just a trick for working around a bug in MSVC 8.0, which +// cannot handle it if we define FunctionMocker in ::testing. +using internal::FunctionMocker; +} // namespace testing + +#define MOCK_METHOD(...) \ + GMOCK_PP_VARIADIC_CALL(GMOCK_INTERNAL_MOCK_METHOD_ARG_, __VA_ARGS__) + +#define GMOCK_INTERNAL_MOCK_METHOD_ARG_1(...) \ + GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) + +#define GMOCK_INTERNAL_MOCK_METHOD_ARG_2(...) \ + GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) + +#define GMOCK_INTERNAL_MOCK_METHOD_ARG_3(_Ret, _MethodName, _Args) \ + GMOCK_INTERNAL_MOCK_METHOD_ARG_4(_Ret, _MethodName, _Args, ()) + +#define GMOCK_INTERNAL_MOCK_METHOD_ARG_4(_Ret, _MethodName, _Args, _Spec) \ + GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Args); \ + GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Spec); \ + GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE( \ + GMOCK_PP_NARG0 _Args, GMOCK_INTERNAL_SIGNATURE(_Ret, _Args)); \ + GMOCK_INTERNAL_ASSERT_VALID_SPEC(_Spec) \ + GMOCK_INTERNAL_MOCK_METHOD_IMPL( \ + GMOCK_PP_NARG0 _Args, _MethodName, GMOCK_INTERNAL_HAS_CONST(_Spec), \ + GMOCK_INTERNAL_HAS_OVERRIDE(_Spec), GMOCK_INTERNAL_HAS_FINAL(_Spec), \ + GMOCK_INTERNAL_GET_NOEXCEPT_SPEC(_Spec), \ + GMOCK_INTERNAL_GET_CALLTYPE(_Spec), GMOCK_INTERNAL_GET_REF_SPEC(_Spec), \ + (GMOCK_INTERNAL_SIGNATURE(_Ret, _Args))) + +#define GMOCK_INTERNAL_MOCK_METHOD_ARG_5(...) \ + GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) + +#define GMOCK_INTERNAL_MOCK_METHOD_ARG_6(...) \ + GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) + +#define GMOCK_INTERNAL_MOCK_METHOD_ARG_7(...) \ + GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) + +#define GMOCK_INTERNAL_WRONG_ARITY(...) \ + static_assert( \ + false, \ + "MOCK_METHOD must be called with 3 or 4 arguments. _Ret, " \ + "_MethodName, _Args and optionally _Spec. _Args and _Spec must be " \ + "enclosed in parentheses. If _Ret is a type with unprotected commas, " \ + "it must also be enclosed in parentheses.") + +#define GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Tuple) \ + static_assert( \ + GMOCK_PP_IS_ENCLOSED_PARENS(_Tuple), \ + GMOCK_PP_STRINGIZE(_Tuple) " should be enclosed in parentheses.") + +#define GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE(_N, ...) \ + static_assert( \ + std::is_function<__VA_ARGS__>::value, \ + "Signature must be a function type, maybe return type contains " \ + "unprotected comma."); \ + static_assert( \ + ::testing::tuple_size::ArgumentTuple>::value == _N, \ + "This method does not take " GMOCK_PP_STRINGIZE( \ + _N) " arguments. Parenthesize all types with unprotected commas.") + +#define GMOCK_INTERNAL_ASSERT_VALID_SPEC(_Spec) \ + GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_ASSERT_VALID_SPEC_ELEMENT, ~, _Spec) + +#define GMOCK_INTERNAL_MOCK_METHOD_IMPL(_N, _MethodName, _Constness, \ + _Override, _Final, _NoexceptSpec, \ + _CallType, _RefSpec, _Signature) \ + typename ::testing::internal::Function::Result \ + GMOCK_INTERNAL_EXPAND(_CallType) \ + _MethodName(GMOCK_PP_REPEAT(GMOCK_INTERNAL_PARAMETER, _Signature, _N)) \ + GMOCK_PP_IF(_Constness, const, ) _RefSpec _NoexceptSpec \ + GMOCK_PP_IF(_Override, override, ) GMOCK_PP_IF(_Final, final, ) { \ + GMOCK_MOCKER_(_N, _Constness, _MethodName) \ + .SetOwnerAndName(this, #_MethodName); \ + return GMOCK_MOCKER_(_N, _Constness, _MethodName) \ + .Invoke(GMOCK_PP_REPEAT(GMOCK_INTERNAL_FORWARD_ARG, _Signature, _N)); \ + } \ + ::testing::MockSpec gmock_##_MethodName( \ + GMOCK_PP_REPEAT(GMOCK_INTERNAL_MATCHER_PARAMETER, _Signature, _N)) \ + GMOCK_PP_IF(_Constness, const, ) _RefSpec { \ + GMOCK_MOCKER_(_N, _Constness, _MethodName).RegisterOwner(this); \ + return GMOCK_MOCKER_(_N, _Constness, _MethodName) \ + .With(GMOCK_PP_REPEAT(GMOCK_INTERNAL_MATCHER_ARGUMENT, , _N)); \ + } \ + ::testing::MockSpec gmock_##_MethodName( \ + const ::testing::internal::WithoutMatchers&, \ + GMOCK_PP_IF(_Constness, const, )::testing::internal::Function< \ + GMOCK_PP_REMOVE_PARENS(_Signature)>*) const _RefSpec _NoexceptSpec { \ + return ::testing::internal::ThisRefAdjuster::Adjust(*this) \ + .gmock_##_MethodName(GMOCK_PP_REPEAT( \ + GMOCK_INTERNAL_A_MATCHER_ARGUMENT, _Signature, _N)); \ + } \ + mutable ::testing::FunctionMocker \ + GMOCK_MOCKER_(_N, _Constness, _MethodName) + +#define GMOCK_INTERNAL_EXPAND(...) __VA_ARGS__ + +// Five Valid modifiers. +#define GMOCK_INTERNAL_HAS_CONST(_Tuple) \ + GMOCK_PP_HAS_COMMA(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_DETECT_CONST, ~, _Tuple)) + +#define GMOCK_INTERNAL_HAS_OVERRIDE(_Tuple) \ + GMOCK_PP_HAS_COMMA( \ + GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_DETECT_OVERRIDE, ~, _Tuple)) + +#define GMOCK_INTERNAL_HAS_FINAL(_Tuple) \ + GMOCK_PP_HAS_COMMA(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_DETECT_FINAL, ~, _Tuple)) + +#define GMOCK_INTERNAL_GET_NOEXCEPT_SPEC(_Tuple) \ + GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_NOEXCEPT_SPEC_IF_NOEXCEPT, ~, _Tuple) + +#define GMOCK_INTERNAL_NOEXCEPT_SPEC_IF_NOEXCEPT(_i, _, _elem) \ + GMOCK_PP_IF( \ + GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_NOEXCEPT(_i, _, _elem)), \ + _elem, ) + +#define GMOCK_INTERNAL_GET_REF_SPEC(_Tuple) \ + GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_REF_SPEC_IF_REF, ~, _Tuple) + +#define GMOCK_INTERNAL_REF_SPEC_IF_REF(_i, _, _elem) \ + GMOCK_PP_IF(GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_REF(_i, _, _elem)), \ + GMOCK_PP_CAT(GMOCK_INTERNAL_UNPACK_, _elem), ) + +#define GMOCK_INTERNAL_GET_CALLTYPE(_Tuple) \ + GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_GET_CALLTYPE_IMPL, ~, _Tuple) + +#define GMOCK_INTERNAL_ASSERT_VALID_SPEC_ELEMENT(_i, _, _elem) \ + static_assert( \ + (GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_CONST(_i, _, _elem)) + \ + GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_OVERRIDE(_i, _, _elem)) + \ + GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_FINAL(_i, _, _elem)) + \ + GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_NOEXCEPT(_i, _, _elem)) + \ + GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_REF(_i, _, _elem)) + \ + GMOCK_INTERNAL_IS_CALLTYPE(_elem)) == 1, \ + GMOCK_PP_STRINGIZE( \ + _elem) " cannot be recognized as a valid specification modifier."); + +// Modifiers implementation. +#define GMOCK_INTERNAL_DETECT_CONST(_i, _, _elem) \ + GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_CONST_I_, _elem) + +#define GMOCK_INTERNAL_DETECT_CONST_I_const , + +#define GMOCK_INTERNAL_DETECT_OVERRIDE(_i, _, _elem) \ + GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_OVERRIDE_I_, _elem) + +#define GMOCK_INTERNAL_DETECT_OVERRIDE_I_override , + +#define GMOCK_INTERNAL_DETECT_FINAL(_i, _, _elem) \ + GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_FINAL_I_, _elem) + +#define GMOCK_INTERNAL_DETECT_FINAL_I_final , + +#define GMOCK_INTERNAL_DETECT_NOEXCEPT(_i, _, _elem) \ + GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_NOEXCEPT_I_, _elem) + +#define GMOCK_INTERNAL_DETECT_NOEXCEPT_I_noexcept , + +#define GMOCK_INTERNAL_DETECT_REF(_i, _, _elem) \ + GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_REF_I_, _elem) + +#define GMOCK_INTERNAL_DETECT_REF_I_ref , + +#define GMOCK_INTERNAL_UNPACK_ref(x) x + +#define GMOCK_INTERNAL_GET_CALLTYPE_IMPL(_i, _, _elem) \ + GMOCK_PP_IF(GMOCK_INTERNAL_IS_CALLTYPE(_elem), \ + GMOCK_INTERNAL_GET_VALUE_CALLTYPE, GMOCK_PP_EMPTY) \ + (_elem) + +// TODO(iserna): GMOCK_INTERNAL_IS_CALLTYPE and +// GMOCK_INTERNAL_GET_VALUE_CALLTYPE needed more expansions to work on windows +// maybe they can be simplified somehow. +#define GMOCK_INTERNAL_IS_CALLTYPE(_arg) \ + GMOCK_INTERNAL_IS_CALLTYPE_I( \ + GMOCK_PP_CAT(GMOCK_INTERNAL_IS_CALLTYPE_HELPER_, _arg)) +#define GMOCK_INTERNAL_IS_CALLTYPE_I(_arg) GMOCK_PP_IS_ENCLOSED_PARENS(_arg) + +#define GMOCK_INTERNAL_GET_VALUE_CALLTYPE(_arg) \ + GMOCK_INTERNAL_GET_VALUE_CALLTYPE_I( \ + GMOCK_PP_CAT(GMOCK_INTERNAL_IS_CALLTYPE_HELPER_, _arg)) +#define GMOCK_INTERNAL_GET_VALUE_CALLTYPE_I(_arg) \ + GMOCK_PP_IDENTITY _arg + +#define GMOCK_INTERNAL_IS_CALLTYPE_HELPER_Calltype + +// Note: The use of `identity_t` here allows _Ret to represent return types that +// would normally need to be specified in a different way. For example, a method +// returning a function pointer must be written as +// +// fn_ptr_return_t (*method(method_args_t...))(fn_ptr_args_t...) +// +// But we only support placing the return type at the beginning. To handle this, +// we wrap all calls in identity_t, so that a declaration will be expanded to +// +// identity_t method(method_args_t...) +// +// This allows us to work around the syntactic oddities of function/method +// types. +#define GMOCK_INTERNAL_SIGNATURE(_Ret, _Args) \ + ::testing::internal::identity_t( \ + GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_GET_TYPE, _, _Args)) + +#define GMOCK_INTERNAL_GET_TYPE(_i, _, _elem) \ + GMOCK_PP_COMMA_IF(_i) \ + GMOCK_PP_IF(GMOCK_PP_IS_BEGIN_PARENS(_elem), GMOCK_PP_REMOVE_PARENS, \ + GMOCK_PP_IDENTITY) \ + (_elem) + +#define GMOCK_INTERNAL_PARAMETER(_i, _Signature, _) \ + GMOCK_PP_COMMA_IF(_i) \ + GMOCK_INTERNAL_ARG_O(_i, GMOCK_PP_REMOVE_PARENS(_Signature)) \ + gmock_a##_i + +#define GMOCK_INTERNAL_FORWARD_ARG(_i, _Signature, _) \ + GMOCK_PP_COMMA_IF(_i) \ + ::std::forward(gmock_a##_i) + +#define GMOCK_INTERNAL_MATCHER_PARAMETER(_i, _Signature, _) \ + GMOCK_PP_COMMA_IF(_i) \ + GMOCK_INTERNAL_MATCHER_O(_i, GMOCK_PP_REMOVE_PARENS(_Signature)) \ + gmock_a##_i + +#define GMOCK_INTERNAL_MATCHER_ARGUMENT(_i, _1, _2) \ + GMOCK_PP_COMMA_IF(_i) \ + gmock_a##_i + +#define GMOCK_INTERNAL_A_MATCHER_ARGUMENT(_i, _Signature, _) \ + GMOCK_PP_COMMA_IF(_i) \ + ::testing::A() + +#define GMOCK_INTERNAL_ARG_O(_i, ...) \ + typename ::testing::internal::Function<__VA_ARGS__>::template Arg<_i>::type + +#define GMOCK_INTERNAL_MATCHER_O(_i, ...) \ + const ::testing::Matcher::template Arg<_i>::type>& + +#define MOCK_METHOD0(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 0, __VA_ARGS__) +#define MOCK_METHOD1(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 1, __VA_ARGS__) +#define MOCK_METHOD2(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 2, __VA_ARGS__) +#define MOCK_METHOD3(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 3, __VA_ARGS__) +#define MOCK_METHOD4(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 4, __VA_ARGS__) +#define MOCK_METHOD5(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 5, __VA_ARGS__) +#define MOCK_METHOD6(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 6, __VA_ARGS__) +#define MOCK_METHOD7(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 7, __VA_ARGS__) +#define MOCK_METHOD8(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 8, __VA_ARGS__) +#define MOCK_METHOD9(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 9, __VA_ARGS__) +#define MOCK_METHOD10(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, , m, 10, __VA_ARGS__) + +#define MOCK_CONST_METHOD0(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 0, __VA_ARGS__) +#define MOCK_CONST_METHOD1(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 1, __VA_ARGS__) +#define MOCK_CONST_METHOD2(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 2, __VA_ARGS__) +#define MOCK_CONST_METHOD3(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 3, __VA_ARGS__) +#define MOCK_CONST_METHOD4(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 4, __VA_ARGS__) +#define MOCK_CONST_METHOD5(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 5, __VA_ARGS__) +#define MOCK_CONST_METHOD6(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 6, __VA_ARGS__) +#define MOCK_CONST_METHOD7(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 7, __VA_ARGS__) +#define MOCK_CONST_METHOD8(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 8, __VA_ARGS__) +#define MOCK_CONST_METHOD9(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 9, __VA_ARGS__) +#define MOCK_CONST_METHOD10(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 10, __VA_ARGS__) + +#define MOCK_METHOD0_T(m, ...) MOCK_METHOD0(m, __VA_ARGS__) +#define MOCK_METHOD1_T(m, ...) MOCK_METHOD1(m, __VA_ARGS__) +#define MOCK_METHOD2_T(m, ...) MOCK_METHOD2(m, __VA_ARGS__) +#define MOCK_METHOD3_T(m, ...) MOCK_METHOD3(m, __VA_ARGS__) +#define MOCK_METHOD4_T(m, ...) MOCK_METHOD4(m, __VA_ARGS__) +#define MOCK_METHOD5_T(m, ...) MOCK_METHOD5(m, __VA_ARGS__) +#define MOCK_METHOD6_T(m, ...) MOCK_METHOD6(m, __VA_ARGS__) +#define MOCK_METHOD7_T(m, ...) MOCK_METHOD7(m, __VA_ARGS__) +#define MOCK_METHOD8_T(m, ...) MOCK_METHOD8(m, __VA_ARGS__) +#define MOCK_METHOD9_T(m, ...) MOCK_METHOD9(m, __VA_ARGS__) +#define MOCK_METHOD10_T(m, ...) MOCK_METHOD10(m, __VA_ARGS__) + +#define MOCK_CONST_METHOD0_T(m, ...) MOCK_CONST_METHOD0(m, __VA_ARGS__) +#define MOCK_CONST_METHOD1_T(m, ...) MOCK_CONST_METHOD1(m, __VA_ARGS__) +#define MOCK_CONST_METHOD2_T(m, ...) MOCK_CONST_METHOD2(m, __VA_ARGS__) +#define MOCK_CONST_METHOD3_T(m, ...) MOCK_CONST_METHOD3(m, __VA_ARGS__) +#define MOCK_CONST_METHOD4_T(m, ...) MOCK_CONST_METHOD4(m, __VA_ARGS__) +#define MOCK_CONST_METHOD5_T(m, ...) MOCK_CONST_METHOD5(m, __VA_ARGS__) +#define MOCK_CONST_METHOD6_T(m, ...) MOCK_CONST_METHOD6(m, __VA_ARGS__) +#define MOCK_CONST_METHOD7_T(m, ...) MOCK_CONST_METHOD7(m, __VA_ARGS__) +#define MOCK_CONST_METHOD8_T(m, ...) MOCK_CONST_METHOD8(m, __VA_ARGS__) +#define MOCK_CONST_METHOD9_T(m, ...) MOCK_CONST_METHOD9(m, __VA_ARGS__) +#define MOCK_CONST_METHOD10_T(m, ...) MOCK_CONST_METHOD10(m, __VA_ARGS__) + +#define MOCK_METHOD0_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 0, __VA_ARGS__) +#define MOCK_METHOD1_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 1, __VA_ARGS__) +#define MOCK_METHOD2_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 2, __VA_ARGS__) +#define MOCK_METHOD3_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 3, __VA_ARGS__) +#define MOCK_METHOD4_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 4, __VA_ARGS__) +#define MOCK_METHOD5_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 5, __VA_ARGS__) +#define MOCK_METHOD6_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 6, __VA_ARGS__) +#define MOCK_METHOD7_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 7, __VA_ARGS__) +#define MOCK_METHOD8_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 8, __VA_ARGS__) +#define MOCK_METHOD9_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 9, __VA_ARGS__) +#define MOCK_METHOD10_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 10, __VA_ARGS__) + +#define MOCK_CONST_METHOD0_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 0, __VA_ARGS__) +#define MOCK_CONST_METHOD1_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 1, __VA_ARGS__) +#define MOCK_CONST_METHOD2_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 2, __VA_ARGS__) +#define MOCK_CONST_METHOD3_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 3, __VA_ARGS__) +#define MOCK_CONST_METHOD4_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 4, __VA_ARGS__) +#define MOCK_CONST_METHOD5_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 5, __VA_ARGS__) +#define MOCK_CONST_METHOD6_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 6, __VA_ARGS__) +#define MOCK_CONST_METHOD7_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 7, __VA_ARGS__) +#define MOCK_CONST_METHOD8_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 8, __VA_ARGS__) +#define MOCK_CONST_METHOD9_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 9, __VA_ARGS__) +#define MOCK_CONST_METHOD10_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 10, __VA_ARGS__) + +#define MOCK_METHOD0_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD0_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD1_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD1_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD2_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD2_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD3_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD3_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD4_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD4_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD5_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD5_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD6_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD6_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD7_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD7_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD8_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD8_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD9_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD9_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD10_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD10_WITH_CALLTYPE(ct, m, __VA_ARGS__) + +#define MOCK_CONST_METHOD0_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD0_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD1_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD1_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD2_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD2_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD3_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD3_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD4_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD4_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD5_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD5_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD6_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD6_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD7_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD7_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD8_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD8_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD9_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD9_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD10_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD10_WITH_CALLTYPE(ct, m, __VA_ARGS__) + +#define GMOCK_INTERNAL_MOCK_METHODN(constness, ct, Method, args_num, ...) \ + GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE( \ + args_num, ::testing::internal::identity_t<__VA_ARGS__>); \ + GMOCK_INTERNAL_MOCK_METHOD_IMPL( \ + args_num, Method, GMOCK_PP_NARG0(constness), 0, 0, , ct, , \ + (::testing::internal::identity_t<__VA_ARGS__>)) + +#define GMOCK_MOCKER_(arity, constness, Method) \ + GTEST_CONCAT_TOKEN_(gmock##constness##arity##_##Method##_, __LINE__) + +#endif // GOOGLEMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_FUNCTION_MOCKER_H_ diff --git a/build/_deps/googletest-src/googlemock/include/gmock/gmock-matchers.h b/build/_deps/googletest-src/googlemock/include/gmock/gmock-matchers.h new file mode 100644 index 0000000..86be9c1 --- /dev/null +++ b/build/_deps/googletest-src/googlemock/include/gmock/gmock-matchers.h @@ -0,0 +1,5392 @@ +// Copyright 2007, 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. + + +// Google Mock - a framework for writing C++ mock classes. +// +// The MATCHER* family of macros can be used in a namespace scope to +// define custom matchers easily. +// +// Basic Usage +// =========== +// +// The syntax +// +// MATCHER(name, description_string) { statements; } +// +// defines a matcher with the given name that executes the statements, +// which must return a bool to indicate if the match succeeds. Inside +// the statements, you can refer to the value being matched by 'arg', +// and refer to its type by 'arg_type'. +// +// The description string documents what the matcher does, and is used +// to generate the failure message when the match fails. Since a +// MATCHER() is usually defined in a header file shared by multiple +// C++ source files, we require the description to be a C-string +// literal to avoid possible side effects. It can be empty, in which +// case we'll use the sequence of words in the matcher name as the +// description. +// +// For example: +// +// MATCHER(IsEven, "") { return (arg % 2) == 0; } +// +// allows you to write +// +// // Expects mock_foo.Bar(n) to be called where n is even. +// EXPECT_CALL(mock_foo, Bar(IsEven())); +// +// or, +// +// // Verifies that the value of some_expression is even. +// EXPECT_THAT(some_expression, IsEven()); +// +// If the above assertion fails, it will print something like: +// +// Value of: some_expression +// Expected: is even +// Actual: 7 +// +// where the description "is even" is automatically calculated from the +// matcher name IsEven. +// +// Argument Type +// ============= +// +// Note that the type of the value being matched (arg_type) is +// determined by the context in which you use the matcher and is +// supplied to you by the compiler, so you don't need to worry about +// declaring it (nor can you). This allows the matcher to be +// polymorphic. For example, IsEven() can be used to match any type +// where the value of "(arg % 2) == 0" can be implicitly converted to +// a bool. In the "Bar(IsEven())" example above, if method Bar() +// takes an int, 'arg_type' will be int; if it takes an unsigned long, +// 'arg_type' will be unsigned long; and so on. +// +// Parameterizing Matchers +// ======================= +// +// Sometimes you'll want to parameterize the matcher. For that you +// can use another macro: +// +// MATCHER_P(name, param_name, description_string) { statements; } +// +// For example: +// +// MATCHER_P(HasAbsoluteValue, value, "") { return abs(arg) == value; } +// +// will allow you to write: +// +// EXPECT_THAT(Blah("a"), HasAbsoluteValue(n)); +// +// which may lead to this message (assuming n is 10): +// +// Value of: Blah("a") +// Expected: has absolute value 10 +// Actual: -9 +// +// Note that both the matcher description and its parameter are +// printed, making the message human-friendly. +// +// In the matcher definition body, you can write 'foo_type' to +// reference the type of a parameter named 'foo'. For example, in the +// body of MATCHER_P(HasAbsoluteValue, value) above, you can write +// 'value_type' to refer to the type of 'value'. +// +// We also provide MATCHER_P2, MATCHER_P3, ..., up to MATCHER_P$n to +// support multi-parameter matchers. +// +// Describing Parameterized Matchers +// ================================= +// +// The last argument to MATCHER*() is a string-typed expression. The +// expression can reference all of the matcher's parameters and a +// special bool-typed variable named 'negation'. When 'negation' is +// false, the expression should evaluate to the matcher's description; +// otherwise it should evaluate to the description of the negation of +// the matcher. For example, +// +// using testing::PrintToString; +// +// MATCHER_P2(InClosedRange, low, hi, +// std::string(negation ? "is not" : "is") + " in range [" + +// PrintToString(low) + ", " + PrintToString(hi) + "]") { +// return low <= arg && arg <= hi; +// } +// ... +// EXPECT_THAT(3, InClosedRange(4, 6)); +// EXPECT_THAT(3, Not(InClosedRange(2, 4))); +// +// would generate two failures that contain the text: +// +// Expected: is in range [4, 6] +// ... +// Expected: is not in range [2, 4] +// +// If you specify "" as the description, the failure message will +// contain the sequence of words in the matcher name followed by the +// parameter values printed as a tuple. For example, +// +// MATCHER_P2(InClosedRange, low, hi, "") { ... } +// ... +// EXPECT_THAT(3, InClosedRange(4, 6)); +// EXPECT_THAT(3, Not(InClosedRange(2, 4))); +// +// would generate two failures that contain the text: +// +// Expected: in closed range (4, 6) +// ... +// Expected: not (in closed range (2, 4)) +// +// Types of Matcher Parameters +// =========================== +// +// For the purpose of typing, you can view +// +// MATCHER_Pk(Foo, p1, ..., pk, description_string) { ... } +// +// as shorthand for +// +// template +// FooMatcherPk +// Foo(p1_type p1, ..., pk_type pk) { ... } +// +// When you write Foo(v1, ..., vk), the compiler infers the types of +// the parameters v1, ..., and vk for you. If you are not happy with +// the result of the type inference, you can specify the types by +// explicitly instantiating the template, as in Foo(5, +// false). As said earlier, you don't get to (or need to) specify +// 'arg_type' as that's determined by the context in which the matcher +// is used. You can assign the result of expression Foo(p1, ..., pk) +// to a variable of type FooMatcherPk. This +// can be useful when composing matchers. +// +// While you can instantiate a matcher template with reference types, +// passing the parameters by pointer usually makes your code more +// readable. If, however, you still want to pass a parameter by +// reference, be aware that in the failure message generated by the +// matcher you will see the value of the referenced object but not its +// address. +// +// Explaining Match Results +// ======================== +// +// Sometimes the matcher description alone isn't enough to explain why +// the match has failed or succeeded. For example, when expecting a +// long string, it can be very helpful to also print the diff between +// the expected string and the actual one. To achieve that, you can +// optionally stream additional information to a special variable +// named result_listener, whose type is a pointer to class +// MatchResultListener: +// +// MATCHER_P(EqualsLongString, str, "") { +// if (arg == str) return true; +// +// *result_listener << "the difference: " +/// << DiffStrings(str, arg); +// return false; +// } +// +// Overloading Matchers +// ==================== +// +// You can overload matchers with different numbers of parameters: +// +// MATCHER_P(Blah, a, description_string1) { ... } +// MATCHER_P2(Blah, a, b, description_string2) { ... } +// +// Caveats +// ======= +// +// When defining a new matcher, you should also consider implementing +// MatcherInterface or using MakePolymorphicMatcher(). These +// approaches require more work than the MATCHER* macros, but also +// give you more control on the types of the value being matched and +// the matcher parameters, which may leads to better compiler error +// messages when the matcher is used wrong. They also allow +// overloading matchers based on parameter types (as opposed to just +// based on the number of parameters). +// +// MATCHER*() can only be used in a namespace scope as templates cannot be +// declared inside of a local class. +// +// More Information +// ================ +// +// To learn more about using these macros, please search for 'MATCHER' +// on +// https://github.com/google/googletest/blob/master/docs/gmock_cook_book.md +// +// This file also implements some commonly used argument matchers. More +// matchers can be defined by the user implementing the +// MatcherInterface interface if necessary. +// +// See googletest/include/gtest/gtest-matchers.h for the definition of class +// Matcher, class MatcherInterface, and others. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_MATCHERS_H_ +#define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_MATCHERS_H_ + +#include +#include +#include +#include +#include +#include +#include // NOLINT +#include +#include +#include +#include +#include + +#include "gmock/internal/gmock-internal-utils.h" +#include "gmock/internal/gmock-port.h" +#include "gmock/internal/gmock-pp.h" +#include "gtest/gtest.h" + +// MSVC warning C5046 is new as of VS2017 version 15.8. +#if defined(_MSC_VER) && _MSC_VER >= 1915 +#define GMOCK_MAYBE_5046_ 5046 +#else +#define GMOCK_MAYBE_5046_ +#endif + +GTEST_DISABLE_MSC_WARNINGS_PUSH_( + 4251 GMOCK_MAYBE_5046_ /* class A needs to have dll-interface to be used by + clients of class B */ + /* Symbol involving type with internal linkage not defined */) + +namespace testing { + +// To implement a matcher Foo for type T, define: +// 1. a class FooMatcherImpl that implements the +// MatcherInterface interface, and +// 2. a factory function that creates a Matcher object from a +// FooMatcherImpl*. +// +// The two-level delegation design makes it possible to allow a user +// to write "v" instead of "Eq(v)" where a Matcher is expected, which +// is impossible if we pass matchers by pointers. It also eases +// ownership management as Matcher objects can now be copied like +// plain values. + +// A match result listener that stores the explanation in a string. +class StringMatchResultListener : public MatchResultListener { + public: + StringMatchResultListener() : MatchResultListener(&ss_) {} + + // Returns the explanation accumulated so far. + std::string str() const { return ss_.str(); } + + // Clears the explanation accumulated so far. + void Clear() { ss_.str(""); } + + private: + ::std::stringstream ss_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(StringMatchResultListener); +}; + +// Anything inside the 'internal' namespace IS INTERNAL IMPLEMENTATION +// and MUST NOT BE USED IN USER CODE!!! +namespace internal { + +// The MatcherCastImpl class template is a helper for implementing +// MatcherCast(). We need this helper in order to partially +// specialize the implementation of MatcherCast() (C++ allows +// class/struct templates to be partially specialized, but not +// function templates.). + +// This general version is used when MatcherCast()'s argument is a +// polymorphic matcher (i.e. something that can be converted to a +// Matcher but is not one yet; for example, Eq(value)) or a value (for +// example, "hello"). +template +class MatcherCastImpl { + public: + static Matcher Cast(const M& polymorphic_matcher_or_value) { + // M can be a polymorphic matcher, in which case we want to use + // its conversion operator to create Matcher. Or it can be a value + // that should be passed to the Matcher's constructor. + // + // We can't call Matcher(polymorphic_matcher_or_value) when M is a + // polymorphic matcher because it'll be ambiguous if T has an implicit + // constructor from M (this usually happens when T has an implicit + // constructor from any type). + // + // It won't work to unconditionally implicit_cast + // polymorphic_matcher_or_value to Matcher because it won't trigger + // a user-defined conversion from M to T if one exists (assuming M is + // a value). + return CastImpl(polymorphic_matcher_or_value, + std::is_convertible>{}, + std::is_convertible{}); + } + + private: + template + static Matcher CastImpl(const M& polymorphic_matcher_or_value, + std::true_type /* convertible_to_matcher */, + std::integral_constant) { + // M is implicitly convertible to Matcher, which means that either + // M is a polymorphic matcher or Matcher has an implicit constructor + // from M. In both cases using the implicit conversion will produce a + // matcher. + // + // Even if T has an implicit constructor from M, it won't be called because + // creating Matcher would require a chain of two user-defined conversions + // (first to create T from M and then to create Matcher from T). + return polymorphic_matcher_or_value; + } + + // M can't be implicitly converted to Matcher, so M isn't a polymorphic + // matcher. It's a value of a type implicitly convertible to T. Use direct + // initialization to create a matcher. + static Matcher CastImpl(const M& value, + std::false_type /* convertible_to_matcher */, + std::true_type /* convertible_to_T */) { + return Matcher(ImplicitCast_(value)); + } + + // M can't be implicitly converted to either Matcher or T. Attempt to use + // polymorphic matcher Eq(value) in this case. + // + // Note that we first attempt to perform an implicit cast on the value and + // only fall back to the polymorphic Eq() matcher afterwards because the + // latter calls bool operator==(const Lhs& lhs, const Rhs& rhs) in the end + // which might be undefined even when Rhs is implicitly convertible to Lhs + // (e.g. std::pair vs. std::pair). + // + // We don't define this method inline as we need the declaration of Eq(). + static Matcher CastImpl(const M& value, + std::false_type /* convertible_to_matcher */, + std::false_type /* convertible_to_T */); +}; + +// This more specialized version is used when MatcherCast()'s argument +// is already a Matcher. This only compiles when type T can be +// statically converted to type U. +template +class MatcherCastImpl > { + public: + static Matcher Cast(const Matcher& source_matcher) { + return Matcher(new Impl(source_matcher)); + } + + private: + class Impl : public MatcherInterface { + public: + explicit Impl(const Matcher& source_matcher) + : source_matcher_(source_matcher) {} + + // We delegate the matching logic to the source matcher. + bool MatchAndExplain(T x, MatchResultListener* listener) const override { + using FromType = typename std::remove_cv::type>::type>::type; + using ToType = typename std::remove_cv::type>::type>::type; + // Do not allow implicitly converting base*/& to derived*/&. + static_assert( + // Do not trigger if only one of them is a pointer. That implies a + // regular conversion and not a down_cast. + (std::is_pointer::type>::value != + std::is_pointer::type>::value) || + std::is_same::value || + !std::is_base_of::value, + "Can't implicitly convert from to "); + + // Do the cast to `U` explicitly if necessary. + // Otherwise, let implicit conversions do the trick. + using CastType = + typename std::conditional::value, + T&, U>::type; + + return source_matcher_.MatchAndExplain(static_cast(x), + listener); + } + + void DescribeTo(::std::ostream* os) const override { + source_matcher_.DescribeTo(os); + } + + void DescribeNegationTo(::std::ostream* os) const override { + source_matcher_.DescribeNegationTo(os); + } + + private: + const Matcher source_matcher_; + }; +}; + +// This even more specialized version is used for efficiently casting +// a matcher to its own type. +template +class MatcherCastImpl > { + public: + static Matcher Cast(const Matcher& matcher) { return matcher; } +}; + +// Template specialization for parameterless Matcher. +template +class MatcherBaseImpl { + public: + MatcherBaseImpl() = default; + + template + operator ::testing::Matcher() const { // NOLINT(runtime/explicit) + return ::testing::Matcher(new + typename Derived::template gmock_Impl()); + } +}; + +// Template specialization for Matcher with parameters. +template