From cdcb97c7b4ca1d13b8476a66ba2093b1f47233ce Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 09:58:06 +0000 Subject: [PATCH 1/6] Initial plan From 879256e48b2abe2dc500462bae0ef1d35d016f2c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 10:06:35 +0000 Subject: [PATCH 2/6] Fix iterator equality operators to compare only source and index - Updated operator== to compare source and index (not count) - Updated operator!= using De Morgan's law - Modified operator++ to set index to sentinel value N when reaching end - Changed end() and cend() to use index N instead of head_ - This provides proper iterator semantics where iterators are equal if they point to the same position in the same buffer Co-authored-by: bugparty <1510776+bugparty@users.noreply.github.com> --- RingBuffer.hpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/RingBuffer.hpp b/RingBuffer.hpp index 23fcc39..2e41cbf 100644 --- a/RingBuffer.hpp +++ b/RingBuffer.hpp @@ -64,8 +64,12 @@ namespace buffers { return &((*source_)[index_]); } self_type& operator++() noexcept { - index_ = ++index_ % N; ++count_; + if (count_ >= source_->size()) { + index_ = N; // Set to sentinel value when reaching end + } else { + index_ = ++index_ % N; + } return *this; } self_type operator++(int) noexcept { @@ -92,13 +96,13 @@ namespace buffers { template bool operator==(ring_buffer_iterator const& l, ring_buffer_iterator const& r) noexcept { - return l.source() == r.source() && l.count() == r.count() && l.index() == r.index(); + return l.source() == r.source() && l.index() == r.index(); } template bool operator!=(ring_buffer_iterator const& l, ring_buffer_iterator const& r) noexcept { - return l.source() != r.source() || l.count() != r.count() || l.index() != r.index(); + return l.source() != r.source() || l.index() != r.index(); } } @@ -214,11 +218,11 @@ using std::bool_constant; // Iterator to oldest element. [[nodiscard]] iterator begin() noexcept { return iterator{this, tail_, 0};} // Iterator to one past newest element. - [[nodiscard]] iterator end() noexcept { return iterator{this, head_, size_};} + [[nodiscard]] iterator end() noexcept { return iterator{this, N, size_};} // Const iterator to oldest element. [[nodiscard]] const_iterator cbegin() const noexcept { return const_iterator{this, tail_, 0};} // Const iterator to one past newest element. - [[nodiscard]] const_iterator cend() const noexcept { return const_iterator{this, head_, size_};} + [[nodiscard]] const_iterator cend() const noexcept { return const_iterator{this, N, size_};} // Check if buffer has no elements. [[nodiscard]] bool empty() const noexcept { return size_ == 0; } // Check if buffer is at capacity. From 32b99a4aedb8fa404870a246426a73cc67bc5f92 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 10:08:00 +0000 Subject: [PATCH 3/6] Improve code clarity based on code review - Changed pre-increment expression to clearer form: (index_ + 1) % N - Enhanced comment to clarify sentinel value purpose Co-authored-by: bugparty <1510776+bugparty@users.noreply.github.com> --- RingBuffer.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/RingBuffer.hpp b/RingBuffer.hpp index 2e41cbf..bcb4bdd 100644 --- a/RingBuffer.hpp +++ b/RingBuffer.hpp @@ -66,9 +66,9 @@ namespace buffers { self_type& operator++() noexcept { ++count_; if (count_ >= source_->size()) { - index_ = N; // Set to sentinel value when reaching end + index_ = N; // Set to sentinel value (out of valid range [0, N-1]) when reaching end } else { - index_ = ++index_ % N; + index_ = (index_ + 1) % N; } return *this; } From d49855f332b755007811924f78a571ce080f3d94 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 10:09:59 +0000 Subject: [PATCH 4/6] Changes before error encountered Co-authored-by: bugparty <1510776+bugparty@users.noreply.github.com> --- _codeql_build_dir/CMakeCache.txt | 608 ++ .../CMakeFiles/3.31.6/CMakeCCompiler.cmake | 81 + .../CMakeFiles/3.31.6/CMakeCXXCompiler.cmake | 101 + .../3.31.6/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 15968 bytes .../3.31.6/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 15992 bytes .../CMakeFiles/3.31.6/CMakeSystem.cmake | 15 + .../3.31.6/CompilerIdC/CMakeCCompilerId.c | 904 ++ .../CMakeFiles/3.31.6/CompilerIdC/a.out | Bin 0 -> 16088 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 919 ++ .../CMakeFiles/3.31.6/CompilerIdCXX/a.out | Bin 0 -> 16096 bytes .../CMakeFiles/CMakeConfigureLog.yaml | 598 ++ .../CMakeDirectoryInformation.cmake | 16 + _codeql_build_dir/CMakeFiles/Makefile.cmake | 182 + _codeql_build_dir/CMakeFiles/Makefile2 | 324 + .../RingBufferTest.dir/DependInfo.cmake | 24 + .../CMakeFiles/RingBufferTest.dir/build.make | 121 + .../RingBufferTest.dir/cmake_clean.cmake | 13 + .../RingBufferTest.dir/compiler_depend.make | 2 + .../RingBufferTest.dir/compiler_depend.ts | 2 + .../CMakeFiles/RingBufferTest.dir/depend.make | 2 + .../CMakeFiles/RingBufferTest.dir/flags.make | 10 + .../CMakeFiles/RingBufferTest.dir/link.d | 103 + .../CMakeFiles/RingBufferTest.dir/link.txt | 1 + .../RingBufferTest.dir/progress.make | 3 + .../RingBufferTest.dir/test_main.cpp.o | Bin 0 -> 257584 bytes .../RingBufferTest.dir/test_main.cpp.o.d | 293 + .../CMakeFiles/TargetDirectories.txt | 33 + .../CMakeFiles/cmake.check_cache | 1 + _codeql_build_dir/CMakeFiles/progress.marks | 1 + _codeql_build_dir/CTestTestfile.cmake | 8 + _codeql_build_dir/Makefile | 300 + _codeql_build_dir/RingBufferTest | Bin 0 -> 622856 bytes .../RingBufferTest[1]_include.cmake | 5 + .../RingBufferTest[1]_tests.cmake | 45 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/progress.marks | 1 + .../googletest-build/CTestTestfile.cmake | 7 + .../_deps/googletest-build/Makefile | 203 + .../googletest-build/cmake_install.cmake | 56 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/gmock.dir/DependInfo.cmake | 23 + .../CMakeFiles/gmock.dir/build.make | 117 + .../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 -> 231792 bytes .../CMakeFiles/gmock.dir/src/gmock-all.cc.o.d | 341 + .../gmock_main.dir/DependInfo.cmake | 23 + .../CMakeFiles/gmock_main.dir/build.make | 117 + .../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 -> 2096 bytes .../gmock_main.dir/src/gmock_main.cc.o.d | 336 + .../googlemock/CMakeFiles/progress.marks | 1 + .../googlemock/CTestTestfile.cmake | 7 + .../googletest-build/googlemock/Makefile | 287 + .../googlemock/cmake_install.cmake | 76 + .../CMakeDirectoryInformation.cmake | 16 + .../GTestTargets-release.cmake | 49 + .../GTestTargets.cmake | 139 + .../CMakeFiles/gtest.dir/DependInfo.cmake | 23 + .../CMakeFiles/gtest.dir/build.make | 117 + .../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 -> 879656 bytes .../CMakeFiles/gtest.dir/src/gtest-all.cc.o.d | 362 + .../gtest_main.dir/DependInfo.cmake | 23 + .../CMakeFiles/gtest_main.dir/build.make | 117 + .../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 -> 2200 bytes .../gtest_main.dir/src/gtest_main.cc.o.d | 288 + .../googletest/CMakeFiles/progress.marks | 1 + .../googletest/CTestTestfile.cmake | 6 + .../googletest-build/googletest/Makefile | 287 + .../googletest/cmake_install.cmake | 100 + .../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 + .../_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 + .../_deps/googletest-src/.gitignore | 84 + .../_deps/googletest-src/BUILD.bazel | 190 + .../_deps/googletest-src/CMakeLists.txt | 32 + .../_deps/googletest-src/CONTRIBUTING.md | 130 + .../_deps/googletest-src/CONTRIBUTORS | 63 + .../_deps/googletest-src/LICENSE | 28 + .../_deps/googletest-src/README.md | 140 + .../_deps/googletest-src/WORKSPACE | 24 + .../googletest-src/ci/linux-presubmit.sh | 126 + .../googletest-src/ci/macos-presubmit.sh | 73 + .../_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 + .../_deps/googletest-src/docs/advanced.md | 2318 +++++ .../googletest-src/docs/assets/css/style.scss | 5 + .../docs/community_created_documentation.md | 7 + .../_deps/googletest-src/docs/faq.md | 693 ++ .../googletest-src/docs/gmock_cheat_sheet.md | 241 + .../googletest-src/docs/gmock_cook_book.md | 4301 +++++++++ .../_deps/googletest-src/docs/gmock_faq.md | 390 + .../googletest-src/docs/gmock_for_dummies.md | 700 ++ .../_deps/googletest-src/docs/index.md | 22 + .../_deps/googletest-src/docs/pkgconfig.md | 148 + .../_deps/googletest-src/docs/platforms.md | 35 + .../_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 +++ .../_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 + .../_deps/googletest-src/library.json | 62 + .../_deps/googletest-subbuild/CMakeCache.txt | 117 + .../CMakeFiles/3.31.6/CMakeSystem.cmake | 15 + .../CMakeFiles/CMakeConfigureLog.yaml | 11 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/CMakeRuleHashes.txt | 11 + .../CMakeFiles/Makefile.cmake | 56 + .../googletest-subbuild/CMakeFiles/Makefile2 | 122 + .../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 | 159 + .../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 + .../_deps/googletest-subbuild/Makefile | 162 + .../googletest-subbuild/cmake_install.cmake | 61 + .../download-googletest-populate.cmake | 166 + .../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 | 27 + _codeql_build_dir/cmake_install.cmake | 71 + _codeql_build_dir/lib/libgmock.a | Bin 0 -> 243418 bytes _codeql_build_dir/lib/libgmock_main.a | Bin 0 -> 2238 bytes _codeql_build_dir/lib/libgtest.a | Bin 0 -> 941540 bytes _codeql_build_dir/lib/libgtest_main.a | Bin 0 -> 2342 bytes _codeql_detected_source_root | 1 + 409 files changed, 123402 insertions(+) create mode 100644 _codeql_build_dir/CMakeCache.txt create mode 100644 _codeql_build_dir/CMakeFiles/3.31.6/CMakeCCompiler.cmake create mode 100644 _codeql_build_dir/CMakeFiles/3.31.6/CMakeCXXCompiler.cmake create mode 100755 _codeql_build_dir/CMakeFiles/3.31.6/CMakeDetermineCompilerABI_C.bin create mode 100755 _codeql_build_dir/CMakeFiles/3.31.6/CMakeDetermineCompilerABI_CXX.bin create mode 100644 _codeql_build_dir/CMakeFiles/3.31.6/CMakeSystem.cmake create mode 100644 _codeql_build_dir/CMakeFiles/3.31.6/CompilerIdC/CMakeCCompilerId.c create mode 100755 _codeql_build_dir/CMakeFiles/3.31.6/CompilerIdC/a.out create mode 100644 _codeql_build_dir/CMakeFiles/3.31.6/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100755 _codeql_build_dir/CMakeFiles/3.31.6/CompilerIdCXX/a.out create mode 100644 _codeql_build_dir/CMakeFiles/CMakeConfigureLog.yaml create mode 100644 _codeql_build_dir/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 _codeql_build_dir/CMakeFiles/Makefile.cmake create mode 100644 _codeql_build_dir/CMakeFiles/Makefile2 create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/DependInfo.cmake create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/build.make create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/cmake_clean.cmake create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/compiler_depend.make create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/compiler_depend.ts create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/depend.make create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/flags.make create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/link.d create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/link.txt create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/progress.make create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/test_main.cpp.o create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/test_main.cpp.o.d create mode 100644 _codeql_build_dir/CMakeFiles/TargetDirectories.txt create mode 100644 _codeql_build_dir/CMakeFiles/cmake.check_cache create mode 100644 _codeql_build_dir/CMakeFiles/progress.marks create mode 100644 _codeql_build_dir/CTestTestfile.cmake create mode 100644 _codeql_build_dir/Makefile create mode 100755 _codeql_build_dir/RingBufferTest create mode 100644 _codeql_build_dir/RingBufferTest[1]_include.cmake create mode 100644 _codeql_build_dir/RingBufferTest[1]_tests.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/CMakeFiles/progress.marks create mode 100644 _codeql_build_dir/_deps/googletest-build/CTestTestfile.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/Makefile create mode 100644 _codeql_build_dir/_deps/googletest-build/cmake_install.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean_target.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.ts create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/flags.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/link.txt create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/progress.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o.d create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/DependInfo.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean_target.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.ts create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/flags.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/link.txt create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/progress.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o.d create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/progress.marks create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CTestTestfile.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/Makefile create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/cmake_install.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets-release.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean_target.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.ts create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/flags.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/link.txt create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/progress.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o.d create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/DependInfo.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean_target.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.ts create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/flags.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/link.txt create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/progress.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o.d create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/progress.marks create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CTestTestfile.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/Makefile create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/cmake_install.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/generated/GTestConfig.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/generated/GTestConfigVersion.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/generated/gmock.pc create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/generated/gmock_main.pc create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/generated/gtest.pc create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/generated/gtest_main.pc create mode 100644 _codeql_build_dir/_deps/googletest-src/.clang-format create mode 100644 _codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/00-bug_report.md create mode 100644 _codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/10-feature_request.md create mode 100644 _codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/config.yml create mode 100644 _codeql_build_dir/_deps/googletest-src/.gitignore create mode 100644 _codeql_build_dir/_deps/googletest-src/BUILD.bazel create mode 100644 _codeql_build_dir/_deps/googletest-src/CMakeLists.txt create mode 100644 _codeql_build_dir/_deps/googletest-src/CONTRIBUTING.md create mode 100644 _codeql_build_dir/_deps/googletest-src/CONTRIBUTORS create mode 100644 _codeql_build_dir/_deps/googletest-src/LICENSE create mode 100644 _codeql_build_dir/_deps/googletest-src/README.md create mode 100644 _codeql_build_dir/_deps/googletest-src/WORKSPACE create mode 100644 _codeql_build_dir/_deps/googletest-src/ci/linux-presubmit.sh create mode 100644 _codeql_build_dir/_deps/googletest-src/ci/macos-presubmit.sh create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/_config.yml create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/_data/navigation.yml create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/_layouts/default.html create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/_sass/main.scss create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/advanced.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/assets/css/style.scss create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/community_created_documentation.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/faq.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/gmock_cheat_sheet.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/gmock_cook_book.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/gmock_faq.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/gmock_for_dummies.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/index.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/pkgconfig.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/platforms.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/primer.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/quickstart-bazel.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/quickstart-cmake.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/reference/actions.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/reference/assertions.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/reference/matchers.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/reference/mocking.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/reference/testing.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/samples.md create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/CMakeLists.txt create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/README.md create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/cmake/gmock.pc.in create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/cmake/gmock_main.pc.in create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/docs/README.md create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-cardinalities.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-function-mocker.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-matchers.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-more-actions.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-more-matchers.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-nice-strict.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-spec-builders.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/custom/README.md create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-generated-actions.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-matchers.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-port.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/gmock-internal-utils.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/gmock-port.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/gmock-pp.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/README.md create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/fuse_gmock_files.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/LICENSE create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/README create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/README.cppclean create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/cpp/__init__.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/cpp/ast.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/cpp/gmock_class.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/cpp/gmock_class_test.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/cpp/keywords.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/cpp/tokenize.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/cpp/utils.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/gmock_gen.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/src/gmock-all.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/src/gmock-cardinalities.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/src/gmock-internal-utils.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/src/gmock-matchers.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/src/gmock-spec-builders.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/src/gmock.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/src/gmock_main.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/BUILD.bazel create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-actions_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-cardinalities_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-function-mocker_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-internal-utils_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-matchers_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-more-actions_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-nice-strict_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-port_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-pp-string_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-pp_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-spec-builders_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_all_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_ex_test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_leak_test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_leak_test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_link2_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_link_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_link_test.h create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_output_test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_output_test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_output_test_golden.txt create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_stress_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_test_utils.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/CMakeLists.txt create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/README.md create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/cmake/Config.cmake.in create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/cmake/gtest.pc.in create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/cmake/gtest_main.pc.in create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/cmake/internal_utils.cmake create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/cmake/libgtest.la.in create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/docs/README.md create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-death-test.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-matchers.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-message.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-param-test.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-printers.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-spi.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-test-part.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-typed-test.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest_pred_impl.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest_prod.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/README.md create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-port.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-printers.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-death-test-internal.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-filepath.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-internal.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-param-util.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-port-arch.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-port.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-string.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-type-util.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/prime_tables.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample1.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample1.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample10_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample1_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample2.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample2.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample2_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample3-inl.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample3_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample4.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample4.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample4_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample5_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample6_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample7_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample8_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample9_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/scripts/README.md create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/scripts/common.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/scripts/fuse_gtest_files.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/scripts/gen_gtest_pred_impl.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/scripts/gtest-config.in create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/scripts/release_docs.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/scripts/run_with_path.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/scripts/upload.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/scripts/upload_gtest.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-all.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-death-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-filepath.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-internal-inl.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-matchers.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-port.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-printers.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-test-part.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-typed-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest_main.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/BUILD.bazel create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-break-on-failure-unittest.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-break-on-failure-unittest_.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-catch-exceptions-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-catch-exceptions-test_.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-color-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-color-test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-death-test-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-death-test_ex_test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-env-var-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-env-var-test_.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-failfast-unittest.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-failfast-unittest_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-filepath-test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-filter-unittest.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-filter-unittest_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-global-environment-unittest.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-global-environment-unittest_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-json-outfiles-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-json-output-unittest.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-list-tests-unittest.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-list-tests-unittest_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-listener-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-message-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-options-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-output-test-golden-lin.txt create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-output-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-output-test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-param-test-invalid-name1-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-param-test-invalid-name1-test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-param-test-invalid-name2-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-param-test-invalid-name2-test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-param-test-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-param-test-test.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-param-test2-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-port-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-printers-test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-setuptestsuite-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-setuptestsuite-test_.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-shuffle-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-shuffle-test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-test-part-test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-throw-on-failure-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-throw-on-failure-test_.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-uninitialized-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-uninitialized-test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest-typed-test2_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest-typed-test_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest-typed-test_test.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest-unittest-api_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_all_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_assert_by_exception_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_environment_test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_help_test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_help_test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_json_test_utils.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_list_output_unittest.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_list_output_unittest_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_main_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_no_test_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_pred_impl_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_premature_exit_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_prod_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_repeat_test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_skip_check_output_test.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_skip_environment_check_output_test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_skip_in_environment_setup_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_skip_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_sole_header_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_stress_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_test_macro_stack_footprint_test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_test_utils.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_testbridge_test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_testbridge_test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_throw_on_failure_ex_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_xml_outfile1_test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_xml_outfile2_test_.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_xml_outfiles_test.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_xml_output_unittest.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_xml_output_unittest_.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_xml_test_utils.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/production.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/production.h create mode 100644 _codeql_build_dir/_deps/googletest-src/library.json create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeCache.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/3.31.6/CMakeSystem.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/CMakeConfigureLog.yaml create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/CMakeRuleHashes.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/Makefile.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/Makefile2 create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/TargetDirectories.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/cmake.check_cache create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate-complete create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/DependInfo.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/Labels.json create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/Labels.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/build.make create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/cmake_clean.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/compiler_depend.make create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/compiler_depend.ts create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/progress.make create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/progress.marks create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeLists.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/Makefile create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/cmake_install.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/download-googletest-populate.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/extract-googletest-populate.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-build create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-configure create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-done create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-download create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-install create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-mkdir create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-patch create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-patch-info.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-test create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-update create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-update-info.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-urlinfo.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/verify-googletest-populate.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/release-1.11.0.zip create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/tmp/googletest-populate-cfgcmd.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/tmp/googletest-populate-mkdirs.cmake create mode 100644 _codeql_build_dir/cmake_install.cmake create mode 100644 _codeql_build_dir/lib/libgmock.a create mode 100644 _codeql_build_dir/lib/libgmock_main.a create mode 100644 _codeql_build_dir/lib/libgtest.a create mode 100644 _codeql_build_dir/lib/libgtest_main.a create mode 120000 _codeql_detected_source_root diff --git a/_codeql_build_dir/CMakeCache.txt b/_codeql_build_dir/CMakeCache.txt new file mode 100644 index 0000000..72b49b0 --- /dev/null +++ b/_codeql_build_dir/CMakeCache.txt @@ -0,0 +1,608 @@ +# This is the CMakeCache file. +# For build in directory: /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir +# It was generated by CMake: /usr/local/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 +######################## + +//No help, variable specified on the command line. +BUILD_DOCS:UNINITIALIZED=OFF + +//No help, variable specified on the command line. +BUILD_DOCUMENTATION:UNINITIALIZED=OFF + +//Builds the googlemock subproject +BUILD_GMOCK:BOOL=ON + +//No help, variable specified on the command line. +CATKIN_ENABLE_TESTING:UNINITIALIZED=OFF + +//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=Release + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//CXX compiler +CMAKE_CXX_COMPILER:FILEPATH=/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/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=/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/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=RingBuffer + +//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=ON + +//Directory under which to collect all populated content +FETCHCONTENT_BASE_DIR:PATH=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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 + +//Build RingBuffer tests +RINGBUFFER_BUILD_TESTS:BOOL=ON + +//Value Computed by CMake +RingBuffer_BINARY_DIR:STATIC=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +//Value Computed by CMake +RingBuffer_IS_TOP_LEVEL:STATIC=ON + +//Value Computed by CMake +RingBuffer_SOURCE_DIR:STATIC=/home/runner/work/RingBufferCpp/RingBufferCpp + +//Value Computed by CMake +gmock_BINARY_DIR:STATIC=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build + +//Value Computed by CMake +googletest-distribution_IS_TOP_LEVEL:STATIC=OFF + +//Value Computed by CMake +googletest-distribution_SOURCE_DIR:STATIC=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src + +//Value Computed by CMake +gtest_BINARY_DIR:STATIC=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest + +//Value Computed by CMake +gtest_IS_TOP_LEVEL:STATIC=OFF + +//Value Computed by CMake +gtest_SOURCE_DIR:STATIC=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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; + + +######################## +# 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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir +//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=31 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=6 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/local/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/local/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/local/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 +//Path to cache edit program executable. +CMAKE_EDIT_COMMAND:INTERNAL=/usr/local/bin/ccmake +//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/runner/work/RingBufferCpp/RingBufferCpp +//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/local/share/cmake-3.31 +//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.12][cfound components: Interpreter ][v3.12.3()] +//Details about finding Threads +FIND_PACKAGE_MESSAGE_DETAILS_Threads:INTERNAL=[TRUE][v()] +//linker supports push/pop state +_CMAKE_CXX_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE +//linker supports push/pop state +_CMAKE_C_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE +//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.12 +//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=f811b8a062a8994e96ffe87747bf9bfe +//NumPy reason failure +_Python_NumPy_REASON_FAILURE:INTERNAL= +cmake_package_name:INTERNAL=GTest +generated_dir:INTERNAL=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/_codeql_build_dir/CMakeFiles/3.31.6/CMakeCCompiler.cmake b/_codeql_build_dir/CMakeFiles/3.31.6/CMakeCCompiler.cmake new file mode 100644 index 0000000..9f07061 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/3.31.6/CMakeCCompiler.cmake @@ -0,0 +1,81 @@ +set(CMAKE_C_COMPILER "/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "GNU") +set(CMAKE_C_COMPILER_VERSION "13.3.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_STANDARD_LATEST "23") +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_LINKER_LINK "") +set(CMAKE_LINKER_LLD "") +set(CMAKE_C_COMPILER_LINKER "/usr/bin/ld") +set(CMAKE_C_COMPILER_LINKER_ID "GNU") +set(CMAKE_C_COMPILER_LINKER_VERSION 2.42) +set(CMAKE_C_COMPILER_LINKER_FRONTEND_VARIANT GNU) +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 ) + +# 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/_codeql_build_dir/CMakeFiles/3.31.6/CMakeCXXCompiler.cmake b/_codeql_build_dir/CMakeFiles/3.31.6/CMakeCXXCompiler.cmake new file mode 100644 index 0000000..d143fcd --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/3.31.6/CMakeCXXCompiler.cmake @@ -0,0 +1,101 @@ +set(CMAKE_CXX_COMPILER "/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "13.3.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_STANDARD_LATEST "23") +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_CXX26_COMPILE_FEATURES "") + +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_LINKER_LINK "") +set(CMAKE_LINKER_LLD "") +set(CMAKE_CXX_COMPILER_LINKER "/usr/bin/ld") +set(CMAKE_CXX_COMPILER_LINKER_ID "GNU") +set(CMAKE_CXX_COMPILER_LINKER_VERSION 2.42) +set(CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT GNU) +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 IN ITEMS 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 ) + +# 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 "") +set(CMAKE_CXX_COMPILER_CLANG_RESOURCE_DIR "") + +set(CMAKE_CXX_COMPILER_IMPORT_STD "") +### Imported target for C++23 standard library +set(CMAKE_CXX23_COMPILER_IMPORT_STD_NOT_FOUND_MESSAGE "Unsupported generator: Unix Makefiles") + + + diff --git a/_codeql_build_dir/CMakeFiles/3.31.6/CMakeDetermineCompilerABI_C.bin b/_codeql_build_dir/CMakeFiles/3.31.6/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 0000000000000000000000000000000000000000..87f287194a15f3106a57cf4ff4b57eba7b928fa6 GIT binary patch literal 15968 zcmeHOeT)@X6~FH-3yXZbM+>?F!lqludsjp&cYT^ffv|^f=RcwL^vW;lA6?mR=?>Udz z;caWGF`CSInK}3T?)lw&=ggh=?z}m3IN8%3jYI@Xo%oQI%msUn#8iDkDX3L)E;>^;5MBowd5u`8p;syxdQie6M2)=J#F(dQSPME1vG+#c2~rF!&VH-2z%?3$5y_0o6tMfN`Rr{|s5#?c4IjU4nr!S;BH zu#J79560uzonMcvvFF@|*nHR)!`6{};o`^VcfR<8^A8?6YyTp*aO*=09{ce5a!dN9 zOXu$0yYimHUq1A7WBpU$I;&v&x74V`^P<(jbF<)Iodv%O@VI!Jh$o=nlLJsjTqJxT z6pu^1Q8WhdTLFI;Y(Yr_pw(#S5a3HN%9>(e%u$A5y9J_`po#Myi3)KNbX+vvG){~& z`mbN296w3^254+w(-g3baABG-qXx~QXStr4vz$C2gJYICgY6E^cH=y;BxCGJftYhz#E@BUpXR=I07Dc zUMQTRwA_K|Stp((?0cX8B23??__6ec?@9W8N@Th|1{(=wZYZoh~d^pb$#HW2Y_lQlS2w{A>>_scTGLHVF;fy?l%H~G^uB?3&_OaCof&P`X&ww=)Tiqq3z420N z;_SzaiQgMX|1h<4Ai1%;@pn?j1%<_qPk<+TLxW! z1k2F%{K{l(^$~PDLmK=Y>AyLRYW;O%V#;{-FWZf0r|XQ!bH>^0-co2_Ej7?knN;Iq zK92XuHmnw<+xHkpw?(mNOuXzZG>&hZ3&w@@l}hD826oTYUxT~u$bR5f`$zsC4?-mt z_5g3g(>`>U-X_uX)RUzkgq7 zNNZnDYG9xzX(s!+Qtf@_W^vyh|gS3UanLQfIbEK80g1A8=xPa zs#H#aM!{#QD3SYiiO5(yvSQ)9hLiB%2l17#9RQAeme(~;J~>(g7(T#S2eC=hbl@9p}i&n;sbALLMgN*)1abQOd`AJK3DC zw}NcG^;u3f=k4MB5(?Mgjw9TfO1q8f zUnQHzMa}=`6z7Nkn=Nww&e|{KnjmbX!eTmw zX}=i$&g1X$85O$+U2mgafW&Y3x6SmdVF5tVD-8|lgW^WAx#{K1K};W~P+OjRVDJnc(To zaP921?y);Np${i(yX_q*7@SObzwsBMnRbRTh2638H&taF&&%2~YT;<1)9zjEz4Bj2 z6Vl;vfH?MI!5p#j8OW+PyYA|1?@e_A3NK!mNrMPR*Din{0U!UcMCy*7{*Lw@v%kB0 zcXGfSXzzgkGKD-0@CzjPCwv+6|Lv51^@72ydHpkAJ*W;8)BJ^A9M5@H8novsJ;Eg? z53eJP3O!%&Y<)Oi(nsCGsO@^=J}6ys;H4QSLlB(8CY)^2eZ(q`2t6~Nhc1+c7Z_yC zCv3Oq6!J3+6Y5+$Yav1CI8}r`npHb}xBvyu9)rC+ow{3)??LGH2+gpO4Di`fd^Ob+ zgUiskm2(DRIQSZc4sS&W9p-orrtXaE=S>>8K7vaXzT=bx-*@Bn5mifHE~9=oY`BJD z{%r4cp)U%rZ z&+9tY{Cm#hXFt~W10UCnZ1cL2bu;x896t}>1QhU4na}H3)@5?!{)5N=5Y*!_aeei7 zmVR$}{Z7qP!^`&90(^~ltOGyW!REyy0e&+PSicef+W~%p2&^-K6Bcami2$G1J*@fu z2Hd3Z^kVxo6tD}9ztE_L^ykQAMKGJq(kI&;b07Dn%^ZK#80lkGt$o-8S^I1xndi#h-hBljxK{M)ODDlp%#t8>rio1g~2MFYd@81Kz_JpBEK_gg%6A6;C)8zqqS YfyTLCRf}uq+WaN>!veA}KnR%PpD9X5TL1t6 literal 0 HcmV?d00001 diff --git a/_codeql_build_dir/CMakeFiles/3.31.6/CMakeDetermineCompilerABI_CXX.bin b/_codeql_build_dir/CMakeFiles/3.31.6/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 0000000000000000000000000000000000000000..e90f3f71d98d8b48fdca37fdc4f6d991fd1db519 GIT binary patch literal 15992 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 lrm#WB={^$3kg!$RQ-Ee*hEc8gl>u literal 0 HcmV?d00001 diff --git a/_codeql_build_dir/CMakeFiles/3.31.6/CMakeSystem.cmake b/_codeql_build_dir/CMakeFiles/3.31.6/CMakeSystem.cmake new file mode 100644 index 0000000..b2715a6 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/3.31.6/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-6.11.0-1018-azure") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "6.11.0-1018-azure") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Linux-6.11.0-1018-azure") +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_VERSION "6.11.0-1018-azure") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdC/CMakeCCompilerId.c b/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 0000000..50d95e5 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,904 @@ +#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__) && defined(__ti__) +# define COMPILER_ID "TIClang" + # define COMPILER_VERSION_MAJOR DEC(__ti_major__) + # define COMPILER_VERSION_MINOR DEC(__ti_minor__) + # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) +# define COMPILER_VERSION_INTERNAL DEC(__ti_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(__clang__) && defined(__ti__) +# if defined(__ARM_ARCH) +# define ARCHITECTURE_ID "ARM" + +# 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 "]"; + + + +#define C_STD_99 199901L +#define C_STD_11 201112L +#define C_STD_17 201710L +#define C_STD_23 202311L + +#ifdef __STDC_VERSION__ +# define C_STD __STDC_VERSION__ +#endif + +#if !defined(__STDC__) && !defined(__clang__) +# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) +# define C_VERSION "90" +# else +# define C_VERSION +# endif +#elif C_STD > C_STD_17 +# define C_VERSION "23" +#elif C_STD > C_STD_11 +# define C_VERSION "17" +#elif C_STD > C_STD_99 +# define C_VERSION "11" +#elif C_STD >= C_STD_99 +# 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/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdC/a.out b/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdC/a.out new file mode 100755 index 0000000000000000000000000000000000000000..ecc315e71b4e62a6558ef29ebb804b7c2bdf9e59 GIT binary patch literal 16088 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 & 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__) && defined(__ti__) +# define COMPILER_ID "TIClang" + # define COMPILER_VERSION_MAJOR DEC(__ti_major__) + # define COMPILER_VERSION_MINOR DEC(__ti_minor__) + # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) +# define COMPILER_VERSION_INTERNAL DEC(__ti_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(__clang__) && defined(__ti__) +# if defined(__ARM_ARCH) +# define ARCHITECTURE_ID "ARM" + +# 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 "]"; + + + +#define CXX_STD_98 199711L +#define CXX_STD_11 201103L +#define CXX_STD_14 201402L +#define CXX_STD_17 201703L +#define CXX_STD_20 202002L +#define CXX_STD_23 202302L + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) +# if _MSVC_LANG > CXX_STD_17 +# define CXX_STD _MSVC_LANG +# elif _MSVC_LANG == CXX_STD_17 && defined(__cpp_aggregate_paren_init) +# define CXX_STD CXX_STD_20 +# elif _MSVC_LANG > CXX_STD_14 && __cplusplus > CXX_STD_17 +# define CXX_STD CXX_STD_20 +# elif _MSVC_LANG > CXX_STD_14 +# define CXX_STD CXX_STD_17 +# elif defined(__INTEL_CXX11_MODE__) && defined(__cpp_aggregate_nsdmi) +# define CXX_STD CXX_STD_14 +# elif defined(__INTEL_CXX11_MODE__) +# define CXX_STD CXX_STD_11 +# else +# define CXX_STD CXX_STD_98 +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# if _MSVC_LANG > __cplusplus +# define CXX_STD _MSVC_LANG +# else +# define CXX_STD __cplusplus +# endif +#elif defined(__NVCOMPILER) +# if __cplusplus == CXX_STD_17 && defined(__cpp_aggregate_paren_init) +# define CXX_STD CXX_STD_20 +# else +# define CXX_STD __cplusplus +# endif +#elif defined(__INTEL_COMPILER) || defined(__PGI) +# if __cplusplus == CXX_STD_11 && defined(__cpp_namespace_attributes) +# define CXX_STD CXX_STD_17 +# elif __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi) +# define CXX_STD CXX_STD_14 +# else +# define CXX_STD __cplusplus +# endif +#elif (defined(__IBMCPP__) || defined(__ibmxl__)) && defined(__linux__) +# if __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi) +# define CXX_STD CXX_STD_14 +# else +# define CXX_STD __cplusplus +# endif +#elif __cplusplus == 1 && defined(__GXX_EXPERIMENTAL_CXX0X__) +# define CXX_STD CXX_STD_11 +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_standard_default = "INFO" ":" "standard_default[" +#if CXX_STD > CXX_STD_23 + "26" +#elif CXX_STD > CXX_STD_20 + "23" +#elif CXX_STD > CXX_STD_17 + "20" +#elif CXX_STD > CXX_STD_14 + "17" +#elif CXX_STD > CXX_STD_11 + "14" +#elif CXX_STD >= CXX_STD_11 + "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/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdCXX/a.out b/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdCXX/a.out new file mode 100755 index 0000000000000000000000000000000000000000..c8ced32cf082708045baa23211fbf858c298928d GIT binary patch literal 16096 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 ASpWb4 literal 0 HcmV?d00001 diff --git a/_codeql_build_dir/CMakeFiles/CMakeConfigureLog.yaml b/_codeql_build_dir/CMakeFiles/CMakeConfigureLog.yaml new file mode 100644 index 0000000..4d8999b --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/CMakeConfigureLog.yaml @@ -0,0 +1,598 @@ + +--- +events: + - + kind: "message-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineSystem.cmake:205 (message)" + - "CMakeLists.txt:2 (project)" + message: | + The system is: Linux - 6.11.0-1018-azure - x86_64 + - + kind: "message-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:2 (project)" + message: | + Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. + Compiler: /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdCXX/a.out + + - + kind: "try_compile-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:74 (try_compile)" + - "/usr/local/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + checks: + - "Detecting CXX compiler ABI info" + directories: + source: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-JNt1h3" + binary: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-JNt1h3" + cmakeVariables: + CMAKE_CXX_FLAGS: "" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_CXX_SCAN_FOR_MODULES: "OFF" + CMAKE_EXE_LINKER_FLAGS: "" + buildResult: + variable: "CMAKE_CXX_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-JNt1h3' + + Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_d663e/fast + /usr/bin/gmake -f CMakeFiles/cmTC_d663e.dir/build.make CMakeFiles/cmTC_d663e.dir/build + gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-JNt1h3' + Building CXX object CMakeFiles/cmTC_d663e.dir/CMakeCXXCompilerABI.cpp.o + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ -v -o CMakeFiles/cmTC_d663e.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.31/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.3.0-6ubuntu2~24.04' --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-bootstrap --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-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.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 --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_d663e.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_d663e.dir/' + /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/local/share/cmake-3.31/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_d663e.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/ccQo3adZ.s + GNU C++17 (Ubuntu 13.3.0-6ubuntu2~24.04) version 13.3.0 (x86_64-linux-gnu) + compiled by GNU C version 13.3.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: c81c05345ce537099dafd5580045814a + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_d663e.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_d663e.dir/' + as -v --64 -o CMakeFiles/cmTC_d663e.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccQo3adZ.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_d663e.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_d663e.dir/CMakeCXXCompilerABI.cpp.' + Linking CXX executable cmTC_d663e + /usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_d663e.dir/link.txt --verbose=1 + 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.3.0-6ubuntu2~24.04' --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-bootstrap --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-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.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 --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) + 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_d663e' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_d663e.' + /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/ccmMq2NZ.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_d663e /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/../../.. -v CMakeFiles/cmTC_d663e.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 + collect2 version 13.3.0 + /usr/bin/ld -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/ccmMq2NZ.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_d663e /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/../../.. -v CMakeFiles/cmTC_d663e.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 + GNU ld (GNU Binutils for Ubuntu) 2.42 + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_d663e' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_d663e.' + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ -v -Wl,-v CMakeFiles/cmTC_d663e.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_d663e + gmake[1]: Leaving directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-JNt1h3' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:182 (message)" + - "/usr/local/share/cmake-3.31/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/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:218 (message)" + - "/usr/local/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + message: | + Parsed CXX implicit link information: + link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)] + ignore line: [Change Dir: '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-JNt1h3'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_d663e/fast] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_d663e.dir/build.make CMakeFiles/cmTC_d663e.dir/build] + ignore line: [gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-JNt1h3'] + ignore line: [Building CXX object CMakeFiles/cmTC_d663e.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ -v -o CMakeFiles/cmTC_d663e.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.31/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.3.0-6ubuntu2~24.04' --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-bootstrap --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-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.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 --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_d663e.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_d663e.dir/'] + ignore line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/local/share/cmake-3.31/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_d663e.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/ccQo3adZ.s] + ignore line: [GNU C++17 (Ubuntu 13.3.0-6ubuntu2~24.04) version 13.3.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 13.3.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: c81c05345ce537099dafd5580045814a] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_d663e.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_d663e.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_d663e.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccQo3adZ.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_d663e.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_d663e.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [Linking CXX executable cmTC_d663e] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_d663e.dir/link.txt --verbose=1] + 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.3.0-6ubuntu2~24.04' --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-bootstrap --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-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.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 --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) ] + 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_d663e' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_d663e.'] + 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/ccmMq2NZ.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_d663e /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/../../.. -v CMakeFiles/cmTC_d663e.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/ccmMq2NZ.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_d663e] ==> 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 [-v] ==> ignore + arg [CMakeFiles/cmTC_d663e.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] + ignore line: [collect2 version 13.3.0] + ignore line: [/usr/bin/ld -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/ccmMq2NZ.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_d663e /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/../../.. -v CMakeFiles/cmTC_d663e.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] + linker tool for 'CXX': /usr/bin/ld + 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/local/share/cmake-3.31/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)" + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:255 (cmake_determine_linker_id)" + - "/usr/local/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + message: | + Running the CXX compiler's linker: "/usr/bin/ld" "-v" + GNU ld (GNU Binutils for Ubuntu) 2.42 + - + kind: "message-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCCompiler.cmake:123 (CMAKE_DETERMINE_COMPILER_ID)" + - "_codeql_build_dir/_deps/googletest-src/CMakeLists.txt:10 (project)" + message: | + Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. + Compiler: /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdC/a.out + + - + kind: "try_compile-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:74 (try_compile)" + - "/usr/local/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "_codeql_build_dir/_deps/googletest-src/CMakeLists.txt:10 (project)" + checks: + - "Detecting C compiler ABI info" + directories: + source: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-bZHJja" + binary: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-bZHJja" + cmakeVariables: + CMAKE_C_FLAGS: "" + buildResult: + variable: "CMAKE_C_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-bZHJja' + + Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_6abad/fast + /usr/bin/gmake -f CMakeFiles/cmTC_6abad.dir/build.make CMakeFiles/cmTC_6abad.dir/build + gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-bZHJja' + Building C object CMakeFiles/cmTC_6abad.dir/CMakeCCompilerABI.c.o + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -v -o CMakeFiles/cmTC_6abad.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.31/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.3.0-6ubuntu2~24.04' --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-bootstrap --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-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.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 --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_6abad.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_6abad.dir/' + /usr/libexec/gcc/x86_64-linux-gnu/13/cc1 -quiet -v -imultiarch x86_64-linux-gnu /usr/local/share/cmake-3.31/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_6abad.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/cc3eSGB4.s + GNU C17 (Ubuntu 13.3.0-6ubuntu2~24.04) version 13.3.0 (x86_64-linux-gnu) + compiled by GNU C version 13.3.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: 38987c28e967c64056a6454abdef726e + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_6abad.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_6abad.dir/' + as -v --64 -o CMakeFiles/cmTC_6abad.dir/CMakeCCompilerABI.c.o /tmp/cc3eSGB4.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_6abad.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_6abad.dir/CMakeCCompilerABI.c.' + Linking C executable cmTC_6abad + /usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6abad.dir/link.txt --verbose=1 + 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.3.0-6ubuntu2~24.04' --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-bootstrap --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-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.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 --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) + 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_6abad' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_6abad.' + /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/ccBQn7SJ.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_6abad /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/../../.. -v CMakeFiles/cmTC_6abad.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 + collect2 version 13.3.0 + /usr/bin/ld -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/ccBQn7SJ.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_6abad /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/../../.. -v CMakeFiles/cmTC_6abad.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 + GNU ld (GNU Binutils for Ubuntu) 2.42 + COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_6abad' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_6abad.' + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -v -Wl,-v -rdynamic CMakeFiles/cmTC_6abad.dir/CMakeCCompilerABI.c.o -o cmTC_6abad + gmake[1]: Leaving directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-bZHJja' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:182 (message)" + - "/usr/local/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "_codeql_build_dir/_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/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:218 (message)" + - "/usr/local/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "_codeql_build_dir/_deps/googletest-src/CMakeLists.txt:10 (project)" + message: | + Parsed C implicit link information: + link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)] + ignore line: [Change Dir: '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-bZHJja'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_6abad/fast] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_6abad.dir/build.make CMakeFiles/cmTC_6abad.dir/build] + ignore line: [gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-bZHJja'] + ignore line: [Building C object CMakeFiles/cmTC_6abad.dir/CMakeCCompilerABI.c.o] + ignore line: [/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -v -o CMakeFiles/cmTC_6abad.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.31/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.3.0-6ubuntu2~24.04' --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-bootstrap --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-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.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 --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_6abad.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_6abad.dir/'] + ignore line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/cc1 -quiet -v -imultiarch x86_64-linux-gnu /usr/local/share/cmake-3.31/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_6abad.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/cc3eSGB4.s] + ignore line: [GNU C17 (Ubuntu 13.3.0-6ubuntu2~24.04) version 13.3.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 13.3.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: 38987c28e967c64056a6454abdef726e] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_6abad.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_6abad.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_6abad.dir/CMakeCCompilerABI.c.o /tmp/cc3eSGB4.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_6abad.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_6abad.dir/CMakeCCompilerABI.c.'] + ignore line: [Linking C executable cmTC_6abad] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6abad.dir/link.txt --verbose=1] + 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.3.0-6ubuntu2~24.04' --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-bootstrap --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-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.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 --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) ] + 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_6abad' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_6abad.'] + 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/ccBQn7SJ.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_6abad /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/../../.. -v CMakeFiles/cmTC_6abad.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/ccBQn7SJ.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_6abad] ==> 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 [-v] ==> ignore + arg [CMakeFiles/cmTC_6abad.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] + ignore line: [collect2 version 13.3.0] + ignore line: [/usr/bin/ld -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/ccBQn7SJ.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_6abad /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/../../.. -v CMakeFiles/cmTC_6abad.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] + linker tool for 'C': /usr/bin/ld + 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: "message-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)" + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:255 (cmake_determine_linker_id)" + - "/usr/local/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "_codeql_build_dir/_deps/googletest-src/CMakeLists.txt:10 (project)" + message: | + Running the C compiler's linker: "/usr/bin/ld" "-v" + GNU ld (GNU Binutils for Ubuntu) 2.42 + - + kind: "try_compile-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/Internal/CheckSourceCompiles.cmake:108 (try_compile)" + - "/usr/local/share/cmake-3.31/Modules/CheckCSourceCompiles.cmake:58 (cmake_check_source_compiles)" + - "/usr/local/share/cmake-3.31/Modules/FindThreads.cmake:97 (CHECK_C_SOURCE_COMPILES)" + - "/usr/local/share/cmake-3.31/Modules/FindThreads.cmake:163 (_threads_check_libc)" + - "_codeql_build_dir/_deps/googletest-src/googletest/cmake/internal_utils.cmake:65 (find_package)" + - "_codeql_build_dir/_deps/googletest-src/googletest/CMakeLists.txt:93 (config_compiler_and_linker)" + checks: + - "Performing Test CMAKE_HAVE_LIBC_PTHREAD" + directories: + source: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-2GrDjL" + binary: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-2GrDjL" + cmakeVariables: + CMAKE_C_FLAGS: "" + buildResult: + variable: "CMAKE_HAVE_LIBC_PTHREAD" + cached: true + stdout: | + Change Dir: '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-2GrDjL' + + Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_debf9/fast + /usr/bin/gmake -f CMakeFiles/cmTC_debf9.dir/build.make CMakeFiles/cmTC_debf9.dir/build + gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-2GrDjL' + Building C object CMakeFiles/cmTC_debf9.dir/src.c.o + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -DCMAKE_HAVE_LIBC_PTHREAD -o CMakeFiles/cmTC_debf9.dir/src.c.o -c /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-2GrDjL/src.c + Linking C executable cmTC_debf9 + /usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_debf9.dir/link.txt --verbose=1 + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -rdynamic CMakeFiles/cmTC_debf9.dir/src.c.o -o cmTC_debf9 + gmake[1]: Leaving directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-2GrDjL' + + exitCode: 0 +... diff --git a/_codeql_build_dir/CMakeFiles/CMakeDirectoryInformation.cmake b/_codeql_build_dir/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..5d15b7f --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/runner/work/RingBufferCpp/RingBufferCpp") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir") + +# 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/_codeql_build_dir/CMakeFiles/Makefile.cmake b/_codeql_build_dir/CMakeFiles/Makefile.cmake new file mode 100644 index 0000000..959a483 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/Makefile.cmake @@ -0,0 +1,182 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# 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/runner/work/RingBufferCpp/RingBufferCpp/CMakeLists.txt" + "CMakeFiles/3.31.6/CMakeCCompiler.cmake" + "CMakeFiles/3.31.6/CMakeCXXCompiler.cmake" + "CMakeFiles/3.31.6/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/local/share/cmake-3.31/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in" + "/usr/local/share/cmake-3.31/Modules/CMakeCCompiler.cmake.in" + "/usr/local/share/cmake-3.31/Modules/CMakeCCompilerABI.c" + "/usr/local/share/cmake-3.31/Modules/CMakeCInformation.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeCXXCompiler.cmake.in" + "/usr/local/share/cmake-3.31/Modules/CMakeCXXCompilerABI.cpp" + "/usr/local/share/cmake-3.31/Modules/CMakeCXXInformation.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeCompilerIdDetection.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeDependentOption.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCXXCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerSupport.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeDetermineSystem.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeFindBinUtils.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeGenericSystem.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeInitializeConfigs.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeLanguageInformation.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakePackageConfigHelpers.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeParseImplicitIncludeInfo.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeParseImplicitLinkInfo.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeParseLibraryArchitecture.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeSystem.cmake.in" + "/usr/local/share/cmake-3.31/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeTestCompilerCommon.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeUnixFindMake.cmake" + "/usr/local/share/cmake-3.31/Modules/CheckCSourceCompiles.cmake" + "/usr/local/share/cmake-3.31/Modules/CheckIncludeFile.cmake" + "/usr/local/share/cmake-3.31/Modules/CheckLibraryExists.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/ADSP-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/ARMCC-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/ARMClang-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/AppleClang-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Borland-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Bruce-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/CMakeCommonCompilerMacros.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Clang-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Clang-DetermineCompilerInternal.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Compaq-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Cray-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/CrayClang-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Embarcadero-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Fujitsu-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/GHS-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/GNU-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/GNU-C.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/GNU-CXX.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/GNU-FindBinUtils.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/GNU.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/HP-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/HP-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/IAR-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Intel-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/LCC-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/MSVC-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/NVHPC-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/NVIDIA-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/OrangeC-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/PGI-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/PathScale-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/SCO-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/SDCC-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/SunPro-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/TI-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/TIClang-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Tasking-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Watcom-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/XL-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/XL-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/XLClang-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/zOS-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/ExternalProject/shared_internal_commands.cmake" + "/usr/local/share/cmake-3.31/Modules/FetchContent.cmake" + "/usr/local/share/cmake-3.31/Modules/FetchContent/CMakeLists.cmake.in" + "/usr/local/share/cmake-3.31/Modules/FindPackageHandleStandardArgs.cmake" + "/usr/local/share/cmake-3.31/Modules/FindPackageMessage.cmake" + "/usr/local/share/cmake-3.31/Modules/FindPython.cmake" + "/usr/local/share/cmake-3.31/Modules/FindPython/Support.cmake" + "/usr/local/share/cmake-3.31/Modules/FindThreads.cmake" + "/usr/local/share/cmake-3.31/Modules/GNUInstallDirs.cmake" + "/usr/local/share/cmake-3.31/Modules/GoogleTest.cmake" + "/usr/local/share/cmake-3.31/Modules/Internal/CMakeCLinkerInformation.cmake" + "/usr/local/share/cmake-3.31/Modules/Internal/CMakeCXXLinkerInformation.cmake" + "/usr/local/share/cmake-3.31/Modules/Internal/CMakeCommonLinkerInformation.cmake" + "/usr/local/share/cmake-3.31/Modules/Internal/CMakeDetermineLinkerId.cmake" + "/usr/local/share/cmake-3.31/Modules/Internal/CheckSourceCompiles.cmake" + "/usr/local/share/cmake-3.31/Modules/Internal/FeatureTesting.cmake" + "/usr/local/share/cmake-3.31/Modules/Linker/GNU-C.cmake" + "/usr/local/share/cmake-3.31/Modules/Linker/GNU-CXX.cmake" + "/usr/local/share/cmake-3.31/Modules/Linker/GNU.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linker/GNU.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linker/Linux-GNU-C.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linker/Linux-GNU-CXX.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linker/Linux-GNU.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linux-Determine-CXX.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linux-GNU-C.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linux-GNU-CXX.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linux-GNU.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linux-Initialize.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linux.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/UnixPaths.cmake" + "/usr/local/share/cmake-3.31/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 + "CMakeFiles/3.31.6/CMakeSystem.cmake" + "CMakeFiles/3.31.6/CMakeCXXCompiler.cmake" + "CMakeFiles/3.31.6/CMakeCXXCompiler.cmake" + "_deps/googletest-subbuild/CMakeLists.txt" + "CMakeFiles/CMakeDirectoryInformation.cmake" + "CMakeFiles/3.31.6/CMakeCCompiler.cmake" + "CMakeFiles/3.31.6/CMakeCCompiler.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/RingBufferTest.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/_codeql_build_dir/CMakeFiles/Makefile2 b/_codeql_build_dir/CMakeFiles/Makefile2 new file mode 100644 index 0000000..77ccb97 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/Makefile2 @@ -0,0 +1,324 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# 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 + +# Produce verbose output by default. +VERBOSE = 1 + +# 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/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +#============================================================================= +# Directory level rules for the build root directory + +# The main recursive "all" target. +all: CMakeFiles/RingBufferTest.dir/all +all: _deps/googletest-build/all +.PHONY : all + +# The main recursive "codegen" target. +codegen: CMakeFiles/RingBufferTest.dir/codegen +codegen: _deps/googletest-build/codegen +.PHONY : codegen + +# The main recursive "preinstall" target. +preinstall: _deps/googletest-build/preinstall +.PHONY : preinstall + +# The main recursive "clean" target. +clean: CMakeFiles/RingBufferTest.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 "codegen" directory target. +_deps/googletest-build/codegen: _deps/googletest-build/googlemock/codegen +.PHONY : _deps/googletest-build/codegen + +# 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 "codegen" directory target. +_deps/googletest-build/googlemock/codegen: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/codegen +_deps/googletest-build/googlemock/codegen: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/codegen +_deps/googletest-build/googlemock/codegen: _deps/googletest-build/googletest/codegen +.PHONY : _deps/googletest-build/googlemock/codegen + +# 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 "codegen" directory target. +_deps/googletest-build/googletest/codegen: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/codegen +_deps/googletest-build/googletest/codegen: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/codegen +.PHONY : _deps/googletest-build/googletest/codegen + +# 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/RingBufferTest.dir + +# All Build rule for target. +CMakeFiles/RingBufferTest.dir/all: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/all +CMakeFiles/RingBufferTest.dir/all: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/all + $(MAKE) $(MAKESILENT) -f CMakeFiles/RingBufferTest.dir/build.make CMakeFiles/RingBufferTest.dir/depend + $(MAKE) $(MAKESILENT) -f CMakeFiles/RingBufferTest.dir/build.make CMakeFiles/RingBufferTest.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=1,2 "Built target RingBufferTest" +.PHONY : CMakeFiles/RingBufferTest.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/RingBufferTest.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 6 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/RingBufferTest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 0 +.PHONY : CMakeFiles/RingBufferTest.dir/rule + +# Convenience name for target. +RingBufferTest: CMakeFiles/RingBufferTest.dir/rule +.PHONY : RingBufferTest + +# codegen rule for target. +CMakeFiles/RingBufferTest.dir/codegen: + $(MAKE) $(MAKESILENT) -f CMakeFiles/RingBufferTest.dir/build.make CMakeFiles/RingBufferTest.dir/codegen + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=1,2 "Finished codegen for target RingBufferTest" +.PHONY : CMakeFiles/RingBufferTest.dir/codegen + +# clean rule for target. +CMakeFiles/RingBufferTest.dir/clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/RingBufferTest.dir/build.make CMakeFiles/RingBufferTest.dir/clean +.PHONY : CMakeFiles/RingBufferTest.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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=3,4 "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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 4 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/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 + +# codegen rule for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/codegen: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/codegen + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=3,4 "Finished codegen for target gmock" +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/codegen + +# 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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=5,6 "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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 6 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/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 + +# codegen rule for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/codegen: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/codegen + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=5,6 "Finished codegen for target gmock_main" +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/codegen + +# 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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=7,8 "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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 2 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googletest/CMakeFiles/gtest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/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 + +# codegen rule for target. +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/codegen: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest.dir/codegen + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=7,8 "Finished codegen for target gtest" +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/codegen + +# 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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=9,10 "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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 4 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/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 + +# codegen rule for target. +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/codegen: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/codegen + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=9,10 "Finished codegen for target gtest_main" +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/codegen + +# 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/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/DependInfo.cmake b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/DependInfo.cmake new file mode 100644 index 0000000..e316c8a --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.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/runner/work/RingBufferCpp/RingBufferCpp/test_main.cpp" "CMakeFiles/RingBufferTest.dir/test_main.cpp.o" "gcc" "CMakeFiles/RingBufferTest.dir/test_main.cpp.o.d" + "" "RingBufferTest" "gcc" "CMakeFiles/RingBufferTest.dir/link.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/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/build.make b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/build.make new file mode 100644 index 0000000..f9c43fa --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/build.make @@ -0,0 +1,121 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# 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 + +# Produce verbose output by default. +VERBOSE = 1 + +# 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/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +# Include any dependencies generated for this target. +include CMakeFiles/RingBufferTest.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include CMakeFiles/RingBufferTest.dir/compiler_depend.make + +# Include the progress variables for this target. +include CMakeFiles/RingBufferTest.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/RingBufferTest.dir/flags.make + +CMakeFiles/RingBufferTest.dir/codegen: +.PHONY : CMakeFiles/RingBufferTest.dir/codegen + +CMakeFiles/RingBufferTest.dir/test_main.cpp.o: CMakeFiles/RingBufferTest.dir/flags.make +CMakeFiles/RingBufferTest.dir/test_main.cpp.o: /home/runner/work/RingBufferCpp/RingBufferCpp/test_main.cpp +CMakeFiles/RingBufferTest.dir/test_main.cpp.o: CMakeFiles/RingBufferTest.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/RingBufferTest.dir/test_main.cpp.o" + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/RingBufferTest.dir/test_main.cpp.o -MF CMakeFiles/RingBufferTest.dir/test_main.cpp.o.d -o CMakeFiles/RingBufferTest.dir/test_main.cpp.o -c /home/runner/work/RingBufferCpp/RingBufferCpp/test_main.cpp + +CMakeFiles/RingBufferTest.dir/test_main.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/RingBufferTest.dir/test_main.cpp.i" + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/runner/work/RingBufferCpp/RingBufferCpp/test_main.cpp > CMakeFiles/RingBufferTest.dir/test_main.cpp.i + +CMakeFiles/RingBufferTest.dir/test_main.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/RingBufferTest.dir/test_main.cpp.s" + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/runner/work/RingBufferCpp/RingBufferCpp/test_main.cpp -o CMakeFiles/RingBufferTest.dir/test_main.cpp.s + +# Object files for target RingBufferTest +RingBufferTest_OBJECTS = \ +"CMakeFiles/RingBufferTest.dir/test_main.cpp.o" + +# External object files for target RingBufferTest +RingBufferTest_EXTERNAL_OBJECTS = + +RingBufferTest: CMakeFiles/RingBufferTest.dir/test_main.cpp.o +RingBufferTest: CMakeFiles/RingBufferTest.dir/build.make +RingBufferTest: CMakeFiles/RingBufferTest.dir/compiler_depend.ts +RingBufferTest: lib/libgtest.a +RingBufferTest: lib/libgtest_main.a +RingBufferTest: lib/libgtest.a +RingBufferTest: CMakeFiles/RingBufferTest.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable RingBufferTest" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/RingBufferTest.dir/link.txt --verbose=$(VERBOSE) + /usr/local/bin/cmake -D TEST_TARGET=RingBufferTest -D TEST_EXECUTABLE=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest -D TEST_EXECUTOR= -D TEST_WORKING_DIR=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir -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=RingBufferTest_TESTS -D CTEST_FILE=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest[1]_tests.cmake -D TEST_DISCOVERY_TIMEOUT=5 -D TEST_DISCOVERY_EXTRA_ARGS= -D TEST_XML_OUTPUT_DIR= -P /usr/local/share/cmake-3.31/Modules/GoogleTestAddTests.cmake + +# Rule to build all files generated by this target. +CMakeFiles/RingBufferTest.dir/build: RingBufferTest +.PHONY : CMakeFiles/RingBufferTest.dir/build + +CMakeFiles/RingBufferTest.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/RingBufferTest.dir/cmake_clean.cmake +.PHONY : CMakeFiles/RingBufferTest.dir/clean + +CMakeFiles/RingBufferTest.dir/depend: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/runner/work/RingBufferCpp/RingBufferCpp /home/runner/work/RingBufferCpp/RingBufferCpp /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/DependInfo.cmake "--color=$(COLOR)" +.PHONY : CMakeFiles/RingBufferTest.dir/depend + diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/cmake_clean.cmake b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/cmake_clean.cmake new file mode 100644 index 0000000..12eab4b --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/cmake_clean.cmake @@ -0,0 +1,13 @@ +file(REMOVE_RECURSE + "CMakeFiles/RingBufferTest.dir/link.d" + "CMakeFiles/RingBufferTest.dir/test_main.cpp.o" + "CMakeFiles/RingBufferTest.dir/test_main.cpp.o.d" + "RingBufferTest" + "RingBufferTest.pdb" + "RingBufferTest[1]_tests.cmake" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/RingBufferTest.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/compiler_depend.make b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/compiler_depend.make new file mode 100644 index 0000000..1f5f451 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for RingBufferTest. +# This may be replaced when dependencies are built. diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/compiler_depend.ts b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/compiler_depend.ts new file mode 100644 index 0000000..bbbed4e --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for RingBufferTest. diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/depend.make b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/depend.make new file mode 100644 index 0000000..145a27e --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for RingBufferTest. +# This may be replaced when dependencies are built. diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/flags.make b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/flags.make new file mode 100644 index 0000000..9100aac --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# compile CXX with /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -I/home/runner/work/RingBufferCpp/RingBufferCpp -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest + +CXX_FLAGS = -O3 -DNDEBUG -std=gnu++17 + diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/link.d b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/link.d new file mode 100644 index 0000000..16bade7 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/link.d @@ -0,0 +1,103 @@ +RingBufferTest: \ + /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 \ + CMakeFiles/RingBufferTest.dir/test_main.cpp.o \ + lib/libgtest.a \ + lib/libgtest_main.a \ + lib/libgtest.a \ + /usr/lib/gcc/x86_64-linux-gnu/13/libstdc++.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libm.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libm.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libm.so \ + /lib/x86_64-linux-gnu/libm.so.6 \ + /lib/x86_64-linux-gnu/libmvec.so.1 \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libgcc_s.so.1 \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc.a \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc.a \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libc.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libc.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libc.so \ + /lib/x86_64-linux-gnu/libc.so.6 \ + /usr/lib/x86_64-linux-gnu/libc_nonshared.a \ + /lib64/ld-linux-x86-64.so.2 \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libgcc_s.so.1 \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc.a \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc.a \ + /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o \ + /lib64/ld-linux-x86-64.so.2 + +/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: + +CMakeFiles/RingBufferTest.dir/test_main.cpp.o: + +lib/libgtest.a: + +lib/libgtest_main.a: + +lib/libgtest.a: + +/usr/lib/gcc/x86_64-linux-gnu/13/libstdc++.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libm.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libm.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libm.so: + +/lib/x86_64-linux-gnu/libm.so.6: + +/lib/x86_64-linux-gnu/libmvec.so.1: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libgcc_s.so.1: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc.a: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc.a: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libc.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libc.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libc.so: + +/lib/x86_64-linux-gnu/libc.so.6: + +/usr/lib/x86_64-linux-gnu/libc_nonshared.a: + +/lib64/ld-linux-x86-64.so.2: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libgcc_s.so.1: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc.a: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc.a: + +/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o: + +/lib64/ld-linux-x86-64.so.2: diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/link.txt b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/link.txt new file mode 100644 index 0000000..cb3b1ef --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/link.txt @@ -0,0 +1 @@ +/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ -O3 -DNDEBUG -Wl,--dependency-file=CMakeFiles/RingBufferTest.dir/link.d CMakeFiles/RingBufferTest.dir/test_main.cpp.o -o RingBufferTest lib/libgtest.a lib/libgtest_main.a lib/libgtest.a diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/progress.make b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/progress.make new file mode 100644 index 0000000..abadeb0 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = 2 + diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/test_main.cpp.o b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/test_main.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..8cade0e78837add8a8427b1916f70348e9395a16 GIT binary patch literal 257584 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

j2QLS&0UrZ?3iw#?8^Fhb-vM3$ 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 literal 0 HcmV?d00001 diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/test_main.cpp.o.d b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/test_main.cpp.o.d new file mode 100644 index 0000000..582585c --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/test_main.cpp.o.d @@ -0,0 +1,293 @@ +CMakeFiles/RingBufferTest.dir/test_main.cpp.o: \ + /home/runner/work/RingBufferCpp/RingBufferCpp/test_main.cpp \ + /usr/include/stdc-predef.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/x86_64-linux-gnu/bits/wchar2-decl.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.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/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/bits/select-decl.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.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/x86_64-linux-gnu/bits/stdio2-decl.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-internal.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/x86_64-linux-gnu/bits/strings_fortified.h \ + /usr/include/x86_64-linux-gnu/bits/string_fortified.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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-port.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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.h \ + /usr/include/x86_64-linux-gnu/bits/unistd-decl.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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-message.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-filepath.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-string.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-death-test.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-death-test-internal.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-matchers.h \ + /usr/include/c++/13/atomic \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-printers.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-param-test.h \ + /usr/include/c++/13/iterator /usr/include/c++/13/bits/stream_iterator.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-param-util.h \ + /usr/include/c++/13/cassert /usr/include/assert.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-test-part.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest_prod.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-typed-test.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest_pred_impl.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/RingBuffer.hpp \ + /usr/include/c++/13/algorithm \ + /usr/include/c++/13/pstl/glue_algorithm_defs.h \ + /usr/include/c++/13/cstring diff --git a/_codeql_build_dir/CMakeFiles/TargetDirectories.txt b/_codeql_build_dir/CMakeFiles/TargetDirectories.txt new file mode 100644 index 0000000..82bb447 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,33 @@ +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/RingBufferTest.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/test.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/edit_cache.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/rebuild_cache.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/list_install_components.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/install.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/install/local.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/install/strip.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/CMakeFiles/test.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/CMakeFiles/edit_cache.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/CMakeFiles/rebuild_cache.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/CMakeFiles/list_install_components.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/CMakeFiles/install.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/CMakeFiles/install/local.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/CMakeFiles/install/strip.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/test.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/edit_cache.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/rebuild_cache.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/list_install_components.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/install.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/install/local.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/install/strip.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/test.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/edit_cache.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/rebuild_cache.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/list_install_components.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/install.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/install/local.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/install/strip.dir diff --git a/_codeql_build_dir/CMakeFiles/cmake.check_cache b/_codeql_build_dir/CMakeFiles/cmake.check_cache new file mode 100644 index 0000000..3dccd73 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/_codeql_build_dir/CMakeFiles/progress.marks b/_codeql_build_dir/CMakeFiles/progress.marks new file mode 100644 index 0000000..f599e28 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/progress.marks @@ -0,0 +1 @@ +10 diff --git a/_codeql_build_dir/CTestTestfile.cmake b/_codeql_build_dir/CTestTestfile.cmake new file mode 100644 index 0000000..69fafa6 --- /dev/null +++ b/_codeql_build_dir/CTestTestfile.cmake @@ -0,0 +1,8 @@ +# CMake generated Testfile for +# Source directory: /home/runner/work/RingBufferCpp/RingBufferCpp +# Build directory: /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +include("/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest[1]_include.cmake") +subdirs("_deps/googletest-build") diff --git a/_codeql_build_dir/Makefile b/_codeql_build_dir/Makefile new file mode 100644 index 0000000..594c166 --- /dev/null +++ b/_codeql_build_dir/Makefile @@ -0,0 +1,300 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# 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 + +# Produce verbose output by default. +VERBOSE = 1 + +# 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/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running tests..." + /usr/local/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 "Running CMake cache editor..." + /usr/local/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.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/local/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/local/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/local/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/local/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/local/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/local/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/local/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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir//CMakeFiles/progress.marks + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/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 RingBufferTest + +# Build rule for target. +RingBufferTest: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 RingBufferTest +.PHONY : RingBufferTest + +# fast build rule for target. +RingBufferTest/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/RingBufferTest.dir/build.make CMakeFiles/RingBufferTest.dir/build +.PHONY : RingBufferTest/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 + +test_main.o: test_main.cpp.o +.PHONY : test_main.o + +# target to build an object file +test_main.cpp.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/RingBufferTest.dir/build.make CMakeFiles/RingBufferTest.dir/test_main.cpp.o +.PHONY : test_main.cpp.o + +test_main.i: test_main.cpp.i +.PHONY : test_main.i + +# target to preprocess a source file +test_main.cpp.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/RingBufferTest.dir/build.make CMakeFiles/RingBufferTest.dir/test_main.cpp.i +.PHONY : test_main.cpp.i + +test_main.s: test_main.cpp.s +.PHONY : test_main.s + +# target to generate assembly for a file +test_main.cpp.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/RingBufferTest.dir/build.make CMakeFiles/RingBufferTest.dir/test_main.cpp.s +.PHONY : test_main.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 "... RingBufferTest" + @echo "... gmock" + @echo "... gmock_main" + @echo "... gtest" + @echo "... gtest_main" + @echo "... test_main.o" + @echo "... test_main.i" + @echo "... test_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: + $(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/_codeql_build_dir/RingBufferTest b/_codeql_build_dir/RingBufferTest new file mode 100755 index 0000000000000000000000000000000000000000..fd9fbea5a43f520a3e71963bc7b661bfa68dd971 GIT binary patch literal 622856 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

k9*y8jSr3k-E+5qsb(VR>E)- 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 literal 0 HcmV?d00001 diff --git a/_codeql_build_dir/RingBufferTest[1]_include.cmake b/_codeql_build_dir/RingBufferTest[1]_include.cmake new file mode 100644 index 0000000..07fe97a --- /dev/null +++ b/_codeql_build_dir/RingBufferTest[1]_include.cmake @@ -0,0 +1,5 @@ +if(EXISTS "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest[1]_tests.cmake") + include("/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest[1]_tests.cmake") +else() + add_test(RingBufferTest_NOT_BUILT RingBufferTest_NOT_BUILT) +endif() diff --git a/_codeql_build_dir/RingBufferTest[1]_tests.cmake b/_codeql_build_dir/RingBufferTest[1]_tests.cmake new file mode 100644 index 0000000..254eddf --- /dev/null +++ b/_codeql_build_dir/RingBufferTest[1]_tests.cmake @@ -0,0 +1,45 @@ +add_test([=[RingBufferTest.Test1]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.Test1]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.Test1]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.Test2]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.Test2]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.Test2]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.Test3]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.Test3]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.Test3]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.Test4]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.Test4]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.Test4]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.Test5]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.Test5]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.Test5]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.Test6IteratorOrder]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.Test6IteratorOrder]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.Test6IteratorOrder]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.Test7ArrowOperator]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.Test7ArrowOperator]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.Test7ArrowOperator]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.CopyPreservesWrappedDataForTrivialTypes]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.CopyPreservesWrappedDataForTrivialTypes]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.CopyPreservesWrappedDataForTrivialTypes]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.IteratorsFromDifferentBuffersAreNotEqual]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.IteratorsFromDifferentBuffersAreNotEqual]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.IteratorsFromDifferentBuffersAreNotEqual]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.NoOverwriteWhenFull]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.NoOverwriteWhenFull]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.NoOverwriteWhenFull]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.PopFrontOnEmptyIsNoOp]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.PopFrontOnEmptyIsNoOp]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.PopFrontOnEmptyIsNoOp]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.IteratorOrderAfterWrapAndPop]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.IteratorOrderAfterWrapAndPop]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.IteratorOrderAfterWrapAndPop]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.SelfAssignmentDoesNotCorrupt]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.SelfAssignmentDoesNotCorrupt]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.SelfAssignmentDoesNotCorrupt]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.ClearResetsAfterWrap]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.ClearResetsAfterWrap]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.ClearResetsAfterWrap]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.OverwriteKeepsCapacitySize]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.OverwriteKeepsCapacitySize]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.OverwriteKeepsCapacitySize]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.LargeBufferCopyPreservesOrder]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.LargeBufferCopyPreservesOrder]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.LargeBufferCopyPreservesOrder]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.LargeBufferOverwriteKeepsLastN]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.LargeBufferOverwriteKeepsLastN]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.LargeBufferOverwriteKeepsLastN]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.SingleElementCapacityBehavesCorrectly]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.SingleElementCapacityBehavesCorrectly]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.SingleElementCapacityBehavesCorrectly]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.MoveConstructionTransfersState]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.MoveConstructionTransfersState]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.MoveConstructionTransfersState]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.MoveAssignmentTransfersState]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.MoveAssignmentTransfersState]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.MoveAssignmentTransfersState]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.SwapExchangesBuffers]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.SwapExchangesBuffers]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.SwapExchangesBuffers]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.NonMemberSwapWorks]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.NonMemberSwapWorks]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.NonMemberSwapWorks]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +set( RingBufferTest_TESTS RingBufferTest.Test1 RingBufferTest.Test2 RingBufferTest.Test3 RingBufferTest.Test4 RingBufferTest.Test5 RingBufferTest.Test6IteratorOrder RingBufferTest.Test7ArrowOperator RingBufferTest.CopyPreservesWrappedDataForTrivialTypes RingBufferTest.IteratorsFromDifferentBuffersAreNotEqual RingBufferTest.NoOverwriteWhenFull RingBufferTest.PopFrontOnEmptyIsNoOp RingBufferTest.IteratorOrderAfterWrapAndPop RingBufferTest.SelfAssignmentDoesNotCorrupt RingBufferTest.ClearResetsAfterWrap RingBufferTest.OverwriteKeepsCapacitySize RingBufferTest.LargeBufferCopyPreservesOrder RingBufferTest.LargeBufferOverwriteKeepsLastN RingBufferTest.SingleElementCapacityBehavesCorrectly RingBufferTest.MoveConstructionTransfersState RingBufferTest.MoveAssignmentTransfersState RingBufferTest.SwapExchangesBuffers RingBufferTest.NonMemberSwapWorks) diff --git a/_codeql_build_dir/_deps/googletest-build/CMakeFiles/CMakeDirectoryInformation.cmake b/_codeql_build_dir/_deps/googletest-build/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..5d15b7f --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/runner/work/RingBufferCpp/RingBufferCpp") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir") + +# 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/_codeql_build_dir/_deps/googletest-build/CMakeFiles/progress.marks b/_codeql_build_dir/_deps/googletest-build/CMakeFiles/progress.marks new file mode 100644 index 0000000..45a4fb7 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/CMakeFiles/progress.marks @@ -0,0 +1 @@ +8 diff --git a/_codeql_build_dir/_deps/googletest-build/CTestTestfile.cmake b/_codeql_build_dir/_deps/googletest-build/CTestTestfile.cmake new file mode 100644 index 0000000..a8a6906 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/CTestTestfile.cmake @@ -0,0 +1,7 @@ +# CMake generated Testfile for +# Source directory: /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src +# Build directory: /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/Makefile b/_codeql_build_dir/_deps/googletest-build/Makefile new file mode 100644 index 0000000..41f62a9 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/Makefile @@ -0,0 +1,203 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# 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 + +# Produce verbose output by default. +VERBOSE = 1 + +# 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/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running tests..." + /usr/local/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 "Running CMake cache editor..." + /usr/local/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.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/local/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/local/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/local/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/local/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/local/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/local/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/local/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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build//CMakeFiles/progress.marks + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(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/_codeql_build_dir/_deps/googletest-build/cmake_install.cmake b/_codeql_build_dir/_deps/googletest-build/cmake_install.cmake new file mode 100644 index 0000000..bf95d83 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/cmake_install.cmake @@ -0,0 +1,56 @@ +# Install script for directory: /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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 "Release") + 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 path to fallback-tool for dependency-resolution. +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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/cmake_install.cmake") + +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +if(CMAKE_INSTALL_LOCAL_ONLY) + file(WRITE "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/install_local_manifest.txt" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") +endif() diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..5d15b7f --- /dev/null +++ b/_codeql_build_dir/_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.31 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/runner/work/RingBufferCpp/RingBufferCpp") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir") + +# 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/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake new file mode 100644 index 0000000..87e9e97 --- /dev/null +++ b/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make new file mode 100644 index 0000000..a6fa3f2 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make @@ -0,0 +1,117 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# 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 + +# Produce verbose output by default. +VERBOSE = 1 + +# 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/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +# 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/codegen: +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/codegen + +_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library ../../../lib/libgmock.a" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock && $(CMAKE_COMMAND) -P CMakeFiles/gmock.dir/cmake_clean_target.cmake + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/runner/work/RingBufferCpp/RingBufferCpp /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake "--color=$(COLOR)" +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend + diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean.cmake b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean.cmake new file mode 100644 index 0000000..ebe1b2d --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean_target.cmake b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..541729e --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "../../../lib/libgmock.a" +) diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.make new file mode 100644 index 0000000..c777df5 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.ts b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.ts new file mode 100644 index 0000000..adc68d1 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend.make new file mode 100644 index 0000000..7a05e2f --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/flags.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/flags.make new file mode 100644 index 0000000..8a82b37 --- /dev/null +++ b/_codeql_build_dir/_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.31 + +# compile CXX with /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -I/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include -I/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest + +CXX_FLAGS = -O3 -DNDEBUG -std=c++17 -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers + diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/link.txt b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/link.txt new file mode 100644 index 0000000..79d0053 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/progress.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/progress.make new file mode 100644 index 0000000..8c8fb6f --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 3 +CMAKE_PROGRESS_2 = 4 + diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o new file mode 100644 index 0000000000000000000000000000000000000000..0e34c283c8fbf89fb83816004365ef348e75dec1 GIT binary patch literal 231792 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 LGxz 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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library ../../../lib/libgmock_main.a" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock && $(CMAKE_COMMAND) -P CMakeFiles/gmock_main.dir/cmake_clean_target.cmake + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/runner/work/RingBufferCpp/RingBufferCpp /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean.cmake b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean.cmake new file mode 100644 index 0000000..91d0b2d --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean_target.cmake b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..1c127c0 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.make new file mode 100644 index 0000000..0809414 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.ts b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.ts new file mode 100644 index 0000000..85535ac --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend.make new file mode 100644 index 0000000..4a18b61 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/flags.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/flags.make new file mode 100644 index 0000000..39e551b --- /dev/null +++ b/_codeql_build_dir/_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.31 + +# compile CXX with /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest + +CXX_FLAGS = -O3 -DNDEBUG -std=c++17 -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers + diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/link.txt b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/link.txt new file mode 100644 index 0000000..fc26c30 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/progress.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/progress.make new file mode 100644 index 0000000..3a86673 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 5 +CMAKE_PROGRESS_2 = 6 + diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o new file mode 100644 index 0000000000000000000000000000000000000000..2af26d69e361e2eb439a46f4b9593ee2447e024d GIT binary patch literal 2096 zcmbu9L2DC16o4mfwN+{w#e-1MRSR0MLpF&qD3+BHlVB~OX%Y0WY}ReMG`kyiC#5Z7 z4?X2j=}++}o&*K`0iMN!haLox-bASHZRRE0CAsK>+4tTz@6F84yqVqN;-is7f{`TH zJnMTz8EcL8Z7no4HpP-`x$U~P+fW?Cc5lrpYrf|w4aYM#bR^s~&-U}sI-0ujyY}un zSmn-9dH)Ww^4^bB=jF^~dH(^rhauZX(D@oVUDEl~)q5XP&p)uz!ooe})@r@&ingL= zd6uW=^6k*gyvpQwIyWmZ4##l$DQKslm6lf72xIS&jY31Y*i|gCv&<4(sl@c;_{0Hh z#AV>vP|ElzCR2MOwWQ)EQxB69NCpb-;TZdMJg9RtT*b+rsnCsVvh2on;kx6Z0=N(v zCtMq_JhVaa+7SMF2!At#e;LBri9=_6aUsq0XEl*gZ7&04L zuRgA2^(KtAbXQn`fXY;J6_~H&d5xy^1nRO_wX0P#8c|qV)siJDZXgWTw2GSp zW3o{2(AC>xsH3ok{v3DZD)=bKPeUUkK&BaAxZu(4gePL{B?1miCZVK80~0>*t09gI|Y0bHwTa0~)s_@don z-1HpBav{t0gvH?^%|VyBA^nEi<}KfA!O3mQbZcE-^9{%9t>-_DX~@UBg?k$nE$T$< z_*-@j`jFARr%;WIn2zV)gnm4yf6c!Qxj1G9T2wUY+=xQ3>4l+nU>w@<|8D_9p?9F` z_3M=U`(R-0XauA#$R9e8{v>F8D{1~qk}rYA`P0%T^;R1Ae^H@zlYR=FWJlw^N1ccr zk8MC7-k%dS4*sFcQKTkC>nDE~3>-6_KOrY7P@vTD{2kzf_V2UYKiVhUKfIrmPkhka uIF%;nr*)hIhV#Vp@hyng9w1hhKlBrwh{$1kZ5%iT@%1 literal 0 HcmV?d00001 diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o.d b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o.d new file mode 100644 index 0000000..1195db5 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o.d @@ -0,0 +1,336 @@ +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/x86_64-linux-gnu/bits/wchar2-decl.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.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/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/bits/select-decl.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.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/x86_64-linux-gnu/bits/stdio2-decl.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/gmock-internal-utils.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-port.h \ + /usr/include/string.h /usr/include/strings.h \ + /usr/include/x86_64-linux-gnu/bits/strings_fortified.h \ + /usr/include/x86_64-linux-gnu/bits/string_fortified.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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-port.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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.h \ + /usr/include/x86_64-linux-gnu/bits/unistd-decl.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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-port.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-message.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-filepath.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-string.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-death-test.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-death-test-internal.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-matchers.h \ + /usr/include/c++/13/atomic \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-printers.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-printers.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-param-test.h \ + /usr/include/c++/13/iterator /usr/include/c++/13/bits/stream_iterator.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-param-util.h \ + /usr/include/c++/13/cassert \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-test-part.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest_prod.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-typed-test.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest_pred_impl.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/gmock-pp.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-function-mocker.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-spec-builders.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-matchers.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-more-actions.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-generated-actions.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-more-matchers.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-nice-strict.h diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/progress.marks b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/progress.marks new file mode 100644 index 0000000..45a4fb7 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/progress.marks @@ -0,0 +1 @@ +8 diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CTestTestfile.cmake b/_codeql_build_dir/_deps/googletest-build/googlemock/CTestTestfile.cmake new file mode 100644 index 0000000..1221722 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CTestTestfile.cmake @@ -0,0 +1,7 @@ +# CMake generated Testfile for +# Source directory: /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock +# Build directory: /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googlemock/Makefile b/_codeql_build_dir/_deps/googletest-build/googlemock/Makefile new file mode 100644 index 0000000..814e27b --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/Makefile @@ -0,0 +1,287 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# 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 + +# Produce verbose output by default. +VERBOSE = 1 + +# 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/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running tests..." + /usr/local/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 "Running CMake cache editor..." + /usr/local/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.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/local/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/local/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/local/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/local/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/local/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/local/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/local/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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock//CMakeFiles/progress.marks + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(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/_codeql_build_dir/_deps/googletest-build/googlemock/cmake_install.cmake b/_codeql_build_dir/_deps/googletest-build/googlemock/cmake_install.cmake new file mode 100644 index 0000000..fba9bc1 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/cmake_install.cmake @@ -0,0 +1,76 @@ +# Install script for directory: /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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 "Release") + 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 path to fallback-tool for dependency-resolution. +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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/generated/gmock_main.pc") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for each subdirectory. + include("/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/cmake_install.cmake") + +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +if(CMAKE_INSTALL_LOCAL_ONLY) + file(WRITE "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/install_local_manifest.txt" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") +endif() diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/CMakeDirectoryInformation.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..5d15b7f --- /dev/null +++ b/_codeql_build_dir/_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.31 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/runner/work/RingBufferCpp/RingBufferCpp") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir") + +# 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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets-release.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets-release.cmake new file mode 100644 index 0000000..5cfcc7a --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets-release.cmake @@ -0,0 +1,49 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "Release". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "GTest::gtest" for configuration "Release" +set_property(TARGET GTest::gtest APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(GTest::gtest PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_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 "Release" +set_property(TARGET GTest::gtest_main APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(GTest::gtest_main PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_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 "Release" +set_property(TARGET GTest::gmock APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(GTest::gmock PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_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 "Release" +set_property(TARGET GTest::gmock_main APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(GTest::gmock_main PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets.cmake new file mode 100644 index 0000000..d83ac3e --- /dev/null +++ b/_codeql_build_dir/_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.12 required") +endif() +if(CMAKE_VERSION VERSION_LESS "2.8.12") + message(FATAL_ERROR "CMake >= 2.8.12 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.8.12...3.29) +#---------------------------------------------------------------- +# 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" +) + +# 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) + if(CMAKE_VERSION VERSION_LESS "3.28" + OR NOT DEFINED _cmake_import_check_xcframework_for_${_cmake_target} + OR NOT IS_DIRECTORY "${_cmake_import_check_xcframework_for_${_cmake_target}}") + 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() + endif() + 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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake new file mode 100644 index 0000000..2d52223 --- /dev/null +++ b/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make new file mode 100644 index 0000000..90e4560 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make @@ -0,0 +1,117 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# 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 + +# Produce verbose output by default. +VERBOSE = 1 + +# 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/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +# 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/codegen: +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/codegen + +_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object _deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library ../../../lib/libgtest.a" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && $(CMAKE_COMMAND) -P CMakeFiles/gtest.dir/cmake_clean_target.cmake + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/runner/work/RingBufferCpp/RingBufferCpp /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake "--color=$(COLOR)" +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend + diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean.cmake new file mode 100644 index 0000000..82336bb --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean_target.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..e2ada84 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "../../../lib/libgtest.a" +) diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.make new file mode 100644 index 0000000..71b2ee6 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.ts b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.ts new file mode 100644 index 0000000..32ab1fb --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend.make new file mode 100644 index 0000000..37ac348 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/flags.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/flags.make new file mode 100644 index 0000000..d659dee --- /dev/null +++ b/_codeql_build_dir/_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.31 + +# compile CXX with /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -I/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include -I/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest + +CXX_FLAGS = -O3 -DNDEBUG -std=c++17 -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers + diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/link.txt b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/link.txt new file mode 100644 index 0000000..f259488 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/progress.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/progress.make new file mode 100644 index 0000000..72bb7dd --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 7 +CMAKE_PROGRESS_2 = 8 + diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o new file mode 100644 index 0000000000000000000000000000000000000000..c4c45bb5e96ba3417c50715c1a92b74f44045267 GIT binary patch literal 879656 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

8?hQ=-=u|cT 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 literal 0 HcmV?d00001 diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o.d b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o.d new file mode 100644 index 0000000..f7745f6 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o.d @@ -0,0 +1,362 @@ +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-all.cc \ + /usr/include/stdc-predef.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/x86_64-linux-gnu/bits/wchar2-decl.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.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/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/bits/select-decl.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.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/x86_64-linux-gnu/bits/stdio2-decl.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-internal.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/x86_64-linux-gnu/bits/strings_fortified.h \ + /usr/include/x86_64-linux-gnu/bits/string_fortified.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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-port.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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.h \ + /usr/include/x86_64-linux-gnu/bits/unistd-decl.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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-message.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-filepath.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-string.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-death-test.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-death-test-internal.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-matchers.h \ + /usr/include/c++/13/atomic \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-printers.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-param-test.h \ + /usr/include/c++/13/iterator /usr/include/c++/13/bits/stream_iterator.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-param-util.h \ + /usr/include/c++/13/cassert /usr/include/assert.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-test-part.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest_prod.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-typed-test.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest_pred_impl.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest.cc \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/include/x86_64-linux-gnu/bits/fcntl2.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/socket2.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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-internal-inl.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-death-test.cc \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-filepath.cc \ + /usr/include/c++/13/climits \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-matchers.cc \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-printers.cc \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-test-part.cc \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-typed-test.cc diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/DependInfo.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/DependInfo.cmake new file mode 100644 index 0000000..9f644bc --- /dev/null +++ b/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make new file mode 100644 index 0000000..6196c61 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make @@ -0,0 +1,117 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# 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 + +# Produce verbose output by default. +VERBOSE = 1 + +# 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/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +# 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/codegen: +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/codegen + +_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library ../../../lib/libgtest_main.a" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && $(CMAKE_COMMAND) -P CMakeFiles/gtest_main.dir/cmake_clean_target.cmake + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/runner/work/RingBufferCpp/RingBufferCpp /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean.cmake new file mode 100644 index 0000000..d2f799e --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean_target.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..f09930e --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.make new file mode 100644 index 0000000..9a6afc0 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.ts b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.ts new file mode 100644 index 0000000..033891a --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend.make new file mode 100644 index 0000000..1d67c1a --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/flags.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/flags.make new file mode 100644 index 0000000..ec29071 --- /dev/null +++ b/_codeql_build_dir/_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.31 + +# compile CXX with /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest + +CXX_FLAGS = -O3 -DNDEBUG -std=c++17 -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers + diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/link.txt b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/link.txt new file mode 100644 index 0000000..792baf7 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/progress.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/progress.make new file mode 100644 index 0000000..b700c2c --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 9 +CMAKE_PROGRESS_2 = 10 + diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o new file mode 100644 index 0000000000000000000000000000000000000000..b6fd229b2832b4e21a9059bd7c2dfce60eca5731 GIT binary patch literal 2200 zcmbVM&ubGw6rQxzR;_6i1+^k8_@f28$tJZH1&M|OWvX!K;6P=N`OBZz9z9HZ$pF-GKPu?Y#HR`)1zGyf<(1b2ELh7?Bbq zx5BwDX74S(tbZ`VgQ!7aAF`%W8aeQl2$UlLC~lR_?c zQyE(>c{cYHEu&`C)WnqMyXn{INi{V&E?`&=k0$|o2(&Q2OkkTG#QH%|PPGRTd$~wr zYl+zC@ZiuE9Q1j>QBm&UCm&C2^gWC#^?2e=d=!CF`_gAvoq z5P(yfR-k;=cDZ4jG`|`dlYzp7DIxOau-vc)e($$M)&b&p8xp?)HVR^cpc2m@2!c4S zDe-9pK@dLzD)B7XD2QWENL&FM1@}emi0ZC4xKSdi%UOG@NsH4pPSmo&4WgD@m#EA^ z2O~9gy4%&jrFBC^4g?sCdrhL6PNP9>Sj2WXRiQ5?V9Hz(e%1EWCUcsU@pVC`HNC=& z2JNKxzs4vKu}8w4knOQx_|3a0__BW`?O*v!#hlWhLCFe-1wpW7y~+Q; zevIOO6udJbzU0aAzTk(?@0;MszL(2{dmrbq2D36ijE}^DYzhB3jJSu)U*`1`Fw7+d z8kBP)K|G(J$h_rPfk|lx<7T43h*)f7?8B~J0lz5t3fMuB`AZDnF$@j!Yl1KPSH_3= zEtrTpzg=;D@|^Jej)6+P#H04cz21rahr}2M3}62+AK#R4?E*yJiy!)cPC&$R9pnU9 QQGEZWU~an;**3!bKWRY{8vp= 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/_codeql_build_dir/_deps/googletest-build/googletest/generated/gmock.pc b/_codeql_build_dir/_deps/googletest-build/googletest/generated/gmock.pc new file mode 100644 index 0000000..87614c6 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/generated/gmock_main.pc b/_codeql_build_dir/_deps/googletest-build/googletest/generated/gmock_main.pc new file mode 100644 index 0000000..b4c7ac7 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/generated/gtest.pc b/_codeql_build_dir/_deps/googletest-build/googletest/generated/gtest.pc new file mode 100644 index 0000000..1e7f6d3 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-build/googletest/generated/gtest_main.pc b/_codeql_build_dir/_deps/googletest-build/googletest/generated/gtest_main.pc new file mode 100644 index 0000000..f5c1e51 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/.clang-format b/_codeql_build_dir/_deps/googletest-src/.clang-format new file mode 100644 index 0000000..5b9bfe6 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/00-bug_report.md b/_codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/00-bug_report.md new file mode 100644 index 0000000..0f7e8b5 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/10-feature_request.md b/_codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/10-feature_request.md new file mode 100644 index 0000000..70a3a20 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/config.yml b/_codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/_codeql_build_dir/_deps/googletest-src/.gitignore b/_codeql_build_dir/_deps/googletest-src/.gitignore new file mode 100644 index 0000000..f08cb72 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/BUILD.bazel b/_codeql_build_dir/_deps/googletest-src/BUILD.bazel new file mode 100644 index 0000000..965c518 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/CMakeLists.txt b/_codeql_build_dir/_deps/googletest-src/CMakeLists.txt new file mode 100644 index 0000000..ea81ab1 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/CONTRIBUTING.md b/_codeql_build_dir/_deps/googletest-src/CONTRIBUTING.md new file mode 100644 index 0000000..da45e44 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/CONTRIBUTORS b/_codeql_build_dir/_deps/googletest-src/CONTRIBUTORS new file mode 100644 index 0000000..76db0b4 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/LICENSE b/_codeql_build_dir/_deps/googletest-src/LICENSE new file mode 100644 index 0000000..1941a11 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/README.md b/_codeql_build_dir/_deps/googletest-src/README.md new file mode 100644 index 0000000..7d872a5 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/WORKSPACE b/_codeql_build_dir/_deps/googletest-src/WORKSPACE new file mode 100644 index 0000000..614f557 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/ci/linux-presubmit.sh b/_codeql_build_dir/_deps/googletest-src/ci/linux-presubmit.sh new file mode 100644 index 0000000..6bea1cd --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/ci/macos-presubmit.sh b/_codeql_build_dir/_deps/googletest-src/ci/macos-presubmit.sh new file mode 100644 index 0000000..d6423fa --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/_config.yml b/_codeql_build_dir/_deps/googletest-src/docs/_config.yml new file mode 100644 index 0000000..d12867e --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/_config.yml @@ -0,0 +1 @@ +title: GoogleTest diff --git a/_codeql_build_dir/_deps/googletest-src/docs/_data/navigation.yml b/_codeql_build_dir/_deps/googletest-src/docs/_data/navigation.yml new file mode 100644 index 0000000..9f33327 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/_layouts/default.html b/_codeql_build_dir/_deps/googletest-src/docs/_layouts/default.html new file mode 100644 index 0000000..dcb42d9 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/_layouts/default.html @@ -0,0 +1,58 @@ + + + + + + + +{% seo %} + + + + + +

+
+
+ {{ content }} +
+ +
+ + + + diff --git a/_codeql_build_dir/_deps/googletest-src/docs/_sass/main.scss b/_codeql_build_dir/_deps/googletest-src/docs/_sass/main.scss new file mode 100644 index 0000000..92edc87 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/advanced.md b/_codeql_build_dir/_deps/googletest-src/docs/advanced.md new file mode 100644 index 0000000..8dff5ba --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/assets/css/style.scss b/_codeql_build_dir/_deps/googletest-src/docs/assets/css/style.scss new file mode 100644 index 0000000..bb30f41 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/assets/css/style.scss @@ -0,0 +1,5 @@ +--- +--- + +@import "jekyll-theme-primer"; +@import "main"; diff --git a/_codeql_build_dir/_deps/googletest-src/docs/community_created_documentation.md b/_codeql_build_dir/_deps/googletest-src/docs/community_created_documentation.md new file mode 100644 index 0000000..4569075 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/faq.md b/_codeql_build_dir/_deps/googletest-src/docs/faq.md new file mode 100644 index 0000000..9042da1 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/gmock_cheat_sheet.md b/_codeql_build_dir/_deps/googletest-src/docs/gmock_cheat_sheet.md new file mode 100644 index 0000000..17ed7a5 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/gmock_cook_book.md b/_codeql_build_dir/_deps/googletest-src/docs/gmock_cook_book.md new file mode 100644 index 0000000..c08958e --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/gmock_faq.md b/_codeql_build_dir/_deps/googletest-src/docs/gmock_faq.md new file mode 100644 index 0000000..2cd9b3f --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/gmock_for_dummies.md b/_codeql_build_dir/_deps/googletest-src/docs/gmock_for_dummies.md new file mode 100644 index 0000000..1f4cc24 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/index.md b/_codeql_build_dir/_deps/googletest-src/docs/index.md new file mode 100644 index 0000000..b162c74 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/pkgconfig.md b/_codeql_build_dir/_deps/googletest-src/docs/pkgconfig.md new file mode 100644 index 0000000..768e9b4 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/platforms.md b/_codeql_build_dir/_deps/googletest-src/docs/platforms.md new file mode 100644 index 0000000..eba6ef8 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/primer.md b/_codeql_build_dir/_deps/googletest-src/docs/primer.md new file mode 100644 index 0000000..6d8fdf4 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/quickstart-bazel.md b/_codeql_build_dir/_deps/googletest-src/docs/quickstart-bazel.md new file mode 100644 index 0000000..362ee6d --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/quickstart-cmake.md b/_codeql_build_dir/_deps/googletest-src/docs/quickstart-cmake.md new file mode 100644 index 0000000..420f1d3 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/reference/actions.md b/_codeql_build_dir/_deps/googletest-src/docs/reference/actions.md new file mode 100644 index 0000000..166d2a8 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/reference/assertions.md b/_codeql_build_dir/_deps/googletest-src/docs/reference/assertions.md new file mode 100644 index 0000000..7bf03a3 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/reference/matchers.md b/_codeql_build_dir/_deps/googletest-src/docs/reference/matchers.md new file mode 100644 index 0000000..9e40cab --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/reference/mocking.md b/_codeql_build_dir/_deps/googletest-src/docs/reference/mocking.md new file mode 100644 index 0000000..c29f716 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/reference/testing.md b/_codeql_build_dir/_deps/googletest-src/docs/reference/testing.md new file mode 100644 index 0000000..554d6c9 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/docs/samples.md b/_codeql_build_dir/_deps/googletest-src/docs/samples.md new file mode 100644 index 0000000..2d97ca5 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/googlemock/CMakeLists.txt b/_codeql_build_dir/_deps/googletest-src/googlemock/CMakeLists.txt new file mode 100644 index 0000000..e7df8ec --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/googlemock/README.md b/_codeql_build_dir/_deps/googletest-src/googlemock/README.md new file mode 100644 index 0000000..ead6883 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/googlemock/cmake/gmock.pc.in b/_codeql_build_dir/_deps/googletest-src/googlemock/cmake/gmock.pc.in new file mode 100644 index 0000000..23c67b5 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/googlemock/cmake/gmock_main.pc.in b/_codeql_build_dir/_deps/googletest-src/googlemock/cmake/gmock_main.pc.in new file mode 100644 index 0000000..66ffea7 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/googlemock/docs/README.md b/_codeql_build_dir/_deps/googletest-src/googlemock/docs/README.md new file mode 100644 index 0000000..1bc57b7 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h b/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h new file mode 100644 index 0000000..f2393bd --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-cardinalities.h b/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-cardinalities.h new file mode 100644 index 0000000..fc7f803 --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-function-mocker.h b/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-function-mocker.h new file mode 100644 index 0000000..0fc6f6f --- /dev/null +++ b/_codeql_build_dir/_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/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-matchers.h b/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-matchers.h new file mode 100644 index 0000000..86be9c1 --- /dev/null +++ b/_codeql_build_dir/_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