From 4f3a41574f74384fb7eedd7b9ab0fd1c163e80c3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 10:00:33 +0000 Subject: [PATCH 1/4] Initial plan From c72bd51c607a5f05bb568f732115b59d0a96e904 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 10:03:08 +0000 Subject: [PATCH 2/4] Enhance iterator equality tests based on review feedback Co-authored-by: bugparty <1510776+bugparty@users.noreply.github.com> --- test_main.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test_main.cpp b/test_main.cpp index 0954af4..2c784eb 100644 --- a/test_main.cpp +++ b/test_main.cpp @@ -119,7 +119,26 @@ TEST(RingBufferTest, IteratorsFromDifferentBuffersAreNotEqual) { ring_buffer b1; ring_buffer b2; + // Iterators from different buffers should not be equal EXPECT_NE(b1.cbegin(), b2.cbegin()); + + // Add elements to both buffers + b1.push_back(1); + b1.push_back(2); + b2.push_back(1); + b2.push_back(2); + + // Iterators at the same logical position from different buffers should still be unequal + EXPECT_NE(b1.cbegin(), b2.cbegin()); + EXPECT_NE(b1.cend(), b2.cend()); + + // Iterators from the same buffer at the same position should be equal + EXPECT_EQ(b1.cbegin(), b1.cbegin()); + EXPECT_EQ(b1.cend(), b1.cend()); + + // begin() and end() from the same buffer should be different when not empty + EXPECT_NE(b1.cbegin(), b1.cend()); + EXPECT_NE(b2.cbegin(), b2.cend()); } TEST(RingBufferTest, NoOverwriteWhenFull) { From 0b9d7d7e9941e066400888ee762350546eaf8c05 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 10:05:12 +0000 Subject: [PATCH 3/4] Finalize iterator equality test enhancements 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 -> 261224 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 -> 623024 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..3cb649a --- /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-T8SopF" + binary: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-T8SopF" + 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-T8SopF' + + Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_66b08/fast + /usr/bin/gmake -f CMakeFiles/cmTC_66b08.dir/build.make CMakeFiles/cmTC_66b08.dir/build + gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-T8SopF' + Building CXX object CMakeFiles/cmTC_66b08.dir/CMakeCXXCompilerABI.cpp.o + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ -v -o CMakeFiles/cmTC_66b08.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_66b08.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_66b08.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_66b08.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/ccPamQtc.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_66b08.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_66b08.dir/' + as -v --64 -o CMakeFiles/cmTC_66b08.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccPamQtc.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_66b08.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_66b08.dir/CMakeCXXCompilerABI.cpp.' + Linking CXX executable cmTC_66b08 + /usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_66b08.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_66b08' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_66b08.' + /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/ccNzt1EW.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_66b08 /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_66b08.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/ccNzt1EW.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_66b08 /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_66b08.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_66b08' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_66b08.' + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ -v -Wl,-v CMakeFiles/cmTC_66b08.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_66b08 + gmake[1]: Leaving directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-T8SopF' + + 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-T8SopF'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_66b08/fast] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_66b08.dir/build.make CMakeFiles/cmTC_66b08.dir/build] + ignore line: [gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-T8SopF'] + ignore line: [Building CXX object CMakeFiles/cmTC_66b08.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ -v -o CMakeFiles/cmTC_66b08.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_66b08.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_66b08.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_66b08.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/ccPamQtc.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_66b08.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_66b08.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_66b08.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccPamQtc.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_66b08.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_66b08.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [Linking CXX executable cmTC_66b08] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_66b08.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_66b08' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_66b08.'] + 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/ccNzt1EW.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_66b08 /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_66b08.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/ccNzt1EW.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_66b08] ==> 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_66b08.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/ccNzt1EW.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_66b08 /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_66b08.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-WzjeQs" + binary: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-WzjeQs" + 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-WzjeQs' + + Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_82b88/fast + /usr/bin/gmake -f CMakeFiles/cmTC_82b88.dir/build.make CMakeFiles/cmTC_82b88.dir/build + gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-WzjeQs' + Building C object CMakeFiles/cmTC_82b88.dir/CMakeCCompilerABI.c.o + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -v -o CMakeFiles/cmTC_82b88.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_82b88.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_82b88.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_82b88.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/cc1cMWRH.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_82b88.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_82b88.dir/' + as -v --64 -o CMakeFiles/cmTC_82b88.dir/CMakeCCompilerABI.c.o /tmp/cc1cMWRH.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_82b88.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_82b88.dir/CMakeCCompilerABI.c.' + Linking C executable cmTC_82b88 + /usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_82b88.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_82b88' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_82b88.' + /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/ccN2m0lq.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_82b88 /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_82b88.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/ccN2m0lq.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_82b88 /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_82b88.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_82b88' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_82b88.' + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -v -Wl,-v -rdynamic CMakeFiles/cmTC_82b88.dir/CMakeCCompilerABI.c.o -o cmTC_82b88 + gmake[1]: Leaving directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-WzjeQs' + + 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-WzjeQs'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_82b88/fast] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_82b88.dir/build.make CMakeFiles/cmTC_82b88.dir/build] + ignore line: [gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-WzjeQs'] + ignore line: [Building C object CMakeFiles/cmTC_82b88.dir/CMakeCCompilerABI.c.o] + ignore line: [/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -v -o CMakeFiles/cmTC_82b88.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_82b88.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_82b88.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_82b88.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/cc1cMWRH.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_82b88.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_82b88.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_82b88.dir/CMakeCCompilerABI.c.o /tmp/cc1cMWRH.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_82b88.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_82b88.dir/CMakeCCompilerABI.c.'] + ignore line: [Linking C executable cmTC_82b88] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_82b88.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_82b88' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_82b88.'] + 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/ccN2m0lq.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_82b88 /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_82b88.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/ccN2m0lq.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_82b88] ==> 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_82b88.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/ccN2m0lq.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_82b88 /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_82b88.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-gm7JIN" + binary: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-gm7JIN" + 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-gm7JIN' + + Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_5b757/fast + /usr/bin/gmake -f CMakeFiles/cmTC_5b757.dir/build.make CMakeFiles/cmTC_5b757.dir/build + gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-gm7JIN' + Building C object CMakeFiles/cmTC_5b757.dir/src.c.o + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -DCMAKE_HAVE_LIBC_PTHREAD -o CMakeFiles/cmTC_5b757.dir/src.c.o -c /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-gm7JIN/src.c + Linking C executable cmTC_5b757 + /usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_5b757.dir/link.txt --verbose=1 + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -rdynamic CMakeFiles/cmTC_5b757.dir/src.c.o -o cmTC_5b757 + gmake[1]: Leaving directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-gm7JIN' + + 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..c748c557425973a860374eb490574c2f9e22dfb8 GIT binary patch literal 261224 zcmeFa3w%_?`940I-4hZn*`P?{4U-rwc)^5g;xz#RXJvs%f?CCfKo&?1NlZ2fUeP3! zby-Aft+m!tYb{l4sZ#G^6uDS0MQzn;Ra6jSz`J-w{?9vS=Iq&XNp?3t{r|q4&z_w* z&w1ya_nqrIbLPyss?hl}gCaXk?JABpQNxE=uiVdDB7Tpt4eq2l^oTxY`HUtGV3 z>kRn4;(9Bt`@-K(TyMj5Z}|I&>-TY;27kJ^-j3^3_?{V(cV73$PcR2Tm>s@fa!TGJY{t)h0IKLLxAHm&?^Gk94G2G8_ej%QIE!%N$4XU%-vu~l;Jgqge(b0CtHe1IXBAHT*ev|b##xOsfD=D9 z2Y+*M&cj)Q6F>Gd{9S~z7Uz7N_^~?t)#Gfyc`;7>SR?+La0YQU_waQ;qQuY~)1oVSbX zKft{M=O4xOopAqzbCtOMGu*py-Yu^0f%_Mn_loPk!d;E?Z{qqsxcB2+Bd-4r_W_&_ zit9(`(NRI6Yg8W|Bi6qh5MfHZx!w~xbF-9cH!=T+adfP2)7gNPT}7r+z;V? zB>W!>_Y=6E3jb%q{T%KW!oOR%U&8%L_`eqJH*mid{_ljl2k!U6zgM^{1?8Del<5@V zy5V|+UlDF9++M<;Cfszmy@kJzaQnjTC;S=0^}@{*{{F%}1n!~2KR~#L!5t|4KN4;h z+{1a0`TgxNt|n9Vz^yggYAU7~wAzZV}v5g#T3Go(A`H;XgyTXTmKO{u1Gi zg*#68#|yUf0=O4hC5C8%Y|D3ce?POBiwW0 zo+tc25$^eLFA)A2!o3jgPldlyxHI8a3I8nN&W2kp`~l(4fjd|D=fSNJ{-43UNcd~v z&KLeVxb?!{0QX|yZ-m<<{6VvPMg#SvoR|)@OxK|7R zHE>&mzZGtq@GpV;bKzeKHzfSm!VL@mGPn`pUk>*=;a>swdf~qT?k|M@M!3He{+r}c{!aK;!u`GQ-wyW=!hZ+cKMMbyaQ`IytKj}w`0s*y zxA5Ns_bv78CGw+~pO3t0*{iwa>Y|f0y60`U)?x9ZzeG$D2;BGsgX&pQ0=Y7>O*(mr5);*@2H`d)s}a^ zS6}Q@U9YR5XVsxEtDzZrWxkd@Zf|QYn$^jXD_s82<#{tBrQd^THZk=hiXmV;q^S34`=5OeJMf&^RncHbSd5;YTMpmsv7RK zw=B&M!3rn0?G7I23!mYOOvqG=HU|6o!tg{IT%6C^Z19%hBc-mEJ?X(JEeWo|oynm+ zq4gb)eZP0F_n7fQF&?fXfA8MCD|``uo~z^u8jQrGtuOR1N?YHHJN>SA)uAt{A%EU^ zzR+_W_i;{0AY@;)dV-dj-nJ{Dq1y8F!V4}enNf0K$xllv*YWsTcDekK)4`qj9+z3y zu@RTvV-^!?OlW`TdoI}zJ&{}1Bazd*tzRK2s9;7)Q$n>=rcgdZn|S&1eYs7Rx7bpu zrDPdOD^GdQgEX|mDY@HrS4E9T4@<~^pB zNZ1NqUn{1Uqi*KM)XgDOHLCM6{h{qLQ!-ieOf^!AiV^yVV^j#TOod(zz4!1b;A|}N zYUpi^KJ;PKDfM_UFM>eyBf`kXol{W{QU8OOR!|}bI1={yc2%d;+^=z7H`-OTfCDG zoOp@0CGoT$#-74RACKQDtP$_I-`HDukKvtK$vI?SK9Po`FPUDVbzTiIofiyCG8?mX zOOmegxtYn$Nzogv<2=-d`2ZZ;h`fxOYN0-Aq!|6&4DcXZk^VHhlx~aQ>swBBak7WW zeDV;3&}44)WvVa;3MmjQg7JAOXN>zi1{!uT#FR#?ysb2YLN)_p`wz@Gd!v)OUO#oc z{w}&+Uuf&YmEdXYdS!d+4}BQ*YCXDUdPTclf4Dj?YjWGx;80)qv^*a~;+=1X4}F-a z_m!+#uJCwB6Vlz=O7pF1WU_~A({oj39#B=*QgM=2MXYt(JOdSW6bnUksJgva*x+1Jxr zdLfYuFSyXjGBUPETC1|cdrYy`9_(xT^;ZWj5oAqDB#& zKe;YT4yg8v{r&p`m!ip($3OnC#k=#siT8h`Jid0|QZ$+JNYBlUHqd_T!;%q?9^)S% z@&1pL#}i>fAD|RXCc{tqVT(8Hz=`*Nq&%K_;8HZ1@_5=0TfEZ`oOnOf@<{U=G^%@g zam=W0p_r5R_Q#Y2a-Q57G`CQQE`_EPYK5Dfu3huV4B&aawQG8UOmsu~XzqD%qH_|& zshB?rf`=a5>d(C59zOaHT;8=@o|l~tLDNWAZ|i3eT*bqzY%%+=-FYGV%MpF-*cqlSuE=p)biG-$gR#arl_EADpZ970_2sEik zAx)^3dRtS4CKdZgld}(;Ce#FDRe*Sq-0a7L$i@5#*&P1-SeB@cCd{Yt`893wvg4cY zVz0AJ*ZnXb$7jEs=FsBD6P+oDhu%mN&y0hWUQ3_-GT-1maM>^OH<9_T%pbOR1Af@z z9rnW(@9-bCct`xO#XIuAiMOw8XQ$TB+TwNHVjJm=ekcC%;ED3l==b~j8hX*<02vy| zw9nM-{(!}!2X_ZZynR(i5-o?;vK{k$;+%(%MH&>mq&+>y!py687Ng-Xj5S;H3IWhV z#9Dd+{?TXZ-I~3DMQ+(@%Q{!fduOUG-xLRbq_#ZeYH4?=p&Rq^5v21ijZO_O%Nv4g zx)nLw)$;C{TF9qdJajuT0C@Ti40f8g(n?7@Gru)28$syFF}P7^Ss>cur-Qi@_ghmP@q3K01nlLHeN7D?m4yY#M4NH~&O+_7=jNeC^%sz0MkWCR?dEb00 ztxe(+Cb9D+XUO$PV!q^C)BH$9&(TzPkbU(CD@1tt1Z)@6gt~#ll?ySDGOCV(~l7l<4Aj z^BW(u`28{jN}zgX8s7Gx9<4Be#qVm^4=wPDNCO#AW$F|14U3KAm(gS--pF_omf0rt z%k64tv-Ymc4%PJ(K|?pI5!E$0;#r~*_(CsgFMM?PUH`xfAHL8tYRmU{kLE1A)1pQu zfDcluWFw=_f!+q0skVHD+tX4hnhhyx2x5@cM~S9}AL9wCu9Xt`BlqMj#+{9=%gBil z?tMq$#lrShc}cuX&?M4JxO+lst-e$<-$&%9Tn zYLPc{j_R%3q=qW+4h$NnY{FqyhV=X={k2PN? z%MJAqY3A2*Fp$f9c$q~>O(1^=bx_DAUA&l+AJaC`i$4h{39VX1W6+vMOBVfD6P>TN zXjPD3WzO-|LtDH=>ePRxswZJUbes-@J}%zM;n<#b|l8#MYw_ z?Vyassjclk7L9L5JCBGPPnnZLTl|rJ(2sJ)=6P#JIgAW39{^*kd-{=k#6ugNOdWd= zTq@LY4h$OWV5w_6;lR@yZ5X59Nlqu+7*^Ok+`c1?O3r<_FVdV|u*KUCs{URjy<&Uy zPTGwi#{Ag`D{a~mdJR)Gi-9~ra?os0dkPTRPXnY&;qd0y7kb(sY3Qp)S~)Qp z2Q-sG6+V-)l{l!8i(S5uCl8ktt_1h+BE-k)m)q2c$L9_`CT8VLtjx_PRn!q zLSK;0gBI?z4c@kKC>Fl(nbcDC^@T6VREKIWkx~Toph)P$jUDKOs-~-jIAW|KdN*?! z4@8=_4FqRD3>o4=DKp3Ct$UM3;$$w;7?BPFVO+K5Ed+q3`oCm9X2VZzzHp0$OE#Hz zDBdaY_P;f69xix89>OTr@A_(T=sSO84G+tk#LgMKK0gGzosO&2qSw6F{Fa8g@@>jU z-z+s$ifg=wJULTs`PSoIzK6`Q(Ce7*A{#BA=L4CE`5;O2wLIlxpdTVvA0AKJpLL{G8$6L`pO?3qK3~)Q#Y1olKS5Mc;RJer?;&FA{IOY zm{3L$NfL^fN7@`lb5GNWl$IhH+mQ%#aH|`BBmyPoYdoRQeF%4@a95Mt|DL=}aBb6P zz0ytkJjV$VOCRc&y&t{Qb^54CAHVBkOZrStAbseKoXklP&s8Y<8`Usu3KVKJ++Zlw z9=w<{6?3RNxIKdhx{GV-J2e)NDBBlWPi+a82iK|^ zTHlG@Wig2G@_I}?>4(`ZV?FU{^~9&wlUq3f$^kk=zy1zCeAM%#sV(cXK#K~qK1(fH zAH3Kf4xkOVkm^ahPn7)vR`>8vD2 zL`jMf+2wh~YpHn^NeF8!dg(7hJ@U3vyP`%glBHL-vi)cmkt|t+oX4{e>m~Tk20-R> zj#=oj^?thV2Ge}>Ox9dQ@yb>Mc7?@?#P$jg(>4aSLm{-vXlLZR-q9Dl&x^4mXXMRG z#ITA?cKKSK&Wb7Fs@5;4FYZ#QUqHM4{N$o--nI<1LNtiZMzLt6VgapBMdaSr8!4&6 zO=u<8WyvnWSM+A{+oW*zT3+BDm4j6+$uY}Vh%m72gBKe3X;pNA>QF^}ktv!z_nxI1 zVlM>hU}RMc-NW0t=6lqzC(j@HR&V|F4jmmR?;-AnBC^~>JQw&Po(;CG1NI`|rX>0` z9r(k!<^yq#cFj60>(Y*8pPV5cLQ&Lrug~lR=E`qH_w$cQ^%;Q=ZTS zm=!_1#;es3Y`I~nAuV5{?mX-LWxGnd$NcgsbOElk&B0@+0for}#=gjaTh*cs&G*O$ zL!GPVU_8gQpnidOn2=!J5Rw3oWY9sOZ5G*FfeEt^QoI(k=b=yNPBDK&lR80PXong) zl;#6Oi%hr6Lgo4nG`LhbAMuoY`oef~M^ zNVL3CL7l0UNo0Qm6$n1REQ>f5(WL;gjP_uqx%IZ|nzK0J{TiQLLGL%<5nlqQz z@6;zdQ)siJp)YDB)x*oIEUdXyPElBq!m_abRWGdf^Kl+8sF^|#txU;c$;%|lrY?4* z81q-??x=XiY=y*&r?$wx7{b$Yi-Ga-HWW>e3>DKpHc(N}8p<=H&r?k8C12^`#?UfFl(%ThIM~`U zJ|%Z2=-eRfukOoRhb~<*<&EY6^bNIO{F)3_+7jUrB!zu>+Z}BZx9cSYvwr&aTS>Kp z4&{w<$)+8oTy9zT+(kh7Q51)?z*vTcW$EM!y za>{DnXQTMhL^B<{Riqu*8mJ%F`e?`g`m6-{Ytd21G=CU(nfvP1vT$^+(dljB`sv5O8qvm?pQ(T34Q|11ZnZ)}5`gY5g`a{gCKshLA2{nQ znzO>(9%JjdZI}vt6XoA`^&Se278%nNWUC$>Q~vKITeV%baGg(+wBVdcVG7y{c9SH< zkJ1%&8tCa^nNrkcKv?Gq!X60?BKsNL0NKy9A5P}g-;(yhp%j@)21gl1^r}DffqaAn z>L_9Jt1ut@p?8D@fgZv%>p-jE)CfIokuwM2X>G^1J-i2U#a0vf#Of{C??{&{(Aai7 zv0ddTd@=O{{Yc9)Ibon1wkPxYg1m}0=x56MLM72qUwCb?l5?w;Q|_zQoU%(7IUJ@2jDKF?+V59`C_0sNuXXjnqJBNS&0y1Uc z5d{{i;*aBk!$!@;>LYy2q?Mb1)3q(bL)%KuEjh;@Xt~#Wij7Xl+v{vXCfJ`NHVt z#Ymo|umk;}=9Q}J(;e3l3@dVDX*3%yqGOv!YAI6`3yUh+pyA~E;=onjHQu$VC| zIajKg4PI)93#UQh$9Z%VitDY3dju}ICL4u$>JzgrYsDR-B0_Q_KR`1{i(;(yR>Kx8 zo*`J%g7|4#oC_@|5VQz=6r;i3zms+es*vlbg18f>3Rhs&p^XZuQ5A^aeoYTL3O+{_#GN=*7-_G< z;{I&V`$dI6JE|b=#HqsVU)ZW}LR1Cfw_j9v+))K_Cr%aK{@hlDd8C<^3&d}~ zsPKZL3gS+jDja36!XF9NR3Lu)MTISnDu_FAs_>J~Y;)mVf;AP0-+obHr=tquPMj*- z^r@{1$3#^ie)~lQT5Mr&Y>PW_s_^nBwkpgZ&9qz~e)~m*zK$x0J8`OzX|KYs3D#5~ ze)~m*97h$zoj6sP{IP8=yh5<10`c1~Dik=XAnwGe!nGgSs&Hsj1>(0~R48^-LEMQ` zg^eHDs!&FnX}LiB_J<0n$!jY(Z_C)3VB9vUfcJk)<7Ph8O|uvOdV)3awJ2!xPvd4W z`ZtZ6ODf_SGppg!P0@)SuNn!wc7a^iXZThVB<(;8$R9Ty^#9*Z2gBBr@G&%BhZ#kOPrTBz&1_I>%Xes<@&#g%*2(kg=Lb%1Y_6*dG@g7(ed9$Z zPphe$JGObwoIvBah6dABD3IOM+!)9X&I{nbrYXC=u67ar0^k^E3e*L&tAg3= z6pD}1TiYfew1>9uV&x&4gUvF}7W1~CwVk#wF;4Az+ulML%(7+`v}-T!t<%;~)0$Dw zS~uO)UJZG;KNh%RZcfaFa(<7{%#l9Ps4cO7)A_>%0F7qri0cm7=x$7&eN;PGe=)z@|6JL1}V zt9Vl89WtGpq%JlKjc5|NcmVV7xH$8#-kKr*Kgz$v z+7Di}=U3I#4V&H20KFONeZ!(Ms$`7|0!`;ORy8yPs>fFat0vSpRy5WusHv*0Skw?` zVm>q+Rl)kkrU{Mp^T*dv^Mrb-wNp(cje#lk!P1MHt7KhvavxBvZz-My(f&kj4 zreI_9Y-*k=8msD>5P4I1uqqhf%})V~HknjdIXImEkKq3!`Tr>XKUyj>wXr(T$e}SM zjg9q}Ol{B6sGHDSTg%Go8=!YxaB5xY{D$BnUlWKL^fckDO6DMiC;?0A zszJ`m1GRHXnwo0n){%ze>jMZAB+Z%|f@~aGzQ$=t^6ZlFoz7j&$f9GE{V&`5XBMX!T**qVaXr<^jsYT=Ol z6SHfwPs$!Xl+7v_Hiy(6GL#jtn&3%iR0W6R4`n0SkP}X*2@d7g1w&a8D<~k^Syi(y z0_m*bdZ^)aA>g7Bqghc=5gWrsu$(teVZH=z8l`#=ZzQ;k2E{&;`pVEO5~ zDEtr7N4_mbFS-mdz6XgXU*`mcsM1)=E`9I(jJSqzDeDPvju zZ#b0d4ObEh^pkmsXk3>=?drmUwSt2yBz2ad#F5Hok-# zjc8zR+x3PfE3xJx%B4BU-o}wbVuD01ke;`|XC<7N(b$_0k%77V(Z9HJ)xaysB#mN(Z23%rL9^Z)B@@`D!AY#9&C@k$PQ0QR z0>>8aq-BU@6L%4J6l9-si1{LbVc=!iVESd}sv0+s8)JBg4HYo@i`n`cLWnohP&QW~ zL^MZLsBf1QaSGsA<9ou>oWqH0W#$kws*P8*SSBmDMvv1I6My&)zFjazJKol3C?#t7wyC7?Ql^wjb;%{^QYxYsQW16MqttfA#MXQ=k3ooujXC*Vk6E0x ziPYPA2w*{Jy4Spe<3^=Bvhc{qRQF=`8AYL;C%Dm`ShO>LxS4j+HH;)_o7bXU&F}J! zJ@_V|JcQhdv*UIws5eGxqEjP}@#-L=xm@fa^bqvGGpl)64U27sTDE1WuJznYTgm+(`1XZ(UjwfosGXZgCG3gGS$4dD__=RI94)ut87%|moq1vl%``$H; zv3FCHy@T1!ZsoJV>`6C(KYEnygV`G%<&D9tRROR=QT{oY-Il7X8_YJQ0=T=E^59_h zPA}!|!R*>J03W6)zZ=Z%NLPL_m_45k;BUQ^pATl+dn@1Ou@!v)eBMX-D39IMS9vdw zz1$bTgZ-3O^VqI_%CmXwrVIezWGGMMvDIGX{yg>{FM!80l|SXN&oY(Y>q1w~u9y9j3f|EZcS%fM*6O8;@ms z2P%&q%U1mez_Kjmug9{dvXnm@%Q~|F{PS?-SI4rpBb4y5?A{{)+;F6_HG zeR3p#e;=i6&t>7Gl{a$Pnxg^SJV^OxE_-2+vM!f>IS9ZT$0!fxvg@;zyK~ti*?1Cm zOOEopT=ra!@{3$bdF8l|v41)|<=?rKHT~GVDateb*f(yay&nsCloejK$D^$6&mQQd z{JlSWrI*r{$@Ziv-+9@xbmiAx_G!BEj+edOM|sW5Uh7MgANM6BQesVWCq$t01^H7BodFUlBE!c0<5bXEq2=@0hJ=mYqDA=|% z3ih8gDrAi9PEppUvpe0&U((s%+{*K5>}n6-UwV{>)7g5DvL}sg_9&mEv6TwoHHz}f zbhcGdzV5|7Qj{mt*b^l7%c)8zowf8*u1{mjky2?qfeT;2lVNBydcwV~`xMraqP(lH z`%{z;6}C1-`9@)nxE0_pxD~wP^u1g8he8Seio$-O90r{7=y#-WGIi_KO(a{ za~?{|tsY9tH6G6Fw5zxZ2bn1er`dI`W_8Jx4ohiyo zz1gj9<+i@;Pj2OgzU+1?x(|4i`}(l=J<6SZ*e4$4mOkuBD!TtxlqG#xTdML_Z?+;; zS>A_*djbAkFXfs(?4P}q5Bsp!dnxbsVgF78+>xey(3|}_U3sMsHKG6L!+z0w6wgOR z7VF=Ns&;caipQGXC>|?%>&0VLZz>*JdsFdvt+!r0ZtYFQeF(U9V~%_ok}W-kYjgYj3@(eZ{NVmUOCW|4L_Xks6=&Qg)`Z+tZZC(%E0qlsnRS z^*JpJvk?V)pO(F|?xj3=%B4J>%06`|@1(LlF6Eh2*6Id~E~~8<+vHY$+l#&IR(7Sb zw<%9P^C(}ZvOg%wzf;-0igJA~_WRUBxM&_xJuX=UvWQE0H;p~+Qa(&$n_S8b>1-Wk z^s6b#Q|avIZsq%Qc7t1aA)UQTaqV_1-=wiSJ<45Zx;)Bl>FgfL=ypYUKb?K7C=aBw zZx!X!bhew?sB3#EOVZgRy_9Q_*u9k3)7kxLgGG);w1z4VP4>H~Y-x(}d@8%&t^6mI zZFDP7r=m6d%=Kt03#Z|mHAv3&Dbv94d}YZ|EO^}0M^nlC*HLUm3IR`~4BB}VyV0$5 z9?AaUCSEIErmdR~|i@{k%6J*Y#HZdNlh}??HQxWMA}F-am@n z-G`9%eFlAT6#GSA<=LaquM_e{U**oD*=KzR{q|_~WIyH2quBTT2zkhRG^E{}c{JqN z(*J10xa|-H8vXlF1v0N6pg^j>9Ht=NUk+3d%btM>IB)xr0zSL4D8?0slNR?MPEx&e zILZIX;Ux15M^Nm$j-ZrTb|j_7-A7WqFC0nf@W@d}K&0dyt}1w%m8UYWuFZE~tO;c{jWZTn}*E8AGy#XWT-p^!D_Ex^nWY6_hKFwqw_W}HU zA7u$-=&Rh+pFP@FxfV>kqSl{@-j*aD{k}`Ng;(o4d&4wSuJ6ruxgShf+M9izs@&I` zElocf{zucvzd2oje_J0f4|(Ve#4uOE=eMp@exJg=a7}=<&-VVN#x?U#F6G(*Y>7wt z{!kZmx@myxwKV0+0qn2oO6LHwG&T%i_x4sE8Q^-X&k)f3tFLnJ0Jg2Kvf?oItA5Jc z1K1t?l-mcerHAmahY;nnhm!xjL&;C$3LaOEYv2m1y+ z+V0B#+{0c^QFeIPhbhW3h27>>7Ax$}Zslg)FMCw*Aj++-WB%)5Po*fEJ?xbf1)-L> zDb)3x9uzv|ldjyyJnZ%qWwnPrkfQv{!`@F(HhI`5DasbDpOie`bDgx?!(L8NKJc*Z zDavw%{mQLeqp;iE$}O?6!tB>+{#-DTkcV=NoBwGC?7;AHNE&~EZhs9 zMZmtD^tm7GWiWIDUwh2g|E-e=AY7uK&UZG$%4jt_6+^^lg4NM)CaK|xWwgFjjSMKp z`LY^5g~o?7)o`QXt1IKm)bM5Jsq!OQ+hV?xL!VrTOx;W0$_Y)vhc`gn_Du7=wBM$> zaol+%h`0YZ6^kg-uzQdG9ft;NsmZ@{6!Q%tK;YBTft%n1e%`h!40JpHhBZA{PIk&E zm6IzQ168%P^|LE$>aYwg7^^VpTXHUas^Jj?qvIIyohaI0D9az7o8}Lnj8FUchwf0H z{3=B)+AO{!68aQx>H9*v{X;*XZ)vo?1jcHlFH?)2Y^;Gs-nMUn6uf~&<>6lVY-)ec zNW)7|#=nuW?2M^j|qHmrU7x&GZ+_tN^8Xp3}0?{ildb$vw z;dnaB@F9rk{?qEC`gdID8TtUpV*s`Qcv5w(>%2x=e~NeF`9Ag@K@fTp(O-oP1e)>L zs*fmg|IiQh_&ZzV`}^2k-PL%D`mmNZdyi3zHenB8)jQ!e^~v{AIaXPk?Tj%7v@;U*|?!bPA5N)l04$j@`JVtKm&v=Vd;xq<@f}G zimr-A{P})N0IbFxzP~Dciv}gABCpJk*b5DdbTKDPA+((iY474<`cz=M8foQUnZiB| zn{h%HB)lijJMb`y%{!2PoXtD50$+<6iVv`f1UZ^+7VM@HIw!OyFOxWjIVrY)Y`3 z9kk^wUD1a`P*lTQT6_wK%jXXd#x2^C0uu9DBsQPdM5Hf?W}}_+VR8kGMC_5XP+OL1 zQbv~LQA5bLO}J4Ai5&C}UB)Bz;&UCF5dpbdg!?gEEpcRAr{$5dV3UPgH1D>F+=y^P zuh3V-GAS02(R>yi8(O(!AjhX1L|P*okrZL=n>v2Xk5N>VZ7aE}&HfM*+DV%ZDiwuP z_-3jhZL4gsT}gK)(`O&QMgK)p5?cWHLr>91)hH%^QM=zet{v^7-#h-Pf|m+*`-W~3 z8ljQr$%*MV`YMKo@KMFy~!TD?X zpyiFsNmL>|XTqg=c8fxW)bz9?xEdaZTU`_*QS3A|z>|9lUgBi};uOz8wrGWy7ocPc z?~RtitD^9V7_Y$k6P|doycX>CyD;h4%c3~1O5XZv`mi0PlU^)EaJ$sLBaYID-G}E< zlVnPGL(%N2911nCJjSjFVpDdim5V7SuLU$XLgyaexpL^}9 z(215HsY0i<8?x+Cp%eLOEOf|=b|?~4+QPgEMB%e!zijJx+WFDOU;z@^p;CO@4j*WN z9l&?Jj(#MIQn6^SR$&%XH1dnDRMl4Sc&REEZPZ9s#*%2wdUW~|Gw;~^8#|~||6uGO z_5Le@_8Pgt#p}pMXDRx_82k#pKa6}TKt-}xl!fRzK2y}*R(kW0Q&FFVZE8AhgRH{e z*;j%Oa|N_wjnX3ZZB=5KZmm-RAtctO0B4%1<6SX9AS|*rR$fsp!Du$+H0;kI{lyTu3(_(z8jcDbiW|5Orv=WBq z37`yS;KIciuU8-{OWFz{xMA+v&!^2_cDLcm)hu#D70(jsp{b&wTuH{3z%JGniskilYgyIougM;;*&q&WEIb3)GB*NdB zE{Cvmm%i(&*^oNC>O7PU&1Rq&dSZ6f>>ys~J_VNx znzE4s{2=Z5e0<3{lS41y`+A`-#0>Bz+^4xd43=lmgde^=PLsabF|7-Y(r7DRs%TWH z@Oe)yv-O-BpI7)uA7Z6VFsqS;Vkscrr&9R}Lo5-&-FrmMd`qr9Q^RWngzuB#6ZaZl z7-*T;dqJP;KGSysrorhc!8NUYsb0!OQQG7NHH|9~yT53=?feE!W#Vy4sv7RKw+z!_ zVy!4~z_##&zVbKR@8*31emZ*<` z$RMv@lnWWoR2oE5-jq(9@t{X8rxWEN!E(@jYJMA=@urf){~&;WK=Z36N`Ju%9mskIV`#jjXXe0Xp7>G;+M&jXd8bBhQ8e z<+%y;Ql6;t^x8O-e_F+7q^<%y_FJ1?Tlxq6Jx;E)A zZ6tarUF~=R0j%*E(wVZ+sSte1H#1JA5IlsCE28?vnYo*>(Q_i1yAt&H-fhD1{1t^F zk$A4+g(xPT%eyVC=zG85@to`+B@tnX5Vf^uYYmO(*@^CTY zNv=^C!$VryHvR&UVett)r=?+oq4~QLm&WxeHY6?GkzoB!SCKTA#@yD;Lel^M{g}$z zIjab*G(5Mz*SsT!xmm&HXS%+9SJ$`0UEcP#(e{}}5;@BK5pd~0RQNmJC!})=|L1;s z*f>CveMj?{4rwFX+>Tc{k=8qNKDY7zWr9iPTJm&U8jZd4Fi!9u$LpjdOPnLp>Pu%t za(q*IwhB*2z2MRz73&x%5t=CAF?potBM6*5Y}haqA^rKFFZ8|GcJK>)7KJ~&rJ1oe zFt4_QPf~vuo|-3O+EvHjK}kbQz!XYq{Lhz`U&wVcbj1Cp|(56rBpV5N|Zj$27+H zJb%G16>&Ar(6t(F!c&!fI1OiYD@r{r=%<+1FU4jgiP!-oa);+ zAq|i=Q8|}_foL%RvBqmD_kJ1AbY*oOgqDj6>GSMjhE^-(m;v?n@uBqTr?IN1ecn_7_WzqirxIPk^&d-e(6uVI@sBJp z<)7_V*~x1dkA4Zrkg$d$&F!ZwpLUymC!uCs`Xwww{AybC>uTTf1EpWLG9;j%xqY$Q zdOZofWMzme|KgS*e!XP;BS)L+pYtyANog6EehJEuh?XPG?Wf_x0x?}7uaAkV7?*yD z%MiDUqs(Q)pkHiO@((8@tYAF)B_l(;3XU3MDxYzE_#u8ZfU>8hHPB=Uca$T2BW3Gjnt|R;QN?QRXDa=uH0|&`Q2Vwc#r}2{*9>?>8;-G`* z_^KJWMy!@@;xJ;1ITDM}-sE%`=~ih_4EC4}w%G>TYJ+`cgV9&S=`hAid*PU|kv5oW zgUztP8f>su8%)0EXO!h08@hHI>|Zt*Eu)|#Lvwf@eP@HwwmNhe>GEta+Lg*o=eNOT z+F(H&Y^e=)s|~i=27B5Dd(8&hX@l_!YtnZBRaO%=#0ERf1}n3{s%@}^HrO&7Y^A^s z)kNaEQmql#V8Z+vnJp<58Ps-Az1wUGt-Gt!Umf_|nAeXtAq6*lyDIMB=f*>!1|pZDIqenUBQr0m0K$zvWN zIIyX?R@F;0GMA)G$jEAOkI%^dY441z@fn#V8EGYWjg06kh!{t_^sO3s-1KV_q~Dq# z{Q%LY#Vh~#1nGkb(%+FFz3jW=mER-!w0P-9CP-hMApMOA(#yU(Uim*ykbj=&`{Lza zksy6*g7mWQj#nPpcgIUF`|fz?v#DAlY{pq2BPWdO}8KBxP(y)-rcVM)neqFJnlHG9jb*;@%lU#_?z& z5Tc!k_KU&~5Pe%R;Wr_Cg$REv8h9Q*v|5s)_DdaqoqM?lE2NjDsx7@z9vYUN5*fx8 z{7{_GFxCiJN_u1XMol@(rc?BL*-(V*(l<4;rPq>_WvLNmx#v1J*^AQ9&mlh!%C7;! z_@_6FD36w;Aa`5b6Hzd(Mu&kEL2jvin2OuQg0_v?Ipo!KDN{4Dmb=GhWJf$>Glncv zN;2}7q?Tk9w)7gGQI@i-cSa$Ql8hmsK(1<;H>nRRLvY!5|06A$_t#P0FL$F*TKG-O zSgg3SQ*Ak(MQK1h^F-hI2h>wpp01<*PsmtGGL9!1$B~Q^GFH3XTU@q0C&+YND0rR; z{+uTQAzf3KDG|?d_jM^Ff!``<)*H(4GD^oKRE}FbNDTK}#AB>DR6pp|YdTtSYP`!@ zJWJfmsM#aFpNso1;wHb3G&l2o&u!&79{}x(HqLT-4L&X2I*v;H$;8($$i>L|NvExR*l_%9qCkO(J=n zW1rVP%9j&yX41q74%)Ap#~UrXRQA^EWfwIh3pB-oeypU=C~I*qN#W@{L)@crsZ%*m(&Vg z(YQWNG1h5H`xSy_U`+ZL(|(1^JuoJLc$-0K^qdHLmYzl{^t7k;VyC!&1QK4Rz33Zw zUxT*D*w>tuvBKkC4}}WRwwrnzp5Mf?n7>Ga7kAKyMR`KrC69xv18JHhjG**+tXu@9bsc(c9u z!*PeCfga1rc8$3GdY?9d`ZRyWW|!L&E&nJ3nq{K)Ip3N=R4KB-cd_6<4Suc{xESjM z$#93Dp$=T?-h~W1VG@Y)5T6X5OhkgCD;b6enp&$2(Y{@zL%YlUN}@6>waCyOlMeGB z-#vonPJ;~BrKoxt@ay$=f>s7lIlhV7VJLUHoiUm6#Kwx$+p4VoJV^{`f_h`H&nRC` z6EsJ}(Kc>QcVBB$HcGoH8@F0y*qm-G8v`K2<%er>imqL|aQH`6MEUt-uib4od({rc z)b<+=_-{F9FIN%>R;GGWm zP6vFK1OA}{{*eRzu><~z1OBN4{<#Cb+X0tP)naeE**CF(xN@`a9PsZQa7NX@a=2NF z1MYFaQyuU$2fVifE}t02isWV)4)mE0IDG-vdbpXK&5XV0W&<7QvmEdv9PpzY@IelE zwgaB)faf{j$2s6b9Pr~E@Dm;IVGek{13ugVAL)RPcEAfA@KYS{(;V)&ZyeC#;8?H8|jn4tUT3U*Lc*bifxm;FmezmpkBB zI^b71;8#1~*Ery<4mh9Pv?M6L;_E=a)B(TN0S`Oi5eIy^1HQrmzup1=g#&)01AdbO z{woLk*ADnC4*0DOIBnZ+J=}~w#cVy?Y^4K!y953Q2mFr?_?-^;DhK?}4*1;;_&pBz zy$<+a9q_+7;P*M;YaH;uJKzsG;15}F8V0AZD1N=jwkmjX8*9z(;YW^&H?|Y z1OB1~CrgInmGRLt3OcF;K2ylis=@qu0MX-<*Zhzz$P1tzjOV!kvimJJI7qt^AOD z8U;R$CX8@My;ckST``~diqK@Qz#kIxN|Mhwqzm!CM$F?#JS=d(nAb2`NN)CTOZt!u zZuXi5-zfOti?#fqxjuPd{BF3CDDipIf*+3gKa%ruQ7&m-j1KxLE8&mu?bNk-BEnk* z-gh8fMe%{2|v$n&`k`oa1n_Cxvv{J^Fu-m$UYi zvM9uT9S-P53sBZ*cMIYPi=aa0A4>p9owuZ~E;o1%9NCXr4U+&oSX{UJy38er&?i1%8qV z_X@n&gdfK7^)54hq`>Ey=yL?0aufbzfzLJJCkdRkyE7gm1b&MVguh7O51Q~Z1^%1~ z*EY1?;M#7&Cvp1quA5Ex*#dvagr6($EhhXz5wBt@&$9)dYr<;;KE{OCbNn$A%2-g~ zOHJ`E5_r1_zmnsRTllna{7DPGl;ba0@Z}tT)q>wB@FAvnZxQ$jCVZv9hnes@1aU8eL z%(a@a2*-J)j0v%e<6Nj1+|TVfqcx%3)}FERKr!^+b9!L}8t%;C31dzj#vb92c<^eV z@6RD&92)RB92dr+0pHAVb8CqD$XN(u&p;pH_#p;F^S;Az!(c;D4B=4<4}{f6U%VlcXRh2zIq@C=@m*%rK*ZalFOpcD<%Cb2mB$9zoknf=?9|d z=Q1lE| zWugDX0WU<;mdif0&|l?%Z{YYx7W#f@3Uiqiui*H{7W&^f;O}z$6AS%NG^x4FiZ^il zQ=Oi7i@16axLrH*1gHPpLZ3RA`0uvhlR5sC1;3Hw-&pWBIR2dlKN(GYF8khsw{V=f zN&_LoE2o=!$X;&#xt)n>aquLcg2iSr)tkT~{tU!h+w$@uMvG_Z%OjAr2Ln1{CFLg{2u_G!|t>2|Hy&< zgp(=W6Lmh4|6Gm_({aiFF5o%rUJL&Z9OzHVC;s_5AIZOg<23uN9g_b&z;oDL7XI5D z=yM8)|45yW3nLMzhx1Q7qie4)lG76aPY;kK{jrA-W?Z5IBm4)hOjyjbTW`S0NPSRFr9q(kmV;(v>U z|4)GDGAsQrI6hwIBl$ni@d-LE`S%({{BN@GKLdC!v(hi*xT^D!{O{xVSvoHHZ{z%L zu<$=@H1W66s~q?1d?f$NI6g(kCI5SX=P-IJLOY6u`?>>tpD`3~na)S@KaJzlbX@Yk z26zs;*1~_i1AU)D;$NZjk^Il*_&GW*`QHRQhvB6OaY*@JbD%%Ei1?qU^O5{#ar}H8 zm;7%4p2M!O@PERA{v(dh(D_LI$DBg(MxP2u{!@YHuq!S6FL$87hvPFX{Qt}GSvoHH z@8$e2weUaYRFcO^KbGUwIv**2fa7y?T=HKEJcli?@L%OX|18Jn>3k&r4>|rb9hdz3 zpGN!}E&L0B=Q1mO1;=Z3K9c_>9Iw-H$^RD4zs|z{5eND=Io_c2k^I@|Bu}G`Oa8|K z&tX5a@E_+uKZoN%osZ-n;`jm`pDN1xcH*BR-(uDFaG_i7Gwkh(bO(Hp1O6fSXNtIt z&PkxpWzlstQl1FMFSp3~1;?Z7WF&p%nZ)NB3;kw}N1skf`csODeyN524;&9$@bnU* zUv9x`I38V>BKg0_@#xbmi5HC}KEJZ?xrO7mSn#ho9$hyg`OF_jd{$cMw{SeV4n)$Q zF`nq}w9wzm@#wk^NxzHZ_gLu9C?!78r)ZM?I*#9Gq2I#s=u&FE_)QXU44JY0e>)+vHt9Jwn~Ig z6Ykk(+4K1&@Ek^Of@p_~_YL60XQjX;pI(!QzQIC289343Y@%Pp>E#YT+WW*r@`RvY zVWRKk^b0Ng3;Y`Yr6&3df#nU|6Yd{4{mmBs>}-u*HPMd)p2OtMOi}(f3;JRc{mYzwrG@{nX&V1R z6Ma4K9R9|Zc0;Dm^MXF#MBl%h=vP_zHvlJnWq7IY-#Ps~7WyMAH2Q24|GB_(nA~+L zs_zCtpJk%&Go9$ySoqHaPV!`$=Q=$8w6!Jh9WNB)h# za}Ddwas&j|Wa=MtajIy7k+Tn}98BuKgQYX|&6&L_HVjo$yJBOL|V zj?c*sc%1`&wFBPnfGa<-k9VL0KFtCDjRU^P0soH!zS9BspKmYc4G#EAzz;FJ7e@OZ z(D9uE{eTPX`JeBAU*~{7;DEmZoaCYPcXX_mC2WR<%YCqDUjsUh7x>KH+BNMG-L@8$<=Acg*QnCGbql`_duf-7fHzLp7Y<@uuVWN{xTn zN!m5Ni%mxr@La>XM0$^!j$Od*(k*)?(MQ)S(mT?0+%waj{y7Kya|gVr%AU_pfm1nY zz&sWmABgthZs2%s=+aQ^gCX=fWR^XjLBR2RP^Ujt_%3sxzXmwPJM&a62DyL1Jr4An z9qv!`{);ZLkKj5Xaxuaam^W11|l7lsm6+`mH+sQR3!T9N(tnqI$5b zfIXiQ2Yfp49JXEOGgk2b4aaxrxa9v1$3M_` zM+~vnwj;HFlr0@ST;-9ADI)9F*>$s%9h~s^9T<6d6zB(@H`(H%-Gj#k6Ax}BS zy*e)Gf64LwI*ww`k3AeeM8_q4pqBU#&~Z$^@M9In57Ti;-^uYG={SlvKPu)EpDZ1h z^pA7=2pvCO(06kDNFA5-hu0CGqjg*~6Kp=m2kE$^f0E zbsXkBKQ7^To{mfU=Q)0yj*k%Z_&_!I{8+~&{iz%us^c)L_;EAGkJoWY{{_cS)N#rG z#EXglNjfg+XLI~y9hdyuIi9cMlK$vM;xk;wPZ09>IZhwJ)(%O38OKNI_}SwAW{!{6 zaY;Y8iTD@lc!8ilpW{V3F6po1_^CP$vz#9vaQrkKm-MAU;(vyYj}-J*aQsXim-K(< zc!`d~?BvIx&BSM{j!XKBIX+&;M+y47I9{sblKwr8PtI@w0UN zG(rCk$0zByq|dp8_)OOES%UuO9G{}&l71J*%XD1If80XibGD94`bv(M>$sGEEypW# zT+$!Ci1?hN<0FJT6&ycT$0dE3<3G`HSw44g{Cpjk^re>){~0 zbzGLuuQ)za$0hyb%ZUFh9hdF%r5vBF;4EhM zcUF1+l=9%1%F5Xb7Zwy044+liR5QD>DcFb)F8gMe2MY>j&#P*z3^rEP1e<)bOUtY9 zS2}LEuY5#hX=&M{+0!P$H*9u&T~n~3vA$tgesUZOhF4Cmf&g6+uT{xGOr-~_(9X&c=9;Vs7xGunkt=Cf;dd=me(m@OBxE{-1& zvkTpWPvqILOZ1D7c04S}8^>1(?f6*AvcuQM?85f!tGsp`ZEJ`2t#~_fi||wtZ9biC z7q&;AOtxcaDX86khc+%Q-F|7+mP_K_!?d!Q=$|^a#E-VUc~+&b(y0;Fa;G4l_i8nD zbLuNg*)adOQ6uTUsEGbY6!L$~KZfJ&+5G%~J1-I1f9VhaIk^Fb_L|haJJg@<2Qc527Uki8X@X8N*qR(eCk^V>r7p zoZT26a15s`98G=k7|LpxCxtb2um|d@Y70hDy_--q8>Yb`-~5JJpQU0tv?`_JN0pLI z5D(7;zQLFXSM!&fyZw4*A~IWA>3F{TnSk^?=$Lw>MjV|@BK(v1gm6Oa6aD&e0y$tQ zm5xSILK2%xWw*URkGOZ+QzgVb{_o8v!ZvP8I1#2jvtSa5sYm8UA`w}dUTT|d1}8n{ zX=7(4!qe8&(*{C4W}}Vtddx-}0rr^9aQ^w;9<$L5EuD=epB=hb*_K%vD#sC!9>UxR zb=x({kjZp=df4PY1+KF&5BB2du4LFGx*|Pjg58WB&MdBD7ovwS=S;WVgJZ~Un|?iH z{LQ)y5_gj=1N5vpmRx$&)Ji6n>gCXkc1ds3L`wQDn!hedw5F{~60O z8%ctR$o%HInv0tQl?}m0UlLQ6rC>3#IxwfIxi*MN!P-DD;42@6Im~DjqZb5d2;r;2 zBxj9&0~3%1HT6xEm>CUJ*4E5wtZH1uCmLf04kIalMwJJG%?)vnC@gvG(1ezbAHE-W z7R1dn{-!$-NfY6kfUM@GsoPE?A(@ll9>46#bX$o?pB(=L90~U~UK=$}e*@T2ngl+uN#%)C>B5MLn5S~6IfL;$rjQGXx(L#U(qA}-dT*XE4=I$iv_o-JU|r2*0+XW2 zgp;Z!6;>*n{6uwB=j3^C)sqjdr$7%_$b>LAd~x(X(G*A`ux+l#6RBu`EV&*}SXqw~ z@5yytlbBTJH93hWg{DcwC~e3@myt)cOwf+vDkd04mfnPgl(}dwb&m7+QMKX@!WD{} zT303h5K;+qJKe339aSdbpj@ehL+Q#T9@0t4ZpSIkN_HF6R>^KdIV#zGNU3D}bNf;4 z;t#{sil1E9CxIYBk+?^|x*BnZASL1^mMX*_Kq%0&$pT%gp0OcSd&WWP-$O1UQF=60 zqo+xaxKNVxh=ELzo-vWd+}xZwJmk=Iw+wk40`Ni}FLS5ilmld`_EQuQ_8~*fII&@v_zp2ew4DpLM@py7hpj<7w9LM!a`wE7D(6(y)Ux@3`Li1qvH4Xs zbw(qjV5ARQxJ<0CpIfULGG#So*!a(ACQJtb**FCS69YjXwwRGg}dd!k+TDhjka`!6Dj%q^>fD+lujwnuPhiX zf${(ZfQ>2RK#Gj6tgOcdJb|kDcxR?5&=|DaRH$?sC`V{p4+&~tMP)^PWoh~7$}-wu zsFs0AZGe}R^7`7QQhOD2(d0O-JXoZ$#Tz`fF^`&E8>niemxG2^`tX(yPHZLQVEA^G z*u#e-u`9r9eElVLHtAh)PCS;hZA&DoWvOj$6pY~UHU%pdH3WRsrivi*cKC?NRTl+H z>Z+#&=GHV}+XTu&A9l;2tSTQ~sr`6v4j)%v9q`xB=36M?_JXnr3l@}OC#Euf+ql=l zSQINRRpRYKK|UIY>YAp8da$53sd|t;q8;Rt*e0Mx5W7c6k75)}xpRyf!9I*p^hVAx zY6SZ*M$w@<$EXn`7h~K80*^jk>U}7Sohjrjiw$*hvh>UnqZE(6ZkAm~~41RCIWkpvw!KJ1NR^L|WG-_K~XyPRvFgXb=vx5c+^>$!VAkfg{uWAZTF^HH<$RuU#!Mq|*%^ob|Oj2TV znU81ARTDLdkjcrI#IjJWXqwx>Zs)C&l+TJ6yd>3T{GWR7n|$W)i=(ss@37tq!d4O1&BX)0uX z{el1=bq~+4tPIX;tiPlZgWb8od6gK1*EeE}W~)ZeXqL z6U_6sJXk3A&(Iz*onKLbywmp_PKIMQqxzAw5pZc4M)jj~aWMsf{D!PZc}h*>Co-<8 zHh^giF#t6P6%B`iqJ?wV3t2GJ)roTpWj+9I3^deMVfJeNd}J{_k*hezUS><&u_{ET zJM^R$54)|C4n?IGi=raN{?jHIb0bdiOUp|tX`(2JpfojD)znlox2_bMM~|d}XylSm zagd64G3+;NEJ`uSDYP+@15Hg;b7k)9cyw3E;aUaK>KC8usx06$Yh_i9L9I@Wq)8V_ z#u{uTL)<4x_6}^S%AqrAr;MFvV>e->j*_fkv|h8zn`h648rr0fZ5n9P0;V*urPQV@ zOq7A9gPZ8z#f>8CQgYi-Zcfcq+%QfyNQLR z{5x1OreL!C7mO%_p%JX8FV{BIpE5=mAfu}TLG;(d^9^=L)I6w>1_(DoU{4s^$9NlP z>gbIPo?aJ+=X0UPE(!*ke05W2{S3QaRnSE6y!mD2^|nC@qSbe5gETafQ-<%kLqnjhnp*gn^)eRY z3f%+xGHz7$aA9VgCCOrq_N923n^{?KoJgJY|$ zJ?Dr`0PMb2C{5y7Rn?VMjg3`{D(eE$K&CPPlL^+BW;SygvdD1*)^}CqEIjb2tHjfc z+4BT~42`*N4Dg^NmZiE=cW3k5I#$M>tvfaGvb5XX&bf8RpxenUGlRq@RAM<)l-pQS z|6hA=0w?E`{r?w&*c%ZMTOlIWED~ZF8VLy@Egces?oQGqWNDp75CoYKdw&UH8yU=q zWyoYK5nF~J3?stK#GWxhtP^BLEW`hvdd}^7_pN)?bGv%X@Adl6^Llkx_q)zHpL5Q= z_0&^OJ$1|XzR}?RX$_A)!W=KltErmdqfhTH!#!e*IfkriFvnl!sKC6BWrlBXrT1VU znO1Ut|04G{SCQ9Z6GnT5@_8q3wdTZ&)RJ46{6`Y#n=2t7xoLl0xV(AMDE>wyZ-a#! zk-xv#0ETNxVw747qxfq{j#k69-W6Q3)deoZh8HlfTh+S3|U#y zo2I#@lpG;dr%FR)I46_qLZp4FK19Tf=tOkX%J^3dNlV-}r;5JNNIgU1Gm2?Yblyqu!afy! zVdU>qDz|hq$StL4=u-NWGI(Xdr+I>BEtCGZ=Lvt*JY8Q>hm7e*WYEgkvyVwPA}^Lm z|Covl9MhQ=g|2MD2Yr$jxz9*AEgQJfBYl_RW5+bArO_)}awSdXnWZ|2n3jGG`AkyOeD1#(w;<+@dH(38q7Rj=YhM|7&C!3&QQf^QHe{c%U+ zN6pjqC3VP{enbW>Ja-a!k1*GTg7Y#zVw|c6X#+-dASz_jS?}DLaQOzDqw11(-0Yj6 zxjW1|1j$EZ%zerBlHSS}nm=TIzWX8B{sKM+{0-%8%xzEOWbIdg_W{qWlH4KjA2vVM zek<^~;GLCA{Jw~@JNUui`+y$;J`Q}i`P=HA9pJwK?}s?;&EK-g4g1g=oP8@-?)K*x zaQ4T3!@S(h{#=Oo?9Zi$!~RSMXMbjZvp=tZvp-7${M6N?3z>}6#r~WP{wezWXK>no z2+ltIQ@O~q4;zZ0*@UwXn<+c*`%neWK8y+Q25{Cj6`XZVQ|{I^3!HV$ zK^)fg6gcbpBRK2&9-MWpv$}LM8AtLR!8wk<24}qwgR|bJmAm!+4V?9Uh&Zfw1vu;d z4xIINUBh43z5(6`oOKNaXI&$eyLC+lXI)bfhjm>I&bn>{XI*~+=Xkvl;C}~aU0;E- zuGQ8|`sUWPH8|_qLAgvX*3|=?b?pt#y2gUDuCoIC0&v!KEja7CRk>T&-r9yb+uV5-)Gjf0XXa06r6P(3eLKQ1o&y-+)v)Ic0Qk1@I3f_fcIG^ zv6p%uF+cYBh1g>1E*T=QPA&KW_nNKkoo%Ki>jpKR*ia z4c0XUnN9lenEA1NXb=84_~y#pK6C|VAND~U_F)J(`%r~A?8C|6>_a^``!ExneRv?i zpA7I7;CvjlSg;2Z6KRYrt9Wo#3qZ0p)JJFN3q**AR#GE(K@3pMbO8tvB%3yGwxg1ZQ3S zz**N|L$aE{|21N;?m*7X56>-ti;Th|6vP zaMt^1fX@eKU5mk4*HYzfU73yi*5uDRf>>r-&n^-X|x*f>8AIX@o&XT8sXv)(@|ckBHeob`T*ZcU^GSyFWPV9T4Dy!CBWRaMsnJ+^wq-oOMk{9M*LkIP1C_oOQho&bmGh@Grqx z*P5H;`^maCR_@l-6`XbLi8!q5KycP|C^+jn2b^_X65unzIY0Zh&)3Czj{#@BwaVRk z&j)9{7b6bqod(W&Zvtn%FM+e(Hv@brIO|#o&br!cn)Jb~D+|uLx+r(|pSy#zu6@8+ z*En$2b#{PX2+q2$17}^gDR=970-SX{i#QywMc}OKb#T_TUWfd=VqF~ryf--K=byn@ z?}y;5_n*q$dNR;yMVLaDsa|2CcqoOS=Ur>)-_GJTh}ab)-?xl zIF3(&v#vjav##&KS=Txp{o}haIP2O0oOSK4+^uUM_*^4pU(XIf9M&})oOPWH&bn>} zXI*y%_yTaw&zCmO_ks2P9h~+4L%Cb;I$QYX=f=w2`MDK1>+KBAdXE8Ty(b3v<;o?` zC(!?C;B&yQM;xA4`7Jp6@G#;$j5vP=p9}sL;&9xTfwK?G!P$rHwlqP_CjDd|x&`KyaMpDhIP1DTz~?EKJbC``S@0*#eRkYm zKpc+m5^(n66U5>8w%ytUHJj+N4`s^T$NT2s?8A28?8DLE?8ArvzeKs@^OX6q_5L6D zeDG@#hkdvUoPBr@aoC4N;OxWeh{O5t9yt5(DLDI(&6=dm=04tc&E{|c9}LcUJ~F@? z0(?qx#9=>|g0r8WfU}=lZ=27P^J

z?+MO+_5){KgO#u9)Kv%0x+WqH>$(t}bzKV1x*i8-U4IPlSHM}<2jHyhOXaINb#1U+ z(of;6Yg6U!eqdX0*0mEj>pC8sb)6jG_28`Q7vQYxD&=ln_ky#o2N8$k^#^d)^&B|s z`VO3Rt<@>%r~7!{5S(>w56-%}D|hQU9GrC>g*dFM8k}{F0%u(}g0rrf0X_?yb`Fb$tTPx>g_#>-qtlb*;I5zW=OiZ*bOiNPrInXI&$}S=V^wZe5pxv#zTVhjslD zoOS&MoOQhh&br&jtV_}#;jF8J@-~LEuI<2C*UsRq>jZGtbxMFw0B2nnfwQiw zmAiG_2hO@4LLAohBslAO9-MXk8=Q5my<>j9k#_;-{2aJb-k$Z20B619mAmy`3eI}3 zMjY1rOK{fv8*tY9COGT*Fu>dIoYWr!uXDFoF7u7Yy?cSP4}B4b$7wa- z?89ipVILa6*@sEs?89tu_Th;D|6IBB;TiPdTkt=CXLd3Fn9c1&J8v!`FMGL*L;5%=WTHI=Og8Af7aM7i6fl- zSzo!k-`fnF{n-Yb{TU3-{?r8cROOP-v*yP>Uakb^<7FD+@bNMeoPD?-ark&y2+lq% zMjXzQzk{<6AA_?GTXjwPEd693b`J2}!8yK%fU~Yj#I-<9A`g8v(FIKCTpGe%~UezFf+DtG&^7dZQH0OGI@1Hjpb!Qkw} zMd0kiv;coZx#ann`LXl-N$~mL&ms={@CG>h@B!j*p0C#31T~xJvJdMhcOUQV!P$qc zz}bf*!P$os0(=TM=lQe%zdgY31?PTpQIA}?xp~6)?}M{%UnqCy&-%M3aooPOSMK(0 z8*uh*M{xFS7&!YjI>7Jj>96ZCaMtyla<{Jcz&Rg2MI1gZR)VvxOs{-CtZR30)>R(h z{lGb1!@ybBDCKTlQ@~l*Wr)MNt^;RXw}7**Mc}OKodEv;oOOK*&brpzBR}8x_}vbi zb?vO&orimXv#$NXS=XuHtn1tWzZjf#-3-pU?o{rM*VEvv>qW%jcr6BJT}!}OSGzs) z^OJRL6X5mWtZOnj>$*(2Ti0FStZO#nu&&3zS=ZCxtm|uV*0n}&f4w!}tZO_t>pEMx zTi5mAtm{{Z!@BMPXI=M$v#t-oS=WjH|8lSV z&J=CqYzKSB-xd4?#OVqCBKTf`_y>XW`K#@|#@TF=53g7MIXL@s($8|{1@?{LJy6$0 z`}yr>fz$rj{qy$Jy;Zr)lRuds+qZ{d&-_=y{w3I#m79Oe=GI$Tp2G$F$^f4O{@E(| ze6~CwALm5$p&a}q@JevjJ3PRDtz7!B(EQjw%mRNI`~k!n0o`Z7`FLD}IDB4M4n7z0 zS0WA{kEba?$;>`LS`11pf>8afrkDHXfYw?QF#1e7g>u^X(SI;e5LbobzoqIOp5@;2ifa z13c5u6lpf;5A8>SbG+VCE`58@{Mf#g^*8^RP558UkLA}WcgO2KaE{Bfh_e`RUI*v6 z{0*Gr_$A_Vyw*I_1T~xF!|~c!x#Z9B>I%;B+7od&UI&76ybcBDc%2K*{$Cp4(*yiF zaE{lA!=&0|TwXJ`c3iFpe;s_)0b-r>hmWtV!8u-gDwn>!VSa4kM#?*M*3~@wx?^<8=q(aJ*)NbG+t)bG$wS=XiY^;B60=ZWcbi#(;CY-cc_7e8BwJ zeoi|=q7;tHqu?BukCjUt_W2udj!TnWPraG;Col*`^G+Bv|7TYZ;j@sr|gi;cD2K|P=1TU z?K%j(R!{tFoRif40EeHU{BVc=Qu#3szf*aw!yi_Ds>6pVKYy*}`FyPWa))oJ{?|La zi}GJP{5<8qbND>vk2!p#^5-1BMDzKx!#_~_zd78lkMOC(XQ}TtWB!qE<&sP@AhUZ;HE`pxs~wPy1FaSrdO{3M5OuY6ir^EhWH zpW*PEmEYs=*Okw4_%P-39sW<{3mraF`I`=ZPx&&3pQL<+!{;dPv~lyg?D_)T9DY*U z#BN`Q->$r$!#gVX)S3A63`51@ar+lKryDOjK@C%gRze)4D*3rk|JcoBz{({5D zDPQdH9KPy0iT_H6 zPf`0e`20enG2K$_%N)K??YD6FdTQUr;a94CPlqp2enYl-U86P5ZybKD^4SjmRQcl$ z-%0n&&pW(M`ClA-^1b6$`5pSN99L2{5Pt5tiz8`exk#VQC`-$d0k&?{4E^5wLaf;ariLhJsrN2 z@^XitqF~Xk*E#$t<&zx#k@Beye_QLF=J12{d2xorFI0Yy!#~tG za~%Fp)t&F~Jv7cjhmTVJro$&FU*_=Dm9KF48LFGvq51gktoA*3Y|dX&UheRJDj(qR z9vdY7Lmhs<+K+Vj;c8#!@Qm_F4*!|*sSbZa<4<#VncBa%OY^#}RsOld&sF|!hd--) ztzDbP`GxXL9R8j1Z5;kr<-0n(ogSC$mPf_04;T6hzIQ#{Tzn{Z*RQp36 zzP|FK9e$kh;ST?+#y@fI=5^hy_Vo_GO8L1C@3B$he~H8YruNr5yk6~Zb@<)N?{)Zt z%I7-#8RgG7{I{yR$l-rc{ha}A4qvYE|K;$N%2(Z|dEYuJU*F-|D(~p<9;(~f z;XhN}!{I|T&VCLbuKZAkf3Ec&?eN1j{)v5?=Wma{>m9yS?ay`idhK-F9sYvyYaRZ% z@>?Bl*I#(V;fLw*^s^5CtHyc7;a8~rCk`L3e5J!b&^UYbOX_f6|JEtD`ycx{VUoj_ zX#A-Te_Z)AhyO|W42M6c{N+Ra`LsQ(`FQQ5uOHeuyod6v!^@QK;_$5U-VV2~TMjtf zpU*_)wm*|J&J>4FQQqkA;mU7vc)jwO4nJ1;(t-YbwykL1pFgSnZVvy8^1U5?zw(0} zK41ADhu@=oqe_212P?PzX}@V=H^|}NYn&4tZr67>+2LzwoYNg{*L~2JB?a$i{f{T> z9{>NX4|*CX_rBzrt7I~I*lrI)bMxdZ!|nSlA^VM!>04m0FS82f8{?cCsZ0A(bT5e1 zrF|*7zlhYOeJQ$^MC#JM6x}N#b!lIU?p2Yxv@b>X+DKj6m!f+^q%Q4C(fwtlF6~Rv zy){yo_NC~`TJbUaN!pj9dsn0`?MuhgFpR(Dq%2YzDqxAwSkFB~_%Y5um{9v{l_cC!9PQudxJC1An@g|9|Hb4cop~;;8T@Ly>rcv?ZdBO&*Sii zVE=>p+n&dm2m9~M-!_gMtIH*ILUa@mDc_ zTl>MVUlp9+qqiD(t=dZ*^6}v8!}-ePrj7Y!`*1Pr*@v6K*@rv9*@y3y%gwvy$JVvh zYUUrax%F+OU1Ynb@9-T|;@z185XcMLe|{R86v-PB<7 ze*yL!-`8QkChC0$_N@2g0Jq;8DE(x;YYH%%^s_DM-9WkAu-@&!S#MWx);mSH#9wND zY`s^)p7q`g`?XN-t*~dk_Xaq>ACUDvkN9h&-bIMRdfx|UyNH`ZGX`*l#S{k(wKvtIjo0hgbR_^kJG#9tTnUITm9dnY*SeE^*GuDymy&}>rg z`{u{iyNPnQ-tAz&9_sA^d)8~O_jl{v5B99L0`b>Jz5KpH);k7qSg*ZaUUXUSi-`XL z>b2M7yY;>g`wdX<$IxZH{Qg1mRrHNOiO+gBRxbT7L%o~Bp7nMGXTAG?v))F;Uxs>b zggxi;ov_~!_1+76)-^Z4=YzA}zaaibsP}Eyv)(VjS?~AYthchQDbj4x&kxOyozEvI zcgJ@O>^DZer^24~o)h2~fwSK05x*Vk{T1w4?*rhh_YdH#xBXgDZBp+?=GNA`jdHi% zuCU((_4b54>n#s(exD%g9ftVwox=9{cO>Gl-ihF>cM3S`eGTzHM!id6&-wfX>^DWd zU%{UBuBI18NZ-iU182QkD>tDt9Z>HMuxGvdfV191z*+B2i2n)d<@YeM-Und68S0&j z_^j)h0JonHaQ9d5B7R5I`w`->-tWO#@7n8_V$3G-S#Onc>F1~B$Ij=IVb6Le!hUnq zdk*Yb@5KRrH8{uj*NDFb>isS3S??dfS?`PBtan>|fJnWcq267UyN_Rf&*PS;w;cAY zcR+w24bFN;DVKb-`Mzw?)1Gf<5b9Td%v9JXvphaMpW@a;f)o)O$MYIlfb1za8qm81}69ngG8A zob~<=@jId3hhfipUj%2p{2ol!yPICWFZF(bdiPT9j_)C`-yZc2fIaIS8sNjhS#Ja4 zcSgOFV9$CR!CCK3;H>v^#QzfY+RsC{^{%aNSW16(K)v?+E5)AmZm#w&-yWRx?uqza zQ1AY*XTA1w5)z;FR>7Y2-jDbzQ1274=X`z<_B*29MX+bRZwI*je5>TidcQ&Zolx(p zdY!x2v)=aLtan>*)_aC>6FT!x)O!K!S#KlkcSgO}z@GK~D!}gsXT6Uh{w}EZY1p&g z*T7k?{Tzn$hxP8EpBs>R|Al&grd;e7 z@v#x4!>Rb zmkxhc`40|%N%=bZc@+6KH~*Dy>hLyto^(5h@1VS^!@DZq$Kk`2AL8(l$}1gi*DI-V z_?2pZio+jOeul&6E5Fd;A1J@l;r~#+ZEn<(<6d4b)Gfew1pk+rQ}+0?R=KqIEAwM{ z13B!^R4)6SmEb>z{YvwTtNzY5sj3;qq_*!_y+!}tr-Uh4YB{MdXJ zDtGN)2mcoF-v$2;{7dDzzJaf9{+3PR{~LS*aK^FwC$Z=LzZdNPj5z-e}N4;f!-*AkJ)X#(4;w`E&n3J|Fhf<^F-(9*?;B+v5>8e|ap( z=JJgKkLyjrndcS(&iw}S>;`*sd%WZ3Z;yA}JdX>+sRw8O&j4rslLFixH@UivuxI}E zc*@P+9#6S(9tp%*1kU{b3eNoB3~+l~=IY9|4Zd-=$7^o>_IS;WBj+%Eabyi)%bEY4 z;LP71_ep$md)(*hRv-@hZ;uDv{O$3e8|UmmoU6c@|8?NZ(;ip4`P<`4S9ccTFn@cz z>E>^bH{CdI1mb)F&iuauXa3&>xIJ!lb<6bl&gJ%a*3I7@&${;e1mX+=XZ}OLnZG?Q zmiXlMxY*ULLmc+s9xuE3+v8<7&W(XMv%#7FL*UHQ9(TL>+v9FmcOl|1e|tRc=5LS3 z-8kO{;%p>_W^?0g3eNoPdWUj1xn1v2_#tMF+2gML5NCzi7g>HZIQw=SIOE%O6W#dd z!=CZ42WNb{o}%2%_;x)-H~v$I!}xE2GyW2A#<%M%y75=X^$(11*IyKS#<%M)x^WH+ z#5oq6ajL+Xr(Ks(;*;BT4PD)f5r_HPbs63K?YfL^oaX~^-UVm=c0EWpPrJ^d8-HC~ z7r{I`fiu2cC(@12>qa=wk3by8KM|bqPXTA2?YfDsF0UJ*u3h(0?5X<)#OLdAyY8dg zpKoB#IPKOnfz2lN%zra*=5N<)bmQ+2d&VCE&iHm+Mv24tc0ENm{`rW*_;x)=H-Ed1 zqZ{YRKpeY%q#MVs`{>5`ArNO%Tra_Tw*Y6o+XT2>-%)gFZ`WmX^EnK0*dM#Dq+6F= z57LcuSs;#GhtiE>*N=4LJQs-bH*ogneQ?(Mae&)(B1M<>c6~=TpG|Px1^Z*yr*!MG z>q@$Djt<1J>sh*S>^hWgoT~$I?gnRnW`VQb2Ljx#Hz~Tbx9dc@`MiTT?2ldN(yhy` zPwB?V;<^jQvFl>GaqN1QZk*!-aZUqgf6fADz2^mZ)4G*Tf9!gbZa#M+4(qb(Wx93o zIu`EFdA$nb*!4BtICfo3H=iAFT?gar56=Gd0cU^u2e@6wQFLi<*Ku_7nSeOV$F7U% z)@9e@bmPnl#908&x_EsH^R(+?y7}96FVy!~WRyO5M8b0#9z7jvE+3vk7M$yS}L#$F582#u*ZbGaj7% zvDfEF9M*d#?8)tVrLMhQm(?eK;tsjK@r;xPZUaNP@a?Ruzge7ioY8-I7iVf@3u8Q-qk>c+S0t-A3~LmbAx9Gvm( zdaG`HyFRNM{~^R-e7o+c*fTz_3*tQaHW0_IZ|cUe>zlgy?5o$k2xmTa9aA@sUB}do zGbs?qUKixXxe4~1Z@&ug-vqc_k5=L{j$Mz|&2u5*uwHvzkejDnU)GIp*OztUZ=~0a z2xt6V!8yKmeOWiYU0>FXZ?E%l+%X`AMCokZa&KppLwpP>#&MF=ZRehS2)MfuBR)U`Pg-Ng)<+!F0XLv?hRe?qrjPu zT?g0A$F8UA=4038b@Q?7^1At423_WJ2RQSw>)^Wi*!6VXeC)csZa#KhUN@h&q04-} z24_BYJzX~+yKb(Vk6mZi&Bv~%>*mvKQ!{{ObNON5%%=jJ^G9(m4j-rGx#&rJ@+-i( z{=gz|UO)ULxV(pM-xpgS@7FVa1vul|>lsXl%y;sWT+Z{u`LN#|@%1!@Txy)@Wq#?) z^URT&kMKRruYL7@dwreo`^}GyKUwd$T>35BmB~%6Z*mQQwZB%m*!MQStnS?o*WGO9 z--xpp;x=iD_cz?eKLVWdWR!9@4&P5_-=1{rZ9acReA@rrvA1=t zB8@kj=(3-CE0-IN@1d~g_?`=U>Rt}c@%<8<^LmL( zzz;;6Y2dV<1My!_U%=0#`zMQaoXwobZ*~v#QS%&?*)7I?LgSGZ%4qMeXDV} z?b{TG+rHg}`0U&No;Q;Ni~l`ung^!Y-j<1MHrY*c9{%rnGuM_(YdvpXAq_U0+#GIt zZl6b1fb)6NelM#G51%*p2|Vv`T^;Uc2E(4?%XM|QpE*hGMVHT;H#pqxXC6U(?q}Wv z=kw-Q;Cz1Ui02*h|2=P-fiTr9NruD+>bRNK3|WV4SOD!-Vb}$wE+BBBX0ZLUJ@~zZu>LE;hiLDv)$})JHF2-m$=;D^164vzSt12A9-B5IXI7p z_XOwbg>iVj$#Izsd&a*M_Uzj=uxHeJmT2%OTzg% z%~ufT1lY@GKV=hp&gTvBcwwHqfHQtMIP*LPoOzA|XPj%mnWsI!}MS~^ZW%k<6i^LJnsc(KOYBYoWFxJ z&s8wbndfHU%yTC^zJ4%;+kWm2d*;b?KA9&!&%!*nCAhoXP!rbGtbk(nddZc=6Me|^Lb3U^iz&iZ2r%{o_W3l z&OHAC&OF=UbqDk80nR)JgR`H*z?pvoIP<(5oO#|1&ODz4XP*2V1oQj>_Ei}7ZE;?U z_WWD}`S5`K_yE6Oxs2DU7_Wz6&px~i&i9o%;`|l!*(JaSD0g*_ggtdfgH!jn;MAQP z;BP8-b$R_ib-zX&>i!JZrBj#dK$4#bd&c=KIPH0zJo#T>&p3A7McLiZzB{fDCqEdR zaV`O;{dEC;FF50T0nRu-1bBNr(JA>e&avQ(b5ekx3(h!Cf-}xb0scNX<8)ouBxp9b z&j$qfXyr2BR>R|K9PIf%>16@?{|ngP7qGuSVE?Cp{VM_cPXqQ}1nj>7=j)4hxE`3- zKXe1<>z6~7yL}r7d-iQ~zI zIXJHecobah?d!o0luLY`Px#ESx93ULF^@IbOo(Q$H#b)9#_8zT+q!mh_%6Aq<~><( zo|iZa@p+!)N$_U*gY$W3D@ojJk_Wl0=_i|TzMp#%IPDw3<=lup9=kKZA5ktha?OLa ze+u@D|BnFA29EPj1Lt|3Ny;T0`}qj$x!-;k_CGUDc3!;<`~3{J`7egO%qu&-OC4^< zcZI|4yt1EXmpmm-Cvz*CJ^x_2owwVokZ{iPeU!@$&u?4|&hh$HfIkY(^GGj)GtS%K z+&?S>=lP{JI1cCjxj#7L9Hm_9<+#}Q{Y8f3;=b>%X=KJCj`Z1%%Q+6W<1)qJos5ob zH#^*pi@kop9hYa-Uh?3$ybsR(?eYLWKBu0{vl=5}=i#UTKM%Yd_BVoa{?7^U_rXUZ z&cDF>foHJ);W)Mp@GZePANB-ie^fRnGu8Yv!w!JnA#U|1AH9q}qleo$dwZ_N#*kaF zKP_Ny&*h4pjVJb}8+&*Au{dYIo^ehExAA@~&Y7@hoY;KM4#bJg=bS*C*nG|l#EH%4 z{6L)8d@c;ciOt7e+a_aM%6MJWO8HzIh!fkNO9OFY`*V39PHa9`2I9o#^M8RjvH4sb zh!dNSJy%@n{JE}`^0__`C$>K~2I9o_=jK41*nDmY#EH%4SAjUO`P>$W6PwSk194*W zxg!uKHXr*Mq15?&cPr)d+d!Py{@fRc6WgEP1>(f!^ZP)Y*nA!c#EH%4p+KD2d>#(O ziOt8pCUxgwY(9^*Qa(=v;>70jhd`Xz{yY_k6Pu5{hTrXTY(CGnQa;ZG;>70j$3PtR zhp#&(2JEZlU|+WmdMl^~JPZCYIO8`2;=crY#$O1|_%9+(7wG;8yc>8ecyI8Yh|fGH z!Jfy%C%~S0jsRz#AAvKzy~ajTVSIZnfpEru0dcZ&r`ZI>_TeDZm8K7qVb45=As^;B z5f%wnDp7HH9R1!BUzsx44v3)ocx@r0_1@`R2v4K2m!LyR2*#s>E zXCE#I#D5C*?8AKUtOPfkpx8e2hi;laOocuBFckSP&lAD3lBC%LeE`lr*lSV5j`5#> zJ>$;<&x(`T1jY8@2-KCP50}B7c^-{?nCD60SxM4tg5C#bA1(>Re+2f7|0sA?f}2fH zY#&a6Zkj&WbL^tWJ`6@a%ySfYR-DWx$X*jA|FaKQARoqm2yqyH4tQ3AnN3h^9}a_V znm$Z}J@Xude3<8G@T??hHbG0l*$2C3ve+^H?_tmQ_8L^N&&n^eiD_&f?6srfpQaDf z1AVZcrIk3$^JL_ol{?KQ=|0|I%D0nbX3W)t)` zaQ5Msf%td8o_&}Jo|WKc6BOHr3h1Wk!|kwV9}Y!6%yTSwR+2QEpe5k!!>xh%x51wA zZwJpxaI*=D?Za5;rs=~>*s~A)kPq{;*XT-qS@~r)F?|R2?89#Y@o#}WP0(B5?8Ci*_}9Un@u!1lCAirH#rEN7=%(qz{jg^r4n#i8^HlJx zBxyE5_L_6~pM97eh<`QWF#a^~tOPTgpx8c)hi;la%z-`oP>y_A0CB0`>-GKVV)Dfvy!CQ1icQf@1qn3Eeb(SO9zWp*Qkj zo~MInB}uah`YSm5U_Y}ac8q@>>=}PDcvhUuCMdQKgHczSKD+>X=4saokUW^@8G$@s z24^3h55zwk_KZIXJS*a66BOHrq0kNWAs1ZZ?_=z3{mfskzp|Y6fAQogl6uKo&a|gG z2)EZ{3F-%~mpqiH2WD2;=SKxL&fIBd>zn zYXb!>1J_G&bL2a4y;L?w%CuL~2VDX-$2)-wXEB!1o5932v{Mm%HbK z?+g3I;6DRj0lpu&{XC%Lzdv{<-T4YH2k#Aj0JvROMC=a)9|ik^zM-UoaD_)ze}!R_b%B+e1wQ(-?4 z{C4mP@HyaiZ9}>HRq#QuUj}YJt1fr9(I-pEXE5wLfFA|k6Z~lKe&9pEM}iLpp9p>o z_%!fi!R_}MNuI}nzXW^xU6XS6QgD0BApBEsd+oGvuHSWn0Nu9Kg9g#9ve4Z20j~x> z9J~g+0em?4Ip8C}?e`6d?nrR^IYi;L;IAUiiQsR6p9J1U4|*idDDd^bM}zkSKN;M9 zK2hSF0zMMsjy!GUJw3n@Co3Z^x#kGY5?CA z+^*FicMk?X9rpHnd?d~p;P(4>gii#&9C6MBzaRW8@W;T<244z33H(#=bHLl_L9OI- zF8G$<_OkUONyEuG?-Z#wQ<*OujG=N`x`(F7_K~uwmeWX6bQZEx6csRQqY*62DsG-wZDH{nY+` za6yyxIO8#JvA3@`J^`2bOEvyK!NvX!jlXW0`NwSXul!W&<9QQsv0tk8L%}7!J^rWx z7yGTW50k)eGTd(Vdpabn*xT>NT?l)*uTJOFYv5vkuEw`7R>ii_{A{Jq$M$r~UFMvz@Mt$-9XK=CKQ|;SqWd1Q*&eq(n(D>_ti~S_E?*uMB+4km_*>(jN`zdNa z3|#VmT%Z4H!NvYLwYT4YA+hCWmcEGpxnplX2Y5fY#Gk73^D%IV-(DXVuYybba(!|C z7P#1NrS@goKe3hggLJ>Y8MxTbR{L(?;#0Sc`DM1fz{TFKS2zk>;=il=-&4WG{&+o} zo(eAU%XToo%=UlaVsF1Ebso6HpQH2nIdHMRTjMVQm-sVwG{4ODA-LH8UhQ{jm%F=Z z{#>B@kzU|pzluICD!?Uv#jc6}G2mjqmfBwiF8L2AOYE-!7yBt{e-HS~#5DK&0dTRu zTj|CU|$JKs5xa7aC z=J6u9*e_B0W#AIO{4n#&Y@dUR{W7)hr~4OpgaEZUF)>#WK_9v+QWbmnm zH+}APw+UyCZKxTZ*=<5YeR4a>{#9Q)re?Q>+KCOB-A2|l)MR!WK4C&82X?DE_J}x*v2|nm@7{Zm z@jvji6HlzIm;0)Y7(edt+OflH>nqQwsT(rB{*(z-!u$5=5gEB>Hz%?L>^pJ9sG4yn z)lNthTO8ZX`tb3m*B&ro!swI6jjbKmFu1;E+yqn5gvy4RhT0b9-^A9Cv5>yTvUw39jeeHzWdQ;B8`jNHu zEfv|r5ow;kZCvH(vsya-1@rfyF|{@IgG}xX6An1hJf4Qs*VMH%dw2d;){Z$bKY#m- zubptj_y!s7)9M;pOQXNZxyC&3b8T;`;DB)>E5^6Dj_%GVm{14Tj~~}Ca9rQ9bq#0s zH)RZLY4F|Md1PYQNjhXy?YM(a8#AVbz1hQkY}?*UFxijoGg|hB=HaJ1sRQb3&1m#J z^|YFn>h*FeNCtr=|h)(qC8HG_3$u%^QY9xeRH;efYs zHexq90%(Shq;2;I$8w znvTH=UMRFos+1Q%EmL%-L#h{cEt2Z#K9*9vPHmZxThouc*lv+P!P8IhJV9ajw7$tH zhGqvCsa*?I3tqnkTjJ4;aP}xikGd~|_#lOu6g-YoOm$B#EehkwrsWTHUs5GR^W^3} zfKu%7d`Yz=Okp-HIECU#rX^84xkNs>`4Wi@;mN{nZ16eUr=Q;0qwGEqiyo%kML`lC=^3K8Cg+NqDQJ<92Q3w29-IpImB#DIkvmh>XalVEA_3iB&? zG7p@V@}!d5HKnTOlvP?)pKGD2_e4r^0>C5mW7a8SC#NgY##ZZ;v6GW4X=AH(%Gk-N zptP~oI%VwS#8ukZYF!xHzRUI_=gkV{XXx;_d$)t?Yt5Tdx%bq}>9mtZjHs%eIHJ~^ z<~Q&Bjj2s}p034u&5o{96qf!#xNj?!R)S)5aqhEn@t0?TV6~*n(T|a;LTGZ4K$@awA_P8ppPNv{X zzg8=;<%-e8xlaT|UtP9Zk)_^U{ zv{o%K60MTHUWd|3FFd{J2P9f0eZ4T}Kbd|&qE*t@E0z9}=?5fQC4Ieg>pz)(Kq8<1 zgoc`Wb78u3=~!h$_im?+8-40&wN-Tu_5F{iY}m7^YQ)5e-Me@1F}!BN=n+-sLThs^ zbpH{?vb(uzyuPZTzGig8g#IJ?R@Rtbefyd_dXB6;vF5Zf4OJs+$J92|_OI+!)mJZ7 zuOBZL%=^!$?NNE!=!V(@>PDN(dB=}27nK_Qs@z5NefxIb>yX+8b1D5%bqCcLig_S_^C?%>tEnGVC?RF2Mq7tw{Ncza$$S!+RmnVU0~gP&#J?#%$e&k zW5$oD8a>Wjz~9jS&_Rcp4Emma#9mcZCyhHT_vkeb;&J2a$C@jp%>yiVxq1JJ(Uslh zQCT-|a8>dUYF4}X7|VZ3&1qiY!>RW{W9$0WjxpCn_dW99n$crUtFP@p+SFwB2Hks^ z>+wyM=7Sz)Ct-FmvJ0r}SvBae!Sd6sszt%amKMDG?iFTC8wQWBO!kdO?5ShD$H>|S zlYftH81noGjJ9K)8*ejYE!o>j;il%MDe`0899U<&*|H3CyYb*4^v(}LW$(b0`hO)m zU&q{0ESUZ+A0YqZ%QoXbC|vZ>&>au8!kv+MVExFWZqNLHtIp_gqZ_Jf>g#LFF0*M$ z4z6taK%D=rx&zGEvK2Ao1fK`N&05$$f6` zM`HDDVTq~Y=Ckx>kQ~d#)ZgThkKE$=^+>wa>qp#tmfrf4mm)FsH+keEx43?NA=K*i zBW^xRZ~e(D$(Z_^Jo1rST))1KZT0#QH=m`q{^SaenEIPM@{wCyzka}^)$2#xe3ss` zRi2YNfo4Rw=QY!GCT-x7c9T&e`TV_Zo=@4t^vv&`*KBdmJb_!kXCaY%{w19Q4m7gV znEC9|bhjk6l3HH6a=y~i-j4_jM9D$(`K1|&(&S1SidK-$*P8mhut3{m{PU`5I-ELk zNzIH?$yX5Z>A67X;v(dg)ATMPc1hif)yY>;@Oh@9Z=;9W=w5t~CQv?)RNai0D6Oe2 zlgrms(A%O{f~4(jnn3wHTGZR360O_YbaMHc3a%*)UP2V=Y3eJ2On|&@s$QlJU0M(0 zWb!rijJ)0})WP^L`5aR9F;bwkZni`$Ur!6J7YwyE{xiYxGc;bKwC1)@FW=vS>y1-f z`x9d1KR`Pt&_@u1726gLjME=+bv@f12I}b3Ixi zAG~|xMi1uG^sbca(F*zC-4r)^FrTJ(iCmAkd^WLrwh=K(&$nf# zKfP&3hid)o)16>Um3`4rrDyLRMh4Gr2KVa)2jjsIrDxlcQ)k{zM+PcA^A?_$@+Kc2 ztK|F(&KRUPD;AtFEeTe71tp$6@r^|5p2vzi9xG^KiW4vCMjitxV2F~lEjXkNyy_3;nl^yRG`n4)e-?J_Lt4H_`RsAx(75_CN{6~5G*NpI==<#nG;V<89A{+Bx zE5d(z;@-@E?Fj#w9{+VB{O5T5*NyOB;PGEC!hf;HfBgvmWghiXKac(<5&lCx{_P|DM|u1=jqso7@s}}4 zJN{EW{+mVkPxttDjPReS{`$3Lx&8O%5&n;Q{I`hkU+D4QGQxkU$A7B`|CJv9tt0%` zl`pz78~c}y@Xvbuw~6rY>G9t-!ry+sC-dJf!he`Yzf**NoyULs2>&S_|IQKq(>?w> zMEKw1@$VAhKhNX8V}$>!9{-&p{FizBcaHG?&f~vJgnyZS|0w6*t`Yv7JpQ{y`1khs zca88L;PLMk;a{!(eExhn!oSYr|JMlr$sYg35&n%H|JNe?XL$VOJCM^pf71{=p~wHN2>&G>|FT{BQE;pB3Rh)1!ZO zg#Rp${-g;1M?L!IMEKA5=${+mztE$9UWET*kN)Hc|D_)N^CSE}@#tR=;lI+Oe_@1w zW{qUW!TrCyCQrNnSXceI|M_`@e>;!9^pUIqklz&f1OAF$_W379{t7$|0y2*|BLXy%%gu*g#UDp z{?!rwGd%j!BK+_1=wB1zf4@in+6e!79{uYg{1*5-{f8s`xA5rC zjqvZ{(SIbuzne$@(Fp&2J^GJD`1kSXKOW&<;n9C0!hfhoU*6MAyZ;;M(f>n){}_+{ zlM((CJ^D{Y_)qre&yVoG%%lHwg#R>;{xcE&Gd%jwM)=S4=r4%yzu%+(T!jCl9{uMd z{1Pg^LL>~|Ah$uH$DD8M7)2o%;W#32>%rx|27f%XVxlw{qcN+{<JG<(C_5&ZyTZC&Ex-Mg#NxB|Ft9Z`+58ykI*0N@n1JWzuMzJH$s1m$AA3@{fQp` z2P5>Sc>K#E^cy|?vm^9x^7wBQp+D2(e{Y2T{T}~z5&H8y{&z*_zu@t2AECe4q1 z`h7h9*$Dj#kN;H>`olc_+eYY*^7vm7q2J)~?-Zdw+2emng#Kk7|IQKm(>?ybh|s^? zgqq2>m4<|1%@>Kk@i4^7v=XZq8u)c5AZJ zli%wkf1XvDNAj1w9?#Ov%^z}1Uv7ck_I_2OW-`l%BtVY+|7!l!!{SVb1ZO&%Td~y3 z4V7jxXPwaWXR|+&sCl%D`BP%L{*%>zR^BxCm({npyZIwmzsZlA_1DutO?SEVSD1Tz z{*9`yZ-WQ@?+Wz(tjuO;Pd5gz8fjG70dsMfPZ;P|BnOy6)F7> zHVOLjuTJUzV8FjFrT_NkeL|o99@Q8KGyi>p1+*^e;0YOHk*B(lIO24%>VZJ z!}8w+^fT4soyio_zbBwy?$KXi;<@^(nb$eK{*_gWdU5^l1NuWf`u{TVT>Ya0`q^qx zFRou<{C)ke^XSWGVqN_^0{Y#mMZLKGtpWY19{q1jJXingfPQ(ks2A5?5zwFE(f`iG zbM=Rs<2>K^S5%97as5i;@9X~@kN)>2o~!>*K)>5Jo*{)2BEM1#+3Ts2J}04^yOI7 z?f>wA{*09R#~XiN|GRng+j{i>7|@@UQvaENem{@?+8+I$>-qaXFQtB0!5MjPgWK}z&1| z|0vb(2mP!^|L}nRjFk2F3+T`C)W5Aq|B`_Iyp;9-JfOeCQ@^Z#;Ew;Z0sZAE>whw! z-=%9Z|2h7hJ^Jfz8(1U)Dcx>pwf7za(Y-rw8;KJ@xnS=sy|I&x}Yn{~rtJ&-2tT>z}#xuVogv z@b$l&>YMP*HnY2LwzV<-zW%rEUO4`Hc=QJb^ea-Ji1Nt*k*8fUCf0n2IeLeb{Z{i>Sg(>TAZ~T4ZztU6xejfdy0sZAE>#q#x zcj=MLKaPL7NB^3Des*Ls&5OT~~hphy4pfPT5^7kmEub3lKFr~W=3{jJ;k z$GOa_{KQf@-n6mz=fPRPF3&+2oNB_=%{=Ag+-yYDfR(+2Dp&tDY z0{Tl**8grmztL0w0FVCmoBGGUtTx^J&l-Q<_%HUb6{^qiALP;hETBI*W&Ixp^e21jAMDZJ-@FlFaN+S+%KG;<{=V^F z;Hm#;kN%Yb{e>y(za*f)(o_FXkN!IW{mhB!=Kt#f{qkOg$3Mq<^gC|m?|)YHw@=b& z`t2TnZDRa={jXDfKK~8#=pPl(uSi*cML>U!r~VT>`i%kox|H=_8qiQZnU>&Hsvk{$fx4qdfW-2K38Szu58LxdHv`o`vHt*UGfjN3z*%aUu#t4ZfP)pzwwh-O>e7XJCum@@xUjK6RGWcErDV*YadWLs6Y zkKezjzMKC$Df2&kOMm{$Q|8~#`1|so=*fSQC;vxO-_3vj(Mh4j`oH&9{`@P{zu5fg zW&C~lFZbkso+tmiRNu}2mX!JLytP07St;}HZ2W!skJ`I%{#@Y6|5nv^^Zy}b{ySy; z`InuXj9;<-Z*Tm4`7iP0|8r0NH>kdwf0gPNn?IXxr2-T3?RU+BsIQcwP;tG=86)~6)nU#$OM2J-Kw{>A3cXMz0t z?Yn9&0q#Gq@Z^8Yc1i!-{Lf37|3dY5-@k86ng1V+zpwxEJo*2hC;$CA`SX7#W&V$; zznlN^l=;sw{=WQs%Z1TqWB;dl^55AUU>KZn`@jE~oO{9b`eMuNF7Z?&^O|HhR0Z)W^``A_!bf2Sw^(^TKh|DBZizZJ-TdCL43 z2l8L($^RZt{yld|`se1q|M+zC=O*=c_dgZtUu^zdXZ(HruREY{{@mxu|I0xBx1`Mf zxLy78XI9Gmk2e0k{Fiz1pY6$iw(7h6{~=}m9e4BRUsjiH|G$ax_vK%GU}66s@Z^80 z>bv<@seZBj&ucdSB;BUpb?Seod4HRm8}C({KaI@ai#7i)=KPdwa{ghCC;v~Zeo}5? zY<_2dp8UCY6G{GX^*^xsj(_I(1awn>(Vy$lKdNgoemxwWYSowTJmJ<>|FL*h!2i-; zB!+HU*3aISnFQr;_wn1P{(D(N)phG%$N2l^PdBZ9f%;4RkDI@3{`UOIaMgF`&vO?g zg6{cOC!NeZ^>_QXME&bDZ+m0)ZJh18`|Gcmns^kee=FnftAFJQN#|Mrlb-q~s=izQ z#TTcm|26e@>z|?iKiIhI3~>iZI_ zZD?%%E_43h()jzvf8m8mMs}V{{?B{zKRBS@sQS-2danKf0sUnj{TDp?Q&r#GG~14u zmHex_&!+pN*Rt8$m4W;xtG}Ex;^yZ6Wg!2|l%#(%)mi%Yk|+PF-TjZ>ve}8_^LD~( z99REX$2XZ(HjcepyyZ>#=N|DQejcdNcTf1ZCf(cfSDZf{J8+-7eN>*deCY(ZkTY<+dm z8#n)hjlVDd>~%^0+4T}f$$zmY|F=}%&41-z62H}(%Qww?oBz-~{Q2h=D=@w*oB(eA zmB!zffBEf6{`Pw?B!Bt-D0lunAJTs-NqirhsMg`?KONAYE{naIt*!ctzI=a_tKVbK zR3yS4-rY?wzXsZojO)H5_mAcl_sQ{@v72@_*Np|6PInXQ;k;d#Tyx z=JVG;{`1t|_Q?iu^IsImf0^drPaP$H`Ti*DZ{xPuuKge~9|K{qOQl zVrX@&o7K1f4>JC~$4|GrlL2A=%RKqt70AC_^^5jDkbiZ`{1*lCpXkY7zCX&=-$5JD zW-ovLC#!zZ{;R*+{{<=YA7uP}{h#N_|1(eicLnlalD7YW{4-0E2H8H@`C|KL|6dfy zzwJGR^XGF<{%y<)M1u?VKiMUTLec)KzuW&&>R&AXLB`+L{|Zn3D?It%707?G>KC2= zf&6Er%zsfJ|LLCmzw+eYW*>k5=c#_t{;R*+|F(b24@33D|znlL;^|v~j zMw7n%e`DkC%fFu||Ft~%4^n;i_%rkOM4?#!X9x1HQ2%22|2B|+qbL7$J^636zkmKr zR(%t`*_LhgUnWzd{%-&0rObbr@%QzAu_ylxJo(QG_es`EOtDpFjPUCXU7W zpEdrz{ImC&WX;C;zmX^Z8;t)d#?GBT)v9mGYqn*Z{g=snRPN7zM#}u(GycB(M|tw! z#FPKt2l(@!r~0){zFFu0S?cf3pDynuhQ<1SxAFJoKg*N9tRL&{e>xxN&%a#t&D)dB zwrsQi%=}k>H~+en`42PxzWi5u^55K(|4o7XXQ+OKldqfqzXSO%PnrM9K>p>kOtNO< z{NKtTxBn*`{hWKoyuH_K%QpKjletm--Tqgof3f*bv`&%m+#0=JaH7vW1*-4PpK{eN*8fie`Oiq1{|ABmmwWP; zkHowAAAN{_{>)Q-b9qIxE!*tBOy(-}cjwRYl=)w7{C)lJJ=-K}wtlK7$ItSSN;m&M z1@g~+m^dD({`Mwo|IpiRMnH}~-25l1f3f+qv+?)kKiQMNd?d%s|0>mY=g$n)H*XI% z+p^96%Vb^+i4Jk{b@M-0{oVc#RsUlBKhya8 z`d{{YldRcHdAUvIk6hB~=Kp>m|H-Ov-ri}pWt;t%$?SZnfBwu#nSW>F@5_IvCx5vl z&dtA0_1*ciMD>q#@^$lnL;ceZ>Df7R``1|_5%#(j#PyUNk-|hcA)j!V3*Uf*w0si@u{UmWL*8jbXzc2r8 z_nTzR#`)jRlmA_+@8(~w`sVaZvn|`~zf9&U^>_O}S^bOU|Aq1Q)36|Jlah*Z(D+ z{EzkI|4|_SC91!3G7L?>vrT^`e{?nnc)s~l_K)QLV*TI7`1|tj@}No9Y@GjcNuT@t zJ6!eM{+Fx1xx3kxZT4R#Ge403^pyEO5y-#JlfPV2=H}noyg>KOpLwdkqm!?jf3^C% z^JjU={EsvKzW&egR)XB{4oc!(hS$wSV_w}!z>Q}3w9RH5;=syQGM25@6q4jD1ZOwrL2E#tmV7Hqca-0x)mPxR>jJD^{o z`sM0xZ`}E}GN8Xe^;!Q}9{sLI`^UdAW&JxDf8Y4mJz7}*B#-_L0sT2C>%S(TzfkpA z|G6Ih*8=)0Q`Y}#K!4(6h4oMN==U)vXne;{*)Nk3FE;-B8-HK_7pp$&zrdq^VL-oH z^}E=Kr?+jL|IZERPky|xez~OC`rGIA)rR`(pPI7%?*sZvRG;<#!lOSVpuZqx{ez6Z zum4k@D6D^~M}KiZe|gIKUkT_hQ+?KdiAR4|^8&>;|GKS62D*zg-gf*f?qd9X^*7Ed ztp75P{`CRwh(%KV818+-%jk-^u>J(W8He zIYH>_|Gbp-A87o2{a>m2tp6&H{>1_P%s-RFyJ-IQ#_j)Z6-$nJy zt+3v@`dcjl?FHBi~#`yc{pQZY&|0a)qeL#O@%KFC!^vj+utpArD{oe=ld;cpL zxMK7F-hlob)o1-PJo=rF_xHbA^~;kqntr?Ue;ecP>wkx53hTesqdzvFKO<%RqXPQ# zRG;P1{BH^9cUe$azkH;^`ghQX{|M;UrL6y>fc`?&uT~w||H&oEuKw66fB&ba ztbdg8_w~QqbA|QGC4H{`69N6jDeIpb&|j?jtY0pParO5w2EON?%*v#3<;hLcZ|iSC z_iBIry`L|vU*1x-{&xJ&H~v2Ta@Fr*h4j|?TRh45`})5`_08S6O~zl|lCl0)|6j(y zr#~uX{hu3upMJRrnr&w8cXIqCr!-yt{cHUCGgH>TxAFJsFH`+$=*uZ7SO1=X{=$^? z-x1L7_d;R)a!SP2|1_Xq_H~kY7tP<^SbzKfvVi__)vs1VX@|TdxBhnghYt7mzqjg_ zTOqx*{uWmne_#JAUNmB6o2iDPFE0tLztz9W_^)DYHc~r#GgKOh z+cycY_V#Y8Z~vcR{B!wRptmbE|8DxfW(6iuJes^J$AmzjjHbqYg^^<>9!yL9YK==I+%JlV-nX4N3ejnA8k6_1)49%^zO> Q_mYnEF!gauqUOo}2U8+f%m4rY 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..69fe2e383d129e08be4bf3c82b4e4a8c7149c9d8 GIT binary patch literal 623024 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 u<01tJKkrKSM#>j)VFAmm)lCDzH9qe?4u}Vpg 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%0A~mtBu*zd<3(&h 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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