From 4423210529362203b7dd763eff6e29269e1fc685 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 09:58:15 +0000 Subject: [PATCH 1/4] Initial plan From cd69180b66650c2f91d7836e163b3bca3c772f31 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 10:01:09 +0000 Subject: [PATCH 2/4] Add tests for move and swap operations with non-trivially copyable types Co-authored-by: bugparty <1510776+bugparty@users.noreply.github.com> --- test_main.cpp | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/test_main.cpp b/test_main.cpp index 0954af4..49933a6 100644 --- a/test_main.cpp +++ b/test_main.cpp @@ -336,6 +336,76 @@ TEST(RingBufferTest, NonMemberSwapWorks) { EXPECT_EQ(b2.back(), 4); } +// Tests for move and swap with non-trivially copyable types +TEST(RingBufferTest, MoveConstructionWithNonTriviallyCopyableType) { + ring_buffer b1; + b1.push_back("hello"); + b1.push_back("world"); + b1.push_back("test"); + b1.pop_front(); + b1.push_back("data"); + + ring_buffer b2(std::move(b1)); + + EXPECT_TRUE(b1.empty()); + EXPECT_EQ(b2.size(), 3); + EXPECT_EQ(b2.front(), "world"); + EXPECT_EQ(b2.back(), "data"); +} + +TEST(RingBufferTest, MoveAssignmentWithNonTriviallyCopyableType) { + ring_buffer b1; + b1.push_back("foo"); + b1.push_back("bar"); + + ring_buffer b2; + b2.push_back("existing"); + b2 = std::move(b1); + + EXPECT_TRUE(b1.empty()); + EXPECT_EQ(b2.size(), 2); + EXPECT_EQ(b2.front(), "foo"); + EXPECT_EQ(b2.back(), "bar"); +} + +TEST(RingBufferTest, SwapWithNonTriviallyCopyableType) { + ring_buffer b1; + b1.push_back("one"); + b1.push_back("two"); + + ring_buffer b2; + b2.push_back("alpha"); + b2.push_back("beta"); + b2.push_back("gamma"); + + b1.swap(b2); + + EXPECT_EQ(b1.size(), 3); + EXPECT_EQ(b1.front(), "alpha"); + EXPECT_EQ(b1.back(), "gamma"); + EXPECT_EQ(b2.size(), 2); + EXPECT_EQ(b2.front(), "one"); + EXPECT_EQ(b2.back(), "two"); +} + +TEST(RingBufferTest, NonMemberSwapWithNonTriviallyCopyableType) { + ring_buffer, 2> b1; + b1.push_back(std::vector{1, 2, 3}); + b1.push_back(std::vector{4, 5, 6}); + + ring_buffer, 2> b2; + b2.push_back(std::vector{7, 8, 9}); + + using std::swap; + swap(b1, b2); + + EXPECT_EQ(b1.size(), 1); + EXPECT_EQ(b1.front(), (std::vector{7, 8, 9})); + EXPECT_EQ(b2.size(), 2); + EXPECT_EQ(b2.front(), (std::vector{1, 2, 3})); + EXPECT_EQ(b2.back(), (std::vector{4, 5, 6})); +} + int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); From 40a89ad66f4958c4014543914509b912a0f6af45 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:12 +0000 Subject: [PATCH 3/4] Final status update 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 -> 317912 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 -> 651376 bytes .../RingBufferTest[1]_include.cmake | 5 + .../RingBufferTest[1]_tests.cmake | 53 + .../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, 123410 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..d3ca8ad --- /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-0xR8S8" + binary: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-0xR8S8" + 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-0xR8S8' + + Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_c29d2/fast + /usr/bin/gmake -f CMakeFiles/cmTC_c29d2.dir/build.make CMakeFiles/cmTC_c29d2.dir/build + gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-0xR8S8' + Building CXX object CMakeFiles/cmTC_c29d2.dir/CMakeCXXCompilerABI.cpp.o + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ -v -o CMakeFiles/cmTC_c29d2.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_c29d2.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c29d2.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_c29d2.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/ccfH6ysH.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_c29d2.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c29d2.dir/' + as -v --64 -o CMakeFiles/cmTC_c29d2.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccfH6ysH.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_c29d2.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c29d2.dir/CMakeCXXCompilerABI.cpp.' + Linking CXX executable cmTC_c29d2 + /usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_c29d2.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_c29d2' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_c29d2.' + /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/ccIZqiHh.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_c29d2 /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_c29d2.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/ccIZqiHh.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_c29d2 /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_c29d2.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_c29d2' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_c29d2.' + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ -v -Wl,-v CMakeFiles/cmTC_c29d2.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_c29d2 + gmake[1]: Leaving directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-0xR8S8' + + 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-0xR8S8'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_c29d2/fast] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_c29d2.dir/build.make CMakeFiles/cmTC_c29d2.dir/build] + ignore line: [gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-0xR8S8'] + ignore line: [Building CXX object CMakeFiles/cmTC_c29d2.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ -v -o CMakeFiles/cmTC_c29d2.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_c29d2.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c29d2.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_c29d2.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/ccfH6ysH.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_c29d2.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c29d2.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_c29d2.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccfH6ysH.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_c29d2.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c29d2.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [Linking CXX executable cmTC_c29d2] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_c29d2.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_c29d2' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_c29d2.'] + 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/ccIZqiHh.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_c29d2 /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_c29d2.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/ccIZqiHh.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_c29d2] ==> 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_c29d2.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/ccIZqiHh.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_c29d2 /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_c29d2.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-Vio6YH" + binary: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-Vio6YH" + 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-Vio6YH' + + Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_01da3/fast + /usr/bin/gmake -f CMakeFiles/cmTC_01da3.dir/build.make CMakeFiles/cmTC_01da3.dir/build + gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-Vio6YH' + Building C object CMakeFiles/cmTC_01da3.dir/CMakeCCompilerABI.c.o + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -v -o CMakeFiles/cmTC_01da3.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_01da3.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_01da3.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_01da3.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/ccqH09hR.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_01da3.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_01da3.dir/' + as -v --64 -o CMakeFiles/cmTC_01da3.dir/CMakeCCompilerABI.c.o /tmp/ccqH09hR.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_01da3.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_01da3.dir/CMakeCCompilerABI.c.' + Linking C executable cmTC_01da3 + /usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_01da3.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_01da3' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_01da3.' + /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/ccJd2gIq.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_01da3 /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_01da3.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/ccJd2gIq.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_01da3 /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_01da3.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_01da3' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_01da3.' + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -v -Wl,-v -rdynamic CMakeFiles/cmTC_01da3.dir/CMakeCCompilerABI.c.o -o cmTC_01da3 + gmake[1]: Leaving directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-Vio6YH' + + 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-Vio6YH'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_01da3/fast] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_01da3.dir/build.make CMakeFiles/cmTC_01da3.dir/build] + ignore line: [gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-Vio6YH'] + ignore line: [Building C object CMakeFiles/cmTC_01da3.dir/CMakeCCompilerABI.c.o] + ignore line: [/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -v -o CMakeFiles/cmTC_01da3.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_01da3.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_01da3.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_01da3.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/ccqH09hR.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_01da3.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_01da3.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_01da3.dir/CMakeCCompilerABI.c.o /tmp/ccqH09hR.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_01da3.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_01da3.dir/CMakeCCompilerABI.c.'] + ignore line: [Linking C executable cmTC_01da3] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_01da3.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_01da3' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_01da3.'] + 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/ccJd2gIq.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_01da3 /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_01da3.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/ccJd2gIq.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_01da3] ==> 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_01da3.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/ccJd2gIq.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_01da3 /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_01da3.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-RUHY66" + binary: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-RUHY66" + 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-RUHY66' + + Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_e1e6d/fast + /usr/bin/gmake -f CMakeFiles/cmTC_e1e6d.dir/build.make CMakeFiles/cmTC_e1e6d.dir/build + gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-RUHY66' + Building C object CMakeFiles/cmTC_e1e6d.dir/src.c.o + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -DCMAKE_HAVE_LIBC_PTHREAD -o CMakeFiles/cmTC_e1e6d.dir/src.c.o -c /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-RUHY66/src.c + Linking C executable cmTC_e1e6d + /usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e1e6d.dir/link.txt --verbose=1 + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -rdynamic CMakeFiles/cmTC_e1e6d.dir/src.c.o -o cmTC_e1e6d + gmake[1]: Leaving directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-RUHY66' + + 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..49f1871 --- /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/googletest/CMakeFiles/gtest.dir/all +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/all: _deps/googletest-build/googlemock/CMakeFiles/gmock.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..8e49ac34c5d4af8323ba0a31af4aafff6bd56c8a GIT binary patch literal 317912 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

GqPslWfLnWjl80|YFbN~Zb|*Mi-x^0 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 OH+t88f$9q`HvhkXq8A?k 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..6e2f71c5097018b295c4556f6e8407be6cb59d86 GIT binary patch literal 651376 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≷_TC1p4X-I*xNXgASW?Y+%!ipkshW$Cj;%zkNB71-c|QGT?6j4yzHI0ceOG1e?N&T&vTjZ*l>!(v@iEeIYkH)AFh zzUrt2-xEx5k83q(pl_h7Wb83|k{&QindLZM$REWl&8Um2*r}j5xj-n9?ApRP*!8vg z(`w7X*a|yqRJo@Aj5<<`G*tZdf$T*K#1O_JPoz2hioe^_?yc}NeT+hvF-#7_y6zlLwx2Yyyy6Fb)HMUZ;EiyHG_cx;6pN@KeH0pgs)cb8w?>9xg zw~ub_meZPGN7 zpu}&-i?QhqA>G1n8S*&vRveB+Z&L;Dm1^J}d)$FHIs)FyG2w-fpZbzt4ZM3aco`A! zy2ONcEFj?>dm%Qxe<0nW_ZQ@G=sj{M7QOcOr5boGGVW$AtIcqY}Rz z*s6#{ZwToYe#^L>Ve3o9Ke6a-s^Gm+4ZLIH9C)K6;Jq9ZUI_Vx{i_DvJsP}>2zXtp z!t3!hSGv0K^Y-S^eaErAft`~wb0gQHLy5PErU;*(MOevN>wL=IBH277itIF>f@Kix zSBE#1eQ#TxLd zui(8N3*NlFHve9i@S2?n-W*Y6r+H&6ctag{H%fR6oues?N(@v-2Y?ZAtd@amih z-WdwsC$J1v`1kD|o8C|0P7Qq-A(~2`SP45Ew--Hquil$fte!qw!JI(uI!JFv7yHCQq;zaNQ z3f_6K;I(n!ohRYFQAATw1Af^G-YQszD)esOWz)L~E=ZvF)DyuAiy}MCak1b{ao~-U z@E#p|0{mW7@LI-#=XKz6ef)PZ-Sg!lAAC&2Gc1us4pyt5s6@e*F06Tv$}!TSVu zp$h-L-C@)F2^Z^O{~kO6e#=A=*uPlt9(Ldjl<+oV-Cfxr@P=z@b-Ofb7OkB^&s1q+9=-bFfv{V|Z6dzXw`uHs%M z`Zzh#iJI}zHqt^bR_KIT#O%ZwAkH}~K@3G4{r9$+bzo*Fg2%UDVOw6;2YTVXGn#81 z!BP0K@wVUt>HhEH%`ebGD?VrDe#jh2Aw+QSuP700Lw@DY_^w>f_c_!DfgWN0G1fm`n9X31b|KCMJ)BbYK9(XNK-^f;cTi0%ky z9kr>0{i&toCw@j?C{I3n6Xc0A5fvN*ojYK@NQnd+j{r1iea_|r+y6#PO8^IhvV11#)%fTD&vko`>rPyXwTjBs) zO7NVWCBX4MY@eaDJd;f%H{hKl{SQwX2XNOZED;jKghl)={X7XhK(QeK^1?GayR93iV z@tC&%pvyJ>H8R|PFy2*?g2K73SxqL;yB;p~;zV6KH()bar1#>4I&o$kzT6^rf`bHV zZ4(a=X3>wP;Ke2vX%$9OS$PwNBe+YG+|t@@ill*M!}Q|L|O) zkyU6a^TS(v6lw-6snF)SjjTpCAI;{MBMHnr6c zdJW2E06e>KRK~0$+8QGvzk+aU9Mu*3vT$LTo4^WS)c->7_!3wUzDcCgenSt1exWDK z*@TpdsvK^Zy;^8OcsF)<1sZ05nmZuW%Irv8iYCN2z-%h`3txutV06%yk*aS6AaXD$ zm@2nlMNNS2L+xHxqKOyQ> zGG8F5No>ZrU`hw^u-ZKCOOVlSRicO-)Fd6g!ltjh!bStfdpR~R0u|x$JKBiI#3@0a-oId{Ss!OjI@{KV^2LXCbfg4fcUZ-5cRN8sVcdbVJEhXNz` z5Ik!Q_$}Zld)05$hq_ksE|5SMTr_~pCCdswqGiL-t2YRN)$L$#0ST)|s^4JiFao=( z!rCRicOOO~-~gVhWFUyF_(bb(a(j6KYmB*w=I>nFAr8YHZ}5&JZ}4(lP2$ZkjRgnc zC$&=DixAj@F`@@&yfXgc-2la_$>C5k8tsA+cLHNq$q~e~{0+AX2kXJts9{2W#y)(^ zHa(Eg&?s3w_8z$XJkrD)*d)%0!3LwhIWE*D*^MD(;UELwtM>-RBw>sR7wSc6nu~=a z6XQ#`IPf=C$gPpvd|b5AMmS8dz=$uacvS7*2fi0hs&M9gk@^%^fa=HQ8o@&Nl))h_ z+3n5v+k8ZnO?FrKZT|*1A&hv*m?JBxJlDuxio;NbtJ7Lz!R9&@kJA`Q8rTMs%r=4o zuRE#YEqjcPLJJI6=cPvIY)q*!dbknLFxc%5Un%pUb^7pC%nvYr?UiE$j(|(P4p698 zv;(1J=u`4?BbZHnf|0mS=+n2Nz7Cj1+@FKq4L&42EBzZF?QVd8=#tfi;$#XmCx>-I zb22g3wKpJHhWY(}QA1j>T;VenD_a(m_W%ny8r!)t16F>ZTvVd~(|B>cJQ8;PRb z-QXoy>*ZY;Vuqo)Ql_B~L$h}qGts0IegJo+2+ z$-8cOG-E2@db795ZiX+Sn;E&DxnL;CYs)7aSkE8Cs=e-3V$M?p_e7yQaHccQ7YNX; zj#oG?G(w|O&7A<_4GtwKm?HV;Xemi}Zb%FgHVV|LlF(66&_L8?UaM131@n1Or&yRL z2+YZE$btM$fbW*z_w^A-eoNm^iRA7(Vj$V3W+WfNVGa(GpZ!&1a}^{{uLjBf|3PW+ z3+%;!==DUxI$$mXEKg_*bPLXM3(c2M*kS5x$fWSi1-@RT7cBP_anPsAo=X%fuMk+` zbm~rX`!6*iI_!_w+?;hAS)*}t`X$WG;gR8 zyOl!as%mK(v4gW=s${0Ccn!u6UNjD{@PPRsU~25_5`pkaCVSpSu|5%qK z${B|mIxhvN*yHBs**>70uL+jJ-+X}L4+nI;Y32$<(|r;cJKQTv1~bRS9bqdlo;T3nxr%$CkkDcCG9~Rav07&K2Mhr_ zd=;{Y`e{k5`rrQp^&heFu+J+Q2nR}8|6XVxZBWhi3&VdY3ei%{04Zwa5dN&9JWvd$ zNTXo5J6sfHi)V^^FwuLC?euZ#4?P@_;4$mP%uk@NX0FDS+RRB@%uUk@l~Iy8}+Q z6z&h;r!Cx*Y}nr+ne!)!_xzv!wbE>XMiTBrI^2&$dE#6y6xM<}81Wn>{R@7)4{5V8 zq?+deG7F{3#&DAjdpxs5x81^F7~y}u1{(R|YL<&?+J#+_{2Y@XWU`W9m602&OEafY zdcsPa6OK`nt2i0!GUjc9rs!&LvrOB|S%WR3`6R6${Dtk-Yn7B>xmMIf&%d zOr8}h*;O(`&T~FymSN`N#s|WIf0ae zgTp~$_y?qNg3%4yYn6Cgm8kec#Z;UmL9*2KN*CBE;T}5{57w(JND2q6Qs0TpOZhiE z6!?nQIsA)Fk??I+ws%E_E-FK~y%or|iae%@R5TPhZ$muI!!no$BJv5y4>wTI2pQ+r zED|byw#wRTF{#nYLRe#HY8DGqBkd!L!4u_c&Yv){JL1bXg5xJ3Y^@vAa4v%UG=hHS zmeWLRdVfGbm@0}`+;_LcFCZh5>l3bq{vrg$W{Oik=a0A=Gq*>6pqx8jKlU&J|8Rxc zi=|h2fvz_=THgheYsr`{uJ{gv)$Ap%Vji_%4~0`pyhj1!E^#pFm`U{!>!esg-~{}v zl|UNF7$6)lPuY%AXgT~0R;E1q#8Jgm;K=()(mAAPju$zA;5iO9R8pkIXfKH1f!G6x zT@+j>aaB()TBYpaBd9L@1u6r$*gV*94O_sKtPKE!yr1{N5;fwm79a;VxWaY;Z;BXh zuXU~zIkDEcTTqhtQV)WkCl_V`ca*slI*zr>3?>8{U$4?d4Pu3>d%^%DHK=9X`dSK|1QIEuR)17Y={f-x1ii4u)4 z-J4x02R2yj1nybH9r2J9mpiScW(-@Am?jdXjP0>bA?^zi_ZLR4pyI0Ge9Xa5^9BxM zVr{Mf8d!-g5o?-g<;Qy9;4N<60*7Y0OMx(@-f9IJ!GF+@_;RK=IVd zU>^1P-@=jRy5duZ7;C-rf6;zZme<^V+is0+zkMKKyZzo^{x{oiCKVx+*svQEK9q6= zA17+R{~*)9ZNDv{h5-NTjRdc^-z1^`iFYy~*!Xdkz5&v++UNkZ-`iyJfB1-QzgNq& zYg8Jt%eFlL^&Kuifhz6Sy)0(?{c2n6_FG6PRM&oci^Ts?`%M8Fdi!mAQ;haI3YqNo z`vJKKOp?r}zLD+sMG+HKJ=*U;pk+1E6SZI3C$`^wz^c-IsqfN9i?(b#t@F#v)lBl}3D`T?kl&oDk>!7!J z4I~9k+;9U`SKc?x{%#i_D8dWOx;#@PoS^h_}Mnc zEiQ9qu{UqcC%UeTDb;X!)l!KwI@QENMd)l2GYv);2BbdYL>mq^zCeUinurG(J6W=b z+j%xeCn}C=tPD2&!Alk@IfN3Y@Kxg+BLNC&X7|m~ z&jS8G__?BYg~)*KpgS9 zq#VZNY>bFizpLW87m&)N2Qf|{is@!9nju5Y&5MLKMAhi)WL5$b%fg&x1#l_jHZ##K zTLGXF-flr!6qLfb96ro~gsk#nUcnKD--@w^_-_;R`v6n%p*7!To?6?dUJzQf_Nf_k zqGtQF6rz>(X+BNx|HJm_aj+Kl>FzH7_w3X2lu;-#=Xz-!*l4QQr~e4)B`)%?5jEW^ z9xc8TkCd;)ql$f+&1kzd+4de#y+)#+OQ?iKK*1ktTvNGgHF7YaY)a>AgDxyQ$~tMt?bj40h%C|V{NLKAAn>ZjJ`HD*W1n7E{A_NH7upb2BkWUu zU}71ONc(iVUABwTq;&H}5f=qT+NUO(p*xX%Y5*`*?UN^PT)9zVrXOnh6{JKX!w=@j zd6%{|ycTvEI`Robr>@7t79ew%vQ=^r12tTV|8R&9eK$T2GIY7CN#m}Vs`9qBbXNv8 z{u|Dxgxj9kNjj@xNWZfqZHDw&n}JH`tj0+`pL9&~1UsYq!xsaDa8pcV7rKKa{@BOE zXTqCMz>dB*qw?$C3-`92=2ju|l=&zjh6V6g!?yPTBj|xk+eQPo^#@blBe;OeoFnr- zD3HMbOH9{-x%8uXLS$hDp_IpgH-Qx3LL1bounJ9dPer|ih&0^i0tYX#USRo1@yV{z zd{hl#QaO9V+;O72R20PLAXIxu6Yt{ND--3I0tqyJ{9yoD%BR^tpo{ej40^geBxV-= zhZBb5D_FD9(-L?W;Uvkv=@g+%{jgO72jNhj+uL%75x~b5vMUO&42J=267%QV`PV_C z*^}UY7%HE?EP;1_^7{nER}wfH7bcE<+!06e4o&_LWDWC4c zJ-?z%j)|Q4>DcxJs)YfyvW)%yxzNsu&YX7srND{^Y(@eh6wbH2t4=DHUZdHBO{jo) zL%Pm@ZBPsnbc2mY3i8T*7*(L_7`*_$;miVE?E=4lO(m5g^MpF3<}U7(imyAI36$vapKnTimh#_t^YW5N=9BzXt=0W=^ZPjr!k+(6oyZ$h7>)1%aKEQIlnM{yC1 z@U1HaWHHVfhxS8zj1Qb7UeJNch(#c?j}URk`IaBxJ9%Y-oUPiksjAK zxI;1)W4N#fe+EyQKSnTWn^|`bjOWvg6Y`n=kczLEjd&wsJUBxn9Wdj*MAA$Y!FrOd zKwmQdIf&$R@f=8xTxew`%!`F=F?HTt`;}vcS4n$ZUU8lZgmKD5c##>nFNBTHGT5&f zAxmgzvgT)+G@j43q_ILEka!s*f+=0a!x6;gGCEUbuOf(gNN@xp-S)7ZOsQg?n!`$@ zP|SZobqrbHdnID2dOy^@;(d-}w$7GWB;K~p*SbHWs* zn4Q2LE@SYHFB+4Pxmd<1ajk!Kd4H<`&%~yb5r6mAr10-Um6TUSnpl=+_|4L6D~K;}-p>)qldr`+N-d(RDWB z16?OBIz`v{^DMHa#ro?a{k*3NJJfh3qS<9m!>iSWa!SrAYAK||KJx{n@kg)F9D3X4 zuwfe_O8I$zLe>P^J`QMQtPOiPL@+<3Y@c79Rd0s~Mq)rr^#j1iZ?_PfNs~R8b zAo&nV94Z)aZ(kbVdG4vGwhFcU(w%TH5N4gI3C(_AG-Wo4#I9{6lX{ya0_DU%+mO4B z>meR`1U~;GBFI)qkmg%TCfN8}CP;fPU8Hj&g>319`6Ub}EeFR}PFv~;3oi8+C!THh zXti!HsabCpeGXHbDoo6J^E23QX=+~-${7XGRs1UmH17d%vLTgMEVBaEh&B8*vRKW` zo>b$@Qi+#Qt6*+r%^2I6d7?VOr3^tTBm0XUDY3LQatBj3iic7;)wPu)&atR+ohoH2 zGs<@0O~{dE)&PHP9zFkA3?8{kaLKgTx_p7cfi0PYXT=AOb+y*x%O*K-g1lg7tg>`% zg$9+q)Yn3dM^cOCJ_`Ede5V!7^)pb|plI$mJmdZAF!CvdSK)%fwSirL=71CX7ucoH z;NdG)VjsbV2QY*e@BcZ@0<#fdWIwC$X=Pjj7z+;8Ez^Jtzvviesb~!njO>H1r{QXe zJv>Kk66yC_W{!sjOmg7+ud7p-u()#)?%f=V=1{M40443}5lCa!699PAn8#0HBOgnsYP;@V3gKDN4{)%{>R1LOSD|EIwT3X?s zBGaUr^z(lTA2Z4SDtw&J_^-kr@Lz`C``^I7L7rLuAINu75e+a{v{};w$k`t63j1~| zrwhk&yXV3^MA>j<=&pjdNK1S(gkWIE+u+pi-+6&e{K|+>pEM7e1dbc)CU32@>>O#x z`#7uAHyF!PfuA&@M7I&CxJ@FUsQRV;=JC*$qr#&EeG%EE|4Xz!qi;>!He*aV>@ zVa$U$IJB^)a)aQNx={(-+KzCRouiBhIbx z>5Kzr$%m?o4P{+5r*2#yEDYMi%J2{*TH^tnuL?hie$;vojY!WaI_`R)7izAHnq805 zVGFeIj5f}C;zj=BJWa1#C~ z{S1vr1^fip_PI4*MFF#BV%Cvz6id@COEY1*YD64ScdV z@QoN7W%Kyb51h!>H^;n32^OXs85O)y06sWyn5`T;)`b9RKE5A%iwM@C?K1p^cyi`D(!$*s0X9V$KO~6o7=BxM_iP9e6Zt?JN zp)T^>8NWZ!s^w~ua+VrzCl$>p0{7$nzpByt;=;cIE2Hg0jpgNNzsB;p-HnVrcE`%k z+HOzP))O!q$A~n5xwikX>j5mbwj&z~TPpIncTG0*0~>gUaKzxfJs6!TOg{Mt7Otr{ zbCMDG69-{`MoTu}fKH|d6L3_I^5rX#Qfy{9egjW7GG~9zJH)S zMc_;M0OwHRB^m##_JR)1ZZGB6^RaD;N9*^{*eOl>?SQmum=8$UpAdxf6Iw#OVVU^o8jPwK`=7pZ;d zouB=|xv9Av$oS)~Kb$-W|J8*eL zPh4)o^{k}aqNB}xS@?TVVWB7s=x)r)S^jmB%RyguUw4x4a;fix!9s=0t%HrjfIPA@ zr#Xy8n4RBGBN76p*-JoLl$Ix1klRlTRfPVzp8N*f>{z_TH37FJ!~t}QYy28Sp|@V- z`A@=lZ~VdQDmMVFvt&Ky;kU4AHHhjT%8FNUe=?3k1H>JAU!uR7acyMW?<#IS<2brN zzVB4r`;5aE02%j@ihGW6aWd|C756CPwzK08WsOmB!x*;~adv+L0{Rx7i7fq8mM+YK zg*Ig`a$WQHg*t8UAH4N}Mr88Dw~_oDlI`(!$2iGZ$x=YNgpjcGnim|Jm}Z`g0+`g1 zKl{jb?%u`!6>Oj8-|%@#Qchf4pnaP8n6Ngm_be7bG0|0EZNhg4Mw7XLqvn>^#6Tof zekmusPq?t>(O~Sf1pD-R(8?)5AN?dM!gUBAA|i+gUCSQAd&L}^e&|;?9^@#v`?>Ms z7&NpOu~)Gl(0T#9nuAc61x%MjC7wsKG*p5P*1>tqRvMMD^2absT=3|qRjYD!lOp~N~x|x6*^tsfPi_5 z0l;ojan~@ew~TA0;?8GWo{T$3#km-lDdU={xFfG4?ra&CsN%LUj)P*ZJ;jN_9fIo=wgOEf_$76Vs*X}qQxu<)f2kMehHdo=_$F5 ztbSz83qA}Ty#rvVqXKAb4c(&Dn5lVzha0EmXaDIcegqXLkzrsQ_rQy;FOHbmuZYc` z;uO~IsOR2yppD0XmL)ErP!}keVZ>Pi9zR`j<0qp3EtFC2_26JVa<2gdPDnYZ4*VdC zV1P{hds~CiLBLpVK7}|Ovh(%rhz+lnJ97P%%?dLu?HdAE>}-c36ZhD?**kn!BI9&s z^ZjDC54>vnH|KL%>S~m#SnBBCdVvh}Z!s*KqkpF$pKJU^nn!=7qkjjMfb)Ta5&F0N zZ3%ig8hZFHsT-?R+!u`NDdT3VxHlQcGc>65RTcLnB0TtJcaeF8-G<6l%j&bV{=jdN6Cpv@m<_)Bw zOm2qD@t&@apT1eGJ~q~XeFnoxR>dQ(T76s#Sj_bMtF_U`3{3l3>K&Adt&dluaz`H@ zK|a@$)W?oE%r#+;t(cz+Ml^n|ysBb$QouuM6F%I7*WxhY(kaT>I_Hfj)i<{r`9R*zARv`uO|n(7iu_o2HL9Gj28FEPWg< ztUB)3APv;Vi0`!-A*=*0=`8$X449R`>5Dt3#+4yY4ti{F=-yPZNgiWo$s4#_d`RpS ziXT&!zyVBk%~8PA2yogd?$LUn3-8b>%)$t!k$VD{4mu>|E`~2n^n|ttCM@a}8cgwJ zd%-r6@4E{4bXo75-%@4wqBUU0mj`ae47Won{KgEiYG|I0rps7w@REwB%=fUO6E$_N zz>&y{9|Dv5y%=LYiIqdlvBtLQh^cw@L0^B*mtWlT+bsU8s4sWqmiVqWg4nPt0^M;w z%+MZRN)7}+UCBqrcgBL_2_DzSdrS5|@*S3i@^EPkoGF40{NZ^2q4)>RB$Qk~Zj;Gg zQaCFwpnX5a6Y}7)n1#dhvsd|^F|xn&C3*tOD!@mab_(nP+I1h{E|)nIswL#p%kwqb z0DtXxszO{LBf2>3UBMkBVy%IWAfe8wlrDW6GP$ILy}@)x_?RM8^q2h-uRS{l2F^9B z&IGs-z&D7WPj0?AAq|A$1~hNrpuGM?Oq_W`<_E})S+jZYSuz}sAogi|IZG`9vpJs) z{5t>tkoPX|Q5M(#e?k(87Tl;{Y1JAvD2OOgqeO`$65v_cC>0beRk13fR;92Jya0hs zH0yQ|?^@fcy?AMBTeYI1LP8**t%|6KqJmeRHQW@rh(iAF&&>1eB?(yl_51sO`}*;E zk)3DmbIzGFXU?2CgRd2`Zg5``Zla5lbw##y3EVK0dggW&B;zGL@3Tf@f1u7_tcojN zJGe!P2YA#>aDN^;?Y+V&eJe2YGzy`p2KsNwE~C)Ne%rVO8p2%=)GKU$&;p}p!>`*7 z2Lmm2kli`=9MP9NsEJCJLZdJ-S!Ke4MI4=Vm)xcC{FDk%z!WAn!#7g&h?z>QL@czX zEiYrgqP}!CeW^A;F4V)+K#zUmD&ZEq+0J@=0F>OspR&f`O+F9d4Gu-Oeh3$V0(YppnYu%1;9KJU%guE=}ODS>~1vm8JA3Mt_^ z)V`|wJI`}CykDAp5oyd1mc9_a+=*q^JYA!D!!4m$jhWc7r!~z((Pli2X^K06zinoU zBTa6vj9=YayfW4);%39_u6`PghndHr(oNyxcwjtGy9lCy0{twL(d3(^s_&2+YeKSNG6n zHx!JW*DF}Mig^+Y40%&(T~w3P3Z=X4cZ=D>{~*-+D=dJgb~g^trqf|`Fiq2*kFKa| znDSI8x|zBPsH^%PPASdGviID!RpOV8D%ZI0&NfvZPz5vZy&^aR?+~0$bR(e7U4Ia3 zQ(c1-aHvO%v!~PY6gm#Br1D$VWawkfC4ZiO&a#58Z&VRk+ba~im=WS~EI?`%MfpPZ z*0eB(i%=LR3UJfwh!IJ0#yz?RXBmOoox%=UP;M#*YVQ>UV?*f+Bxwrh5XI7PY=VGj z3j|}QQ~Cu6Cw2{)@qRZ}kcxFF3gQzm7Ay$Hr@-$q`gR{OJa$0QJcpXxx3FrJ6Ec;q zUO+YEoJLM+m_|mENoQn_nS5P}tO#PYgvj zC5q{XFV9p#9l`kYLiaE~yQ~|}_Od@-#c>9&nq$|8axus$kjcCCwq!S2-6PcvPJD)H zc`isSu=FlhFj#yJ@%o-y!ul)LShoTJKi)QL8WP{z*!R1m?~xPCKyi?ae7_jxaigyjc$t2>v{6m*!K$EYA+ zEtixw+(1-xKHOmASf;KgWo5Vq_#yEI`=QuTh%Xz8S6cI3cORP9S>$Q)pOzri<)DNO z=i*{JAXV;wGR>kaCop)08Y>8vE|SkaLK3T`_g`?c+QVc$Wj?0!`ze|J1d3O-yzQQ7 zx|WeuLP6(S5eix~yv%A|A+6;W(q19W7X%*rTPpl0VQ(EvYHr+pp;he;dIshcM3+WZ zuNp8Ua7RPU_I`mo796s)KF9F%F)XGv8W`@v&ARHV(WUfRYM43vU37eiFf=cw&T&c^ zeG3n}Jh%+eUB>(}bum~u1Wn`i(u;|rKH4q6yI2wmBTnO3UwSN#Q%)Ht_?%Ayw1Ih& z^BqJC9K~|AKQWG~*p-%VVg$>_RLc`jAX_kYhT(U^+VMNi=*91Fwgp9s-#uke$?S&% zx_>esFuw`Z=)NNw^_kz3)G3ZbF__;BG8*kDWPaf;s5 zH#LgXSBd<^)5Tv0bjV*dJu5Ko$U83I`a@5x@DMU5^3(g%2u#f!PZAL8xY10jsZiix zwlOw^zL0W-NjaB|Sl;$S^RmpDwN`vx?14o&@ku0=J=G5@;P{0Y=3hR%KJTA=1?CLO z4#g);2*sbh8=9-nd(uXBs?YlqA@`1YW6DC=F~{(E1D_PZNO(O_4ms-c4pqVxHX*3f zt9aRlqm}S;RWQ;dL}pVtzUN4LjqLS#>r|+}O*3LgyzE+&@F0H!b0W`}&fIN3=9-V2 z_=rWGBOJ|B-dLo;gfFw17Me`wm;~)EqIp5WPCR0E99jn|@y)R4Mh)P$jbtzz*ZS@s z(pPsq;L{}h#Qbh`-!s1(+~wwXjr%gc9iQTU5e4ttR2_414Ifs#+c0k|aj7LW@h_6n zIG%sLTe3$I`*36wKOW|Bn{4q*K=_TT=Gb*$evprO0!o>rlz3k5A;LQP*fGd*ApVy= z;x8BC=P^jVzhH4cp+4^wA}sEouy}voMu7Ln1(4s|;N$(mzI@K&Q+S7tm%n_Aj*k9Aw1RRJ;+B2|MtVf zKOaf_n{WdqqIs9uOdkGCf`@;??(22xdBh_8S=+`&dI@2yrnsPtd~Cx4XAv|h2Kf$P zm15;}3wTC7XsnNtu?FzlAtj0ak1Gc`|73nw8Dj7epLj#`rhSPYgI$dIw)4Ltx>YWx zcFyllU!-)x(61`G@GRLvb)Y76&o*t2$D8r^UhIJ@qy3}f5iG{Dda)sRfJ*35C_bf! zJD^s*g4uey!!wNTu+-BXQg~2dF#4ko)rX@+!hU~|22Fn@A-veqGo`PQ{!mlq2~CaY zpdKj&A{s4Ufw&y#OFU-%>d_K&FQNNdm(wigCC|9ykXa5OtCd+6CHg#+sZB&aP?DJ; zSoUBpg@nt_B|fSbQXeKyvB`{Rv8+Pe3!yFSoaPClV-jbH(hU6D$Qu^^x~db5qU|tS zO~Jeum*_`B9~lxakEA$#4k{%&uuo@{dM(DkHG|oJt})0#~EgJ-*25dOP2wUSSJ^ zHIr$BOFz=|u6O&2T&RM%fQcCJhEN7))ekCYxy6$wqUW2j@W4!;+@8JYX7xbmMB2+V zQc3GCx2p05ro?uZYBiTuGSB@@1fAFDB+3^je)h-q{IO!>ypyQGn%1Fb0#J8gos@wZ z%)T@U`yxk}JyJx2S$_K}(%`0kAgw-zU3J4D;1Z za$#SU{RP;p2;92J*JtP|$oWqE+-w61k=Cg->c}E(fS8k$ozm9=w>DJfyHRvwy6+N< zt_VeOeYTO5iT#45FOwWB{a1P5w#DUz+rocEij}V*688(0uAcZ->aHp?9o~B~rkY2F zuab#rI7p63&y}ClzxpX-(IV~7A`dRB+!fR5NxU0(H&R`wo61}mW90ml8V>$PMS+O) zaDF|;+BHQl^xDxg18kuZ(l2=Y(Vv(z);`S8Pys=NN6U@-1bO@S9PXwOguMxerYU|k zO6^s~`K~VbO`)_d!qw>4ZPo0|*o96Bm2M2o9LEmBZt?`^Yo=x7Dy5b{Z4p`g)1Xgo zv!`Xll~LZ*SGi}2L9+>lh}g1jaGw;2kW*33dA{4#1G9e2g=FXT<;z}=#Oi4*m$$w+ zTq`x|-4N2sC@Pi`9&X2{kPd5*kHB*FOXdc<#wJcjw{O?s_ zX#)#+0~qd}{if#T09J|j+>_oQ%n&{hImfF7K6i-Rp4n%G4)Btjl#J8v{?z|BniAJQ zEzc}j?;e4uE7z{WqfNC9)z?>*ejUbqoW3wc&6t}-yQVXLXn1EC{4ewXY8->@BVdbYh+_K3USdM^sUiW81mHP zFSs*UIfupPW!RBQqs}aJ)9Xt?t80S2dG7#Zy(dZE_cqk5=-&B)eq{*k27B@Atz^i51E4qQoPFll?WB z<9Uzv%*!(SbA3lgu_BBDg4`B}ax}@^WhZ)~6D!sNko|e$;n!38Gp~GnM=s>YEQ@x| zu;BIO)jM{Z9=owY80mB4)B4e^y3F&@m`#X1rEJ!U_=g_9bYl56*Gxz^B3_3Paf&~v zf9CWwc9*HV^e)vAhJ1El(PZzJiFvq@eMOUZC{soDLMK+Id})`=mRH)F(%wBY3XeIL zC@!95=wJWs_MVVN>;GbVzyIJr)}CYW6|x}ZU^N(Rs_Ok(kh@SJ#HvFe?j(H;iw#&1 zg#Ek6HFF@4-B?w+Vq!~WbV<5A`G`9~ohJR4J z%<_ljoEvAmE2$^Dk+Y16Yc)zUKfVjRnwIXeKL|FPjZBNE@5JU5u(YHtWynv`sA0F~ z#P)!{{AyKeYpg6>$odfDeZ$fv)yJ_ZNnRL0t}_oE!ZXvv>oU6?g*kfk9zQKRiaX#{ ztxH>8*ZJ6d32E-mYhg+8u3Nv>>}T@VsV^<}yK}BHEQa;lj9<#WNmr9KvXD%T&eJQ8 zpY!I-_YN53Y)v?gUk-E{x9{sjmpZ+dG@1Me>IZ8Chay<#yN|%wP?O)@pyDv88d_!@ z+d@p!Y|e+;%|8i#^Xpl|B$(&B=cto#u4t3{-W0J=Nw4P$8ZHZ8PLF+59aX2Es!n{s z(W;eS?R+)|`rHX{V&~;^?Ew`{U*o_VM7Z0pQT0t|%;B1{u2|(n*;x#S@%MvUy4SuU zjTOo#Ei`s~=&$ai1^+xXFsHMgHp4{y?EHG#;NFy2aCAt%rJv@`EUMdlBZ2e{iM_9) zJ0EH3?ckw}PZ~U}bvu$|>{H@C$VQI35!N^eLlk^&(leT#E&u8rX0V2Sr_yu-t zle#jkQv6*UItS&)31Ap{foN8nCO!hwYNAn?rG#Ifp_|5*XZ>%3UuW@oj`_2!)?1HGV4JUf+D?g2*5$!YnQ*Dswy*Wegwb%%zLj+T1+!L$nYLH0TJ8f2gS$>3Jdf;)ge zhGv*!Lpd9^;ikmJg#G#E@lFJr6Ed(2-*nd+JuVPQbrYK-ZSGc#fq%fn(zJ2#eM>)> z`2S)$#)Rl(mP;M;l2yl8#XxjGQARWH>>)Zh4d;YnC~GCULP+^;1y|F|UV5&qbFk8Q z?K+uza0&>RYiZdWt$s+FvGwOXs~QV4??su%m6v=!HTgK#-DL8a%|(CmRn!d33YYri z@$R)Y_t9d?U@Twndpz*6+VAi0Qog7oPh@d{yC<3aW=46NZZnncVZ};GLI33C;v?E1h1#H)M`#*Jv#K$ z_xI8-BE6-4+-yI7CuAXbgjB8-(s2(Zzu@;coKQ&W^f=CAqLfV$fht!prYY0luQOcOfd*krhtfo!T(=CaaOnvui za{06P0C45wtuig#TR2SDhoq#U;ZE$>3?#z8gL1L7!R6eV&QYHFO!kke5i$bdL0Am|!)g)bs}rx1s>8KRN61ySK3!Dz3hFH zV960Ppp1rf&KyzNCGFFmAng*R4I|A*_w?IS;p@`EHxo|Nhikz{9IUS=8tJLOqvr*m z@oh$(-V2Z~Wh?e->GDAQLS?!TPcq9VeIF&%X25EsKdy;d+o+`|0m}{=X{?K02D0t> zz2DxCY7c& ze=j_w_i-6Hf~D_N<0SZsavU%YXQGZ)t07uNIFQCxMZ7zi-m#YzHtsaFCm%;YiHcEb zH(AhJ<5j$nibpRVJl<5Zc<>bSn*xO|e>8!OcdGAddDZGK0U_Uky6?fKj5&P=^kHal za=9}%MT3|F8hgdhu~$4fKCKmN8@&V<2KpIqm#hfpz@GxAFn`>N-D7Mo3bZwQboOi%TY|52DT>`xNcqqqOPxKJ#7@KL(P@0Ykg$<@+Za8* zS^cQ&97E9;oXGoMCv6{@$uFrRN^^R@sF|!ZV+!eHFRzHapEE8nZAo|xhL5NChL2~1 z$)#Z@GHpUm_!1|6=V~fY%n6Zs3g(1=LZol=ct~WPwRx-}(zki+5}9Xg9;%mqtdKFzS9LRvf@YulmhBANoVSFpbp z=>Lc*4`K_q|57%!!RLIV+m?Nk^a9mmPrD+FoON=|{2GR3>}l`PiDoEv^Ai0;mxrv$ zyk}24DI}Bm^F*VbJuS36WASYAy4KV9Ro#o|0J_@T3N{y2u_67vcB=0N03F>sb>bD! z^#b(SZ;7sLae35W#Pk!wZzz; zSWAq!Z6r2>8gFi8Gm|(K;WxEk7TrDR(Or{zp$=3ZVptFj2I|7V-Mp}5`Je8W_NE3I z;gYILY>AE9BN-mFC1iNeLqE@4&-~qV>^>>X&=WT3htr;a9N26|ZaAM|5xL z=j}l4-Q*Ch>SdWvSY*VD2)0QnG`Jf|vldr^bBV&>1=fx7XGd`#3$9ZuQ#9E=Y$bX`@t zDNuVpd7RSE!dSTev*i{`*IqqLla?on*QM29A^4AB27(t~4g{0)f7kGnjGCP1z;8!8 z_{G%e4&Y~x`31wS7Tyi;g?|%{U+e;o$F_yzG-QdUe4}pwWYuj!hMp${ulKn3=fUeZ z!RrybzIu50$2K+uu{(qU*vup525tx7t3J(u@9@j~{hSdUW0P6xhT5fW(sx_x24*gG zgX7=4)S3Rb=QBSo;$iXCtY>DyW8W1ja(B1lZG@Fn7P%=q|2M6j|94&TF3^(K$+Pvh zOWx@$d7Z*|?MN!X_{eUDkL-@{k-ZCiB;(uQ!^VFzK8BX#zp_6kZMl~=NN8w#-ZpeJ>BC9iBSX6m zUd?_$_J{x6o@?}7R&}DSf$R_GZ)3u`YktP|B3@F1iJ~K$iYaVEWM?}_+mZgEI9r+M zpk9Q>qCA;En5~U@ST7X+z2X1SLF`i^4~vz>|14332l-5bXMGhl)_H+Bc>`(Urk?%P z(BeVHyry|jkF0Ug9MTT4vHd8HMG9AQ2BBu{uZ*J=)jVjd!c$Dxw9aSbetq(<*|e^h z6*hvH)e0G1ofFM1avwWiqtrM`uEreC95E36E23$A5K%YvyuULE@shLo!RTpRbdcj- zYl@ZRkS>M9XEUGLX#H1agP zqv2nf*q=4lMT%**5?i8!#5&SUf+ncr_Cgw z*5`FI2?A;~FPE@;vu$Q0F(}jO^Zuqz&%J=*#f;gkPvf33p`~|>3EvcnKpQuktQ~Fq zpHz<6b(%wM93S0lQ}RhMj*n7~gJzgoQ-+3#2}GDfsW$t^inEyCEnAr1o=aA?{ppDP zeG0L%3WSlJLvr~11)pigp~sS?KCg>XM%k1g zR3Nfh(Mc(1sfsd_(gv|lQ>H#|nMxjH(=`>WW$8~%T0MW0h`rW+Sj7IE4mxQ~ zGg-u*Y!WPD`w({Lj4||M5xb#2Z#g}5-#3uoEn;^<5TH%Wt%ff8R-`5@E7JFD`f!lf z#%gpSDN+z$zf1J~jvPsg;yYAPM5nDA<`vMA)yO8M5#4_N7B8#YGUaeQEIY{C!#Rb8 z@pme1p1Pm(WEbW>#$ZSn+VlfRv%deImQUO7a{guoK&hJC={y?F?F)pt z%llQ8t`F4aKzVjw62!}KDE7Q?5{ms%9Hk0NsmnvruWUL{?f{C@AP-Xd0pB+IvWskr zKWzfFf2K+&T_1HSIXr#T^Ja!My-DWL0yhyW-yzkWB2w?RxhRWgxoiJa6s#2 z^i>xU)$$up9s|p<$&QZVdw(XYvBuU;xaJGg&ZZTv)0y2MSCKd~U*JT(>~i(>D4`Hb zyS_I=rz(}c){PP|K<#^;o7pR^B!J4HwCEq~dQa-)@d=W{m#H zQ9X$|+AIEujoO#BE8-Sc=ZcrrHBP4?nRf|=pT5|BfaR}Hag%%i@zd1*6wSg_x7R>_oBZ-6F}WN&bNRLm}o(! z;*hn*(M;<8pH5>mo7b)oW}_oHH)rS5Kg0=2d5Dn1F8f41R=|q|yey=Le5bHe*!0nFzo7@TWq z(KWrLz#$Jf_)gIWjez~4oul>lF^+a(Wiyb7+yNt@hj__H=cRJ~fSl5OrcOZvb$Sd$ zPYCdnF|lDmWu??(D>e1I3Cg$3^Uu%XJsYvD)6(#Ohor-VyI5H#HUIo5j(#~R`uNP9 zt(DQOm9hTV+q+vK(&E;^7&+H9ln3ru>^{gjt&vcsQkOgaEY9fO1=a3)if67D6{9%o zJ|d#CZarFeDFHl`^gTns=6G3^}17PcM$#Dx+(fbMpb($f80H^RF_8`7%hz z^xZJ|Y$JJagXuaHoaF<4Fu6xyPDAj*%DSvjwu?Wpl)j8C*@>Y*)Pr}$b2&7fC^0dW zbmBST-1x@v_&~|mKa~@nHMGA0uqO5*YpOoWiHr{mn_rigPZGwW8(R9}ze1<+o?8ra z>n{d3a$?-?)6t{$7@{0~Fzy$1Z2u=w7>1@Oipi1q47|ag^pR#M(T^o#G;d6se#y_( zW0$1+6&gZE?Ro(U6QhOtO%Q=mreFgb!Q#gszptC(0`H8qS_l6x%a-e_GBf$k}$T z8s{f77HaJNT$S>pmT#aDD~nQ>nXhl#`C3Y~N&6Wm-gh6mCh7h&;4EHyhOi$iJ5ycg z3NkC0p(V6i8QoAB>lchJbcd2t^Y!>5Z@z9pJ4O}tc`toQp{IY$eBF~;+*2stX1@Nf z#n)bRJ%z6vzAV0OKFi?ik#kb`T2s{)Up+T5?$xIoeATDre4d=&7GH0Do{6t0)u!X? z0>ghdxD_zNG<^MzV(z){RpG0Sc2oGe3;vRUuOVAKd>tgFoDV@*e9fYGCcey+(|#*n zGG}xO0wqjIL%qZopI~&J%R(Az*#YW3@?c__>N4`(2%9syNh@Q?RH|_|8%{W^(24D5 zBCq!Ac4JiI*Zh~Cn3|{9nj1gMv9T*sW_ zuY=J~=93G(qfVsUvy3g(S^1_()&>xq?evY{?g&t%c=N z56)fZ@d+BtPoQ#%fXqo_@-{=_vD3huVpDNV_RwMAaRx&h!HAKkQ}&OMwZ{IyGfa0* zHVXJa?LJISR)*r0oH+RVE8Z!P-F(Ya;$FM4n;$IOnx(9oT=gyw#p)XjY@ZgEb=Idt zvF$k+LqAgb^pAuRu(?6Ks#JwYK`_ zP>VSi`O>$C?Ckp>S`&&rtPX@?vkh{eP7)#(UcHxlr~4Z*Lz(p@5L2yP6_T8;_9X&2@`E{cAUa40sQvBEnn z4%GgWX%&pmpUvRiAFYy{a8>ui!#e#9)Xg$zoiB(~#q61K>6@JED4Mg}c7BsWNxw-0 z$r6ehze&MoD4u3Q(B6YmB`QnLj^LxD`=lb{KB*%+f+hc%^INSIf7VhaeQ1aug8lNLv&xaDU3tq+gjuM?j z*L!@-?aRWCQwaF@2qrtT|IstOMZ#S$#H@xc*!FY(jVKYnCV|j))kGQLEeUep)nj(T z|IMyh956JKmm9>$a;9lb1O0Ylv+Xo(3`Q1HUv+_Z)c;bT?krZDmd8|@4~LJ$PENm5rU1Pt zmzXZ%Fo*qn_BE@<-gd5sz8I+82*7wOh5M@U+87i9vrRUoe-f3fgyEYf=@{mP1QWbri&?^Tb89stVZ6HKa!zf5uXI<*C=}UH&*2D z(urNI!e$D(Pa&BEV<*DMfY%pt^VK(T8yI7LpIU!ZFD#aa$4&B{hPUez!3d!5l)(|EN%_#rg%}}AF?^H<3D@uo}#yS$t9r8=tF*@fN^z= z9t<`;itiEbeE4z8krq#ARz-SioZg>0@yl}zz0KtgB4n$Jq3&(s-PXRlz5*;6RY~;{ zZ5;2$q{l0aVfkfbzWH8BfxK^9y0rQt zd73jmaN>F0X-T)=Q9*|fw)B6pt`l*~iO2lpiU3*Xo$7?ijxIMK$9S?e?){$oY9#|> zyyg)Q#M(rIB6NugI#B|_*462^oro89QuC#BGB;bK-*ZYQ7lbD{v13>?MellKE`1VJ z7qkq?m_MVOliSXp=8XBnoNRWFhDm(G{PDa#Bx;!M^iR{v%qNfk`E$fvUgx&FH^=_! z)1RTXSm)$?^u7ag%5@da_s7{8^ri0adeg9Y-3W|zagOvGE#jUrjj_V|2j3|xqLu>F zFJa<8Y=5;YyP@6KUp>d&Vl>0pUzx23{MYuY?i=l|uqQen7|Unx{^|BtrXHDJ{lhL} zryg#Wu}w^c+5Y@BY-`u>dT2NB`fs$iI=sETRpo2#?X4`l_U&ol)x_lU;AOY#GaG=4 z(`TlLi>b+ zaf6ch_{RDE{{a2ga$UNuy`ZJvGY>WJ%3;y`AE4ij)gAd8um>S9Ur#gQlo~D+J}&c} zN9j+#w@fSNZuBSqp`+bjiU0ctE&o>i!yfz}uK#!6x_)U<*lEZakkK5rk1XDf)4w4Un8lV7w9ANzj+(vzA zegrb*f$spnNwaq|-k}g`O)pdpR=UM@mhXQ4x8*M>f#EEVGkf#R6EKi0s`pRm`kQBu zVC9Jp*GDXm|9`SaMx7cO!z^L*vs(VP1%T5tox%Hxbs%Pi@uNTwd`ha;DOmH3J0oFrQ;t%ArFr9gzUH=9o z`MI$_Iu`pSsP-8tX`R@N75eFo&vs+U)E!HvSng98GJTIUBeBG~p$}SW=>7k+JVJZ9 zlP5B;{u)eu$L+2^`&-K@uS2(Z9WusM9qeap{o9iDn{Rx1urKrNdCFro2Wq+|znwf6 z2zcL-`Ta@E3N!c{RgKv#r05ZIzrKICf(@$F8M3?D+MjI=<|;?(yg6R-hf`$k(d5=B znix{PZ`A~ebtmX#*ytUM+Q2*suNMZo7%Z718F$J1S|ZAR@g`?qM^T53ok_^{Kf3gu zt*xb>8-E^}AKJf}=NFyWd^r?xO1Fl)YagAqag6@iq*!G|oBb)HG>P;x=`Tc8TAwAS z(Pj3)gPzvTlwDv%d9}w)&QHou07@EXfs-f2cl!D6UE`HDW3lk<#Anuv(CU^sfy%`x zeB9VTEZ3_nr(aOj`^6v%tx)L_6#t~4gY3EAxzfsCbrUYHbj>)Z#|niPJFcGYnP&~8F3huJmgSjaF{<6!V>Ry9 z9t$TnDSIrOSXg_kis*o6Iiujktv3TRr9vDd3$2Bo{lD-R-IjuvzMt0U($c;Aq?>&- zyNipZr@n%|>-9!dXi~s^KxA}5aYNm*>Mm8;ADc?Jv1xYDR_!c30CjAGW(#Tt_BEE- z)#uer&+hBQ&+k+{(tlj}lamFORmKCb8>3nfTj^g+zvLv7=uR@tnO5-mk7o&#c_`xM zQr6Wu9Rx2;2+po+w)YM5=NP6FarSZ_lrTEGWmZbxLeU#k^e>#;ijeYZ`e#)i>EL(= z&B`(1D<(+E5?#?esM|5p!sG#==0V+|LthR+CyM)m9e0WC;d&xt{g0G&S&^HyR~Qqu zyo=t-1-3`~=}s&!!8~*3hR095_=1ZjUEq`!RIeB}V@m$Gi>slQvRg^b!clh`KB6aP z+W!|XE8o&Qy?U?cM&5)xxieQ4%)7kF`O!9ibR$LsI3Rmke&mzsC!c7`fFI$1 z#+vCo>t))s`m(c(2FdD*Giqv_29tyQOj$h@y@djAbycfJ2cJbsoQFx~ z^z9ib6w@GVoyVaAL+=>@3s@|xU_07J5W z->&{^sNb8&`+&b5J+n4uWtC->LlV1ha{_G&9`rXdJwH2~!}|j04Qu)zqopF9Unk={ z_>9uw7}J;quXD}y1+At)@_wE8&b(H!?-^_FXS}@n+yRW-ANN(i4M&Jcs51zq* zM-`aIaBB(3{s7n-u=@Z$*_{FsJper04gf6=yY&FbpT7qGF`RYaOE0@wO8Zlx*Ou@5 z>GkML(eQIBA=Uq3fjN8Ce0dD|)6&l2J!+=39uxjZY0X*3*n@!O)$cm;61qU{4R9)j z;UlY5ie1?G=&S8#tj#I_9FZV4eA$`Ypf~%k4!)082F7izZRf8Nh&#{ ziG{io3>9Dnv#lcDWeh#iN%U@CmRds`-TcQQ0#zvNW zeQI=Mzpu?}sKlKbcxq(H&T)#{XWiV+yjacX!T#mr;i*Wgs zPL^?*nM7rQLFGcx6>#m9#A9_omf!wK1bY0y*51}%$(9*Fslh#%{`%uRCT+Ya`xmn& zjSh7*UQIyyKCm&)*UZQL7sp&8{rmayUNpH#K2C98KRg?X68a0> zA2Lupg==kToo?y2FgaLALHB<&NqjI_7_IV1{wPKwFul$Ju)vhGY_(wejY)+}{3t*Sg9m22;ysV|?i{oH*S37(k`dlhLVc2GBd?2#0vIMl*1 z*lJma7x2EEeU8A1=3)ek^T5@RJpZP1%o&&&)m)Cg;)aiu2-)+ErKYxKe#Bs69Q6kS zSK?B4vwUcWvNzf~=>;(VFx+dl6CVsq8Nu}9BzG`9IZpm5OXp|=+=lA-?+1m5IW>x*Ec{OYY@Ce^Fq#` z+|ZfuHhH!+GmKuir!f*kM%Er3;|OZq95)sfh6N56&%l^>Lr@*2w>@ZD466a>QOZ2p z5CJd_m3lAJl$%y-)GEX=B{heB#tJ5+h1$Fn&c(;vBB24ZBJ-NIzy4s>VOTH|Psil8 z3!l1oOk;w@+EkwBu4nx2BQ$HtX;C8gbU)mb$Vm&2OokUHx+cSm62*kuuUFoDHhL^@591Q8a&Q*T z37r7VUe!^>1< zzMIuc_%wyPU>RIJB2!jfwm+$e7TY9E7aHn1)X+MPq?6PYsC$^Pz@^8xWk0NY zNGU-X?td29oZzUidb)7((vACU^T->Z&f-#H)6L9e{#v-rE%*n8#2LCA}ZN*_^eku(~1P$i*Q zXWY+3zpAjq>MKc0$!Yl4K^+{XfgjH~KK?3r7#{q?{R*v|tZAjKh#1OZcNjAbS}p(_ z{Zl)I@Ia#*fZu%NMkVbT+X?p+YX|R+V>mLJIE4uuU4+93#K$%6aAFhVh=PuvXNqQ} z-;3j^2W;T)`0{O|GA8qpx8=j5o!X19hXtQY>$7J9%mt3GxNRAaM)%Vyk;K zMp_|OksexX%NaYuNZ=UzXq|D%uInNQD*aWIwDK(XI8E0~riYzXU}lpl*W(U51;R%U z&d7y1P5(gcyJQhD28}^he7R8HRPPG58W7&gD1pcM(ViJk3nc=OEi% zOAp-dGu_){kl(sBMP&G=8A>`bs^z!tpGx~1X+9;~i|L0SzBw&?9pN_ndvj;%xL?a( z0yaW>J&2@(P_oz<3WbQ)*UJ?nkx&{fE19uY+weBrq_#*4HFGbv2hTnW^%H#K5lto} zkp%{-+6EzLa-%M{$lbwvnp#E1iYJU$zH$%#vh=jFOS$_dxr|+;u@aJq#CwR$3l$>2 z(_?X#rjHYKz;IYk=6xEdU1nnB&~v2lIlPB#w+oHj>qJ>3`6?I9Iph<~4X3;$!P1sM zt=TWca0h{UhUf35^vKeiSG@oB3yV33nun*NA`JD|7oH#iq~m8qG{lchO3f2Y`~xQ5 zf+>v$nWz0`EEGho+Rzh$Ex)5x^U9z*h^AX+BM+X9Q?~p`C$b&|>ZVdiej*PM6PYtL ztGs?n4_2l?ZGjlgvcOZ59It6@>V}Jy4`B?@jr=rNQQkkzA{o zOSCBRrL#nk9zPTG(pI)4EiU$6E!WfxMUU_#{2qq(Dzw>4(w^M`XzsInvcv)FI~SE& zTgrRnN8dnsE9eXamri+XtjrF3_muaceJ9lEfbuFiqY_Ji@~|G<1?3GiJ=0ucyc3eF z$dccoCb1p)y`s*xBR@9rY4jInzBO^3x8w>3@IGnbAEt$S5N=O@Gw$-}?_mOFo93&9chCRgc@J@E!smf{BWX#J z5lYSiKcZY62f*UQ6jS_gonbIOKkS$$Um#Cgn(ThyH_)WfDP_{+zs(ITvp3w(^E)7p zX!QutYQe@xuk316ndIOpx7Oj9FCr^Kq{TjwO|8^)?Jo6I*qTogT`mLopjb9>8 zuy7}tW!@*hfq;>q;DtvR0!DTb%^JSB=QPVVhihdWEgJ2oH5;+c@J;imKu_3JCXE)j zzxaWrQF6CkvDweEVi!oJ^k}r)uGpySjLy#In{A{-t=LkO1Zw{v>acv1`yKkQH2N1C z-!YA%C9yPG=+kJw8rPmLkk_>uXMnnd^HY&%rr`MY(wkvwQlC*a8dJd89B>=*w z(R&7_!k46lqiNwQ2)ChE*85-F>hasV34AMl`~7>rE5Duk^KX^`&LK}GEf>0f-2cCi z-yUN6++Hr-)5QPh_-zyc?Z1oPKGZ!$vjee(@@ctiTDUkZydU8<^lSL--){E!?Q#O& zhTooj_ip&@J=$m@r|yp5KFNiiOd2h4v$R3J8-6?1B>u$y?%$KSa$s)+?UyQ?L&_CyMCmG zZszdaiQaB^{L3=-`jUJ7?LA7`>OFNU+GBfIScPUT$0XxGk5<5$=&~3 zsK}u0ZbjbipL0&P=RV)Se?QVX{2k?82}d36!8Tr??wUQ=u6O^>7FY^yyZisWiEqbc zv#lPj&F(*4UO+xD^6jme@@>SI7t-a~-_mpG0|IULV>?-nj>at{YMKGTh1cjt%COADW$7Cx7-9lvsV`hr_- z^5lo734AO0;VA@;@3vnnyC|K4JKnGTfIOMJxzN2BVC+_V^}lex_I}rnDfwU|AoBVJI5b#O1?+K~!R~Xm%@du~HXA{og$Fg9D6asD^( z-~S2uVKr_qzfpd;&h)JPF6}}S-;T@vKOsNdw+8uPS>CSYhfg}Ei1?b~R5+9tu1X8b zXf`E3jHsE8Prm3^)%)@=!I;D~K$=8P{~ez`++Dl})WRF|?mPvQ=PdFh?KQFJ=#eHC zWAMOrsX1ro*Dk|JV{{u=#hm!G0{fztoG&)JLntnjR-RwP-Y9t(RNYyAM;G>Ja=SC2 zZ&&~D^!f#l-PZpk14-2%%iH{rxALqdfRZp)?gnGO&NbRBuDy?`xemwV(H-Glfq9b# z=|r_C8%S^*-X)jg>8V+`AQ{jvdHcOmviB;t#y~4)o_#K``vXVFl&BmP+tToJq_-~R znYWh5-ACwb65e7(BkVJP(XV)sdM#Kd?-=|q$OzTgA6J}hGRUxNbMY4A#sJ%pvqluJ zbe|`?>_jdmH{HX=%Ds%BwIjoVYLR;{IjF}xCC@wA*B_Ks#nD&qw?d_xECd6CHtBZ% zemT^TZ5*ZMkv8$=AX}FL%mfc&Y*+%U2}U`;T=x^EH0|Xv2AmwM_U~NscO7CVmu>-7)noLJ^WpPm``f*?%j=YmLX}#Zdbc+5PwI`2Fzf^!;yv}feRw#RO zRkWItR}^5ACKI&2cAj)>hjxlMTDlz?mU3r4BHOkrI6GY#{$a56U5#>;o0}TtD)%lL z8-qWHzK4_7yO8GHE08_cWOgs?8eVXj_3wZ^yF4vUtm^BBn-W_IC*d&?%es{hi*WTu z-%o>B8srCK2V#8qZuls#|FNWZVdLXrT_-&I z3C5!N)qFUM^RA#J{gZyT$<#yf`&#BF?;rT~7QyK2=BZ4Kz<8Ss7b(=)!Sjt6V*A!? zZePRYyA{=(lohBe*WS=~!!lh*MUm}0CUjYjstteR`(A#S__MOIetFkOq7E+!A9CM2q9aYr8c9r%pY5oJ7 z5vo<(?Sh4UDRR#-s;vLq{cNc#$YI{){DrAfQ^h^OYmfO;^5%Xi2T*_gdWUIsh>#E~ z+wcH4u>M3beB^}p!XFz==}k@<6<`(ypR}rnK;1gE6(~waE27b*@@7U zDDIOAACwjzoE9FI7Ctd8{1d`yJSD|X%p20ik56I7$q@dF-5bR1WjY);IR2^T$0AMZ zzT5(qVNb!_LoN1eKkk$yy9s8@YutK+Wvr67V#w(J#DHyNQ5V>#s(2BDYTjqh#CYw> z@X;)dT?~;X@m}2>oEQ2yH}_GZD_T~%Yj{Y?UfO$!%6%wJKaw@hj4#7}+IoD(#m|t4ZwnQ!ZYKJr9O9 zRA!13h2`j4!f{G5*AfDR0&~vFs=wVf%2Y9xNR4H#CeRGlo)hT(a2DU;SV&ETgQ=7E zlSMW#`TUx0^iu5Ky^kKUucR>Mibokqr3YT^3)R2-l|%iz)a&0Lx3}%zBwYR2{^9=A z@1LpJ@Et07m`XUC{0WBI>SieRkD?ky#hx>IMPsg072RBwy|t=zXW-VRis*aeX3slG zS(uFbnHIG^6jJpf$6JzKBmqQJ-^hYLZ0I~E**&$Y%7mG;Yq9xCeZ zh?qv6E4rWGiu!nsegbobOu%06p2-N*-bO3Zt{D(&;X0F9735_*?7q2a z0G6`VQ*1*drWo&ucqm&Oh|HuQ&$|~Ska=5YQ+=1BnlFzG)XJrI&6fkiS1{~AWEF`g z?H#Clli#3xS>b~(@c|$HeLq&lNxY_!ow%0Bbp7NS_u*|YuI$xm7^s^@CId-p*CZiAS@XB%n}llgcnz~X8h_FUBt4;9|pSecJu^!3yjjJ_p*=rE(wrisjt zHz1?M!O}O&1GhDo*KQ3z3YCPS|5WO}qL3BQmlE$_&uGUJm~(P@P3w{2^Z7e4TtS9O z&y}Ba3Z9bWu@xY;G@Eruov5J`PWFmq`_;99IgB7Ni`xAChJlX}fc)||nDXi+a8a!Z z>_3wE4gEg?3l;KvwDcCq!dR~7{>w6V!%odgZ@Qv%hnQd>{se!UF}q#9B#VjXa^3xa zBXI$hrSQvZ(p(`eej!n0I*CKO#42U*``eZRLv1OrF)(u)MMZ%QIIN)wwI@T#K&`RA zg{WsMRzy8j-GP{8JSFCcLFf2D-D}%5KFgz%n+{$_@)3)2TH0nC?UkeAWtQK75of@qnsr*TsIsnoCRbv}_=~?sp6Z znZMoE+UiFfN(6H=OR!;zzXEx*SDx2Z9rhmMrSJd zNs`^w%tL?i`|Dw;h43$geSEc94?FOM&#v`ID{wiln*q8{V4=@S zWj>-!?jQJ!F5(e!e2H#r#kDP5h!m)e&nRqUy}JV^BichCeEJWJhhjy%T+KXXbUeo7UN%j{$RQNNaAbUBk2wL zwM|D!tfW&r-5$2Pr_xX)8I;tMkEBCHJZbFT$^JD{PTzJ8U;*nj)-wg4-hY_T2Xi?-`W!?^eAQ z5BiXBQ*b+WY6@hgPh+RoRCvGC5t*S7PEY`$4uu{rkhO)vE!^Jz8?>)lTe zhlV7b8drj5Kcca5*D5u(v!Pd?CbsU88rzlk*|Cii%3@^!jqOF?mRJKz^rz~Hg{i4} zQd)ReT6kz$c>lC;d0KctTDT%DT$UC-H7z_OExh1hu?X}w>HLBHYw*kw#5tOjzu=u# zyJ6C{U=T^>PAwb8t?rW>JJ=M652q>1xOB6yN9ukoY#({mcbo9rZ9;UbyLQu#)|Q7- z{J(f*%hT>tMEcMl$;i|8L)_BpeiPOhbUYj4K*i!da-ngV*41n)%~fjPM7E#VY;%va z%x9*_R?RZqeW*>T@lwXyl=-A|wJD>$lvy_AkEFbY6#|W}^-{t%B}U3UHsx_I<%cFE zPy=^bP1}XAUFQICNjMw!$h0mSu%`C=sYbspGHXavy(a0FKx$ZEM!+p zh57@-JO&iGg`aD7G=#h2#3S-)zwjWA^6zLew`k)M>iw%FuvN+bnm){kUP+0_ILGZL zZyYIl56l^!-SU*Xh|J0U`1+}{a9I=GsTU5$XLQWFkjRYP;9jq*TiV^YGe0xE3)CKf z*rmh9d`ua0*^g?z_N=xGcK%$vUgAt;^ee&fUwn9;P9xV5diXVW%P4j zd(0TqZtj`e-b0azI=h!via^VLwgoxxT>(T};(HmZF1p9NpGUk^aG|n^Py8CJhN9ek zKUT%S@TZKb-33!Q%AGis4T5OEQ4YJ>nOjj$x2VJ_Z6DsPu;c+cWa;fwXg`CUzpo=- z`>XQzm}msx6yfd-!njwp!b+D-?*8jlG9!yFKz$-Rk{9Vs60AS;m(E3rJqTO>Ht1V@ z!bWG91~hEa&5V1%`ldOe@ZBLsU+ZWY6<~9u#_i<(osrGm8^nSBN4}8cy4XF6%2Cju zLNS+=I%frE?2y(VaO3azD_`QZKW08A+aJpQ{_tne%20ZPE*9rqNloUwWS(NRv35Hf zly7i1;8`Cm8eA@L8yRL*>BoUuU8WLga|i?ya_}6n5bqa1A(m@WoeD)?b<(5ED>Til za=#B3Y^gK+#hjrae^RGAfePFA=eU94)IpE)r$H2WkoUi`89h?IOz8l=FfGLId z7oY}%_k6gPHa}0ag?D&HvU`DK_YS4$miqMZ)KF1kl33r_gdj;@p2VLLFCbb;(wu?7 zF!8WG+?9jk+=iTLlyBrbp|d2is+jYLbmJi4N0YX7Wo*XBCak*x!pa@KYRDE}-zMUZ0t1q%XdracDWXh;8v%Xm6Q(q%*nEEyi$?V@?)%Vvn^}S4{ zf3v>hf|>PghIc2^3np&ET+xQ+?3lI8*~D^4BSoJX?VWBKqe=W#K;abmF-_TK z;m5zGWbu}9k(0B+0pUj~zHyNOld`Her<$kjqCs}vwrzi9i`qZ?-)g^{_WkkxYrP%s zft2KptS#KyPqrV+eS#b5ZQ38)ar;EK#^xb zhHRl7@$}UYjHItwB2r`uw!O~c!RB-&)cZq+2Q8f_$I_9n0+UbRZ+7(*^zpex^@9=Q z&dqPm_0C(8>rVCgjF&W5f{{7zf-a3)ICnp@X2P_jx6DO?Q5|nfK~?&p7$?nOYuoaW z$CvbsI3!)gsaDIqTHlagV=XVae*uqa05kC9(5wCvW3G%BfKmB+k)v^Y?xoB0QVwn~ zXT7L2o?ec3lNJv*raXu80gvnQ^0LK;9tr5v8Q-S4mo}(S+J3~BkL1Hi{!!qS@`%z- zxRv4upL%jx#0sqwc*Cln9}kJ42Flk4q);wD5a>gI*?kR9Q&Pe7l5)3DTmR1t9Q3+o z2eN555{*>s9m;;hwzjR7$1E)Fue>IEDESBh)!0HHBJy-OK-XTZ`GXy;-kQ9@eTI)V z!t1`EF(u!c4T*a!JrFdYlf<6_z8u?>xG^mpA)JOC@K$klbffWqX50ie5D6KmgS4igwlnCoird-eHK$wfm4XGQ?GI)UL@6Mv0c6$ph`{BH1 z6#|uzNI|3V`S4w`#)kpVDYQ5NM$U~=_PpBzwM$HU`_T_bd<6gdYePsuI6_*J$?Nv& zb+&u#`$7Xd(2h2a-Ay8Au*s|Mkc#t~X3GzZ&ZLYVm_Xzuy7Jw8!MtVV zJRRahlK1!jNOiK;?+rczb0!p&*H0>tXPNV4s~`S8clX2l>=ZN-os~oDO>6=lz95=O z1sqGoDo@lE{^D(+_@Exa$m(sO-i^Ay{~|W}v@&sjW2+y1nXCI%u`b6}MZ5Il>iz~( zCb^Tx}@enBjMEgR52t!Fn2i22Z}dsDa<`(Z%a#v;Sm~S(NP#g7f=1vYUdjT9YSvP`YU18^sMq zRj&;hG*fZ_W*+XNGF*vw@A6TnEct%LO7}*tC?3r6K1Ww)6BWp9JT2rpAX#3Ly<36#>d%*BKN9@B(lvzkvE=arjC4Z z>vgBa)sKf_-HHZlC0wZrG9Jr(ff%g3{Bz}4`}h8~W1j54_qU!fCosJC_gqm8C9}d8 z2IJ3}14FkTmyBy0!l!|QD?yOK9;@(|m_h}4mas7S2wg9w8vK;4uqvFhju2i;#(-nr z{N_-S45S3H=(e_x(2Zag2zl-B6@|wZret>=gJc7xT zKqt{B*Rbj8@vIB1+VrFc8F1BWI+NN{&U(|A)9f>x3wWII^+4@Vnh4>qJfCMc6aFkr zt9BnrMDen1)CN2rS;b6S$dR=_)Bdn$=6Rsqn3<ZVAhz-wx7CN~|+2hkO z5eau=*`U{_H~NIP@C`NCbsec1*`76}m|)zjX%p}6d?>h;RPi%kiXMh|)(o9}^;}<| z!S`LvPw_HOggfa2tCzls!Zl?BsW6MD@=Q%7g;e3QqTgZg#tbM2eg0cFH#JbZkIY)a ze1XqvC!~&f3Fj-#v1ol2b(6kA=AANJf_gFKbX4Lca6)S$8!rilJkx-iRqfe zKwZ5VciD_U~4!kR>79fnvJFiVH&=SH@M%w)F7iaVDgr%!h*r)fL$VNzOuq>OLSR~){;HTOH$<>HGHeRDLIQu;{o@5tJ*8O)nQubQ%*u!JnGtY!$Vfx0g> z%E-d8W*6?QJ1mS&>~zimHht6jxP5XWTRIR-3@9Z{iS zqGi!Ai({ohX4>v3P`d{Z*T_LWnK!+LGIx_88Ks!N9`1u}vLD`oQLtSPN13j861sg* z@=lN}AWz8v@_1O^US@=6b+|5dgWqPZM~&6E$CRhGc=vOul4avGezZsZ91{V2`jzV> zuY5P_QHbj%9jr$=y;AFuAYF*1%shlJmZDJfOPcF}U6oGzZZhr2-Y5E&5At})Vf4b? z@RF4#Zv;Z>(sX`n%AT1F5rxZ84$y069Vy;xMRxK9^X=p#wPY=*_b1;2rnU`ksnCQ0 ze~K!&*iuU(k^f9Zx{cFx=2~4IjLov!o>>i0P51;(J5uMrr^N=mZ_a!MjgwSta%%f? zgYtThEMvGi@l8g2_?z10&|LuF-nK#DHU9NVcD|kJT4Z^tW;nxa2Opz$|HXC&MHX z`s1xz+Kf#BnC|br3&HZ*0Hp;9UTN~gtxZm zyPxJ*_9E59Xe#&T$EjWi-lmF{d)y~p_F=dvaWkgmY4EA&fS)%r^~BF1oit#vXu2mE z%e;S=pR>R4*0t_&s)V0k%a8c%p)CTP<>$<~T|U3Ji~YrMho zXPMe*b?1JncBHyV=jS8DS`Ja@V#O*}^BYfIB1i|># z+08bVV;OscM-{m@NIH2M&aHoVsP``Slx_^nyv}SPKleik+QV9BiKbK>MNEDmEOc}Ld(1-uOknS z6{9>*2WAqcO(kxZo!Jb1Kv5N14RfeeF3EW~r%K9H9;8GzaKbq-P;<;+?}0Yb#?Xg& zUVRVDoJeC>u$qx>b@yvCQgU(UhAjRtm$Jgi8twlh?@hp?EV4e{1cJu3VUOKy|>nj>^SG;4dqKKBDPw zbuZIHu<2N2Fvcloz(sDMs3M#v`43&@c7|XAXg#ReNOgu*UYMob?b6#r>s1y7m2R<> zM^!&>F{|8@K}?~0$U+>dsduGnR%!)cU6q*OX9P#N`vu_t_!hAlIe+K+1oxTm)#q%> zrt_K2;>bQ$Tzib`HGSG{R)rpv;ZDSlxA+D_+Ki}DJB)iC9?9)EG%)N_g+lIZKHZs^ z{Sv%ox**#rSubKuQ}Sez-J@ML<;Zi1@|@ab6)%zeJ0%}Xa=6L7>tA7be!4jl{!=6@ z`}vFe5TDMNQjGd@NmhH)am)|s-J`|IskDe&-Zi2 zTSmd-9mO_h^TGH2&B4o3OUP`mcU_+6enSE}-TO5Y59Ul%PbSp&Iy#|l8_-n4ltxT; z`eAq;;b6ZR9tP>~*gy8gaU;i|{xWmUpl_u~4Z6n<7_?xO1D9Um4(o%C-V5DRb{E;Q z0jw5x*jU7{`rr9>!Hk<3u+n%+J87tY05t(&RB-UkjPH7wLwTNSL~_XG2?NYq{aMBn zN5C)?L7aDwU=kMt^vK-)Kb)Xx2DfS+w!(QT6&dmkH;KG`TAz%Cwc|qfP zlRUQ5aD`oUwpKLyP76f%oS+JF<&33PH2RE^Z|^esVUllA^29EavAZ8MLCL3(98&DL z*k^~~vm)VWd{rjCB|R<(8@481mB9lGcB*f`SG+9U!5qAQbKCGk!TbciI@VjENo)Mb+h@yPN33BkQQl$4D(+{v zF)sipR+JGMa^gGhDFE4ls1}eYoPa+{mSF-OCvJ#MnU<+~JMrW_DVdzg&zunYuXC&> z!-E%Hoho4=r>|uLU-gxoPu#i=VW!SgTFxQNc(zylLOD$LInR!7E<$Vp$YAbLL{ z-t#?q%$G>;IBy+2AOn_z6R;dyk{n-L{~G&Y$RYiE#FGv!_HcdRXl@353Fr1T?7PGL zwBkZ}OQ$|&tP;oQ0yfLS6=5|j@a%@ZDUlFA5u%f4VY?y3MKWZo(xV!=1}FQ0cw&CV zY<}yOZ!~J^QOPTMky3NaQOOHSE0b3gA2kqjh_5SShrO$pS#(L>jbPp|@akQaNLTgw zzG~oSm-jSYbA_ZW&fg|AB^L2?@KaTZpQx^g>S`a45A0o1a|T<{QqF9Ojg_NM;ARII zj}%A1Si42bu|m>Fvh3!87YhfU%ROSo65$H>tJ4^;g!7Wi4}4X%e-u1=&+*gW^VJu+ z)KIw^G)J z`pb**Y6^HCgoppW6#KkErBcl{(8s$0X6%jyA3D$9CDGZrpFI z*^6;pLa=^y_nMvbW?$K4`{KZ)$9aUf46cO;6RMlcpb-EZs`>-!*~;oiz9lZ6yr9~M z?m4vp(G7fFkP5A~H?k}syNtCT?e4h%B>FJ9&EEC+*qqwIg78Jp8HC+QfYeA*25Pc+ z54FS~Em*KdTq2h$PZ3oH3qtsg9UYl2>i2fDElcwAyq}-I!OwN{)I0cT2=o;l=+K!!OynbR)UUFEe zW_Fy3_n1koa?jd1BUWUZ;J^n;N*-_8+-yc4&hpu>OXO~I4-%K`Ucb6q?CNPiRTl-y zK3fO|qqB3 ziRgu@nUZoG4uv!cudJhQLO6Q2tM6T@^={~j^r_H>-v@>F<0f%3txmr}OX>4OI)5P) zLOlLWHavuIR-ddKAs?hW5nYg|$X-@-BRDk(sb*v2@!YWJ0@J1nkyAaMJB~$+*PwE7 zE^{2eVWeOGkd1w|Gl4v8r#YQElUxs;$(|(#u`UB_I^@sFGaN-TP51qxE=P?L-k1*; z+VmM=_@EO{=EP)k%?Ufju12!3NohGP;Y)1L4wUl^rr&0)?hyWj+^K@0gz`MzA8}#CzJ#m!RO4nFRwAZ~`L)=qns+lEyH&WGcYCh5=V#3#T?c6)A; zawWSr9qi+8QDMc83gQR(__<;H(Yf)@Pt*+gtpBVY_41ZhdQ!TTk)O zeZg~|;A|{hgyPRizFP^zv@xhi9$#E({*P9G$TcMYQGcg) z&*bkX+Vm>OucDe!RG z0$iz`m&QT(gu}~cvQg>V2?zRP^JDq|84R1TDeA-{ zl0Bx7+{z7Y^~U_n^~lJsdxE&$*WAA<5?DI5kjYE1JgxSX`|A^eRja!hScQ(RRyJ#- zCdIac?&0h`$o^atv)oAFyCG7{Fuyuk;c~JqsMFO0BHfd!HC#}eR7tQ7k9*Nqa=$8B z2kpOXJR*no&+3{m3=@ z5t4>>u@VnR; z{q(2Y^#XCQPvXR}@oBZg0eY|c%M05pVmIO;=cCw7%@xH9YI`m}R{O8y$)((+CAwx1 zI`DzXVH+b!B_|fRH~)rjg`tIV-0@)&tL)^sUQp&MP^h8~S3y;(H`E(Hs%5#L6^-F* z@i`?lOt;3P{3zBar*lW!K#4;rcmLJ_KA;`}6}fvYTt{WQp5trh&DHO@>|qN>_iWwYiS+ z)P7mXmSH=qX3|c%+S$doGiNyM?B?4!E@8RCXFuEj~K`wUadW!F?C4Z0t}(I&(aT$N!Bc zZ#T2jzJrGW`kq1j^O|DhAFFT}V*S4QT%pfIYY6=0Y)XG@acyqDzZ#fDNm~Fo+!_r6 zz1%dC!$t3{&$HpzBjHC0!@C-2JMfpmT^7^AcI_zRy!9_QdSOM6f&KFGcA!)VtBKFD3M3N5ow%CC@u($mGYr$I|4RNetjXJ@~mEvMr0@c|+UCSc^O##OmEm%gz#*dI| zyV^s!y|rb@lwt6-!9^7dhxDMBcAPaA=+4G%U$BGbpY6POLfRwYLlF2BDvxCjLMAkV%wc#S;aqz7Pw;+y zum1$^;~)Ni8s77bF{}gL|IqYzg7nV|1BQg=V`Kl z`@Dy8;2mEAy!+Zj<`9wK{nu-$@-tu%!nl~sVK|>~24B2x(jNrL%WN0sEb;mSgpn}P z!ls!8!feF4UAog#I{(zov~>7CxtP9z@AbH6Jmo#fY^&FQe^9?{{4ha$(M=;ZWIW$f zRCJplPQRa#la;Fw7I7apUF@|MeRZ8e;Nq3a?oJ0I?4#88ctn`vA+|xrpgwRO(ZiDW?}1$yZ-^& zYLOgrq1ry9o&YYnidV>#9JH-*`a()_T3n9bvc?ZbH@10g7ScnJW9M%5FnH z6g`2SvYxa*26k>1@>c zpI+}{=50Un`nj5)Uh`2l{2}3phRg5A?5=DU-m8!L6?l)P;sD;wAdKL>2qu#Y@1iLf4_(KNi%Zc{mqBKdjY));k}fIFx*V|Kf!w{ zRJ%_6{)vhMcvsT_!FvRN%7ynBEy*F7HIhfxxE??yvecvl!>=nCE^l05_O zBUHAv$Fd{;$MBvtm0lf*IW6%1=iym+FJzk|c+a$6W#K(t--h2Wki$&|uazzRmt1(i z`2p}APTmm43yBEB_Y>{}@4$wEEA`y#91%~RmV2)Xc2YU;VHSLTH8Ounk=2K7$5};9(69LQd4J_~}8R8gk%&30;7%O)_scQZqH4!!+51LP? zC~&-oZY1WTw8r06R3eBq-lgFL(qnl3Qa`_(8e@&iwMpC+zJf?FMA_zZ!G(C)=-PYX zeYZJGydDPB^tbhle=SCx>W1NQD_qGhyjPM+o105dnl@Kssj}Bmo+|DU;=JWYg^^pE z`}g$BeCtwVy3hN}_gQ2M*N^agfPL89DXNY0P29b#FGpFa=cf|m%&A(kD-ch-S0El8 z*YU?XZrhI_%ba3WO#hDb`OAMLe`z%TwwAvuB+9px%rgN!(P$I_^}>@+_0Et%^HJOf zH{TSw@-7Oj9us$z&eI=Ep<}B`UdYz|G<3u3>kWjge30BjJ?*KkFJ|iI_(yNsTs_sx zUYy*uAIhp)kaM4)C#p15ITiefXeB~94>`c=CXy41yv(<)NIha(Vjbs2ix;)Y z)b5Dm^JVU)X*s#Pr-OR3gvx-^5!#jUd}U1ac;}ORu5-1<8mq{|8pkcISi@4G7-#s% zIH*Uc+)YyMfv&cqD|N;^=%S;nC>ONfYR<#8G zeW(@irCY!T<44}$r=tD6^h-p!L7iY!tNqR<;z-|9O)mUuUnlK*4u#x1q=ie!=Wk`h z??%E8M8ba~oWakE;r&;JJgLLxAB&AYKm;(|gBK1i#a6VfxpnZlj5;s2+28^EkMn;7 z|HtI=8k9S`V2PJ6bAH|Rfz z^Vs_yT~e;=@5pf4-)qi#Gb*>{uI%uCeluq^Wj+NYd(iVtIEOh3G4sIsZ;Gpue`{7J zl6TMICr6$^YVNUfF{^|ztJ+Z(3m)1l=gA$Hp>svdNHSvXm?en-j8c`5#NH_q58-D zOgXo5T+IhzogdeJ7OZp07mC=JM3$E13vnXcBZlv-+C{MD!aM0AUX`8J1`# zb+|ietl_xpDDjd?^x&}K9(VNCGdTq%S{-)Ho@WGu50}eeK}h>jaCLi~rZ|usj-g?b z12s2?ihNQp*kzpirTs}xvj=1-bSN@QFE`Kn<5xaj3o^TptO(Uzb(IGrS_$H5C>vBI zzRxK6b^MusDJD<>>nH56T?stJqB-G-nJ|sauaw70XfW%Rp#_ zs!vXHO5$mu9Zk-%$<7(?$F*rPE0_AfLHg6HePvaB{^3qmeaROVt17SrIqvDD3bXu` z`y`=vn6xNJ+QlbLk0i|uk~SnM`NCAb+=a}l1l%a@Si=4Q$K#H!L(u%KK}BJ|Q4j3%-SIhcTQ4<_$AJ4hH(8&SLvFG)s$;?Z$J^K-M*1_zMA3dyqh}1cK*f|Qne;C?d%w|^TEy5j!rP%gy*Ldw3Fc{ zw3i6lD+=Y&aqIAq|$I+wq~oT7JsBgFSjSe7>KF3DOgQv8`8SPY3nni_;iM)5fqTI|gFury*20RrXD$SoJ&l`XRbphE zu*f7mnsV?7@aEWo9pF(Y-DPq~79I}-8p&0Z3E{E+BOaH&AkMF@mq0DToBrsu0=>*w zt*+nx9UK52CkP%lTC@IqI@kVl@;6iHo3}U5xZNrUF52+Gh8deT>Yy($HveGF+KjRJ zE^qJD%FJ7pklB ze;gG%zqwM+qg2E;(}@l*=Os^t{ryXl!EWYjF3FK5>?HxS;bapiEKDO>)Xy)*vsJM+ zj2~2Tu?rn!)ErPfFi%U%Z_+x;4I+B(_QZ}M`cR=;o`FbfdKX3>Jw2nG#vjVgg|TPW z%iJ7EUR+qeB7cew%xZeLn`9Hh*4SH-cnG(ox9hsTfS%0aEq>_~T1{y*gw>NAa#vBw(jCQ!izwWa*x7gm1d;)!#M+|>}X zZnc25U{!ciA<<&cs+%bwlqs)D@X%Ei+ih+)4Q#H84Q@slsEQ4FQKuA@eHOXP zSZvgh2J49LWCo*SjnAthE>MUFLwD9W{>Lkm*OshMCcCM_qqZaG#v6F9kK=mRn+|l+58C@}5ev!5-}FM9j?~=1sgu9vb3QK| z&3b*+urKbrV?l9z6-HevL^|_U9}-VJRZ=I&&s(#;Tw21xCvYLd{oy*GDI_>uBKmn> zI)36QkO;v59BSedsI^w5W|!2N^p8Q!5CqYE7)R1qY2ytp=f&MNBvjE@F}cYgIt((b zk}jjrtwtKrH9Gl_A%j?8kO5@}D}j5@GCW!`(r36fn}IdqeEcdtLk7IvNj8nAt}V$k zbbDPmH3Bt@Rp$Qe^LRt#?^0KukA-?Xbz@1h3MJl4*jrH847m+jK%rFM4H3G;+KX8N z+}ZHgDgnVVbHT6`H-nfCy^s>>4c8M>HBbv}7t?lC;`J)pE^^y1^vecI_;+qc@#xf} zCFRyT^Bg}(#YLBR3_G7E^eA6vE)xaJm!%%9siQ`9FwdryTctBf$}QOD z-nmvaYc)ht@UwQPD)AD;;XzkMh6SH0nNCn$y3-1-v5ZVNn!5nLWmCzbQ_2mk@a&T2 zpfJqj9101lrFKtjiFnre4@PgO5gx!vry&Fx^n%iPxdYR!)6SF5z^5rjs%pWqX= zLc8yS(7A3|5Grz?1fg>GRuC$7F9o3yZf+17;GPabz1$-~sLPwzE98{Rz<-Zc{5DH0wL37-%N z508Y8i-fBq;iDtrsz~^VNO^>XmBp*zLe;7&Rd$B@Ch_Zhh`EaD#3-f))d7ITR(6@Yhic&& zrtze4u6&8pRJ#qRhP!$j-)_}li{RD|Dp}zx5fu9|iQ1H$VwJ!@WM}T@>LoyA77T6f zHONg%i>a=34<1jLR&bTuS%ZRy6j|1GcY^`8Y%mrCVkI|@_SCmVi>aHxL>4v0Fd>X%5%KwrBS9X|uFv-ayIedeAc$NM+SvEvRro|2+#7^$qi zV*J77Q))_dKTbUzJY`795Le2Xs+x)3f&8b&QojJ{BpjaKUnN!~eyCr1$h@!Dt6x+{ z?Fd=1t8O84{pW|^Gy3JadFhSSDA89-TuZ!06GIb=*~A}~SO415<#mCa@2^h%g6vo^ zOD}0_!+{A@aU&w~{ zB^>yt%&c)4tku?S9ayWoO6uN^^#STuu?0CQ|GSF1IiE3XnAH!lhGz&=EWBzdKmE#M z&-@Es7;imP>l&*>H9MBCJD_+iwfzc;2mA5=3e9gf4!q3$#X8sl&0~$%s}GYGXoR^; z$qi+r&|r_eb7y%Y+Qc4qau}c1&jOTGEd{AI@D%`Z2;e{+_~H zmH+h4B)V|(6z}Xc0@GND7=`Y^I>R*60bK^RVHMlkUz4kxn^%yRH!?2|v@IxU_$b!+ z6_7}m0KCAyzA|?2lGvOdWA*QlV6PUyD;_W^Ad{y8(dH&oWrDg^tS5!PKiWb)ggpU@ zlYXIJ`eK`tDn&&6(o0Z?x`~e}&4yBeZgI&WeZoq&x!+wOU?Nn<2QI1ERFk0A^4;f5 znBu$CZncoeuz7M=&h~h-Y)IWtgJM^0&y0JG&QQIIj&E$>RWnXTOjQGa7<6Js@{CVH=#c{2J^RUd*pdyzl+lk2}wN+1DO{&-vQE^`Gb08c>7N+d4|{aQBu2 zE2eD8adLHG`Y}U3iysnucH@Dgh9)*1zy-W+D*DcHyRR{@A~9etlb$C(_Kz-qFPP`f ze&(wZ1qYg+`KnaGM*Vph`TLbG7Q`Cxp47hlx!jT4JGbe25a88GoPe&L9HR34^mfl> z!)s?{!#@)a*Aww4-s7^<(8N2eF7o;YTqBoPSsHXA-^-nX7feid?D&SNe0Y>( zPuwxjbZjX7%jhrZ-;mfdd+uJ5I$k{-AG6+Vc}rFP8al`RBz63%x;6Q+tG=M;6?MOC z5^MOthjy5>PbKXZ4ViL&$<{j912?#>SASVSaUS=Z$s}I3wds*vqgX&>FjLZdF^}k* zQpc+Li#M(N_a--3y}RXnAti+W{$5vjK?^`_r7v}*u%a$+nvdNbj*Zc`;c zOLAtsK0Sc*S=RvPuZ^BFaE@Jx?zBC9z13MB)EDI6Px+h3Z%>aK-Q?7_jnZ!?efeKQ zd)jP&nAh(Tq+hD^>vGdMztg;bs&w&}^k{<)^X1D2=`Bh>K)`QA;?C;Cdwhb(>IU}dM%l#V)$fj@gW zvnQRsN?U9}iQ7q=z+`Yq9xlaYAt^ZSfC4Fh1lX_7%T$z`k*;37xDlwjlgJTD4EH{r z4NoWR<+ET<%*6^+%aCF`p=;HUUq_mBuXY1jIHW1$jD+->(fz+YDs>_H;Ig;w$BTmA zMJOnNU6$7Uv`Osx7|2ui)B3UN>ItL_2JRsM>D?W!zrw;e0v zc;`w#js=WE{6f@Nc_5=6d!L3SPdt}ksjT&!w~g1=imT@ybLsJJAuSydP390}d8VCn zf_6@!o#nS@&-=rE91)}+M0$F>&3+w|nbI~Vq(beR$t|Td>WYy&tlK~7$RRhG2cC_%M;RnWw5MF zIgteVYPjcGwGFD4%fLUXx%)0AzMA+srx2-_8x%8KIB#?lE!Jpng$Ob#ScM;B(;1 zPZkaO#~H+Q{kkUreO1EAnV-_^aPd|8W(rqxXVnjoR}FmBlJRXvT6n0~owZs*$fnAH zis34Lxjqu9&P1+hRvo7gZSKoja!MyoQ}Gny8;{<|zuZiH>m8t%V+|usrFdfyr^kQ- zZMGgLVphgTHKGDu1)}6xDxS!BCdgfaMN>RE+vf~@(lsli#Jry-XtMkZBcgLNlQFk- z)59$9Tb9i2f52Jj8sM=Zx^LPL@YWW00nx&2p1g$#S(|;_&N@Pm!m#-nUl%<2%dA+!t-H5@_}!~Qjb_0Z^h~l zmJpNLQ=ACvoloNPzTye77M|Bio!DN#CV%`hYO^rpk8i-=+zxaW56T7k%u4|m@M4YM za>x;ZuT90j=~9S@w@{2B>%#5liY`=Rsj>%*AuV&SDNe!!aX(KHlUnAQh)dr@y~an> z63W)=^d5i+2ZGyfm%5CrHVkaq-4se>JE5416$4SG%0`mcooML)sjfg5`kuksjw4Tq zu*Pr96i(C7OoyPFc*48dbmv^QOpN zqFig%_ZTUL^-%1`3?h8~^&C|@X^vP+{_t8q_{Qj%3|T!|jfFjv&Ld z@qlXbSWR2UZ5ccr! z>rW+52YVNfW{cxZPPC$M#)bMmvgVk-Vdrj7t-UvJfyAKDE!I+QrAX1G?opxES6 zeU--($W>ZKt%=t~hOn|Snouk&tX;^BUA=|y*?59pYhVj~d>(o%SdyN*;sT#eSgOTb zd1g@!;;$)?I)IoAa_GX`aoG``8g%Os;?~LiUNan#JdmW9x_R;qjSGn7+S1#C@-TTa zbK|F_f=Re`tYPpe+E!^^x$Rbjp%C4W@jiBi-2*{0YsM053~TQN$3kGAUkHJ1LUSR3?alqbFuYkLya{1!_ZrllyvSQ|ne9amxny?wV^@l1hGRCv zCWoy)&+y3rt^Y@CF0Q-Xw$MW~KJ72|?3Eh&=|R26Zlgiw~pAlIq$`J7dgTd&o4qWO1M{zu5a z{Ef)|n)-t6YE0=#r9YmV9;~QKE+u`m(*Km39+ZDq=|_^D{v+*s{#UO3YwI6~`<>!= ze_*J#t51+sNDC$74+P8*Zzxt~i)FhyE-jqT*{+Jnzp=b!cUzJV%N=sU51=?8w3au-p(2b=o%NdDp$;Aipjcb zI84y|#m0v?#`7DPNL7P&?5;6(0d7@&KG&K6qF?_8IFsIyR#@*PM%~4N0L$EZinl2- z`wY~{8f1oJrovr>ji|`%OX3)zJZQPFfY2}9x>Q}rdfn)G3EdiH-I{HAbZBWpI{t%A z&@>TWf@a+X8shAdI%<+fXiJ@{YL$8hsiFL~W`YOGrqnCX-NjXjN39r&vsl9tTi%wr zBGAb5{&11_)M!N`#==4)#(TrB3>n5;SH?fgvvVRbBLbg75}Lm_-?FT&rqNi46)}U!}}##-7E7KxKFJI zSP^JiM{2fSQL7wU0pqee10Fw%IQc}6Gv##}Nw|?TEXqKd8&c8&icQ^rZU;zT#dSdD z(&Xiuk^!teXF_n2XjP$T7Ou};A=rOv1zPLsG+!1ES}9+e^(x>CwyvGUCrohp>)HLf z#UBD4D}E2@VS8P2^J zJh<3$$Gl{V7c(P-rW7yELXqFyri{=N06dm(OZXJIF zZ9lBJ=v0N|))7ihlI)&g)FID1?A~m6TqJx^B)n%Nym2JFJ>iJ89_xx~_2+>+n^Q3y znG+S?0s6a}ANM4s)NO7-1)CTGKI%(xSo5E$p2*txa2!n1R-W*$AbihLoVzHyOXpgso2 zr7;<Ts*8p~rUv(9PiPsw1K3Y0N*XP}Vt zGZjzVSyCq;1d}xtyq40+$9eshEq^v;H~RJXzn!&xM+q;yeX44j?A0_lzJOLX^TXyf{#8 ziC0@9`;s9DaJ?g%B->SFHKtijlJ*$a$uP+FvpvD`BT~J;qL;k-_(go)7pRivC$~tA zZO5T{?5g)z!t2*`uYC-BDNV)mhiu?5K7(B>1mgb#cG32#z%`g1YE3R48g~#f>V=dj zn=m8{G1Q$VEboMjT$+qsStUXhGMd$Cn|pg?PSy-Eo!npJM8;7HUg90=LE^i3gOrPgiZPDk&>IWgPd7Ykj zwJ2p=tZ^Bwnr?3iH?}gmy*K$VeW2M3`0{0u^19Drdco0F_5_G5Q?^nc*1q*GRrVmb z>W-mT=~Gunl;+r<4wvWU>M3IlU(sl^d{_F)A%pUU419SkCzC^Z0^N+p@@|#= ztKZjlF6ZqZ&~sL$3bu%pdWcf#GV6}!uk-9r6LeB#!@=hCFNQsqPk4|jD<{@11HscJ zOhFf=PouQg!F({-#K~(!w4Gb|t+g^}+!@q&;;CI`+0tjJR+jy`&hovnnL&M(WwWlc zyymlPs4U-|(q%(-W{?`R>~ymHz3VJfd@T!<<-xA9)Sia~e4mmNT_#H{e3g>_&}Fj3 z>vNQRWS7Yjuj5MIlVo=y@DIi7!MA3^k3_=tk?`b5cyuJ(eoMCO?veOiBjG-g@Gg;X zStL9+QqM+__-OuUox4Tyd_>t!=cAR0RhiS#|EQea;0tLuE<`zfV%N&)KY&MU6pUZk zdOpB5@JmC!{RwMJSNiFq-@|Z2<@0>Q>o<@5F^e<@2}TTv*NXCSv3NFcLQ&Rk(O} z3vs4*X4&NarD<5CGSPO$6wh32foymm;3P0qi&RGOyrHPTv?wdU!HnYB*6}X&&L`PJ zhrt~h(>os?>Cso`_#W*`oOmD-QsruRVuuM z3VONOhKW74Q*5&5!ItPXc+z;s6I&MWTG7@%wU>S<1@IT31194~2?5~(8%YX8JGq*p1p%Om3(|Tt( z?9c%YQ?ug-Zp#(bwpTD;D&> zwAXHgA+Y-r@W#({!A0FwZcDx!znyeKRjT9>a6dC2$$hymT&@8ew^+ogQ;6h#X8qOA z9YW`%ofjS&`W-8n6md*ZVEe?=7&DGTYMa=Yh#4>WRC|Qh#=wllC$x3M}2 zwQKW{XXh7CMXYfgykhyY?oq1Lm@z|2e}au%82*582oIxdoYO_d4>qFVXDGWhQBS** zza#ZEax-C9tijlkaj8}H#AQF7>bc1&Vr!Usk6q&)f0TPGFT34^Mj3r$#+JToSFZ9- zEP<&q@iR{v;r3O>RW&8C<@iz&o%p>D;Bh}{LS%?BaCxlZ4i!o5cV}{|#y4yC)L9aS zUoj{aB?Iqs#FNLlc>QHX#d)=J`>%BIV?mX`uaRB9PJG?xL#cU}z+_ce(}ux^cAR?M zV~U!B!SJPh9eevef<>{-*(1WcZ8Gy;ku11VONJhE^4~kc)cEa_iGT zI5Fo=?Ie%zSixb1;=aj)Z8x~kJ)`Lm=*`~Hv*xbeqTtd6b9l1Np>R@uQ8;;xpe4h5 z$gnGdmBthqENYEchim98V%gqrPw&xeb4^6{(1_$){7!S;=H8gaeBa{^pt^7{&DS&c z*~urrQvUn?9^F-c|80Hhy1(0X?(ZHQ`rGroljyHeAj&)tHJ;#jt>9rgf1|sc@?q!u z(D~qgBe(A=hF8Eixi%M2%ej@wewE3A(m5h%a5*@KdhkIHIJSzx{M`U0eYcyVOmhiw?-spl$_MBCe-TQm>ADu5aF2XC@ zg8|unJgp*eQHk5-Z@MLj;sP^1Hvrptuf;eL@^lH9hW}hUg3mR74L(iiGu>vP>*0&& z+^6El{Cq{FXZzAa8@^Oq{a8Ssu|}Zw8)`>${oK=3B2pW`q9jUt z=RG(Z%CG^UVb^3z>1@_*J52KJT3IUfJG=AYFpZ#*UFOcp^lCf}xu?VNmfdm|pS!A8 z&@WWe>IMc`8OvTiDE?7zB^d4!cPpI{K;v%vQES`NV<4^!J;xD1Z){FiX<;3CToyUX zQ`zt?gv0ZBAy0rI#X<}Gn|~Hhyb;&E$$}E|nOp_#!AB$3`Mod|U~x7|>y^QRTDc9N z61ffd3YKO2hhMLsL(wiP-~U%DpJJ6a2yw74(8lL~jqjVVvoU4k0qXAY5-{Vh*D0(uK;cj~@{M?j+Zo@EZ6yJMNL<1rXXRqi(QFK8Tvws)NYrmzy=<22&(v#bOZRB~IUrJ2}&xap5r!x7rJ zSwxZQ*#hNcY2!9{1MSF$Z_e8t$l?zaFtRA97Fi$_@IDQl=x8$$lEqQfz$)UN7Y*U*-4>0O+TZ@lqH#r+ zLVN{y zo$*kZy@ycotxV|~Rl32K9@_A2xNcl(-Rt=fl#`{6%c(EAZcKZl1A$ah$_V6(s?55v z`uFQ5kUcZY*C8U&%QKxkO^e%i576h3K=OmEtQ$A`-fG=A(n=WCkEAmm>;G{YSbu@m zh=b@xh~tl5oelqqa7NxfDlxAzvB)nA-i0x?HQNliz zS?vFyAsc=n5_XaBw}ibtS`I${Dt*9cO=#+xK4!-MNA!{ZtCgKeWx@WX;>1z0Ql2C% z{UDQt4>+B9rCvdm5)Bfrv1Jg}91O{?GY z{}t-SGQIST*wtf^(0+&&ZE^$$P{h1Qi`a?s7xgKB&nhY8@0KO*4?}-xC*PJO{ISR) z%TQ#QPkC`vY_BiKhz|GCEz$hFL<8xIH{@?i>}n_hoX7JEJC!k}9GlO%fjxLT`JBu;$CA$8fRa>3aiA}Y>86$bf(1l)aka8AS<;M+ov^tiByq8 zvPFvBm6;+pOFG#1FKWcr#W>>g>mnrE(GHif;QN*@^?S>--8Xy z_7j#_e7`?jG|)7C<;RM`*)?s4j6+K=MYhbR0hPHkkvwfX61 zm4Z{@6`J2w29tC#bq0u)wCZv!n4^d_JCu^jUe>yh3grzUR(Tc`T4asDe)!zb0`wko zdwj??Roq2Wey4l_t$+`;6bkU+MnBOeT)FqcR?Gf?iJgnzlfj4WLcs=kEnA}0-4{Zk z#qDlgt1(L5*?Kjp$en#?0Dv}k&GCZgN?jjakF`t|+}cPvALib9=&Z0*JF@NDg` zV22;_fu()JIa@DV{T^0*4hvBIBUOL9_1@FJ)#K?uZ?6D$b1O2_^yTo*^pB-J%h>Id zOdkc3xjI@6Ww(naWy7~c!goc&M@7OFk??tu@PJ78sz`WrBz!|8e03x|F$k|qKkM2A zRAj2Im%qmuz4uqRE{Slik@>pHUlf+l8iw0lX0`@ZBJ|-XM5W=7Vk1YLp(_ZDFVzge z^<>S)a_D#t#7%fWhrLTYvXZS7*>b%&vy27$S?Z|e+(uVWQf1SIc9UYapDiT=w3N6# zL)6xW_e~A=02NYWJGI+skP4o2@qs&&7`c7Nop@F8UohXmsT~J0q)6RpxsIdN*mBz zh<1-%mJR=zu)j~P_ZI^s06_n9_@8*l|26R6Zb&EiKN`xtg8%D&p#dU&S%Tf-Py`kH zpCl~`|F`Cc@DH9zEVNY{ExYSQcLVtMJ$BvjKRwghLP7bApf%uscqU~$9NXP`M+W|n z(W;04zRawLf8yXQ%+HM6qK*^x@JAyS&Hx^(gsJ~&5<*cIVG!IlF=z@o9t$^v4Hf=j^LXvf-B_;ddh89|>ptpWAG* zvzQaqHP0lPD`L;q6s#SUsOh$L`2*}un6~mGx2Wyi-kue3-*K6|90SuW82avkyJrdiRQ$(ctx_N;AdL+ zIen?xNQC*9)@H*WN5UJBC)6KSoCw2N{&aUv$zRu7IO7Y0 zc|u+HP9P^RIXH7!dvcs9!vzRHfs(Uxp>GK1ub-p{D(#b}}Tc#!P?$<=h|R?0 zZ%XM99VfVa> zdY&-lrTf+{$c+T}V)JwLRwY}~tciP^n4g2@~#D)8gpcXw7!ZOAy z_G4i){<+hk;d7+~1d=Ia51w;L5?)C%5w$O9Zzz-Y0#B}q;_44Z?+=$0Xev|P`{e@xmo~1>}tGG=E-8Q;b;a| zzZwhhQ#FmLve(L0tj*o8N>gPY1)sOr=ba_f)giC@oN=3)>Ug;ae^BZ^%YIGSFQRn- zqp$s+C%3s~xc0s7d2Z|eKGQK|5`Z?ecU0_lvuJXFqEY5)#v;o*59~?qvkA_=bYKec za?GyXMKoQ(DP2X9H#isUqYnaqhecMj`qyUD`yv~8`l(-C5NkX~cz}v)#qF(x<_iBUt@@-GHY{B`bxS5mCWF?Dm9~|j&9H` zVb|lg_`w?sO#160sw82R@IJAygrT?z3ee^0eSyjMM`FZ+xKc$!Lb+G^Z z+CFopZPm?PPuuG>mX?k@t3M0K8T*P=JOwj}b4-sfG%zn{FX7w!%1EruU230fz=tHy z+|%`bW^MbB#8MgA_N!ld1z?XgGy}ufGX*8}&H4BWxc)OfD<*$g$4^a>$zG|lx2eqa zqoxq%OtZl7%d_+xe-InQu}VrTvFrcAMX<;WtZzW0&)j$4+kkOk(78|SGY1%7-_$iQ zUeq|4wWeSOo)B;b0sw!HLr9z|`{f|hpcy(%rfwVRL3l{`r`rkgOP4?c(ft1i^P@y@ z)fA9;je$U+`%xtGuM9m3KT4X`025j{rXSFF0xxLb$H{LPe#|CH0NI#2^jov1;RmnR zH+=L*Iu1RhpQ5wwBO5VSZ^Kud-`s}E&i0jUN@d{%#-#&&jW1K65{I0aGZ+(XQU!J_ z_8vLh9U!6_?Cu*Z=9Q@pFnCCxO{-dbWJUUBCft%fE)!mmZiz7UC@6qHr`Hj#RCmEJG<^V5AI;f0a14@AN85WR% zxRK--Vf!;L=TeMHjd?W( zODr#{95@^&gZuRVD5H;up?#=DOqP^-!8Y#mAtLvR_gRd?hVJo!^T&SBQAW$^<^Rv;zZh#v%@1`(%Dz`e2Aj6?;v3R<3Se8X`d5 z`B`MRjBwzu!t^nfiJy^onVsZmi=VP z|Dpfal3`u_A48h@UpOZ0tM7lL@1J1v5cYT9NZv%2&s5KW59CzS>>Ov}%byL#-Bfe-xSDab=hei4 z{lKDFqf|4aCQm3ldt9vXC{b9ef40kS!`7dxeXMIK)gk~Y#1r#bgx;m6m5KG@sXC=r zCJrlFzJE}^$#M}>*xm^`WEo6(V$5&T5xbG7=&Iy_>C3X~ zFPh?}jW!UV%MRI#WAwX zFo3kVpG$1r<*~(vvFCy)C(jj-0f5_{Rzf^1p?V)~O%KV0=cm6pCyJlSk+c81m7YWpG^1#)AGG@K$lA4g zX=foW9Ko@jB$j$Jfspbub~cHh`oB5n0P=HB=x@~E4(OxF&?I5Dd@2(^SEF|~>?(Nm zypb%31aaI_#0S0@yYdxbMzXAyXleJ$h40l&xK4)3S*+su3*Cd4iJ)y)P*!Cb?QXK& zk?t{A5zxoLmU!&27Wo=rg}c~F^w|3^-Sg&F)4Cp#b(^UNbS%|l**#DMGJdh7{Ze~3 zE+wVU!8MWZuChr|b;t z%o4Xol$7i#JO}VUzr+tD^rg|4ZmQq857^cM8Y{Z*PKM6Ckm|lp$ z=SyileHuV>byoAWA@*!+Z$8#K*{P+<9^PHBcu{_z2EATL6Z=GP`NOkATy9A>Wy15* zA4I}EX*$IHy(8hRBH_G9_?t-C%_8x?5TE7WR%87)+}1b*r6q*1rS)2;lZ9d~636|7 z)UdT&FPscfY2?&&YdCN(e~%^cxk2Tu7vQlUxC?+|RAXf8w--CC(eb%v|GG3Y@VlBS zsay^mUs!W`$b7LUbB}){G>g8z8&8Zbl74_2^9RNgduF@JdB9%l=<1&8YUCZ&z&L36 zv~V5t{hu+L{x5Kk?ff754-g`YUC{r-GA2h-9UbCUeb`0M3%l(3ZtL#(Z!$f{9yK1o z`RC{9=ew?l`k9e0%mzI;aYK|F(fNo5CUD#gVg7jJ-?G|0gqz$t;trB@0nDu%e3hua zN6mEQIvFV&D?7yNRF7*c25B2zH7RkTt6fhR9j@=c8!W}cWhGm3>cuKn?xyYHA9Ia0 z4u-jcG+P=sOw>;mPrPDBs4TU~B6?DlnBX7EOg$n=SU!2h1nb4FWi>vSDe~R^! zsvn@A*81sW(LaI@`jCP%v%y)}U~@LOC>vay4ZfcZF3kpAHn<`iTpa{kt$X^Q-6A>_ z1WSWptMxR9EDzHY^>Ot-QD3c}*7^}a!ovEI3boctQz~YR()V0~?(vhQ6EAw@sU{%5iOas0ULiVea?GiM9S3-hf|A%z6r*79OP>cMKV(t|vfIg4RH*R_J}-SfgeD zl;}NIJpvpme7+UlQBcwb_l{2FH5q#yjBa|cgq&jO0X^)D#w4~~#^ncbI8y!Z{ zRuy-NuBYVk4WCk#xL37k*!!UxiX-?HhZQ!gz)dzCV05%Z>C0XA);mk}h+rS#%UNb6Z<{q*8c? zwJtsTbODz2E^KEvwe#>OYiC%bom+x-Vv%-s2-^8+`|zFPKLyQH`ewAoos5PgeLT%X z1n2-YIBzm=gl)?@IU2h-Nq)mfEkeM{&Xb(aQl!gTUsGDe^i=wkwFi_~^Iya*6bzQmsCQ9!Vv8GT~C^aX)c#C)B9_f6wYQj*w? z^oA4gPow|I7^x>62BeBaD zDzvF(ZFBE3z}%L@k=+p)&83m>M8e^ErXjeU0St?pJvnW3Bz1qi!nOBu~ zDPI5C&!b}F-eiB-zc`*cVNB(~#WhFQPa4y$hNIM*mr{XZ4yvD{V7J=tEJeguGjzq5)Xz~c6R+_o ze&hN%3i^29e|NJ;j%h`{p@!u%z~^}K8ZCZ6VS;{Alc&%ERzY#zT;>gc0ac)crl*m+ zR_#cSs-S;!S{wI_JY@6z1+0zp!vCk|`(w^a{=Yik`JLuFzpMGqU&nlB;ycW@kN>}M zzNK(3azBWzi(w>h^#uM=tl=(0rTL<1?e1duQqmdPctt12flPx9nHqja#Q%cUuclap z)|)wG`A>8I|1vs1O?2KpXWpxzbF?}2f?1Z<_xH5ky=GE`(0BBN-o54$B0J1_cf*o! z){9OK?C~JjqW;bDfzUt$nudrzJf6DUllz;H`}^riNF2V9t`(CF^6UH34&PVs4G-wg zPq^RwWmw`Zv4LDUf$M><;M^-UEMJ?AipV$W6umJ+3ld?{5y`Z>!;J=L6xxvHGNQ3tWj?a z(GdYvp;W~=7gfCSwQb=A?PcWG_aQ|lhwX_RwmBn9cW3&7_756f+lxLG(2!ZZ5@wKj zroNO+UfQ(W_wC2_eC~hvzRi7#zU}1uHag$;Z6a-kM~nv*`?zz6i_NJiVe{YSUZxY0 zOjBk1pw4m!ZtnYL^G7@M?PBO4ea?yM8>8k>h?C|0W`ch@* zGX?7HqjWC{>W^``(iNy1$k(J9rEHraIVNeme?#;T@2sVph{48Pg;?zdZ|3LbNMNIe z?%mYprXQ^6{1Zq@;{3ogDl9v>3^?Gso5pd4G`S&kPXO>bWxhr6vv=?(YeUoGE{1mvi&iGfC=ag%Ub<1Zw^7`|jKRbpgd^g9Ibki4}o;#w^E(ULkfq=%qqlr&qg&HaX)RSCRy@PNQF zckN-;)Wd*WpDD^!fk{h)asd8o!-}#N_L|zOjJ6z4mE;LUbgO@rTjX=p)3!bf`X0 z6bE!U{91~v{>`(h0DAq}ZZ#X$e~0MRoEnmM9B=R9S@8UlJ(d>*eEg#gj9hE?Pfi?= z;o<9TL?k@eD;_jgb;+>9+z=X|@uB_gsFPTez`c-vKj@X0gk~jCQyw(|i{*mf=g=;_ijGpI3X#sDi_Z zFNK)#DCkP^6~2h;YssB4qmgV`%ve=n?eyH*W5#N@LkG+_-dB6`8jl(8T8%@M2rE)hKM0v@_DuYs!S|QugruOr2iEO ze;ThmWw!VA++1YxvTo$gSefJxsYz0CTq&vz2C%F%qx8pF)z)nGLq)k)U& zM?ys(IX|BG0#HBvZ$A@P{*j5v&4}h_i93R4jodpMh68FzH`0w<{5;{P#6pxviC5+A z?rksP+R=W$2-~6y$j{e)tIiE8JSy@1P#yzRH&dJZwn07rE}ooK4tJ3yt$BG$4l6Q0 z9Wwt-mg6oz@ZAKukRUx{;=}gEIwQpHwd}=uRl*rJPw&)}#_KQbl~=Q)5{p;V@19?~ zmCwhiVlhlI)_z*Mc*qYhKwmEmc zX67j$1<`V4Bg#=pybAsP-hFQWJ8I@5Lq0~)cj0dpb=-Zf`O|n&#&q(+p2x<+I!Xb z>GkS%L(uK;B}I;fI9tB&V>%i#kmSblgrFlJ$Y^wh$Z3_U7qwB#M59Z(3IKwAxJG`f z#)7>O$H^O5*W2B(KS!23=4nlbQ;aBc3p&jn}t&3mB*zQ2Dj6v%ZBKF>nfug)T% z7H8UTyL-?QG!L2@dnxKdiRjJz38x-}J{xs_8cF{_le$c-c+T(qypE!V^lT*8so^-u z--rAXM2iH*r&K6+z!h}fZ5$35JYuk*j*dac6uEi|2m)h7h>8>-;9hP+iXD}3s=2WL zOB#48#7?`i*>s?K?I+0A;s7r_VrhcTJ=ynqCQFMz^&r1y*n77{ta7*5Z@asm-}EGg z<<4F&B)s|Q%d4{C8IkbxNO)l+{6r*tLnQpCNO)W%{A?tAZzOzOBs?J!J}VNQ5($5G zWVWAg5YFfm1Fsdq&VOVMPsHU=hC%ehUd$K-dzJ;l?^M|xoBJj0tD5}0#C*)3P9t(9 zUcW@6i-|-X)v&_o8c|I1XZ{k+qhPUJ2AC+kgsqQ=Q1M z!|XmO7cy>l@qO$(ckv+Hko}Ts*~b8(wF0VR{aE6PjbycRexE~2mroxQeO?~&&SfPV zvlF}D$npqwVsDcet^{ur5r%(?gg=Xfr$)lJM8b0;;nyPJD#GFUMMmB;j9I7rzkD;` z;C}k$XRoJeX2x_cWOsOj>04a!KLCdG-N}*g1kMMU9_?d)G<+Efe%)!Zv24_|V+DKp65mxG2k7Zd(H!COn=jb-%}7pYgj@?gr5;n_>8cZP|Wo{~5@a6sWH=DjJvGmxR{mCe zxzkog+ZfM_8@~}=_~B-|wZxtJ8Uw;WoL1GZNq9gEy7(jqJ^gV1rCnA@JR2^`gcqj&oyoH>{Z$Z7_X#pczCJt?Zb{b%85CcUiN~BhQsK>! zJU>Ok%Oc_BnQ%+`kW5(HxvC4WJ}-4H!n0L`3raey8eo-z50|zwh@wACIQ%)^e)q)TvXaPMtb6 z9H+%c{S{Zp;6a%d*x0+lGepR~wyiah1s$$^G34ZnQ$e&C@at%A3bbK!@WEW!9E4(h zGF9ph%@^Vu1RR1gR}6;Sv9Zuy55m&X<=RJCqO-M#u)wb|F~+B@8I%Q8D;YV46ZSl~ zu_$4bx8e&-d0#9pBlO}@!(Ar8Q~H0lR@A-Farlc-t*xZpZkdmP_cz&2Pbx!FK(-Gxyo7OQOT+nl`1Q)F7J{S#zW zkN%CKwv#tjSW}()Mn^|%KwnviKkBvvoIALdi+g!%jl(zGmB%Zg#CaiiNS5#k+yLPI z0DsCbuJ7H>am5Bg&4Z+ch?o~4!-9=S7!H%CV)rEDa(pQnOqcLX8qMHLIo8=d4nywg zCvYwCHW&+W_HRR@IKf36!5ci>Zt$P9AtK2k`}BU2yZksj%EOF!|A}065vd6O+gmFV2N>AOytqBebF}^wguYxdp?dh%`p^%pund zXP!X$g$4&ji+ZBvxtri5mK?l$8XBVR2Zbk|(GniLnAJLY_kBm*M6HetroUzX-fDVgr&@sCIK9$(`Q^M!}{!h=niKu7z+e?r)t*YV&H z#wN_IPHnL0Sf=cWZ zJk)?3Mt`Agq0Cak75`C^l0B^u1;wha9tYpp6@mfOSp6oYg^NTKw1-2_G85~>VYmhr z8w{hL!5J3rF5nIoH3_PMtfF#IDz*m=YS4Mf!sonm+ZedeTDAO95_y9<-Anbj{cPac zlYha>(fN<4<-($3YrAM}!1Ht0leK}rjl!A|L#Mcbr8Wqf>2#ol-ik7k!1z*CXAbX4 zTe(g_)~MI^J`gML4nSSlw?7)mNrCk!KS4o<16LOGW2z2mUIUwp;^Q;iawewADvauB zYjhQ-z7KsbJ;QH0<{G-evhUnx#Vmv`-a}XR-7S0a9=@Wbwv#?F9gijQD|sis#;a^T zDod<)qVG#pmww4PGfoBt#de(Aw$k(dk1CyDDt&=XPE_g+LyaE(J?}ev(K(d%=;9boKB?l|^Nzrn|>htY45YUU)J3pcG zP8n7u95!8tQPEyn$}&i+aM2Qo(C7)&g$R*N1|#dREL;Qml|K0$hwEr4mYK<+7jXwe zp9cR_{{`I2=m?}HQ^yc0Xwah#qQTYpTUadsX2nN45dEGNiAGf0?gg~}UNow4`5eoM zvL@cWh+K>X%Cd*z79l65eHoet?as~C!PaVZGHg`ky_op2Mi?`^2s4 zFrdMswQDZ|ttIRgV?V&O6&K|0NDB`_t!bBoaB&rAD8vk0_dCKWs1BcR#V~<}f)NbE zzH(UVNGsOK6FS#ioCahLNzE|x-aYa;x%U}#g2|OXr%pL{Uv*0POn7Np1E&f@(~4&g zOWRl7DLgi|9xthdQV-rx62o8CM{_Rd@uVK;1cu=v`}$$_6{#(MjNwnnxe|{U?`SE_ z-cX!e9m=k$+};BClaIr13EVQos*5VCQis_m9QnuC2}cwated=xK-~~x-_h?fUH8^eVr$Ti%3?%S}_Orvge-P*aCh~Kq+cN?S2NqVe zo*IZ;4k`-9K3Iw$JWjP4%hg}Mat5Sy=uLTJDE1!Yu-s;_ zFK58W&yu0MSId5E-|KP^BlC6D`Oeq*9zi~DM&&N5dRQ>wH2fgUl`mJpyA)$!r`)Js9r`M(NED%;hkgY?OuIEdXnxMJ|=K zCM6vr12lGl$PN~BuEeaxQ3wDElkGzK;KUZyH<$8aZW^$*SFXvR0Fq@nqhamzWicIJ z!akX3^De8Up>Plb0%IpDdy7@@Md0opz3Gt64snefgWJOTnWZD9cXn=MwFgsy5q3I1rrHW)&o~y zRDtO4(Z%TcK*S}rEyOET;NE0dfe0=Mw8qxM-PiPPWZy>|bm3~Sbq;R+r&m(xi^@|sR?j=#&?VCG5LcWlxQnZU?QMvC zEK1uOn252t6gMfl5>+`uBg#FRy)Moi=Ue0c&cUx-J=M4K^!hDNZ_P}LeVkZrAm!n% zns!jOkq*j)w+8P11``wE+)YKX4OnjeXm?8)7VCC6-m3iGU5hlJx-7OnHZu*&O*bqz zM;vhH%Ut$1rX0hH1w3y(^|H=@y&GkoU4hB1CQ4V^WNy^A;hq*H?w6bk1FBI%Wg@?x zZ@8ccB)XjnJax)yw=v%n)@$7(5brbTW*Pc(%6n^{R6pS%s8u|FgP4Hr=bjorT5rcs z!+7d_wVl@&g}5yErel-fp5vUM^5H}g+q4zaiF8bwRGJdwcfKKEj2$EpPMHA}$Wnfq zRXHsSE8X~va5`pjNm8YPcb%?*d+Lzt$rJX8>*sKvEi=z_)%I_fs zl_jacdoWpidumSV%9iZFJzLR>CBJ7mC$H!~zyO-HSarX@!BvdVB^J9&V6%?-G1U z1>`2D3rNjn1SDLYN%vCiG>EQII6eZ{wZVe5fhfEX5bQXD9fNDi`1FAt>lFl8U;9*NqR|(68SNx0;m^WnaO|2OZP8CgcqRF|dgeP|nRjk++|A3*0tBgYW zg1IFFtgbjVBeOVGo}~`-#4Vc`%B%Al+Yb;P!g2<5g5FKl1Ica2rTk;0)$c;udr0$E zuHAXw#Hn$+!n=RvIyt^ZMwmWl}0R^T~cV<6R#ZNK=7M{ls7LG_Zm5TCI$!$P9tq7cD za%w|8!)Ra)TT^PeE|Xw``n_OXn*vZx%WAok1>kK7z=WmV?9YaA>5Xl%ve)4{HXO8c zq31ag?E@A$TlKasR_qHa8?sG^!pWc(A?OG}*;BD-Yr75g395y~^hCDmC5$PX^ql-Q zsmJ8ESv|%rhL{HR8<=?i)K!f&BrF&+Z#thbt z>1kCqrn)z4A&4zzn+GZ8KekQ&qa}YJGE?W+#vG@&$?+o^jPBvSSYx`I4v5~o!(4$Z z(THQ|nn3g`kS=Er5c;K+4Q%f3?B%Q651|SwP^=Y*j4aV1_>_Yx53L#nJF04yu53(m z7a?HEtz_5L4IEpLP6i*u#NJHa02eaF5(0UBpSs`;Ij!bEQ#e+S;BtVBdfpMVw4aOX zK={NaUL65`h<8N7<=Xckybfx@TwaCFG~lOM zEQU7#*8pca$zHHUBKKHlMM!Dya7Tor$>A~i)CI0FSp3JfZ5%Zqn6x>8~g9X=>z!gWjWI< zb?Os{U#a@xqFOut4*ls)+7JX`DDTXeZ=98eoa^V2o0G2OkSMmC4pdii7iY!h%4RGU z&63e8fsF3tGZ>3z=$MR9%*oL)oZddRU$PF1`M29a$y7A(eUBOQFzduuR`MP&O?6}6 zgHT14VEwqI0+SIeJyuesdJHDpUNA=BFJN1^`u>7#QR@O$Q5xGG;$hCdkR4@PS{La0 z>nz)0YgN_DB#7k%0H0k^_@in4GnZ?KPVylO_B1pMZZaz@r(}-NzaqdL;59mBUZ|jz zTG^8M5_<_^RsCv0E-aLDFvy{Sh|EL#@{6Q+wKNSp{OV`i^L?{H=YC2Hwq#oZ5tSqTF1G;hetC!@A)cs~CrW6v zD4TgT49M#0ey|@*;xu+go1A>NRcK}!e3o)PkCzOu7kU|*)OutH+E?KPtiEm9X)z1j z=-quhDg}>F8LY~AW{xh(?Z5*X_6cY-KLda*N2JmDf&eV`(Z>-|H!vSE3>1Qe{~!5n zR_EZ?G+v#GaL_)y)V>QVYaPboan!@H0FZeA5_Il39XOvSwMW^AHS&?9)HXm_1mfjC zoLEaqU^p{y&os;{&+sf87+@p*^u-~vhYDH(caP&Nv=^{8F=mJVAm(-Q<|+&CxQpnj&(Ph*$Nwpk8oDgy|w&T!tfU40Ad9 zhna~#HbyN({vt?G89`{$h(gZ%e~@T2~s|gL@730yaA2bl+1! zt;&E8To_n7IVh34zUYdZlWvCplok}PT%AEG{^>vLhn`?A!j#^(GY(_$g-#R1eJE*7 zs#eFzSS{A!$5Eep9btDdLzN^^KQAfYg=Spw6{chUmi9?-2sNO9NhfwlT8N~RnAE95 z(o;z4%%q0T+XJjXl7jw6eSjp7{l0dlCmz+f2Yum)FWfWBW6`+hKx94=a2hp!9K`djWz&Q2#><~pl1$zQ_S0qY^6@9%@pK`c$#ZKOPEWQ&fwq_*T zq*a{hv};lQH#6_$S&&sT+BAtLi^7e&0Dj0`z}%b(Hh_nm7t6r4g@7{VX zGu#=ksw`er2CLeLd=yDuArkdfaXe)$p>8;hFltE40Ls2Ca=!_~0d$HBM>R75)medidSL1HuBX2Kp>F)^*mXdf z6PO)J6|4)~4KF2N>hFmZ+n{DLJH)6Ry7XNfS7Fzaq*26jIznnQk%q3nA#-$rAjY0M zLb@5=w%QNPB1khwm*U=y zQYuQwk39wRBf5u$!5Ke7UVG4(l~aMSSTqI2v0xx~VBw%~v*mpS%mx-nWm6$l^9PKT z_52{iNl)I0Va*T&CZViy1&0fytxib=dV)Q4s&2zJRvgpPIqDxKZ7rDxcC1@BmvS_; zo{-S-zt^uVD5XwiTcvfdrE)H#O;CNTWPV_wv~zaJBD7D&Ee3bAlW<%O|M|Yrw54%q z$yC7^b zX)IEg+$oFHncr}c+JLy+^{oroSy`x3@q}o*iG*d#+X=-d(``b8%_>`_{Bl9+i8{=2 z1Nvliw2ev$RtQYM0h*PR>2#TOW{!>#G$PA!I*T4ZO<5+3kRYKn%Q!3-im)~1nk;D^ zluvb*9P~-eCPT58%gmXs!x@a9gs|HW$7I|e`e6G{JM(tRD0x*^GC(nKVwC($!+g}wch#0q<#FZ`G< z{F*PkEF+PBoiDuC7rx1t{|H}rpD)i+UwDKs&p2QFeqZ=CU%1H^UWl+y*?@8Iw8V#a zO?l0|=~$(cRqR_5*E3>vi}jc?FFera+tae5t%2B5jvU-E@&=J6Jp@QJt2Q2JU6I37 zEZGb20Rq*9tHMVj+=6WxeAHoEH3p%i@(b|_$Q}XqjKWW-;G1wSoCgDRWexUq@U@*0 zEcj13tRa`v1XMkbi?3KE5X2cO-lzKjms17|gDq@Q`A|{i_;%jX$ja4e$Vf%MyZIIG z+*mD@8RWG;5bY0&c8l>xpRbBHI<-bS&-(w}+Hiv62Im6z&XrK(`-emTyRz?p`&!&G`VBQkGBH(kd?;1z?c?=u8A* zV(hoZcNOlfn(^hB89hmj-?|?33)vEO<8oOQL^1@1Peanem%%a(r}%5axt47~l?OTU zDk$U1@M6~w)Zxx7qOW$CGoB<|3ukl~%1W`|18c$8VNyWHm~(ddaBq2#m@Nj4t+VW- ztyo!0<4S*v%>B~1?gFNNvv$2KG6%LxzCnm&K8{!@-unHUvkR&!5{6;| z6;>D87iSg4hU71jak6oH5@kW&y~KBGAbNf(5IJi#>+#O9;{J+pm_psJ`Uc~MYej)b z=Wei@UzSOu9@sWli7y(p^L>-L0jG49gQFBwg`q z)#E(s+_eP~h)ER@nUtO)nVQDoop`N!3XmaUUEPIN&T?H*r6)3GfRIB@UJe8>3&*C& zKOXrZok`va@PpB~DGs$zrk~_0Ayj(w14Q0}uVpUh>C7>b1=p48)Tz4SY^cci`47nf z^Klsr!cvt;4cdP! z^0B7LYS%#Fy2sNl|w%N&>jQa@ud{uJ1CeC6+;%`!i zBZt=Gs{6^9o%=J#=<;}d6wjEc`t|H4&tqui6~&& z%~x7bAI=3|q#dgI69=P7eReh%NZxF) zZ^6xmqt|M54U;+B``n4}V~&}OmgZgjDFm@IPK3ye^H$I;`apiR_$Vf0RM7bf1aX%9 zGJbNa_FDh4oMoA*KvgKF5u=VFSRj^jA2gZNcuai#QPWm~^U+UM9W}u*KJKydc;rz( zpfcXW{HkKW8E7LE@T>r?HJ`YZt~CRZS!khJ_90Fip>mSVW^QY-lbN*mRODNN5=o_F z@z`Cx8izbIh7tA~>s<;S@c7tDF9vTIC#TM$VH zAz$n6b~fGpx~THk*7BoW+{Q(jBsJ2@e;*oP)(v$J+CkjFuLDlk&5(p*-&po*LSeSYaZ z4z>_%QZ|y2LLT&hP6;A~p8+qWNrjmLM4FX7Mf;K;&AAeLON3D)FTv~11UMf02|7r@ zgL8UUe3Q{%3M%LE>^N+NQ7;#pN$LdbKJ(tpHWIxUGWyG6<++rAo7y z^J)MFohE07j5swc7;aVH?I&%Hf|aL}7ZFjQP94ULx0BcKZ{4rHoNvgIZ@T>$Xb8zS zo80LpnFByHOl2}SHq3vF8omA(L2wEVP?(_sv`Kh4)szB5G`y2BVoY8q$yk(;tj=Ou zdqf7JvQb5Evebq1i5^)+a@em)hH`qEenI1s_nNS&I(1IA^ebTcb+u_np=rm;Rno7& zncRgY+3WT^CbM6oh(ze;>r{8$v9oZd#LwSJ3G4-Qzb0yU8OwC)9wGijx65?$kp_($ z&D@Y~U%<4E-98q(0}f}F8uVt{ZkL#DAOEu+PIh~N!FS&*>2~^Cx*g+8JG^eMtCns* zWpW2ive)fbnB2D8M-#VB-UT0PfX7IQc(x%REaQG)0QK=UUzJEIs8V%nk(T}o1B5w5*(XP3 zohj((I$zJ{Kd}KAFe4@Nlvs<4Y3hwCBsqDrbZK=iauR$JE0@!?Q0#(CHCu8;G7BY| z*3kw4MzThIr(2L}PM;dd3(0n9VgB0fRrhc>$i~d z8C(~l1$&_jXO}mVakWLt`MQ?vhQ!`Mj&?}t!5kftvJa98adzr!ZTa1GGC`n^{Rvfr z91BtZBW6&JK3zKB{JL(=5aFWG7Q=ca}-^_}y$Kx8ZmDG=h7X?lsr4rHL7E zm4>I@)zxj0WHST$F|A{-GAM7!#2@;v_{2{mzx#`s_^0~%wG8TW;&ouA^y_5PuZgA| z-pu}Zx%BIKle^3$d;OZvWUpVs?oQJE>JL+7f8+r)S^FOz=pq=n6#YLdNvZDF$4FE~=H zQ-g^+C-1uVbb%qJfVV!qq~VP>c*>GwGhQ~+I`(T42=bBd9g2ikuN;J7w+c^TR!+7 z`@+A~uXJCYlYMYb^o5W2g^!JgYu&-!674MUg$Mbu|d+}~>d zd%pbilIh`UjW6ug%ahjgeDS%yus{E5U;HXxc%?7A+!tQz3orJC-}Qx;_`-{P;f22N z+rIEyzVMsA@aw+tRlab8FYKp*(|tG$m@x6s;>&-bFOQ#=dcuvNhtEB}{I~hSBYoi# zU-(>K_&8rU#e`|FwA(lCL0_Kpec_XR;Uj(FWk)31c8rN+8``KHc|V*c-bNwh&_o`~LKfsA zFhAMnBk;}iD~(9u9`&Niw$fe7^ecs7ov zgR)Gceg4KFeJRq}?lKj7hXsrpc9$%9U4{?ff#5Q&j*(oIs8&$Ko120fyL+?1AcmYS zZ}%rW-S;@c)K`R!Wj@2Qi=jxw0gUgiL!qD{BJRQChau%>8&BP|LWEwu-F+VWj*QBW zQd9{>z~v(}>L~#6rrk+#vaNBykCXgbcd#%1>v(*PI{@*%vjXl{2}F zNs>^7s$F8TKPoeI37%X5itEI)=9dYc(p0 zWDhGh#Cu%p-ih!b&I8O1HH*IE;lCY}=<7WOh@@Gi#B_l7K_gj+AU^smz6M$;@sI`< zf;U(A{JdJUm(mOr7-|Jhe?s;IOkpSQR7m1MXEZugr}ix%7V?H5ik}Voa}NOVbBq3b zbe;ZOk574{7rPdsvU# zbZuXz`r^U|e0hhDNci!F0qd-*K;bytkj_IPqzg2t0!}zIA{RKPpdR}-CMa-&TL#;J zZek)|rC{7ezXpeU=!C8gow?8S`8w=`NfOS0w}ZOrX(vlR&oKR z3ou2xi5~-%XK`X9#y6{ZpEmC%BlT{78*`f0*=j9@lj`g$nLF6xg1O~P0i{uUi^(%a zb#a9hUZ^H1G^sOimJdjW|6PAxMb?WQX9df1U)!MG0g{m8UKHSG9&(sH@;qeXCU_fu z_$)RG?R$H@zqiLI>Fq+O0odF8W2Cpo&eNYaNn6_Vb`1s_y?p`& z*xMndEzk(~drQ`$H3O;Y5tKl0Wr1o|hw0vCf;idR!#no&I$c9g!Dp-5Np|E>weI!B z%+ayeeMtYH?8~2FueHL1E18V(?b7RJE~IPK^x?%qd3Pq8pQH0nU%4z8%27_thYexj7I!CJHfIX_P2GI$g&y*lJJWVM<)GMUmI9p&ALih`%W0#<{1)JpzY!aob}N3Ul%{daeE zPKdMhzVHrT_yRcJ^j5$eUwC>vOh~oyuNrr=FZ^jD49YScULV4DNqNXPS>wD6+$t_Ta;F1lSdss7hi zcw8`h7c7Wo94+>wcfqcv70+b-t+@ym%ZJ7o!Ym!ig-hL@)$ zgC+(6cjDe}R&A1uZWG2cL-iGPJ)J!@`#siF{EOJb-ZatmcK+QDB8S(T`;xi;mG<)e zjo3#tH^LQe}o7sWCCVu~8|01;x?Ix=Go6lo}ftpR#0Cn64ULnx5O zIAb%*ZMjC0a$E7J6b`SY1gs}SCU3$V%0Z0!1qXp7F%~BNgt`PescQg8pFIC3Ac{1* z+e4{#f1&3nngkNLF4Lk9j7e*fk{i3n&&Pw6tCPj;mAd;ynMF9WC({6aQn{a7(MNjU zpdS7wYg#2+Z3qs)2zL%~ykO(cuJfN-hYp3%RShpl)83CG(Eu$iXbMCw1Q-qzhc*<`h_a}% zU_7vxF6l6RI8<9bFPB!ocQPvgARzubEoT@wCFbcP2JJrtBH~|!u6aDj^wcvr?uQ4q z6S~8pf+jsiY>!OxCtl{*GzcbD2w3J;j~WZM47i`3naoj8$-0-jT^JX}=O;J+Fnj}9 zU~{Sdayeu&A2HlV^u~!H2Nk(tZ~@|1Z|q9D9c*wK%944Dy7Cwl-M0$+r3DDk+Z;SO)4|$6@zAphm&unSBDRShdXA=to*oC?e+d+h z1KKq`bDUZs7WOzbXADdc#*tx90>O^j{52i+>{y~;#y3Ue zd?+a7{BcVt22VQ^;HxQC8;bo(*WwX&27SFHoez&+7P4n#S@sO9X20-|Juvtavp&|V z)PKnIIXReJ$BtKEauS%`zYj-5>pIpfkGUz8u$cv~F5 z5Z%|IS+HJ&L$2_j&?ca{JVSb^PJ;D?9>LG$4LFe;n$(RfU@}tnzY5>-SQ_n2@I6ET z;yt7|;PRI!is5{z&fE{ld&`{B*}b%XquxS9*yn*4jAG_88slsO+PK5~OrB}GUoSEC zfPE$O2COIs_P*)uWc?taDilV9_r0Wf12!U)>VvR5?3V-J85Mvf_yQ5;6`+(y^0Prd zev+RJMujXtKdq_#CM3I1RKpwzj`51%?l88wauu$RPR~Ol`v0LA?hbbco&HCMlD~7G z!*Uk12f}}1TI_Rpv>MogrMRGl9<6ZkPdl~xIr+U{_BuEZBqO=|QJi!l3>&Q2`pRlJ zwd$2REY>Sfun|tJ?&K*baJG*v0$-em9^n0FQpt2+Gule?Y*?1V1QSlx)x`JNLA}-| zWR6QX_7-F=N)SGotH>T0+oYXk9Svt$Jr1}>qPljJ-)-No+Pmah7f!8ORS3w?5=*U{ z_OlnRaW6MvQS*U^xwpp?*Sd4#;ac~T7F~!(3YIVaEfWu=gIgaD*SdfA<*`jTUdgeD z=(wNYB^G#+CGD$aH*rG1^Tp~^@lP9G%erCV$Uyqu%W07DAw9_$Zt+dVvV|#het9;gQ$|SL&JRUiz|464eG^`7^_HwvTUkrT+HbKx% zrDUo+lQ2fsNu#mKKxEKaPP}Mo_qlOI4tU@`p`tWtlG8iCNg7%vEdxnO%fjb^#ixhP zx;_ogjXF1;5T8#aX~D`}xWe%DP`m#&fm4RXpC=K+tTPJ%wmt*D zE*)QCJ;(e@v-%BBhmj~EN^-w7@BtLwOTMN6A+QT2qg|3t3;61m&e#D>-s*C>*Z4<& zU3z&*@HeW_TQ|5bn|eg8j_=XjP0R#i_2lnMn-k&wzVIl76Z_jR;&1TiAGrp)Sj@3f>Du@vglY>U@*{1;Es=_vtJ^LV(dT;x5P9FetwS z&dhW#qg69Yymk8$3u$G!t#k+kuO7t(YG${gV^dzi@|FVhu2RR!ZbX9!(z%p|fsA)m z1AAD=yB{s2c<~4eR|=!E&xP<8d~`xW6Ed&J5Cn5LjR%3Hx0_!{S^rZDgjYYVo6JlG)k9@E73qUQq1UjfjZ3#zl_* z&}1+o4njF{^wzfI~0gTXXa@hNJB&$*=VOLkuiy|mDLmIb>j&_0yjK?QJS**v-n4s9qFqJh13Ey~{*m(5 z8-u{$6C833Br!*?>v(~<nc(K))25zK?c6BIQq1ufc9=0~_NrXQ{xcz%(!pACiWwhxmykS+`H3E7L$}OBon3WCcO6eU>)#*aX zo`NNJMw*(3%2wthU$H$t2N(O()U%Hrfa(jIBxhU}t}tT1QnQwNEAp%)93F;ZlfdY( zFB_MxR$-x|7=>YnrU)ngq^DajmJE4Bi~dq^i`X7NZ>Gq|@wOqPjBS5F;J9s6m(rKs4mLfP9O_N3fY_3kZO z7mD*~95E)9^y`xuh(1UZ<1q+q&A^t-Xo?DUq##$S;J3#W7zszd}Jl_r%A6mZ2yDpaM2AdXy~5f zI5%Y>s25V+30oJ44BUKw_YxXQ;{-!b=$A2Dn8#9RkEPB)hXM-$k2r`P5Ta$*AHY(9 zu1C9Y$pVKj2F9y^VUKu$29=K zQREf){kA(>Ok7a;^P<$qjjQ`4f{=Ggorz!|dE=hsBx_PXJxtO~EWb@^FNxX7`zsp2 z44*QClh?=Oua*2$QmwPjN2*nQFy*FwBoH-C-3g05Bl#e$oYfh7jNIM970ku| zNL0bVn{bgb^GdYGTj{%+`oc1oa4>+f*?YXq@cQd~x(n-9GOm#}sjJ}{RdSrw8FDxF zERzx$r@t-(*p>!}nI*7Ip!Pb42%n@a!b%ZLQyT>F@Igu{K?>gcl;-pOG{+oI=_4ES zL0)sDAV!8x42ZVA_$#erXsg2Ywt-}>hvp$v>_RRD`U{1QG5+YKn~JD}yl?3D&*$hI{hgFc_Lji_xrhR7zOj)=es%uw*VQ1@={J zkN3GAELdI0YGZYn3Fr_^0&580oa+-L&Z zzB7UCUf>Kb=^QVx%uD*w3%u$D{^kX`B6DKB;(3nNHyq+7yZRX_ZBYc+bGYA$U!=Ya zGT@-8bOj{-{)QrWGgPkCfe74Oa=MMfLSPka3`E}LrjfhHnM`2Ji-?guJ{P4Cw1>c0 zaDq*MvKCGmf#+5=XO7H`0^HK%=Pdm>W1jw;%uje31b}94lwb^kIq&2h1GSi3@4r+s zbcXWrNhz{VV*4T1AiBz5>>}im49A&bP&&{_z>$)lXDw=uKmRu|lmEL1*^bVrxy6h6 zJRWtp2X!@~xZK0`vr7xkZx+ATHNlqx53oxO>fBUA9t~{Kez}HzXir7_-TB=>wXrxB~e=tWl%iYU*=dZ!@H6}aN6IWp+6?EKzK9`^xN4csxltc z!$b3=c+@~IYIHnmycabTQ6A=JV(nVI*@yYL_iM~AI4q8NzUS@Ir@5?;c)6oAwv#eP zDcFwM4Pc%?vb`Y@{?Hfx)faXV?r5(V7fY;IvpMqZAQGz|gc;S*#kpE|ANw%o2vWom zF`i(-6ZdveX@e2*Ov351MplA)?1vw>IfOIPWR1W;s5{VV2pW%+q?TV@(GMujI|GP7 zmNLDJ1WNX*%ZWLx{pno$nYn6qNh;pUNGl&mAr6PNMkEeIvG$YP%D@XfigUxD6XDa; z3lc;emc~6Aep^pXaj8qRd2rtGXtA)xcOBGCw%DNh)O$qc`P$q8ZX!hS5OR@xGiYuF z5xC1k4>P5^D|&F;$LzfmA$2FX2_9jhr{j#pzmW4dy$6DtMF?OO>)}Yq)b^LXdY08g z^GHT=4v~P(ue_L%kWbwGAP4o|`xE0mygm^w@P+db_9=YLc{zEjg@-9cE0^yRJ|Rfv zR>|Q$HUetSL^^eKad5C0@(tR!Hg^-TlG*+dr?uacBlA4J&Erk;Iqv9oR(!0=v2Ev5 z_VRF(%JFreYNsAAnjBD9i2W35mlJb)Io_y+6a_ix9FZUo2L{8RVqEOPbYbIbk&dg) zPWPFR8dvbstiYSqmf!;D2w11A3pr)*Mc} zRm$KZK&B6+R+NPZe?cw3t?V^cb^T#h@91467@2 zk5qQVx@Fq;(OFaIlq#$1I(z7xSd~@19U0cip*(6!$-E(O`>GoP``1|oo6BEEO!WmCwhh^X1slWtD_1husl0P#RWjnsh&04!R<2|)9?u>zzFXx= z26a3n#=ly=L4|E3hJ%Cp+$P_kc0vJA3(vqXvP!r4PZj0}K{!h|^l~UU4*@k2 z`zPG?kN%nC=4<6)1TU@pd84nDiiM?xN1%l(PQfQ$#@T!+I6oMT;nlq}2`t3VVhe5*SWf4~a(jkDZVcQwAzmL74C z|Ii?xZVU3i$kt(f;gnXVL4e>Z4)m4{y(@4w(hZ;i{@fTJ&$bQx3AXd(14oSa&J145 z#pWgv?kp~3HVj5khKKBAIHiE3N4+yV&czwd<`hORC-QSQ zX@=u;Pre)crVl8SqV^SRWIMj|G5}ll{BgdUhX-@*zmfA; zr?iB+ZYZ`d1M3M^@5sQ%p;*tx@>e}>^INQ^T3F9^vYrpw$PlnEtYNg751GrAJumPQ$D3QOpJ2Is`(_B3WCpVXA;(HJKAxR}i|nQhSKNh}_7C|9jfc0}g$(pNnJP z|Bd$NV7=9J|80E1g*bx+_y2FYpBb$DExPY)mRwEu!z(XjgjsUqbU#qjJubnVMD#jw z!arRTJ`zsU3GFDqvn%Fiyrdai)eQzGIG(w_Z|HH7=PNWPuy&IwhrQt?-E>4_njZc*RQx7JM=nE z46$w?rqqS_21}{=z+1k2)(z&!yDyl!wr)6^L#mIw&tm~LEgPx9gm4kT*&6ate!6Dp7y`2ikDASw{qpQr{U0c3ZxVfM_aTy zuXD8OuJc?MRcn4xG2n{RQDGo@B>$35T7s2pah6WqUuRhK1Rhu>?bOHd<}khp=Y3A& z7YAB#AisE+bHQ>BJxF!-=ZLfHlrhs}rD1`m)G19oLfJzEhi%|i1UA4Nami45a9Rw3-2ay}MgXr;}1fU|=j|3~%q!?QWWS+iUjj7J9t-Dcn%I=5xo;viZtu|1&IWcDu(L6P{LTB)kTEi)?lFKpyNd+S zwsse7?RH>yq3w1!ulcXTa$K0CF&vm(ETeP@$gY323s1uyU$pFt$6)3TXKNtc{2Ph@ zv2|#CSe#DEhlPa|i};E2Z?G@bYdjuv+5@4N zCFKw)uy9MbmpVac5@$-WTJVkN0z$-jSVsILHA7AmPiKcA){cm)A_CC>sjqVNIPYFG zHYSBYN1b~4W~eCtX7KOil|ZiNxy~um0V7r|Dk@Rl(1RtM`GdGs37dgDGw#HJK(-83 z1WjRM29(;!P|U)x9IgbcXcbEaO7^&Xi$&M7_<1%m|VqH}W z-#yssJp;J|5nQ-?N|&H`jh_P~A!bQ;sWh+N;XY(F*`|v&$!&La7dQ@!_PqmlPEiMB zhN+(tF~FZZhpL`IUae1D>t2f_hTV5ffTx?A5cVmQPO7?aG#21#sW49)R|x5MR;}#6(W)XTit}6m7?h^Y(~vMi2~(y*py>J$ zRGK~VZ=lP*1vYt;0 zZ8`xY3Dv*Y{i)Xqb$_6;68gaL0@6m0Af2SK4YBLX7*0W5l*HTns}*EAU7q=+Qg0eG!}0FK9oes=3PSPP(uZv^be4g(cy!ha@gAL}BHjnVFEQ%-NyOJT zKelgg49~X5u1Z(g{Xmj20>@7kalTwG>{P8>Y?D)4)mtNQIV-@2x66yQYTu$@VC2^t*;Q5+>|u@;gEG<~b1 zfdNMEHPKsibR=JL_YVGmRTnJ2%yL4oGj}FeS-2#bu5yn66s%p7Xfg=KEdsZC3V#1( z<)ZljSPhOd_!2QR4G3mH#5)|yhAv!Cpeg3A`+>34Syk^moQ@)J26|oQq#zWO$zL`0 z#rltjoU(!ipJ{s^d|2}FH5OWYjFXQZShRzcO%*}jrs{?^mljM+Enh>O$t--5^l3A`@((WeZ1TB5fl=Lo&YjH zkuiAx`>rv}{^La5ozAj$1757z*Q?0ch~}6Ta;WmvA6oRF6k?RGy%oF-C$k)nES?MB zG?|@Fm?5;P8>b)!?i6I@hW}7zz(8AOkaJW$-b&;kTa<4yF!&f{IGhDmB%&~I?=rN$ zBzGUp`=D?imsWn9USF30fuyx7Omij!rFQAbM!(mhaa>yAd%k;eXvLjknH2vDR2w!amnQQ zb!}CX2@@77m`%jW<(TXE9CfGuEY_drn$$de@-lD^j?r$Kg+tLy9ExJ>qZ8u?WzBeh zmo>v`pGRZoZ^5=2ze~SEB%0NkI0mU@`I?ox+YO7FLg=Fq^nrVO5V;CZd?*Z8CHk7Arp;bS~Hi@tL}NUN~%39f4- zN0iNQ#|b2U7vj567!l`*(|hsvhof7efhDJD0@*uS$8AL%wu__$X88c0{LKU^Kzn5n2`fK9 z4jh|~K|$>9o2qzCw9LH*E#dnNAk7eu!|s?@lv-b;kn$HTb&^S&2f>+X-o*SKBc z@ip$heDQM;_T6tD9*lj)`^^V%M(*yH_X9>0{Y2QZI?4XPhZC_^a|N>^Va6f78(IU*2&tpe%+)nlYHh{*GJ zz~xLsc%QnRtwY=!$WMwmL zaw^Vc)@j8W)g@AAAd0EVJIRG@63;P-|1^niDF%{{J7Pc0Ydq>1c#m#;9zwj^6DjJ} zn-e^3@)|E(%0`6d-BDy3PhNeNovD2zt zDW_p=%u>SRiWa2;g?R7;t~+3#-~C3&9ctwSPL8E=KIN$_;GW`p#XF@k$=VvQG?9j| z;Q0(#CSU{Q8L$Z5R<0E7U-+D&MG#qhHO~JlYAn??G7FR>9M#7AMK4mc2oJCLa_=Zd z?vt6@Sqd>R$>l8=^*hW%Z(W&Q8($AR>&VzAKu?)vUkOw1I|_X(0VGLU{HGe zvZb~dTQ1S4KEC9@2N6uOytSrA^#e}XC7Q5(ygJdnMug{>^)7CY1`62AF1GI)?Wx4% zclS__yoX~(VawYmGlc6IG!2$5>NCqa^pe-+rI)ji1}TueyodCT83MIon_hl@gV#$F zohDn+&n5bQ>g90YK@VK5+t1g_tE86+_LA^lg7y7ZXrxH>vvw^4ZTR}^y>-ELH(f1m zWS>T5rsF8inU^_)A1}kHhFTt^a9fV$9ef2y8bk7! zL~W~($aPrO>5v3BV#h9JE#8XHOHCDM6n&;}H-P1d?lTxg#`6csjFka%=|afAmTj_o z&M#yK!Cm~**At@W1*hdkG9QPqwYZ+-f(`iDnY>i_JtSv!pelPEq7l* zI5FUa;?p;L#?gM9Sd3w4`Cxq(-A`n+8GN!0OlR~RqhxLkUUwm}3=-rnAJOnUSBym^ z8(tx{Sk=EkDFFFAx;5}X12&FU^*7K4%t#F-H#T1A?OTRp-vVz7M}gUZ8lVTj#~HFm z9u7SKK6sB6CJ4|2d=-d1f|SyN8KMVh4Idv88kzw*z-u%6)WR`Z0yqb`LU3|{n~U`3 zBzgc4sz~vW(tE+K7vrI>x{gGk??&=_2)?!PsFQaqc6`#y8kNIrBvPSaiuWh|K$A_% zmY~crEZU8EVr#t`Uc$~uwTxw4liDNIKr5l{!EIHJG%*<`k3jTd;-O8+p7RRxka!C8Pz|o;b)yX5^cuD zus>do&p`{_QB_pfvVVngA*dhLDbvS7_VHhT5mJbpM#;fL%>wY(pgm&@vEpJ3x!6b0 zD#0G+ zhC%?0SK@}J2BOd6OAP(~BN&RrX-U;?$+v&VTM{hOJ zy-jrEb7~w=rMUy%VTOBtk5inC2ME0Q?-9@b==mSyb1ixHZTd=>=KQpFo9dhQ#hK$c z=`p*>qcc=b%rO)ii$Wys%GKb{c)|mp6!yaWjD3T>b-u)4$6TkbmPlw@=@Ni_nkoBM zyr+N`v(!g2$k6}r*U9^*=oOmOnHu(+pabSg$0vrC5WBaB*vCMO7>Lsi#IS~Vg@O1P zcZN>hxtQF9xCWmF;!>tiBkZ;DOUh!X>O2GS_Xgsr8seKboBnHv;~>mQ{}T{zY7cR? zfw&DAWZo^rB(SkTV|28En5!Y4Y#^SRfOt%Mh<`8;A21N_F%V~Jh({WTb=YvC*PoeQ zZ;<_`;IWn|{$78JEjxSN-$1;;Ki`$ClPaC7Nu8GfcV>HVgAKT64Y)@QxCi))heB@R zAi#eOrV>8)VbJ+GMt?Tnphs+DwP2&O!Nw|lf?Pim3aKOOn9mG;qPDZcQY#U9LB_Y7bD*G)Y0)9tdyt=IYTAL)xf z!WVwQm*;>F&M&@jg)h(UczCtD%NNd$hil#K@$hPQTRhx0{^v!Bc7AH|u>HM!`Pcj6 zy}mHd9#a+;%I-VqeqT7^Yo~`Rwqb&=>@4K>Srb66@UM?= zgN^bgpsbH{cIpYszEx7obiA=|wmIXmcP*+|mRU*ZA}mJ*>d&D3j?y2V^gX2XSHY4X z)N@fi$@z&9-Tb}8PoHQItSJBM^57=bu(*6p= zwE0iEO&{U6VnAP*0l^yQ6$rD$oY((}gyM7=FTm<(ucCgZ;h$#Uw{qL(@AFB3A9Or* zuYO!Y-DE1e2ETFmfoM-uhhC>?@ak>Ca`L`_s)S8{p*`ptKAMh%;|;W<@Ee56HkDuy zKLxk4QT{SPVx789%DZ^r5p0&jQ7Pr?)K-orzCXb)%ZuU_-w(rH5an~E{yLS}zWg9l z{wY)bVf=~)v`)1wk*1$+n(p$`j}>|E9aW5xqIGHne?d#oSTw2kcj0#Jl@KO9d6xRz z&A5dK#h{Z{1=DDZfz2Np3~`en`xDY)8Hs0_uKX=CBoo?KZvR)~?VGFgkZ;8=ef?tF z9fs=@ag1_;>cS0@llLO)0njr9iVu4w0;NtpBT$;uT>d(F8?Mn)Lh# zkJGMpmn}$es-^L8t*cC!Dxi(N@RzMlvq8T~6(>Iyb93 znqLxtr+lb zi|`-uWDn0GxcUHBUNDEO4MYclM;kqjJObQQ3_VGIb)~Lp+qLXtgSw+*O^=wGc3r_< zHmPs%3&6f!o^9a9`+1b^XHq#jJWD$KH8kY9!&}%_b|#C!KEGEwx@)YizGY#Dj`lXy z-(sr2UaDu`rsd;kHIs;it}zgOQaV_egc+IX!G|WNznY@!c*xZ82kq8RbGlEv+}E6_N0GXti@DBgOV z?q&}u&YhabdCe-v)IM8^H>nCKK813gDz1{U+sz1l1`U8m2112D?$Rv}nX<(!>%2_` z4O=poPoCg3kKa7qtC09+b>d~ZrM+3qIsGzp)Hu?_Sz*08cquyocQy7UIdBFS+oSEw zVXQv$dXK+ejyW`_OdB?Lf~)TbUivo*jZJx#cIQtqZ1<}6X#YfyCVJ^P2LD}@&P^4p zKpe)=vs`ERi~GBG?0miS8~$yiLH>C=k}*(Nf#lKCdUc89;JhzF-zcWMjFha`_zs|1WOm+y!Xnc8%O_~nG2>=H zBwAU)mW6k^Yi0G7um6+VJiM;<(xGqj%rUola9$a|$rFg&0iBt-%@ZDogendQu6#uP zA_@G28tzhlR3(F4AH?ZLtII!eeHs!PU&HwFcljaix!l4MN8yjT=Q5h#c>JbSJwGh5 zTA%c0B0R(wF7bu;zmdq(-xt5b7k`c~{ykrOhA;l#zWAQL_$PhwOMT&Yec@Yu;mN-6 z!@lq)gxl-iwf^naKkNO4X9zrN7pERI@u_Wg7}U>e{dQ=0uru=pVL=~xO{GDb0rj87Cc!Zd z+R!9zXi_8Q>-8zk96WD_o=8n;5V;UGWojK-M5bGX-%@*GVbGo{?J1bc)`kC&yETD7 zocVpJngP&cDoS31Q}g7Y9c5l~UBoJ=nY`I7{SEZ9+DE-mA*ecMBvA!@%bSO2(zbdn zs^**a??K2Uttu1&%NjtG59?{MVDiW zcSmt1T+d?Y_h|eEaqSUtmOVcQtX(Z>l9loaEM?5`FMw#%g7o{_##>C|)fi{<#8s2$b5Lu5YNqoJ? zPZ<%T8LLyPzSXEajs;oG*;fq5ImMCqG>%8afz~fUwgmQl_JdVPoLl#jVz3Z}va7gC z(?S-bpOm}R$bXMjy|x7Hi(zTZ2W zgwM%c-(G%<%gGy!oV=%edvtx^!B+qn^>dn-HWX~R>s~C}f~N6ba;q2a4OJYJ0$@GX ztTh^coS?*?cQSSqa6<-iEPB|Mr5w%}BUA7Qw%KA19(?VVyzM-(!GlVB2W&99*5@&X zMQm2*b1UBgkM8+gD((P$PgQ2Wk_g}H3s3WfpZ0~v`oj17!uR>YVPANbFFeW@p5hA^ z`@+}z!hL+V~N#qVr z6a*AS6kilq6k#HW0)a^&<2Z_n`@V0uDYlXG5rar=;R*!K`|_MbQ%H)aXPJqm4@tgIouVrgaxeTVttf`#>A+tc|-;jV!^m= zN^S$<k#gqbvZRnbqFE<1A(pDP9$uBEQK9RdWi{czAr$|VqxGAw~Hc-R3RFYu*M zBOePduVjDe!5Rt=akFUDZadn|;+T9kRIXU0n+3)Qiv;V=QSEE-M;}sG)(4QS6vUlh z5xIPUd^V`I__UXhQc*XnqFfsMqhY;8Sk1KJVZ`IC+sq5C)f*7TSvePt!+}m91-A`n z|LjQy|LL<3HR=T{sHvJGzNp@oh_PrDk=;^y*5a+^d(%adnvh>U~F zlPAzxdxYP8J{*1%;b!DXg#S(w{dZEdjtQ51YMbyJ^vBDscoc71x{w5Ot%XFQdi+Ro zYJ?*X?ww3;;>WWes+soVDQfD+^Q}>GGDM>Gp}@!4$gG_&@G*cXwja+dq!eZsi675S z`te+YjP&Dy&+Sj@m)_bJ;ymPXXXA?45*G@y-)v$s4N%aL<;rF{DBlZ`v_)Zep4p~% zQl%PCN_DvRT*qv%b7B0mQo`8=2tkXr5-SAizLP!312K9X#prO-W_RX6N>>a^F%Eac zcnknp*pI@gQ8k{;il8&87q4Z>C>AzKbBVMjY|Q=?2H;nM4VWt}45YC84QDz1d+^8; zc56d;EQOK{$CQb-e-FG_P`-;*emKj&CFPCMd%|{tLf<|?Wa-CvYZ?7@+_8vrV)iiR;oJhG94>iq`Q9S6OYj0+ z05(@^xYS0*iF?l>$fy>Q7l7byXtL$rgBNofgWaFibdHX~zXzW1+P_DrB$s{s?96EY zo^OrPC+Q3${yh_$_3!!C_U}R7tC5$`o&G%&qx^f28uITUH~c;Ko^vT2EeAE#Nw>FD z+Io&5lPlNI&6B_y=SkXqxZx5!|3{_l@F-0MZ&VD?Qm6aYbab9{1oBP`C{9@ zuh6$pPE$f@v<(X>6cO0;gJht1=ouj%INNAD17>FN^GjBD!q1w#H-u|gM2nvv4&XGA z4<~}b4kjPYa>|D*obmxXM`8K!b+mk#7?uzF)t9}re7ITU18zt)N?026G(|%SulAQ0 z0mz(VAWLAP?a()L5{<%vBs2smPAWF>Z5vKEo);1$nan1p3`hgGMK-8UKjD(nxteUt zJeK<(LGJ@OGv^M(LtgaM@?s`{vPsK83zQehs%QkT1$m(rz|c*Smuh*z(Q-`tlozf* zp~#C{Xc7degSBw_0S`c^xn~e4LfFJeeIFJed$P2!*oNNP0;EC2 zF8qH417Xk0FPO&?AS<+JrU02O*?5I@Sb#joI1wOK$f&&8{H#&+r;7k_!!U_Mk&VIA zpQHdGzMS$ya0dBd;cOZTSvWIFj>3}Co~%m8k{uyQh^Jt!V4)bJK`9JBL8lz)&77#E z{zVxd3<%o!4pFY8`faMsg4;sj%3wLd4vz@SKYVTqP~hBD z)LV%ZCUE0^BDEOF@-`nvBtoQ+k||Q`EqP4hR799xwc`jjv&Zrgm|PEZ-#!@V$4Hk@ z(7}l*>PeP?{*p2O5P-nqL|R7O49X8C95s)H16iL~Ced||bNQfmBwIt5Aa5=~9G5fj zYs~Q@pX?^psdo{b_Yv3zKCxI(hCG;dsaN1_$F)d`kR0y2mS5bzfM2eU60Jt{w;EMv zH7Xwd=uov(nr>6A)Q|VUSwAVUL7nZWvlhMr7&~bJ_bLy^#aPVqnxLabJ%?Ym;xYUd z=d=LB!Dr%e3JiaIYE;dv^(m&j zq}lo(hA0v7r|TcBzI|Ehf3H9f;mePNy8Q%#AzF#3|9);nf>K&r^~YKD{|?~NfBtf^ z6K)U!B^%>K)MD_MIzrmebcglhp6m`ER`>y}QBRzvd-npeYe0!8Er4V*+JaWaQq9Pc zQ6Xr5oDFCfSkNw(${{r7(|_G5MpD!S771ikKs_c}AAeX35MShL;c+)UAvYeuCprn* zP!kYiV<=K?j0Oi26G|GKOQK{TSXw5vxV-ERrd|K7tdBEz& zSk-S9oHwWq7Vg*Jm%U%fZ-1LqYY1$i>4xaqbt;oW{4rXcjt3}E{}EC@>@B)}Hf1lj zr7Wpk8$qAjZT~l`-v3(lUM9bF>LRJXeW-pu%bY7Drp86qKVFSoE%g^!=$MX5EwOOt z0qY-Q)xVj*Ku8<#%YLts-#WEYDrtW7cV^1y=U7Xzj;I9P&&Q#0_Bl~k&#~QyT_$Yg zMbB6}VLV4NXSvbpdTBs|x=Ma))TPpZ1~mY`nx*6r2ao8%#-}ErZt`s+Hlc*i_NzK9 z9-HGXgUv+OT3R(UvM9-Nm+Fak(d?yp5l-?jt~SH2kdrrhqAP4gD4|t1Gk(a7nAy0j z+#zO9EGrkPXAtd>DDk!+uw+05lAE>?^v`&aD92$DqWbmFjlM`4-=O+Q^-*pQVtt!~ z3LI*S(F#M;4Q>tPUljb=5kAt9=kQS3 z%3wQ3xUC~kFGskiBhP7$_=_Cj3mkdu_OP9Kq4=s`jwAmSj__rUJeNA+$2-CvM;;pv z;a}^BAK?g>IKq!xVd7_=BRnURr!x4VBmABt&zFwy(onc6xZ9EclTf%S_^TsN>zVc# zRR*7RiRF9A!I(%2oxBbc7GL!tBc_j_^s2JeiKL=?J%TghyLpdQMMwgbN&b z@*Uxu9pM`gw)fXazuG=v-{&A+%_Mbd^SA?xr%(e~ALhuCm2ShWy1#gZK4`K zgW?JHe32$#U=itB_wCjl+-9v19P@W*K~TeN;Wfd&Zq4)Xi;TB-7z0_SoB>9@PvUBn z4^_wsbV#Bt_p&Kk-#;2%pt$@FarP9k)mH3f?p#KrK63PBBT@Psfm9$K(k{zGI*$nt z3D~R#(FrjB9T4I~3*ru|ZCmi`@)wAwbOgkF4e?bAV%7m6o@_yU-h%izezAAHT-1M_ zm&_~vq!^<|S@}7k1rio()kQp}zrRPOj%|>9?CBTyY#tYtaHeC9v#fef!>JbS?`~S*Fbrm@9 z{}nj!|J863*(@}A5zaoMdEZ#gs|!T*(g9~3-2OPAgDp6P{MGyXHR^2?1C(_#>o%xo z@hNj_B+)!3AmCpwAZk==0dW(Rd7NCX;cn}P?>9GJ)~T9wjfGVw@s}k>;Nyi6Q>YSeag zb}pCGC^a@y)Md3kjlBcIJ469dW?2LpB{_OcP^VsIyv*QN;`E~`JCUC_kA@nkE|keH z?)S!T@Kf|yU5oZ-YN%*ldg>cZvB^ozy0$E3*BP5Y;5NFf*ZrMQQ1%On? zKT}kdcV(_sd2A-iXA7(X_zV=n)uzI8yxxBb`DuszY`${(qi4m!9LnN1pel-##87>F zoCrS44eA`rg=iI8U7V8(PXw57$RnnI7^*9vYc}5k!cKjqQThlh>NC)X2|YF7b^we; z5j=qbywHbkY|vE@^p6`w<3~3p2>Qa!{|kQRYr}r#sP948Z`qM&%iz-cowxvnx}rP6 zn^?x`3e};kE|7JrRp=%Z3gymRg8UYq`&jwcc9oGD&r!J&7u%q0Z>wyEv#i^-ifKmDe`CODImJU<29iqNh`w6)eUMtQf!&`1hTRaHYDp1%@t1AJ>wh3fR?TO zwHRPPRYl1c&>$anA#2rpWujCMYH3KfcDO$__vEAoxm zZ%;*uf|8w{^NQzq5sWFy$t`L0w6_;ljopbYtbb6gT>7k%sz|wHBAlsMpjOaG=hyAY z=cQk8Hm}5u>e|_SwQ=ug7|!k9-gmNww)a1}t7xPg6v6wJh_UNT11VcL`ARZ|rUFU? z3_)lr_)U@{g#cy#6O6YuTtGS(q7$kNaU8y4^n`QhctIrR#hWD*HJf50Y%-IE{5NfX z_CfDyfA#|UvwJU3Z4VZygn!9u>^RZ(?mx?R%dV^cO#O76EoUo(p1Z=~>m1>S9O3&N z;Tewb1V^}=Bb?$0w|9gS9pT@6;d-|^!aqC0$`Sq?Vf%hJ?T@@3$kd)nxaLik1zHPn zco5iIgxrVs^-fh2OSIU}&~hCD4dY8k9C8a}KR+_mi9nA{0%L_x>eN>$)C4cd&BU$u zQ_DH}{=2vearxj|yHxwuF7|X5FJ$O1@T;v5zuKYK?`w>$EX-a$=4ac_c>1ZND%`i> zh2V#Fk!bpRriuaImXCNpaJ{HAbT_^ft#P^;pQYW5d(a~jlDPL8^)Pz%=l;dG^io*7 zL5*`(obTHP%SpKAe!6Bz=31-E2kWqQyUq>wx6^fw{$}mzp}U$OHB#wp(pA`k;QXt; zTBr558&N43WrbDn^QmF^tY|E!qcNH1c`N@}$X}duT_uLnbEde|2C_P5NUi=y=%1^6 zP7vX9hIMMV1!8v>4sG9D9$KZ+2~T5j6CQn^i2FjTDS3b+H^905-LO-_4VMts3VmDY zk#))sx)Uz}BDw!58?pcu_vOzP3eYvWiR$MmwoYoV^hC|xRI33Evj7dY0Ex~Xav5%X zh4SCt-z8SMA1mSp2wa{9NpsjS{A^H15)96cT0I$uO7Z!skVB2S4xjcMh_!=Wen>N} zkY?ci3jy1pzT__|)ZY25a2{%~W$I<9(vp@hvSMUR4lPz5kfzX1UdcJh)0sFQ2e;#U zG&4;jGex=`uSHDe+JelLLg(|f-|@87i1n?L7v^@0=W(lP@H}q+v^&uANhHN!BeHB~ zDWSJt?GAKX$2hzi0DYyOs7GT8BK`A2deWiRxxGBEttc%nsx2s8J1MuIWTjCW2fgQ9 zfBYHraE43(OlfjIf6p``VgzO%b|_D<(WF}u-pt0m-7yuJf%)RN{3v|4;n94ApaWBi z<A6}u8ujCJBQrpK6 zfrL|a+G$o=ik+5%zU+L01)}{AQ#z2^5AJ{18LibT=gQ#dsp0TV2y-12UN6dJu-1C< zg|2$NcmRDt?#knmEQ1QC>rSmR=*<@B@8WuHsSQ*Yc4MS%zQ{jb^Ti7seLl$o{S+!g z_I6K~1Nt#n@)^pXxIX16r0Zcjp;ox^4u@3ck_;-p2<2D5h3vqF2QojAT1@GdUE>j- zbot-~a3edCM6y!SHK^$TC5v6ey>AO?+*x-E+BNVE~X%u2B z^bY%!E_&RWwto$JWRGsLjl4=#>4-j7qHEM!(s{DHXmvKyas_ECg_@~|0;4G*jDq|z zU>{hdPJK0GMw3mQC_$`FMjbZ6zco1=p5+L?;s{qe!jB-_+*exa4A*fucYzE+ z(pRS@@;>a&o3Yq?eJY?9l;D2xZ3tkUXOzh0a{ht9N7e>RE}xS*WnR>lGL z3hFB``X3YS#g4-`O=^_nbGd3AgvPbXq}VEB>PF0yZahAa2#AU9?5pX*_7>u3&wv({ z)8c)~WB3%|Aiz~%1oduvvJ3WSVT1_YNm7{dXMU)TzzGWeRiQC7c>m!ThV_7xyK!Jrq$#$U-UVgew= zg}A~ftzw;17LrUORTQkdKy&c$%DNW{lTAUlw~T9O6$k0pKSs9RO2CGzEAQy?_D<`v9>14Rr+u+7@P~+z}45-ZUwS96^{E43Hm#{ z&m-~WbmR{nOL%aBy1S!rAD-?qW^YwDC+%+p=rla|RSEvbbM8HO@xbYTompO-GX`-n zo^JjG21wmOBPJ%$zwx89j$ZUK?`${TT47df&bWT%)6-&O(wF00bRM)Uu8Lj$CsKEV zkJRg}XcD}-vxfpOzS#FAUla5v02 z`MxcjPT&`QIp$g)4r5|W;P(z;kGn5)v03_Z`s`mkw-owzh1M@PqS@aS=qnmcTP*sA z%k+D?i08=}NXg~Q%#>V7>8w){k&=uQqhug_L6DjZW*;p%eg~fyX74L{vC#Lvt`luo zElr=5TFYOwp+DLn^9|~U-)&zxQpH*_1jcNUIOiaNO21KZh^_=L+E(jkJZM!?&PoV0 z53ky8#V`Nyfq-6o=9b%(I^ycojKb_XqXc3Z(*R}=T;iOn{eC+GPwy>8Hn;!v<@jOq zZgl&0==~L(zw2)X3N(J8T50?oiRzJp#ujM&AVoK9F9ZtD>>)+trxQ%XNW~LTRT@8Q zki(U|rRYVs?>*Ls+G};~%Bp=JY7faP_$33D#t-0V{5+&` zQIG&M+B7nGa_P!RZHsgEybVe;N^|(=3a(5JwB0mxpT$M~T;O4`QF;N=ge!2*GM*UD z9+>PoIdcp2AK{98-)1x&Z@S@`V$ANy5Pn)1>cE)QkSb~5=zB&=M^QzGxJxKJU_t}q zr3mA#KD0T;+X=?QW)Yq)UZmltM8U`N3S-uiQ7GRij-J6U)a!S;<1_o0q7L<^IOZQY zL->oQ69yT5ZAq>NFM8@4m+Rw&zZ7i}6m)oQNEiia(mp@@v;+k`(L40;Mm(NeWmfEK zQPj5nxX`(CS#^B#>X74ddMld4KcZTU(YR>;~)Y{qjudQqn$h+Z-%=s|Q z@SkBGx78iUwcZVHk78~g?oDV|;`#{9kc(IJJuN+}_-&>yGAn+lkcl#7ZBas`w@fs5o9xPUw@(*@u}XA7!1XiTk&nYA2AquH2Izu;D0p@m$W&C z&K;QhSBB2zTSgn0%YR`nOaS)aj4}fysl{j$UwZd}OZf)+@9{3I3bW-qq2-cOzNt1KLII2ziGB}XBcAoYw=z6Tn-7JowV zqb2?UIOzw2_@m=FonRI*N{7Ny6nqDNLh-p0U&;9WG$T>qbeK6f%xxG?Ov9_7VF?()q{rBxdZ8VKmMmt+J{t3i!Uu=LIQP%BJGJihB$+4|+_G*h2r^ z((Le-kSn{wDES&_FNC_q$uD!~C*T$by}JDI+i>I%lxLdM*r;NayDE0anb|9>XHEG0 zX@kos*o`~7+ZfYsAm{mhhb(B@r5p4{+>}wV8E+SF03|Pl)$*1Oy%0@NftwAIMjBtY z9WUQsFEhz0AM1;sVg`DbqH)l*7L09&!g0Pq z+41h|^0D#0{OrU$Ur#*vvMAP_{jD*z00Oc&XZx!%4K6{8Fkj^oi+Q|-?i@Ih<1|@5 zrpTTMV!eM;YL7hc4$McS-64ZWyIAU){^DZPCuDO91gww^ELk8C$7F$f>mAbkh)3~kTEjs%dv2K_^^w-XK#N`nm(PRlBu_8GJ8+P0$j88}SEX)eH<6ZIn!dh{0k34*`@u2d-AnEB)Lw zZaj!l59yE68KK#{{ebXnew`p717su!&}uXl2B^_ZX7lR~G@Czz_Hi~Rb}*a&+LZ&j zqo`BxGc9~9{`YPH-|R3-K0qvZVz-{tlR2kvY+POsPpMh5KnN5x<~)T}gE4&t*`O+R z4heV4zGoO$sPcR|Td;+wQaM*YABXo?;;|m=4AO96{V01IpTOVSw*VL`$p@6OL8(1# zZVG;hRcszcldBO3P%cbT5L9z<&35o5l8t?-5Z-LwfYv&{*CCy^k(NuRHQVtH#0VFJ z``I+ejr!E$oS$9>Z1@EtKQeKpE_1&1)cPw(bV1~kMcF{A@7CQm^5psnqvXl;xy~oo z4@VrxszQX%Q|h!S{s76n}Io;Xw`WS*m8|JAd2hUlxsVUd!9j-XyoMqBd!rR z-2+txNUYctXW>WsZ-UZ^7mc5p8b7{OW_q<*(HNJP-Dm__pyB3--f5+cM%k_#1vPsF zHP@-Mt1!~UxVI`ky58`Jp`tq<53U#6MlNQQkA>mxyk9e%8&nm^6mGT^D z_(l^40Z!NPx9lZp!u}Nl6EGc}koSDt!^^lz#L*tVOI-@8pL@7YJr}94VY^^Fdkz`q zbKOm2eirg@Yc7zrtUYW!w>ADDhOhN||KMrz;W!NX7+M%yb%X8a7V6nR9Lor`dHe*LUh;?h4{@({nhFV7Z>YIJi~rF15NnV=E!msaBgY z95M|B-vka1JR)3wT!4!7YP|WehsqL2M5{6MuW;!1Uhf$CZmRp0;R-PPm`gRUhKHTE zKn9hJkTGf?x?vlpPD41PKRNf4;Bw;q z8S?lt>^~gsFp=Z*Ic5UvQDdp&4isT+1BOz)aqJ%|8Xt&s`5Ilm9k`*}XqTUA%C!M8 zTweruE$uEfe%~LB{Q_-Z*~rHn85p0)KrT;D_cyCSXP`sA%(<5HUiLE2;W%RlN#Sdg zst)@D6v2%}YSN<;T_=wMHQos$)ttflUjo}CXvS5SQ`6BN>_#9{pm&wPMP{zPjFS5? zov8+pC(J8m04I$!L5i_o^#v{Pq18k{k5Bcq1wia&WFzfvNrPHzdV_6D?;fa7vrwN|5sYIi%)qT^;U2yc zSadCes?3H2!{M^ruT=v-k;FZ z_%hG&R*}*1e!~a7bGxUV&x|(%Cc;ZS35Z05on3AhwG0TDWwvJhC`j3E`mB`5w zlBi-2h--J^Z6~_?rwbcGA8jZX7$_gVpgJD%kS#2aiGjdSQ* zph~&HF1={O0VM32n7)15{ss}#&+qA^`uW>*$}GRYpTA`{e6^0PKS}F*BaI#v#xz*W z0eZ;ivTr%kNULD$D}3#zyR#RMy&Rq;3p7fS@)v;)aN+0<)Q+~eD|X{=`$d4VV%+=q zyVRJr6iEmzFs7ADrXgR;ZX%#Aa6ldNny%mFtxU#)tj5%Vn6`*K_n{9Ke$H0jO=Y}d0P*cZ;#9OtE(c|qA-vbdqJRm zDf`5WJY$y@W`AXPUBJDWz0L6EA~3_B=sy*>jyJuV<9(y|`ufE~SsoJ%)#uKJ>DtrX zX}^SY#CGE2fQrp`S_olw+OG!g2KDo)t)lOFp9ExlszS z#H(zbqbiu}2*)|X7dpaxGRi6oHs%ZspP}G6h;>|uq4gEw$GX#x$0THVgQ*@HD1)Nj z&RYy5anDQpgvm?Roa5=7^9qvq`!;{^Rwi&d96^w1Nop|z_=n&lIwaB0IKo`f@E>8q zVs#$gy!$)>r2}xfgg-BQJ8e=ov0;%BvJVe}4pgxr!HivQ`f;PyaM6a6O;}z^E<|~^ zua=ro5}h(#m?3;s^=&b~(!P+)t^dKaW~I3}m1EsY|4HM#Z(v0BwBf0M?%V$0^T1tP z>A$dj#juS}Jkp#4QkabY`4aJ@5AuCmOUuW3uw5;fNP?OZT=fSGu z+ss95C9)Ly#^lx~%m7|;*?5zZbBK8soDGbUzA`_bj)@9`iD;LQROiT<@w~mB!AYZYAe)6$p+NBtgAXMtm z6}1V4f!f4oG|sEpSq8H zvo;xoRBvc~!_m)?RzGn|#D<7|CWiXC7uQKf_H!ZoS*!cGBdVX93vsrdmQo&q=R9JR z+>V*ZT~=^sPpS#DN3!am4p+B_5b?V;B zY55-tt!QG3+5pio-$X6kPU=7&E?ryn4K<@Q(H*E%_fkLep%;W;LvQrJY^j?^g=0el z#|%$FGey*m;f(%FqDy3_*r7Y@W<{XYUa(}YM%bZ12t5)KrW_pJQMbQ;~m5H1K($po)@iHdAku#iRpmPM~SufIlOY%3>Nw-7J`4$B4!ko+eVWGqJB!AeZN_xb~ zREHfNiAfV5S={w2u`(pcm&n-Vh+Sd^tl7_3jn9?V>}XGwaB(uy2jK#XGFoYnl?p74 zKA1CSpmi$aXHtYVfVkn;z=;&v`&z2U5Iv?leK*K6j%~}JgWWQtWGPp;kQOlheKsaJ zco;r4--@?m_Gd=PAD9F4{5_xMddauY3|tgzV$%|mYn_l2_5rR=9gX>aEvMc8-2GJ=})BA;)}U^+41ShX!k;@#*<|n1SR6u zZe^s;O4V4^##E!-`>DixAs4U7Fgv(le&LjoSzeg_3)cP#^&Koa*R3Qc$v~m=DNy+^ zEwsau?NlO@yYF3aq)@?Lnb5)2O-kXw0tWm*7D2#>|4iRxHL4EPdv&$3xI`4M*q;PWWljuXrQz)i z;84y(^S2BV)C|MRmu(9C-Ja&wQ)vgzY|?d~3ZVkCnArk|fU>TUV3}3~6%kl?N&RCi z+-Ma&I2OLy+yo0~n2m*Ne{x_UybO&EFGESbuGobkyiENKazL+(<_Voa!eJC_dES4(fXyjltOz*r@g%6nbzlDy^&su(ZhEkXnBV@ZDKfRrE#xB*8rI1EJ z%kOK^XFJcsx(2X;szoQ6jr7JdhAp(~jp`*RnwMIPc>5m4|Du?B%POD=mjoIyDoG@c ze@2_%5Thu1pi!Zi7d`|nz*JRLV>s~)*b_ajqf+i^4!o1W2!9i|+205q}MPt>W7)*SOy@qLNd;=?cV8hXtajeefbyGlQ#9F*EkTr#}(e z#1@Kiux>Ar<>{;G4K($5u0&I)a#&2=OnXSfvFZ*G3EI=0?SX*P?K#qF4<&DGu#MoN z1lh?96#Ky>ENiv=3^PMHCti^a{wK67g=o*N^c*F8#uI6s=BEIJ>P5QDt}m)*ZYVcT zSfX2U!x$j%zB}?KI`c!(f+wN0AyHRt0!=|zfOW-j|&@em?<9v6=PrU8E0eMpdZ}RyKzyBe|(jLRgmk zBsOaiYn05PkqN4JNe9}HLLwx~3yA6?aBT1)t zzMXvUPha`_1&tD~2n}%~AwX4^%K{JpZ~g5Yp~yXgeAu$th;y}ET%^tY4+{pew*P=3 z3k(C#;5|k(%$_p7*hwtZsKXJ5B?qmV({t$Rj@3tlx@nNO%y$8RSFDWR5hsr8xW7Yx zZD7S#o+`x2l9)7#jgKr1k=tuW3q+%2B}fQP5S=0O-a^pyPE5oO4~&kUHZIvaF-o!R z$U%hjNPj3+Fec(VMzuoEv z3N)0x3E(bdtHUSn#0FjIT2CwbVqp7>my?U`^oy#+(Op(Ngy|>X$haARCkEYN#gl^P zRN4ZX@C-2;gAXWlp4Kqqlc5Aw)L}xSw1Le67viCog&gAuCdJ6ezD1Ed>Laa`7eB7y zHwxjg2l9h=cgi?SD8LZE`}6y@JPcX;9eQj}fPa8o9`_NX0ASL$h-2|3?v-<5tVXp# zo0$?%%mIT>z(=+7H23I)pCn4TC|8BXhf6dcuZr`GTrtc5z zL=LAqjBU91R0qH4y+|6%-bJqpv4;u z3(@-3HfdCb{rS*hqx3RNc#ELo*Pzh{#8=ub z2fjMt!#+=^B2X49vJ{q(=1}&2%|TH1up~yHta~)dEPGe8_^MPp0KvvrLZMA;mBCnq z|2Ocp<6!ujlSlrt=<9WSG(%rs)9eqy)GV^5uRjQ~Zji(XWc_{mssa!jUvcg*zV@FF ze4S!%MnI2XCg0Y|(EKfhpv1sYx@F_=#2F4!7Cl1JB}wa5`Wwd(z?m%?YY&jW?{x=D zchn*GU;qE_&e{vq4&##{{H57G`#=qZ_aO@CPDD4E7p+l2f`_)?GbpB z!Gw>6uYclDM+2lk-k%e-vE~%!4|J#=#=J>pb*{`G_$4%`T)D~e>s^=#gcLK(^7EM* z{13|N`9p6+9v=Rd^tkXhp$4~q7s@Z`8=}5fhQB5Mf~fCzqrRUDe+#_(!{1VVYUms1 z>0TVo9<~hbV`PZ>E%}7>QlyKT;A^SALmo`w(#xU2vm#0eznK0Dp==#VZ;$~=o&=yK zH%7cUxbp#jm!F|B!Vktj3D{qxHh&{iedP<}SA0(!C9UFVXGEU3~a^YM9XFx0@+hAK|58d>c9DHh9KSM*jr zyn?XKW4eQ!r9b-S0yYFl@4`m(2+cPREnT0o@m6XbY=kspUD0|MT{_W85vla*XFcXiL&oZ(1zOSwf|7uwmoHyQH04^I!u zLK8bq;G!2$jEzc@Mm%GQ`7e&&rVIXEcsu@OcrX6T@CE~( zHJ|)V`uc2TbM)|H;Xj3UN3-w-|6_P3Hw*8Ye++N!il+U=`k;qk&)*#BzlsuJ(tjLZ znE#ym3Fai zYoy8iSjwfL!)*9-ai)}@mi~x!_Io2|6z3du8*C~b+^b2GKFT6H$`2hDy!Ai(8bv-F zusyc{2zsI(Mj!0<6DuDt5{FT?xB{HOBZ#xI-l8}#3Q46jpDcn+OH>t`@zyL`XF8n^G$GMIXKEWqh} zfK3$`te^XWY%TYzp7=R~!=PVoa`}7W0D7g^-EwiJlh#UTd58qxT#35rr%i*A7-Gf7 z2E7v#q?h1eal?z5_DjFrz?;3a4Gr(cHK>$j%p(4*MbI9dc|GT=4FI55f0gws?7(sz zsG84yunC=;R#Qd0=?lWXIK7@&|046v#COO)1NKRm54SVB=2-`5@q%+re`xXi8}j%#Nj7CJh=Yiw`K~dBgIqps5G#bp_7H zd8P$8v%B6Xxdj>N^?bI=_gVe3x<6B@%g_cjZy3)y%8i}4I_BA6d)d3ojT!0+d@>$5 zwx9-QA|DSp2Xe+>n-=79JOuLe{Awl(T!b53auZUYiE1>Ok6_&dcj3Huq#tZ!m0KJTx(5+1i@er4W97$K8HRQ zqJ9#7QiSoDYdBcjPw!94?wkro6%g|sNvbPJQ{Up-4;!h`8xr}ciD9xn31p3Ri;|_$ z!E$;IQ*F^Vi-haHCY|n$U|-7~Y;)@Y+dJ(--Cp5Nw)cZ2q4qw8lbZ)?MbY1B@35s& z?R7WP-hnQ>HtRo6h6Dc3ICtm2D6ufm5A*RE{Q~iE?rfO%UkA0hvd>K#d!##XA+Bin zQt#@!v6javWccCF0p;=EIqvjw9ypz9g8baRRqD|y^eu2cP>dA;g$qQ@cF!c!cLWY5 zBbJv_V3)`Tvx_gowxM8)8uDTFP+M={DFk(|$h8`h%ECoNSU5fJBLfW#-iiiT{Jz^T zrd^9qySb$U@DUs=8NlDHGB6?5+n6}^tlXW|@kZ%n0HA087-pH>KdEeB5)$AIFbomC zM&rXlXYU`0Bg=5F?4KCqfkE&Oy8!gD7q~#rpMNCo*v@aa+l>VW{Lgp0(<@?^xzd+< z>vp3iV=7(`ZA3V8rEi6IL1Ll5P3uBmo5bwj$20_YVPglte2oC*A9VI!)U;P>+JFS` z?d>?|p@spM;nkDHzuf4gj>JtG9OXEt35R&^NQ?pT76X00D!A#M8(!5LC3Dej3hyvS z7^M{wH#P~Jkvw!5xthW$cuO^9Mllj&K6>s5?(B4TUyq3%8>;d8(!xN85pXS555?n< z<4FV($Xb91&KBEISZr(l)A+d&pL5&lEKAmaw%}amt5%;Qnp<|bFAS{4j7Kk&GmP;# z!^l(N>TYZ`hfxsO@}fg^i`m*rH5{&jDPww6hPrwayZWqbDc7lvcD(23$fjXX?*J5gcKwPou%ivq{k&N-&NxHvX7NWnE>Y28@f2+IeTJ-lA-QV8mFU4Yl zqrV-jxNX3&7Rl2^+Ts5H1)=`Z|3J7I`~4tNID&1_I(wXtS*_#t0LOZq z??u(j)wd$l@7vh#kE~7O9(H^){eA#YBKkcQ!1R36{P?OL^w=H~IkrV(G>e4BwY%>c zi-qUDg>L$A95d_e1z_TeL&3zy>i(@m1jn^IVA}o5S*7ESV*l1N^)0eEey=UJ`d8#t z>#$X=z6Ak??JN3O4NG7pVT~G1nqG)jkxO{Y8_H@CP`g3h|0%Y^vlkXc^~We}MOD(~ zPA!WN1HSCg7p?y2!g%y0Ax4JmsjD$$C+IGcF1;x_{j^!5Y9CKdq)y?gPnt{v;NK@r$Ee$w^4M@=q zNJr}k;X6?K+$2& zWxkrPAr*ZQ9D;UIQsi2q!{(Lb=7+*_vN{q2i_LMA1F9mYifL@PmK35li(DM4dtP0R zo=rJ0gMobHK6yoxw_}iTXCNuPVme260e>tb{$US65S>gjZ2!GE%6+o zMx$t`>*{Ly0ic(cfhD8m105S|`imq!+uC%ZER>)mw(m+4VbPu9)#B&T9z!&`O`-$DRlV~HYe}Ivvh9Y4?jq2G$ zD5xH&33m^xjT%*KiG)ag`WO3iNjds6x25!F#8u(`e2REBxr^1Gar2t#&woRaP5ZM5 z1gt8nrTf+Wgf6{bs-J z1q<=F?xV>5$#|^{MK*uv4DE74E(<5RE@ ze>;Yn?vNL8p~$BF8Hs{w#M-F-^as2CU*)fk?B4|3;Di1hk3DjGye1=_{i*>A@%M~5 z&5YN7LXl1THw^`q7aQcZxEJ{`8tnRiwSQ-PjQ%|qC;jVldANU1BcAK@IXRsPbj9a50$PpN@gNW-|lsTC?Pm;$4lu-5e@Z#`^S>G1yE6h{o&@i{|*Ss z+5K>H9%f3YIX--a>{qH2kZ!}Xv7238^lJV4Hoo*a0cNYlT1y{Cb5f-_`?&Ig2CH}X zu}OY|?!!x5((}|H```=p;nUODVd=vqcAb%Cw=E!==KJs!QUssW3>Gn)mm4V!+6`k^ z@I6F9FIDG5)Y-5d{duzf6}um}r7P0k4D!!Xmin9in{y)+43h@922})u7W^0QS;t`t zWIYBo*5&(=w0~nKJTow-GvaB&fn&`XpK0b;02-&`FpP_^2#E!V_h|Tmlx;YAOF-~9 zMT7|(5l^VWI0O%a6tN6(%x!NQcygzyR9q8He?Aa)gLV}q+*mblHoM!riTfEz10<+h zX2>3Bl!|dzt|H~8dVj4#*!~pStg7;HWfd=KGf0hrti20ie8R2g!1{t%7tU1qwt0U~ z9GjQfxN||gr?o#j&)4fyD8(^57sPoE%Qrr3lRdJ)*QS^0t&a0E3=$#(2yYTu9Wl8N1{)t zQ*MsuMJP$CHOG~^3^@LmFzR~@<40qz8a2>!)fkVQij+G6jCL4Z)7oyp046VrhrN%Z zijr80!IMM{I6@C8%!SsFYT*%lUw02%AokA0aTupuvCc^UWnAIh9m)VZ$-oaB{b#q& zh19X_wRUfZqbY4dJ!}JD5yXybm(-0xTpcmz_%J=M`9Rb2c48g$oa>}#kgTR>N;gf$ z7Cq-$^qkQgJ@-40`v5m_n-^S2fnl{iYF-ogL|8F0a8{pFL zVl8Cf#(2A7V~redNP{u;5&YTAcz=J09`BiN{FU+kW!Aqr-n0idH{NM)H#^?#B>MlA z@!tFn#`{a)OOJPZ3@OLE4Syr31LM64%+@?_e*!XTI^OnsF=C~eQZ+;Pj4#LRM#wSZ zC2}s;^iNA9%LZOZEoM&4O*mRw$H^vH-GnD**{=3^GGCYcs8{}bK4M1lGSU_wP8FpC z%8H7DlemGl>!HD@E+AgAKVaOqUsaw1}&Vti)U<_75fYm&7b9F@=ek)2xz~{Ie=Awkn_DtXw`= z`F0}TuZKJ|aTJZmsV`E67KnLQ1l3%?4N*RXI=gN1TI+Neg^?HV=IB9isdlW?BGF%s^-g~u~Vnw*( zA?Ix-&qT7#5|3JeAPvY=O&O{VR^dxOR}dlko#jOBeJi^k0)f%X|CaVR82T5H74P+}X7r+_&31waLBLC*Zgu z?(srdycV11U5~rCBzw^cxgfS$GofcTx%O&YxC5o2k3l9p3PVXIB>x85PN9A7F^+?S z375VC#0IhkicPCQoex|!$7atnn{`mHQFTC94#Z}cI@qj@Ky6f;USjE{Y*t99&9T`F zu=@Tvo1H@L{Zlqelw1d3vwEQ`J~iG9n|)~|Hp^!3Na8$ep!J<0As!F0nO|~6ku@IQ z#=taXwUIO6W+HwlJt^2ObdpAN*@Y z1nG(6*q^fbM>Ef_*2H7_AU2wrea^#BkZt_M8DI}#9g5ImVvKu7@u}*kb-a||j$D_2 zdO4z9{@L+qC z(tb+v3bUsNeVRTk22}bfO{wO1s;9Fx8=|!E;W{i&B|G^L7tk*Q<-07eDc^EdoySK# zvQ^O(;nNz;r=R0!C$HW~A=(~4lzhrSKRzq4M4^yTOC zoc6%%!(}?O9t8p4|M3FHlsAy!H7}f(2BuJ|L@a0xYLt}HQyB|l{#+^rsH{g#b-2|b zQFVrO_|N(9B_X{(o9>D&0v%3Pi=OUAScw??rqkVdR$>Yhqo=!ctMX#tkc86wbk{<1 zMKO<23X$0yABO0MH=_$fK7R%;fPc6g`EhZoZ+XcQqZDsHH3soqnnUHn#q)F%Qyyfe zJp)_%#D6!~UxE;6V9Q;q*UMzjhC<&y)m?&hsw;jms&3yFb+iO={++*=3{)!#M77*= zmRbRVAj9GE>iV~JpsM~|JLVxf<`o8b&7LGN@GR-)0r0rJ9=KTU8`M64dMnR=1@1^b z)~wbynBwkI_!rH=+eHi$RCu>pfJk)+MH(x+&;-l$HAi)<#_*`dhi*-z$X0y7feM->Kb6e zTH{WbjrXN+ks(gm?tJu!^`4o^qo zf75fJZv6iKzub-M0ox)djsGDKCI0~bKb#P5|KO)0+ut?Z{xkpW_P+{7iD>^LU=(Nj z`J@C69JR-RESQFIvFoDXH=u7BABXRBXuO)q|Ki`wUv#ki)VE2~*yVa0PQ)}OQfHw5 zBXtI+3sQ+(ZU&pVcT!S}=Ww@wB=;_^K`C&R+sLowgs_!z$3M1zXmMB9X@8@?PnsEc zLQfV@H@bnbprm(GYrm$zh8bP%%4|>{BX8cEqX8nkm>mddt}Y_yU;+kM%%j-9eiB0( z$hrt={A>XvQ_UVN^Yi<%0;Cif%51(ha!trC^~E;r7+Ob3c4{{lmy$F>Lt^+rd z6p>5nM6O!aZRe5?=2~dwdYh@pRqo6sAI$ZX)3oKFZRlH zxFlX-C1M@RTMO;PTuIEcnlM8^m83qyUmL!B5Pl~s*H$Z646$P8k`LzEL9F^U^@IiU zBxvNMGJEF1;+G0_vYJM5Lp)>eDIiX+64?Uq@F2OoAh$Zxd?vh}Q%Hyx- z=VwSLs&^iPp|spLvkUx{GKZTsa&MVjR9PL5y9L2aoAyBg0B+z2 zy~~4({E^cP^ekm&<$8jsrpCzYZL0O1BG}ej)F+7-q!=Zu2@)BGyJ3LFeO=damd-AB z8-2cg2OJ6})$4$%$)mD=>L4sWE-^>P6tVeh!t3JAk5a^-le02jsB0L^}uvdJS&A)cR2@P8)EQW%|3NQl}Zj zX5I8KniZG`lEFPe3seqTBkD$ty66oIId3DvyO2P)zKtkCPjYEJ$+~97vO@vZT)0)n z0B4Uq4V=}Z|Mj@|7+aFi?r;?y&$y5p!U`93s27pT?z8AnGa)AI^Amqje>$#9c>aFy zA#}^B|H&xG9>;`P|FZrO#K=apeKo{{O+QRv`+1(}PsZn}V>umkOWmGlB*o)c$HXMH zo~*^KnHp93`kxJlrMB9`anP{?%1@1M_Hk&olb-%e-+t$qFuuD!7>Vy4U#_P+wA`v>jM zbhQ7)2O`^FggPwz-}UOh-2Oe_t%&w3FjqwT?fncP_$fa>(t`3@EUkm0w8JtaWtJN~ z7LOY=(wJ0^|G)56_%`oaG35u`_BPow-nYUI8zo7w0bxEVTMhZ|Tfwsw#Z#8>Z|O>- zY$GCZGo+U`9N*IP1>WD|$K^RLx#D!f+8onKD&S!{(ap2i##s% zZRZV7{KzVXdaZutgL2ckK`jV!GyuxSc z8&vuIB+@!H2fx9~Wzvn=wYqdA_Be3%C#Kl9g2$?QAR%~~q+*|A*Bal7^u@SdyR(&l z0SC$`9f(iRhVMt91mxiBgYR9dnLGFsqS%nDtcF|~YREF&>CJ|mVKt-&ew)yV=Ty}a z(!r+qRd!&O9eB?UJZA@9Xa84%1ucJzzsnDJ-e&Q*+i*=bI0ApZFtK~be_JPG(E%gB zxeNE%<3QTIh%?~}%708-VeVRCmcpCp6c7+pE2C@+xWO(RQ*5?cY_>uUu*+{uAir#5 z0B`r=fdI11MF(e@0s?NHWlE$O=0{?KYBW&)Vx!~=deGu#9 zA)9~N0h+48NICiE9IGh##pWAcCSK)a94YytHO6F|mN?FYD z-uER`I@jhE`s6$rN}EYec@xj1>8v9FR9(3RpVnH`Vw}&DIjIQa#QtJuei`R%)Tz6g zFwWD+Y%$K)1jWIvQLi4U8Rs2RBdGIL{tDxCc~R5r^m{eqOvZ2UVo-WmAvAZb#`umO zVj6QdpF@fu3z1iX$1~pybJrTirZ0xJ7sMG22<~DIoO9fk8l`x&56U0-=~IdrGSume z0dOfFtgv{ht<}baP#f=fLAP<^J-Ur+@!K3vy@#>1`QM}Wuj-+@iMj>6^!;m38!i{^bCq0C(DuNy&=Vn)H}KVxamYS&SZR6Q<;Ki%$6~^^ zztSHN7X{HTa~8@Qv++9FSdeYbe0n_wZcK9rMvN{?ScxxVcAwa?glZj%D@&M%ka}5~ z!}swN7(|sNOeBPBB*Ckf*6+#YR3N8T z(tl^c0-Y|qEPv#Xh%O%s!Q(2+679U*8!`z|6T*{v$1n{wLv-cH876~&; zON&-M1wCW85lHDXoN(x|I$UfEn*tor2KA)Q0o+Gla8oHcYUb}o1sw3;yNDP$L&iQ# zGNRvFgUNR)nz@p7f(0mrfPy#Si*yD*;gEgJ-ebn$?52lL)oT<|FxR!Bpzz0Fwc|fa z6`_Z66cy(J;IzPFxAzkh5$ho9;H7wC@?H=*f7w_o^}^P+0#coFAbxH=7FZB$WjNcf z4*h0dr&e3qBCQOa|}>iAi_zbc|d zMXl^+RH`@ti1r_Bw*MTWCjDpaJc|22>3{d={@=y^f9>c$+k&>TXZ`@0hUw-;V?;o*~`r^Sq*NBDYh_z;*%{0iN z>kDE=U9c!Gb7ewyModgsjMrpr&-m|rbnmWT^J6!dBUZwE@sK~s*ULBP(Y>a(J{Djm zFX3?FB&_8(YLq^XDlnvJ4hx#5YZ6w{+;f>6$ZGTfvG1~lNny+C2VJF-Ol$;4!83yFa|;0 zg8J-}y01N@Tr%^s~c1uXCaI3 z#Cgb|wt%Jxd+;>rM0<4NBy=KpI`tsL=Y--*jz?7F@ZjL#lR$z!D~60fVrOolOD44_ zS{hWGi=ippg380F3CpL!nJdLQzZuH@U~AtjkkxP>$jg|$1tmeOa2EE*%UM5;O&UCX z^H8^(Aro6rjmpG#Zt=bojp=+}3NDF1mdC{862OS~*YJGU+4TR<3l!9PcVA&lAB#Ns z+Ef8E6gvA8>Je~C0V({jFj*V`qP|9)mHm1!R z9OkfkpT#dgVj$}apKL$2Z`tWS)1T;JgzF z$HhEP5>6|ty%~TLJRfAF`#l{Q2>yD&arXOq!U<%x(#g8tg9)d#1xJCN?e)9;{>D3x z3oz5SNu?vN3>Ex?WyfL=4W{}=owkGxHb?*-gXNkmQC9-n`a@|XUVcEk9C*2%v)31h zn}4X)j^SuWP(Mt;jsVU(%=2gzoJS+!WHL`F;k2>fkUxW`S$GjRw=mCuC^!Qm;RHFG zkU!_QwcsoV9S7^tDdJb)Ji&P#W{Pp zh`B#3iNw^0DDA-1h0OCjAzp4lJe?2+03zlq-a2oy)(qt2TF8G>i)3{xq4-;9F2gws zWyY@YpPTHh{h)1PE_A+glhrR|34aR*^|G{&rB91&!)Fw=T@Yt6?fV??WzvlX)sh&9 z;8fTbSE5t4D8rhgMpdAQwl7```K0#`O_&tI5~@(MCZtnF6Y2Ckz&WY<0ep*ex;Gsx znp?8PC|k~e2&|hCg24I;x-A4&6$BP;XQ9BF0hISgSJ<9BZ*;4T((dsQ@+AZL?5Q$% z9BO3wBdzk7VIx`;i*zJETPEN&pKU>&kbEg7vqYfDD4pk!FV8_Yh?FmH0+xDoY9w_$ z%65mxJd=4!Sx=%x9m%LCQof8~o&iyC21LRMPDh>`!m;Jcaty0OzMKdks5jr3zeObg zmUA=`P|ha8X8?%!-G)3N8B+pSl<&5D830uknJ8bDAfF{)ChegK+#z4yKpN%Ci-51? z3*HgX@TDCSr$n}6BHLxnGs#vvu4g-J8M7B892_UIp&01meBpM$>mCKKy93_hX}VuW z5uPn;W)a?r5%A(1@YWSawr?HbTkRWf!CQj3kj%N9@K%Yeu-kV$v|1bQfhc$Z2fQ>3 z-tB~UBKw9xXhV3@!|*77iY`L03w7?iPbgDVRutSU2i)bQ8q{%wYfGT_LF_@A<}CXG zM}xXRf$tZn1LNG5n8-mHhjdZI2byK0pa`JV62w{AuOQU#U|YZ>TY`2`VVS=pQpU|< zb0DSiMabPvfc_TX@*O0nW~E#r8MBF$gGLT9=ZKX>e#yg>}0X$@a=^*cCQN}qjbyo zWAK3sdIKE-b0ExBSjLGSXscy6A+y%X2+uhb7vbA66q~*1`PqomxxWUH2PcbCR?Kk# z#U$&-s#cSt(O{H5Ws5P^5TTdVBe&L1)}sdEbjifXjx8a)K-Tp-Sx7^DfVhy{G|`qw zyhBji6{6$~_e9Ih+W<>lg?gMFzKZpPX>ZR|^GR-LT-{R!eiGP6J6*z)o?m|hfLL@$fH-X z7ycF{E+(p&%PH>6n2cowWv5f;zzY`w=SbrEF!70d-!}@Jmxg2~DsgE5;IIW`K zw2FlDEaB`xo{)?zBb*3*tcH0i?ucwp1|h^c7+i&)aqJ2o*dsZAC27-{WKSng1pOH>R(Bs=DiT!f2mr z!VNgKvVN+)UR#C@D?a8U{DVYPKRJ&#=3*Jo%H8R|s7X?`O=`W@o`3jM=9tH9>v$t> zi-+a>GrW1d+N{_ZSAQ2B8+0GEiKDml0PhCXzYscqfkG9g(RZ;K=nMrH4ko;r5BA+b zlQ4vL+~%AvtnuIwxP0H3bM5;+#pDPJ6Ys2d`_BJle`FlO68)LnpUGp8EN@2#Zb>c-jLUUr|6!EwBD%O8YLAE1 z%lEMuNJe0{3-9#i7WzhQbyXM8_$w(%XjM|)q5_!Mq#-!xjJ6ddyYWVNNgBvkT7{T2 z267QdA)MibK0M+WC^Q+{3jk9H5OC5^U=SLM6F%HEE6K7zFh(+?Q-uIC5l=w6@c?)B zeotFM7vpu>IPr4c>dM|Hu^0vzy$@$>pkTDiTQvm7h48y*v>Rr?650b{h(Zq(+XRSE zhz0ll0>G#ORv>BseK(2IyF1bF-WDGd^9rtX{5U~&$V+}ihCE|-VN6-;S8$=@H~93G z=NTWm6L6!WJ8pll5;3ADm~+a7eaJuDio=zJE>NV2p$_taa8#3G225PJs+^1#jNKLT@Oo(qz&nFM3Wh~HP*Wy@C-CNcjqDiT!|1L z&Ya73%}y+9jc5RTnE-bhALeHOUjC{3SvvR-BE#^2IlK;m({3V@R)ZI%UpR*DAB}B- z32@||0G7#3^0h`ka4SCcO+S>pW0(cWWAMM3=r=J~6LJxi;r5-Il2S!2c$~Cblld3`hB1?m+Hv9MBko!o5gCi*j>OcuaqHc7;*$ z79vbvzy2sN9Ah||7vBQ1Lflpyk}*oprhu@Szpa_R4sQ7~%nD_3x*oAc!#oa$Sn!l@ zpnVnV;2tiHwN%u`gK_!tV`okRkZ+KOxp08P?jo5teZP9hLm3H|ETjVqm&5rjcDLy} z%k3Kh5`Y(9q=^{%n>)}K2ir(%H=yTvJIgU>2_T08So+(+s@N*O>@dW}8Ks4Yl}`C4 z43UoEVfE5c7_%T>?sb9mG4^98>v5k6*5f^-eV&?7$!5x$+cIKrK|e=i7FHe^9I47x)GlxWlv` zSb3=nmruCUm&NXPrT^~zX*UUV>ai$>aAqTHq~7Yp3;o@WzR=h0sO(*1ehK0_9EZOD zf7m-0_^7ID|DPyoOsT<2ZK~Y%NI@nVLc%jazyuPQ(Fuu3kSJgX$%Kg{nK%y!ii#3! z#*mh__BL(#x3u;4M(b^D_1e^0MMa5kYHf`zReZG*!AjL?3Q5lYyY@L}9(iD@^?&dG z^J#SW&78B(+Iz3P_S$Q&z4ksM)73|zyNw<;8r}6W4dVUbl=HO0@Pl?aPm^+b%|bq% zpLE2T{?~jCUR7;#V+&=GUu=d9zrF3zpHviXFTso&@ysW+Y}uZoKw zAQ_GyitjcLzA{eE=^*dtdynyOLEEWFPB^uo&7IvZ;@97M7KX+Mm-j%L%Z1@R1>w^c zx4D!07l+*^_xG}6hWFQo-wUU-6=e0Jy!w^$dV%PI{I-*Y?fGq_LmP7gEqSfFQKW_U zgj2Y4lDgA-Hdi6Nn0}BnSSyqVd%p{1XIE^r--k7_uQyXv25ZI}u_>lC#!S6WnKs|P zL!YyaKLR=>X1dfb=J)%Ni$H9rNNEGe*^64}lVU^u=2q5Tt_z5skkKDy5n0>B{OFKH zCgK+z!gFtcL*}~)_GD6`J-NxWCy$u+@U zp|BGD$_TO@hltj@nmp7x1gmQotizqlu~kA;hW|5sGW;*gb8Xv~#kMMC?zFtf z(*#wK8|r!m1z2{(o!ghXy-_r$Duy)@KZ4FvBk_09wlWg0A_XJN5|{$lB=n6PnT@b+vku^+<1MOWScNv z7pJLk>gafFR`s3Kmd{FK5-?uWzLdJYacGUzUm2!F1;}CC9E8;F&vLgr;pEj^%R9n| zn#PE#SpTRn+OKn1ckpV`>!c^$MKE(u9_by7JuuZe=boEKAO_K9w8~7HD)e<{d$DQO zh&`y7xlKlr$Aa4#MUolMluaXBWy6ojK$NToqSFR@*GZ)<{}iWfGcJm8gzKGgQLH10 zE9CI|)RwDA2(8l#TF>MT_RLx?6owy@?tH51&QOzswPXFqmHwhT>2DIGj@%J}#N2^N1S91*e=$R5%wNec+wOxRAso1pB;((y4y~7htDhwKfb(e_34ant2wBqYaq{49BZ%v?{P1Ip zN69j7s_`hz#YQ_dZa$s#S6BMmd{uOFcruP`aoYmM%>|!@>R(gPahd6F__6Q_`E3QMi~}jC zd%EI})Ua_n!cY)ClVRgj88%Mq@8t*whLdEud>VsKvJ5_4eoG2qADck|l+MS}ixps@ zq(J{SiT?N6`hVXcOaDJCUi3bF$y7P-ZWSGCt=dV;dRWEggf9FhpTgC0miEueGC5+z|rWTyV zR^1ofz>0I>L}%`=Q*SH~#Sng2Ca({^dXfa8wVa|Zy%hOLos=INR_s>(af{tb%{avT zGDP9wqTF{=TW*(DW15LFz_>kRzh6#H7}?H*TSH5(&^YT}j%dKvO_qJF`H!;Cr6~7L z!KNZc1UGLeaEC9T6Q;JX;D;09tw=$wnKe`&VFyj>#vd!rWj`zYJVmkPMA6(7j3i5V zo|5v~vfODmR6A7Nrz4wc_mqJY<9*>!T`Ow3mHHk@s8zN`IXxm&k&HS?O z(BqNol@^i$x8*SLiEY_kYSl5eR3G}KFy?6o66Yq~oO|%~p{ZWX_Kkko0=ZHTl+44s@Er(S72o9+RX?DvYRed~%RJ475Y4wHc zslW0^9aSWbeV;)E%m!6a7&RJ4QAG$pzsS1p(J!W4? zd#qYFygeiy^@hW;Su$>!yk&}*MeMHqN`I2J?fTis)F~k}!bvZ@n4~$w*r#pF(nS4W zF38Ij3GLfAAyUt#atY6sXXD~*-V{dos9z|Z&>!DYu`J_^Y?I(qf2~SVy6~9Kzc(a~|=PS6c zcE9j`SeHeqL{U0>c>f~(REyrfjY99FIC`v+$Cd1f5#%Fb{`EiFU#Basn-2XCsXy;k zB#zTxACpcwvOoXFR`wshzt*o6u^C%`ZK*}Ne{{vL{_6b2k8U^rqC0)XD#CyfXZ|$h z$3KYuBi_9SoxiZsvebg3SzN9zaksOn99RCIUAc#`hs4FET=}^0#FO7BT~R#w8@N-L z{id@m<>GdZO?9^UC%D_2F))(bF2Zm(aCG9kbd)9rrU+1|`UDQ!F+_TwDIT!BLF-&0%8maNU`n$FP9^y{H4ejg!01dND* zaj)}Uiv##zm+W_^Q`-@Ine1K8JJI#vpT`v?y``qb;@4fM=;PNtdT5HQBimWYj8C!) zZeZWS5_Z0O#YH?tn{rZ@8qzKJ*UHq(cwyqUpW zL!2*%+M@I4=xHlqHfv(}iTfz>$x0CyzTv>{-AHG~fy{zJv%GgHb({Eo&37+-oy>61 zeww_J3R+KA?_JvdO)g4$sh6AZEVEt@r*7W_q24Z04LjpFsl39tdq?0T_HW*arXzTt zY<5U>wQa;C{j)p$PmymSpw6~&Q;NcwMd9m`T}h7=g&T)XA*1%GyDiBbJ~=(RIq}ru@WkZYK_+_=u&ngw$o@>| ziPLqMKl3c=Ji0%#UlgI5pEZ&$q2n+=dys(WJmCTMoitGI#GC~|@-~Dt_S#oBcoihn$#|#>CK8Ce9!uzyjylKG+ zhsMQCdJN0#&fW4OuMfS;0`vR9)3#oCUT{(5)HUh_RC8pO8Qb)4o@FndE2>Bo(>q6! zwCu-LK_+}SNn6wV0~$v3J>LIu_g5Goz1wN<}4A-3puA zUyr=RqPEiW#(oOh+l1PeBunii!9ONS0dXm}Q!$&*zY#uv6S~pyNA4t8O%6A2SQmd1 za)W=AWzN)=KTEOO&UCkJO#T&Lx2m!D(5Hp3INK)N&$xRD?SBC*p;5Fzzgz6=JI7My@?W1%O;nZFnzf_jR{#-_!g*n9J}%=8-=k+#+HV z+-+-NkeBtweeO0{;7*~ER8@{*PnOE6mtoPbc&ael=#@9Es`ko$Q=P^t*JLRnTAu$2 z{zppxS^WQwqV)0ezZUua`1$V&KNodEpJ*y&dDVuyZ62rLxYLg?g*Zw1!={P448QFP zbNb)k-05$-j_G8YZ$BVEGT}YSam!v7 zO1KRBpvLfU#L22w%RwG;hUbejQG9~i9@4SanKWF@qSv0#Q*McGV%4S~i8BZPnA(yg z=5hKVmn@DE*u`w1K%UQXw#{^gnEa@MufZTow{`!L5-3R+bNLhvVM=)g=X{NT`c&HR29v-??NB;M?-GHH9ueqjMJ zPw%}Ot#8j0IAB!8x@@B~W@gjO%p_`JLSgIaTqJ5DU0SDYQ(v?Oa6;bFyj>!7djHBl z);J$F&)F%WxSwHJlWMc$S)$k8i|j$##TaviQ(fUo8pk)xtS6pe0&gBI3ZG7Z082v? z`ijG>54qbf=k=|x_7$bSP>}R=QTmg1;6t5gJnUzF^Qvf;lX$yx^2KfACSDvKcSe5h zU;VtGlSrY(rpll_+@f);xQY~6ACkBVC+kDcjuclR+sqT;1PsE}x-jF32S#*#~uJEr5U|eA~aRCqItL3V3XSl-SJ_Wz>bNBdr)j;SDKi+#6 zj}^3~*zpE4t$2eB3R1v^&i4w#rx&!9XZ06`%d`7?pXaiY%yMF)DZg1Sg{SHCXf>jc+>ubsG@ z2++vJ-x3Ol+L9&Y$4M$?>b=O25$S(lLYh}kafmu)ks%00d13UeB_i8I7^DdAtrOEi{> zD3_XF)E?B6Bhye3`QgvG+iIp{73CfdHcQ**VHl~>pGxWTb2C%FydOc{y0Bf2=1ATC zwiJhCv6qIVZa+&{wQa9AZe2){4GX4B_lC}Y^rS_QOX3ae zEEp>J6FNhO@_^#nJ%g@NsJep4-W9&h8i-wU5J^KdX58 zT`2da({Q%^f(?6HnUq|J$r*v|eh#-qE+UIL7^3$a@>X)uzQ*Y7X+nnJxgC#A2LnL z2VXz2s6B&7>c2#~IV49`#dKK}`^4pOLir~~3Ay+?qMDUZia8q<$~~@lp}dllTTG#> z;9I1c4ifqCIuXioQ*s|pZJ9}_3)-6qG6~MW_4igm_(*z>Eu4{CNM6Y3?QByoc#+;K z9<(o7Qb&Km!%mn=JslxGchZ#9FVCcTwk~{2&Wj0cly-8)trwhWN@hizWLotnA$?gg z5&85g`P@)@!?oIUuX*0VqbGeEnn~LpP7fQ2gztUrpfrxdn$^G^@gKN=pPybR0^$y|jD;%?efNv$^-eV$(N-hi914i$w z@>3{W7~1pbN&U=BrFgxoDHWGRT5o&wq}T1s@-_mMOTL;Pi#)W&R%n&T}$N6$ld4%-iLwc^Ne+9NDdJF1@j3Cy^g@OgH~`^LZsR$(342DXL+CDwucB9pP0NnJTW!*an?d) z2U}GCOKoB%UZ^RtEqb5w4_f6CL6UQQ(;~SIl!0kdU% zKb7n6y_yVV#9J$3lkf~@+no;+OqtSqIQQOx6~QwZv_$kGI?o@H<3l3v zDZP+T@_Qne(4Q=;E3$$FGDY3VY1oqW)B+x5Q&n_+A^V%+`||>p-{^(Y1!STzT7O<3 z@|xJ6D^4`~^H-=ned_IAMd?*w^!}_?JCoIe$Lr58b`0sy>Ud?H{zbVqO23xlV{H2)o40DJu1%lry<60Tc^;gajY-RGc*C5K(U}t_WM{zbXs1-K z#WLq&7f2oCfSvavdma-jHgO$ePFX~C@NyuvMdI;qnkYBe61~XD%bZL_M>ND~Wn$4p$QO%pp2*ue_?u z)MNjko_U=IN7FNpac^g$T!aFNGSS<>%Bd<(^xSYl^^C~xycFvEkyOlr3rAEjYg8+| z9~ppGiCG4-Bi(sX#So`rL_(fc$z_OSHb(HIoDF^G0nsqGpfHB1rRO65wIHgNPP5fg zSlWk>hXi$WbL1fe(N;%~BCMz*GXUFCNnfQVYR(y3?uzQC|26jbn+t`XAIToSdXbPg zp8cnK?1=Ghjq2Ht67QCwDv)UZjb@J*ED`(ff)VULXZy0`m<{L*|JID3$$d0cUYvx} zaVe`Fc!A$>x5;L|THPIfQ1y9v!wat-9E`lXQ&wQdO=0C`fm^*0!X5rQoj>viZWLy} z<_h=V1Zq|DZPp~!Q+wiOv$no0ViRdmc&{tBC-}U`X+8BbDdF8_qT8(FUX9!YQF1D! zx1}lj=B*g1-rN2ZKmKpK-k}AbXP>q1Bt*yA_9+SbXG5*L;P^sSwmsYTY`&+rR%s4` zd-k}tvG}FAQwtyF^J;GqH)0~J_G?nOmC`%Hs|iUtI$ugCqc9;kl&}O#j9t*Lep!l` z8Wyc3r}x7)JjW6lh)GkFTKJ%I+cjyLE47e!{Txsyj#+l$9xB+|Lw{GlrH7gRLiPT= zfd`ss4>|7qIo8CVQq2_Uqe)#Nf$i*(WC=6uWV5ZB>OaKB6&VD>Wo($ifhmg%$^6Q~ zQA+ZQOJqNfxvt<=$8|1oxa{QyXZYeg7r{?0zn1ZW-OBFpHF-Q+!gpwJI9?%9K-Gu> zCwY`PF^g%`@RGHu_Y^vu`wG>P#iNB2wALlKHgTY1>nBIrmChT_nmK{pj}XQlT#6q? z@#g^w%2sGka%zk0N|uE>#tvDr|6}A&bE)CBLId%7{AQ(J-u(yc|QG3;$`$}qyhRh(X2-7vN_fcnCsUG=S zd%y8uho&LP+wLE4oImlXq zwI=ZQZL-&L$|qP8NKtz&&lOo$a;G-OxY*(!4rH;}plwSQw6tkL%j?Yeh`J{vK4M$$@c4*L^H88i zx2pJvAN)QRAMwn55ijW_*bi4>4~pbnd-g#Y0rT5Q~S{ zmn;4K&ymklWjh{X#>M8fPjJnQhxne=qc59nbN3sOXIPk5`S7?I5+N(@LTi?tD){?E z*5We!234_47c(m7CPATkYrmyo_<4?(5IuKM`pV^wPX-2a~qm zTOrgm?LB!|T8dGLh?Lc7N(N$SLz^UB^hGRkP;DOa zZ6-bR9~>usVsPE{6Tzg^7Fmbm8~Wu0R8QpfnbKIV5@^Z-3yN=%lEN1skfKF;ZexPO z#XF@%6N}d(0WpzHs9Tdi`wn$PzG>1DH@O_Q%Q)}`PfK`tWToU{QN7WkdigM_p&!R8 z-1}{0-K719ZLB_W2r+soat;qhwpd*u#)j1G^`Z{xRtLEk`Gk}vvC!LdRX18=E{O zrHxIV%9T7#RFO`hD`Tu>;Trikjyx?ozC6(c-$6-5{ywY$Q(MwRsMgY@EU{3+=eC7! zYgG7tD&phK60wL0--8mpVT;Ks&YTcd&62FXL{`~*dL7a(GtH+)5VITNpFi7r{v8Sv zS#CZr6Yj{{Gq|wOydVd>*+O=q^`-Z0aU(j1H=#pn)>Dx`n1VC(KqQPtq}yFIiBjLEUIq|QwRzA=6ssaZgtE5X6c)s z@?d1VwD1shV(XhG?nS;meRzT)`lef?BQQcbrEk7Ptw%0EmK30khZ74hMBiLFEI~}) zJk7m$af-zkME8a=ar?OA`8qQGS@C4c6{U|qp6pE3;h7M9O!0gleLj8b4WrDb+qm%& z=F^ktT*K$nb0IqVd>TVNIzMq9Z$ACjRw>&@oKN3={)qGGuR;5tG@o{ImIc8D7hIYg zOlHuO(MwbBtzcFfDFJ1ZDCC1ruUMrcU9Y#P%d%wTbT?S>9+ z5@G@+l90pO9-Ux;IP%$zQ`B( z?#yN3DtNZU5-IELuA5~f>>-{E;!F$1j=lO$QP#B%-I*2$M>Q9 z{91SzKT8;5Y<`xjGQSjg(&n*9tw^Z|^S}Q7#esiu;9ng07YF{ufq!w}UmW-s2mZx@ z56OWfO-D;T-slVJ8>{N; zYOMTbczq3?8U9dXqsKpElh40lMky2)hiYp*{v}OKLw*H4fna4rRb69db(5^wY1$HB z)8-PtC*bjK^aNJ=tD2fTH3e0{s--@Exxa2>T~&Sg<|a=-a|J#As-VvwSW0OM>V&+f zF=*x!$oG4e`+|j6g{s(OY5uvZ{OdjD?c$9d|0aK3&~vfJ(-d%51%kw_mQl)jPhq{M z0WwRfnyRYnf}0n6yj2uqiO=u%R0r!fL#oKP(X%9u8|D70#sHZI%7Rrv&+z*z>w@0p zzDBF;^_!)BRqN_KQVS`W(8~`5>ee?(#vhcLa&D?>`ruTWMxI5UhIJnQ7$5k@+O4wM zSL3;=zH(ituD+(Srp`a3vIbtxSnu<}MQPRP0e^Me&lz=%)%Bqo&y4kQlV3DnV^zKR zbGrRA(@Xm|*3>C6J4XpebydJqS=*#<*`k{l0wG#XuGCi5)q83(b>X6>l|xpqu4+^Q z+2r?atgG?p>wH14Ugim|Xp-Ay@}yqXSQERn1nL=jQ@sb&8>%*V^gzh((Su&3Nu=A? zSihNnJbIIeWMfdT3hFAm2HZ>+@8GrRdFEHe`zUcT5 zFFF5w-P2s{X;N*p3F+2rJb`L|oq1uhMP6H0?^{<@uS*;1p2m%JexDL>J>UsW4>e_` zd{DX|T%2A58?BU5-XSgN^Xu_kRm~fvyTli&uTjFFy1E|pNvoRW33#jgHF|&!8w%*P zNRd8yYGAS+X!2Co)z*1x^mUt6;;DgzqHnD7*Gbn^g-6sx^;P>lRR~oeSTldV*+hE1 zXc|8R5XOe8=1Q{_?D|S8d78;7NIn#59TKU}nmK)4T~L>9z@r)Zx)7399YlR8og>ed zQ+V`j$fNseM=X_Y=HO~n+IYkyuyC_4q>E0oQWHmU{PdeVy5DnEsE+QCr7u{ht8&zM zYO6x^O7Bx1xI~>o0s11`Pq7KsHP(2Vb;s12bg7q*rV0d0s{FxHPk?9h{r;-WDt)P^ z2^OM#b!w~H2a%+sqTOY%k>@kzzZA1+(d(Z1dO7kfxhnB8n{#T7aAs;iwT|dNNmoj5 z_chdAE#xI_V4Cjp*PyL+CAn3IBh4Vs)sTa5a7E*WMx;&;qM!AqDt}c2>da3^qP0Yp zMg8d02+0WsJq=CLh<*?JsB1Kp7Nnxd6qEC#m8yd%jTnGpe42(3RN>x`o3(Y#K~zyx zo~!Gt0)b3jcltJY7{4-LYCIJU4y$5_IH?kZ0*a@|w<4q~0(y--QktW<6bSW3F4BHF zeXhRF84UiRQ5VL*Jju$x0TWrW|FHaIfSTU6CFbpMB37nt7x7kt779vz*oJYwx&{F zxKN*-J!G_C+(p@wwvmpAn4u-9?X;kD$7_oO<|s8^m$dRXJiVDhYG;v_ui6q*zpVFQM~Q~1 z!s3$QT(vt)QGTTYkuWl%+YNi9M_rzCznMqK(7VM3uDzvcs6o=_r z()w!nix$BwfUsTVE49(IiXyk}3k9WNlqPMc+N`uLj1&`5yQr*q`Ee7NWVDal{!r$K zbd2duK7TN?y4uQ@dNxT%^Q#Jbn(OF|4DxiMI)qfy^jd})dF}$e#wS83-9Qw966vaH zBwR_RT%QqaXrhOSt?2V_zEI_W99d&?pg{!78W<#b14^SI)W8!AMUB;%E1uvc4^mg- z3o*e3^2+6f`K7wD7Ie|% z3=d++AY<13!b?`t;dmipB22%EC)%^#EgXjS_lt)cG@2`FwKr zdp6O}V}^mHgomW7qyFnL3j7{8j#9BTm{`tY{mN7EbZgXDjAY43s}y#0Pjt7!_a4d(}KtBlS^z%kPm6OJz;MrO-0Rt~hFmPb8>Z zEZn;0`SVxGe9xgw!OGeiM>^#31^u-^Zd&E(&et@%jW9|jJGwY&)mHV`4Bm+h!wHrBWOY(k+G^)2ExQZ8No!(lH-H&?=Rxs;#eL4o_nKV&lX)K7ZZ% zIwoP2GEEm5L3LGTx&npRHJhVDmo>p!s%BfFHbgE&eN~5;6{AV4r(=pwsfd)6av#Q0 zlT4gMYod=-pEdQV{8U9#vpF$lnDCoqYkl?gzD*)7^>s|V9B2tfDPJR-kE>8mVoj>- zqZWoPmUFSv}I`eQP6wz@* zCbVLHVi(d(nR+2pD4uHc>2bwW<*F=O;VLhzERihj-Yrrkr0j`l+#SS2Of6anb?JqH zn9MGufH_2lRZNpf%2EwjwwFms6`Ud4nx)t1RS?El7ja&PjQH!+(1&b_jG4JuHfuws z?#O4R+(b`9NQ1r%)x@6Wss`rOFvcTo*;J1$D2+p7*4M4`SNUa%1wFAB$e6a?VBWVR zj4H@j6s)VKxSl|!tyhE@@f_Br5k}*j)htZ?XhLPGM#Uu7c1$jon<-Gi32hU{ztM6S zg^L?~QX6Fx%b;UcwW@wo)n*Y?ENUhljcPnHZ&}S7u-Yk8m+mHfgBvyUBcD{;R}1T9 zm}P2JS8Yy@XdjxmMv=m3S~&2-**-9m1Y7NpYdeW47qG63K`vTVAG?63&aCc8C>MxTJ;9y zkHJZ%rblIRCBNSCzUt?mOHWawD8p9Jd^p7Krl3Fee9+gFu1_85ab}vzrjmLzgc=*F zn#?RS#Mczf*{o}fD44yucxe3BH*iMfWWvy^C{<@jCJ@bg#V~P z87ai{V0006h(jV!#bj7qV7PtIddkq|r#Zn>Gd{FzC@2Punhr8B)%rr@sca65Ny-Ie zIsr+ioD(##kLg^qXl%>olak6;^U>jMpSplK5sBBQ=FCf;!qFq{5u{x?MM$~{(?mvt zYTSxcLTaVRbIHn4@e9u$<`5UF#0X#nm1dQkOxohWi8@Twy`laba#qeYnf^zeKM;@% z{ikHCl&PJ+ro``S z!WzZ|$7qk)>&nNBqp`+;nBxVksZ z!^zAJC*wn=I>_|G$t%j2PS2Tq;i8nd@??uYSou#;n+jt-C!DV62P~lI8cm9;sHC`5 z%y4~qak*@Yj!eD8Tqr^mq?hHFaKEqrOWNsnPrrg>*dAz(tMZOa)A`u zlQw)WERzOVPEuY?RJWQ|2G~j_f6|E;m%0j;6`Hm`l~|5dC6xH5tlUhcY0CDkudfu& z;r$*>!D`CGNm`{(a-XQtJ&rdhq$Og%X=;oWx9^y{orQb zm;PkllW+JR>X{}|m;}eW%mBxpl`81R&Cf*nQ2v$a$SZzSe?Yhzrl4iz34!CKmz6IZVdoJ6!pMP5Yh5T{8H@qTUed7qLblwqu4}EIRy)L3n4x=p z_4sQl6`90vlKE;;sYVm7WNWeb5c#bx&Q$--Qvc3Y|IShW&NX@H^B2n^p1L%Tl|AGNyR^hH%c2mVXP z`RCUK)73A0o>lct-YSh%hbnD-RYL<`voo#L>dETfWNos#F{fMq32}ixz|#sVfV5#^qCp@tP$_c&d}#%=ySQ}^8nye-gdZ905p;}Wbqgslrc;G-QXF4{Y(QmS@t)8r{&eB$|)>c<( ztJi6(Yqiyl+G@YHI;gGQsI6|+LfQ&#m97^Q=9fEpdW}A$e+5G8(7BrF71l1b!UiY} zndRFhONkX;W=r%UwImZ=0Z)kZz|IZ&Fj7j3G%RL+gZb}t78K}o>dN$)bLN^qi3VX6 zOEV#MIoJ?t*5seqC4ciqqCpz##A?>!f5eht(eYUI=JmLQwauP@h9ljhoxLjSf>~1o z4SZ?P^0Zacqkr&Xl~{nnRmB-10^qfBrJDbiX(>}@)+igTu)v%|O=U6$KgHPMlJJvX zWf!|jaB0b}HER~hXU&>(*9R|HaL%eF1^MOqtF%oPhwTx!()>ML8FQ88MI{BUQYKDn z%FLWR=KI%}S_Mq|Pg)#PG46sA6j?LGW9P5M(wC41)0d{!9F@yXWBmXHBu_5Tt-CU@ zHDf!6-tJ6ZN>ST?!Z?qGJs!L#cj|>(lx!w2OGrvmSJA3S@lmD(wB))is z?##cmP~uApTxI#Jr4~>I2(7Xfg4W10uH{RMb@{dwxpJ#-g{7s%rF<(3sU>EuY(t%d zLTXDP*B1C#aSO_bipE`flT`jGay|zUCdX7;J2p+ClV0}#dhSJCadBzte#>mw&Sx? z3zL}@>Q9x6*&>-*@l>*quCkVq4Udcf%SUkuRq0~Ml)K2JF3oI_PguRIQR|h;I7!zo z*Bo}B5}r&oYtL%drfTQ1YH@)k-CR4jUjC_KSp&E#zX8*VWnI!Lt0waIJh9L5Uq-yA|r*cjA^Ono~()L zusuX^AqmRwZ}(1UdZfrz(33{fGMT#*qOvYfX|C}_+}WOK= zMDUb3=+V2)J3_?#V+6+#C)!5>8P!A-FMxyvVqBUUj+=x7n$v7i5_o9fP^f{1B%RBDGcZ;+VBvA9$XW`*iI>r186!6?Q)&|1M( z6DNm^C29dXT{N|JWx&^n3z8|7g9Up+KGk;;q-)h)mUA75j%~2R22Zo6dZPo%*duBo zHIBE;=R!EC98txgT(gSp6m~Nu5-}8)5XrD(YP1B0zm-sh*lOt)SbDphM!S@GL#?%5 zrNOv{&6+F&*lPi{^M4C{91ByXQAPPB%JETHKrJM|nB{nDiNLIDY#AY4n?cX2o}tYU zhH9qMnkG{gjp?dRd?ag4x|%nT0*{b#$<>&CW)-kW)P+crIA8Gr$qE_LC8^B%iT-Dl zveyg6xu){+v${E7lPI%z?VOFnaj1S)jf}#;{Ig9lWVISYohWz_|H+yaCW9x|Wk<-E zY#rHGOn?E)dMTRpn@meXYNFoFct9&|(X=+D6Y1I&jCAQ!a6t}rd6KyjUac-rNe3qg zf|(G})0q9@3sX<8^VMvIgJz6#{Ee7{RCzxLcfd4MkBbzj1$2_zPbOT$TBs~3EiB?Z z;!=W*DqNN^BEf}tW-U)C-B7|V{dH8Aei3!(n%+<~0@%SY3$#Uy&H4fMNCk)MS{jzDie@rxgW_K^6~cr8rf!{Q7z+ctE=tN3nE4+m9Vr zZADaWW-|A(tIVjg3V&^JQHh&yhXQR)iiWop(-h>sU7RmJUYRoWI*eY%tRz_Aa-_r8(&{&$Dmxp<$tBHoLue3tn&^#$F(Sf#l z*HTuhz;Tui(A1(S@n4ppUY9`9m`-CTmOmnkQe2=ziOc4y?P@l?+B z)K@jJoS|5}P-_UpJuP(O)5hpBlmyLD{aoSULX0mu1Yj-NEyO~=XXS{Bqt#MY7%UwV z&%HK3UMfvPRRy)K$sFZ53EK{MM}AOSJ&l19qtF_1tw3V+7KHjHUS*)oFe5yb`!4#= z@_Et$5%e5;R+v3U`tMRa0tAIF78XPk^JV6oME_T%B+gd<#wUw@{{Z?fRFmsCGz$|l zA1(ixA4C2o&9UV_>to2@q&c?yXMYU&n>5Fk|D2B@f0O30{G)o zbYtV+So0WOI!&89dr1EoDjVXt5NDEk7)9cN4#zFI$$_!(_oJ6#q?(!e&z(6!{bHdG zAF+00YoCu=hS6)MX>*3w?}N_27}92AX`c_5hgs^mL+!sr`Ts!S8cX>;VjilXrywrL z*5_2v!DpiN`5f4P+h3n8T32GZK;$HT`8#r&t#g@t@o%0vbBUbNv()E@7uKdw*{@Q#arBbU zt1PqsAF1Ra>wFTm)Q~xY#S?pHxLG3=L~qB>Tg!^(<{mbkvI$zY5Sn{I;v#Fz!#Jwh z@?mZ2Oo{EnWwon;tlC(|;Y4g;g9AFVW%E>x`K$!x zEwgtg%POk5o|9L=4f%7cg;iD-Wt~AbIL4g;BZ2O+vyqD|p{b=&-}mKQGL zH6U@9*F=j-0Fk*>)?NsOonF@6&7zo*!PFqO*;khBg9Oa7nG&Y^8{reHv}U~<KNt<##iUtnV^7bLc~Si(2bIvGS^wQwfEp-f_qMu-`)-W_K9; zQ`#euPTY#ClzI7zqQ!-!afMc7t;0CXMNkT6?Z0CWuq+$O;-+NEju2v%IK;?4&Ldkz zyqGOd7;J8?+BA|Skp)75ARO5$BXQDdSFkY0-div0l<797i`6kJiELI8mz3C%w~XM( zyvw%aEo<~Ckbup+%hIEqDO7=7GpvRr;(*9a$xsnBdzF2z6CEgTnR>n;kxOa`bzydt zrV8>>E2?JAWkFJ68xo&V3C#7ttmvZ!K3M>@o~6dtvZ309Cw<;iMFgar7YF5>w)!r#N=OVFML!%HD z#*4SwY-ov6EKorXRxnB0U47Qdo2a`vnMDP~k8m558vbr;PSh5=JXgyc<1ioF$%E{|hK+X^KJe2z2qNf98LE6_3$mqw zVukY1yJ&QCH_7HW1H#mGsJ8;?gp@W#_>#BGJnUmhvAejGTO*cNbv=0!{z#$J#$q|4 zOU_%NYedh0l*N9PNC60Is z(bVt&yMgOOZTWSH!&d>R($X@B5e#XaP-$x>iAtjo3)V-E+l)$RUY>bzz26sV3dol1 zMN(^RnMY3Ft7;$wOZ`QSSIZDiA+&?&I~DU{pOGZDOy-t3^GgdV+22^cqRfmFw;r?Z zmlqSaT&Yr(*>_Bgf8Mpcps>Qa9j6CXB;$G3_45iOe5Raw&yRhbVc*p>JBqsUy!q$N zi2cx_;WvrdYeO}}klVupdxj*yY#$N|WG1jfg-qi_O9iOKwXF(P`G*)P0Y?KpkJp(TXmKYpx~cZ#dOhHY1d8c7X&nkC=v^N2_3&$Fn0WQumlO^niywr^tjKa6W9R{FU0gJ}6bD#d@S{G}J;ftnZZ zld9ZU=h-xpV+yBKB5nB<7i zVEO1qU~7~K!=IlytH7LLjfqV3`B~YbP-20nrRF(8Jtkx*^*tH{>hc!%3GLF-6;L+oan?YUfsp+&r<~DWRaM5i{tOinQFK5h>4=y zj7y)xKB%Bs#<<(VzDDz(HM6XmElo8`IY?I?8_vmudf9}c&&T*TuUHPxuin7k=V}jj zDq47SRXqIp?404xkC?S8!tm#3&9UUiJhJ=)>N3LfIo9(f9=|!#9goED=d)+poEP8p z=p{EfIKuPuOkV(#HCqs7X64JaE}VsB1dMxvE9LY{C5|KYzv0hk&m8vL=9*x3+9Mj;#ZdFFiImlKXHC6({^Up^ASyQGl2+#=6&t*m|=YK}Y3}bp63r2W;&T^kP zfyeatNc^8Q_NPbUUv_q!ed&^=pbu8Cd$F<%l)===8I*;|LEE z#SfxC*7hHoNz&OTUNC7g=jjp%;JEFmQNs7gT}O>(un*h`cHV!~aC1!IUa(-6rrrGT zQRDDzO?wjD&8zOm?>%btgFC_Ud77p_deqnhehJ)>qiMVL9W@SuFM_jkq1VlI(Er#` z<27)><427JoCo!(CyyGpfCs?C;18c7zYFjwJbl!-6P*9dQG=~w+Kb>;(DCb|#sRSF z*`vn0oE7ulbCi1#?}z^_>`ruA*N`er)xZ~Uhey+v zf_>oS;JEdgb|qNj)3jT_Ztz|(ht~+b1l|c={UUU)(zJ)bEno!P59Yjd)X4K|S|iv6 zJ`QGa=HQfrln>kq>OuGjc7W?%hHoKF>jqoFDX$zgw2h<#o5AS<}va4LV>cIN@qdy9sOo&v~8tfJNZl*B~EY+7`+KzIz>f1M9EXv@iVWs4;P? zrj>v@z?;E?;GN*?8;}F=K5*Qhp?@QLioh0dE%+LE6Ii}Y)9wb3fLRgv*1~=80Qh6j zxn0wq11H=>%uO%(g6DzHfonm>7oh`g1%CwggZ<#zR?gOYgLF4@9jtFd&cOYk^APQ^ zL({f`w}M?@c{_4+nD*VNX*)nK_zKt!=DZ2tzk+;%8DAwo@XoLC9GG^Crri&=f_uRO z;A3FP*EMYrO#TM)@fWUx72vpUB46Ncu=FjS{}yt3|z-_^7;-=RIg6=2?OP1_E3fd37ae~)$q z4}&T1(qFz0|G`dh1z7$AO=|-u+)6s|N$~8yQP2P2%to-_KQ-;M@4?SbO)CboZi7D9 z0qzHzZYTfuxeu-e*ZxS;?f{hYz3bH4}fnc9W(Oor5#QcW{;-b1?~qYoOH}M_>iVu57s;k-%dVe>;-=ZPT32;PB~`md6XEg zPaHFH_Gy}D{4rw(cn{bQK6@JJ9)nKmF=Hn<7fgN}K1|>~*a;qZf_6Wh*Y`e&+<*tc z17P`6=;u!zGrGYZaQ4&auQQGr9pHTM-TnBkLGQ2WhZBz(Tb`p{;P~Gnr=NyD;M?G9 zVA`3~_jj}l*ahAPI-l3Hvpz%l!5T29N7G(QJ7(Mg_I;LezkohI>zJ_%)X%28Uoq{Z8CKJNd3TFU=P?2CVv4sFKSvj7y(}d*S^G= zc2kZS%?F`3^_X!4TmgDt*0f{bL2&)K)Z-QU57-4h2u^ub)BXasf@!=4Ig&;H20OFS z&*0jb$i;=njERfUAE1+TJ&URDWc2S6$|>m!jv13kpH@gcW`j$~XD;_$v^UssG56b(EDX@A?@+aV@BE{p4$ZyG_ViM0F!@-9s<+Aa?k;K!5nZ4=md9y72vI) z7wiI?!6(5E@F3U?_Ja{{!ZhgJ2YoOH%mck3yNR_{unFt}cYr*v^VGg_k$JS zVXzsLz}rr664(u9fqkGGOuHZcgHCV@=mmFz9pD{c7q|zEfCs?j2jB;o1CCE8A5aHd z!3AI^SOWHdoMfi;fm=bx9@-Ohf_H+=;FDknco6Ic`@sk};XKOqAoT}xz&y|kt_EAd zCa??K0rr5q!Q_XiKj;AWgB9Rmuo=|Or(ED9up7(*`#?9C_AvDao!}PG3+@Cvz$d{7 z*bnCHr92tr53UA#z#X9D5%L9_!NXuTIB7a`AB8^X1-F1*;2mJ{KKKY$fa5bM7q|fI z1M5L&H+%v+z$d{7*bnABM*cI%A6yOgfIC3P=y9+;40FyYZtzb9U1xCOp!DQme4}wncU9bzx zxSVnjmtF&QfV;p5cqf>%px@XFwt_uiH+UFKTi9=CtN0COfPG*An6n7E09(OMFaq|2 z$rnI2ROy#>fC=vYcQuK=C!rIK=k z3&03i54O6jv(Fd0^Uho(H{P5Nrlp!47a2*a_YVc7uDt9-T#i<_@Vnv>IwFI8~F_I{CAK8(D^<3caZYj+Hc$kcKwj{4AEY< zA(x=@4*0r}^8A=`g55u*ew#@DGx!X8!E&%0YyvCpLf?VS-~rHaH|1~UH<$;u{x|&> zOuGkuf!$s3Wi#dd1^I(rd&vK4%DIu8VP&~9KW*aUWhEnqj; z0Y<<(z@F#m7hu|NdG30i11EvazeB!2?+cV~E6*LETwvcH>93&oAbR5l%JnMs0Fz&5 z9KVs@z0@1*c>_JX4LW~;?}Bf`_ZILSg;1=kB6@vPJaVr=( zXTaze{K9~7_rHTv28=ttLAy-lcL(`QBmZww4$uucG6syjU_}=6z6E9v7`K2OU>BG? zi#*<9730<$$qPaP5FG{(GdaqJCh-I-UbttI7BKtKB+`8LzuVC!b+$nR_5!)=s*3;V8aho9GRAMCrHa{q{O-2lJ9t{Vr8 zo;xTHco=NmHejUv7j$nXKd=YP_%ZjvtzaLR^%I`oL4ClAcFK7t<@yr*1tVbhPoeXb z0pq!!QJ-4|4Ch_k|2lilz#ecX*!=GU#(iMLx1o18zjtvRbp9Xs_urHkoCJ1&IbiE| zkzcU+dz3?d|A73!2zUUjxD~$LL%nZDZo#xW*xLp=eoXsyQBSY}?EDFG0ruPl-CvOY z9^?{CyO(}(FX?|tyMxJl=!d_g9N?Dw`28UHfSsV@SEPT4egL+Dre1; zFV9D)KiCRtkMJBg5$pqZfyuq_1#AX09_9BN14a|rItV{NN7A6NdLML87&JP;=9EEW ze>eOXKWI1~Bi$zljl03_GY5@Z9;Y7Q9iZd0gNFVDM3p zC4)v6=)H*Ne@i)vp$j&bQ2yWX`x5F0I!gzQ17J=$be{(+294Liib~4gLwRc`KiIVa z{=ERdt{ODt*=#+@P@obUsf#Ug3TZ z^#D6xpdMh)@2US{$_Xw2lm9Silz?eq4VVKqgB9Qo&Jg^Te2a^v_e=rT)0y@B*U=DaI=mfjK3h+tL3mycU!GZ$v2P?o1 zupaCLw}M^ZEnqj;3HE^Zfe~;&*ayA_CjW8J=mXQh@rC3M>R=8y8+3wBumW5Sdch{J z8N3^81-rox@Br8e9s#?+aZAY`Oapts3@`%bfqh^(nEWF32h+eUpaa|q=76_?UT_cC z3HE?p;9;;E)RsXPoCroh2iONL0Fz&$9ljC@F3U)YQ>cA zHTVoV!3AI|*bMf7w}6h<$ro$}p9H(XtP<$`iTpq>*aUWgJHg~X)2^TsyyFt+fCoWu z1pbu57tjf|_6{0r%eW720Ud9U9&84m1iQhSmD~qcUjZKuQO_#s`zG~SNBzP6M(%?< zuZP}WXvZ74{}$!nMm|U2+jh$NHvDJ>-$8!Ct^WujdFlF@1wUsM<4v% z!F_OdJLUL0?G1Jw9W*9>ufm@b4Wkvz8D|)Kz{p94(FgXNVi-AJIC27ZGTKIlF~ zx+dzem-+<_BkK{aZ>BzA(GxG=SrG_Qzi&Z;WL}h{+n1M{lDzJ4|G(;^}s*--kZ%P8C&fRMc2e z5jO1abLYLc`}XYywDxz-_jk@O=Y%}&+&?pS?%cU^XWqOL9uj546BVPn$1jLAs2}t? z=CE(}IS{DfJAuEGu3!&X0N#(ttLL{4c(c%ZKZ3&$Qd6(mkuD0rmhfB;Ob1{qd7cu2 zp&m6k1ltH~QV7-oY+?xJ(B8TbtOD4C5Ud}t@gdkCVB8y*eYNHL$I~L283Yk!1{+^TY*)DU@=Rnej!*Tu)ZN!6|g=bST(R@2sR#A zWe7GISVaid0IWO&TL7#q1X~8I6j*}(lOM5{)xcsQSQ{`W1lt5mg<#u&r55D!E43L@ zAy^XF))1^eu#OO{2H2JmYyz;&A=ngPn?kS|z}iEwg}^q3V9SAR2*Fx_tq;N018WPx zHUnE5f~A113Bk%7&Y^^0eSo!uU;}`y4#CC%TNQ%U0b3b@)dOn|!Dazl9)c|fwk!l| z2DTK~o?-<2RPfvC@jF-mV-jW4t#OGMk76V3lu3Jn_*;RAehT52;b^3Pg7|%aNq-l@ zA4HkhTM&O7FtOi4_){p8@e{H@!tvZW#XYGBP>;MY;s8p5v!*471n6J?u1_)CFxbb;SOnR9inKGy>)19or$ zd+4C7PYB;(!l~*4KS^122){qD+Ai>GDVrF=p9pM97x)d7%?RNy0M^t6elulDL-?)0 zn!CVnr>r%EzZF3@3;ZRN zRfq6b0;}x;zm2kqA^c6irgVX?iqU@vzZ_Uo7x-0_Ee+vU18eRAzmBrj5Pm(dwgUJP zZ^=*Ox3yzTG*-0e)FUFQw;z-BqpT0V!fz~popl7M!xCjPEkdyAc6B28!;(Zrb)sx= zA~rbAd=AbyemD8}D|U}RL-;QA_|MxtzQkgEeEjovkG~20Y9D{>?(xfsRVMoQN9`WJ z8vGePe)rwu*Mq;*$N%uY-Re_fu~r{{-R|+%gTKkgU$J|9N8*=jef{qqzd!hWeEjov zk3SLoY9D{>?(roSo9N>owR`+l@Mrk=-FJ__75t?>{)d0rt^WHEv$Xp7>voSn4*X3% z{)*k>ODyJG=j(s>_$$Hh;ec{DnoaB#)VnxnU z;I)f(q`xC@`e(ZJvl3}E)iQDi5YtSd{1}ltD@U%;+ep#d@Wh~BB6es%Z6lZ?q~247 zez8Y?`j?|`hkh0G4V>v7x)1V?gx=L*w`lb|d#+P6M>j@?O)s)mADOfk9I4L#|IVM^ zmyit^98c25#l%cgXKznGi9I_p?4&eWHoa)3)fkBBw)bhI? zx*5QJjBPmoa&eH-=QMAgjb;KYFGMWYfej{OU}Br%{mQH8yO zgZ;QxK9ue<_m!?h&XSvUq@NNYX1p>IjJ;YHWem0^u4*W52e9qCK34Y9|0*4T{f zA-S@v6SZQQ1E@_%^60p+!+v{^gSur$`chBsbjzy45Gi%r+CrSQjq+99Xlv4MEA^ji z4=d2t5s7xkt}iMmQB2c}Pl?6GaXx(q|9AHG{fB9<)c1)@dl}C%J|z~rdhYi05W(-H z4vAVbKBa66^{@Ezj`RgQyW`0Er7RSspQb@Kjj}hHkDPyWQFr=eX0%%R>DWZGW5=z6 z{Uo86>8A;MB5&o6^kbg9nO3HsewV5D@VJqmLjG!Sjr`wzb@|e!TJme-@8@i^*z8F; zJdN#{{x@y%Y_G$y7m4lVTL9MN>S-xFTf6T_-y-wm_k5oC=%76to~oMKlY;Ny#dnT_E(Y%z!g~ivVC=z}X*bf%CXZQ9d42hg^gl&MZ&1z{3G;meorL)= zhps<-C12+pEp^WFm2tOL>RYiR9Th$8@78y&H9Ao-N5*}l%w;oW+)u}zmPG6`F{LW} zG;PU@_l$ljO6f;z`dn#4H<7g@GCev|H#&3dxim!jdLTHZ4|sk3k=u@WGWU4>^567z z6Fh5rb9R<_)%lmtvsQSHl<^$$A0rYSw!I}@u&<5%B&p{ncy32;-9&GuuRH8uU-tti zhW}{znm6X9ud_a`;Fuo({z`w$Z*lur=47#(ag_BxjPv_4t~V6!-zdrt_irO~H^cMq z@NnLAc?RufIpvf4d3^uz#rbZ6u6&-y_oaNk4!T}?q{sKMFV1%$bTfUv>+<=JF zxqM5Bc_s|-_@)cjw-DcI=r;R&OY`|oqPp-bW@nEcrHINn8GKX6J1?MNTV z{N+f01%DIZ7qg1_>fn$-Is%1sQEjY+aT%*^X2 zCYCt%(TFM#f0_1-f#))K4&oh>?@D`$^Ld(>E*mS1pt;tHf-Hx|rHOvZ+W%N#W((H60ttj*HzZcJJeKP}&|#E_HlZ-f8&S8q?Bz_atGd&I7C z<}IniR&bmj(srrC72xc;4qKSwy>au!>M(9k?8C3aiG}Mh6`Zm<-gS{Wd^@KO*}2-& zLrcVd;mg)x1N`^!>+t!X(L+m)9wwoO6ga6fccgEVI=ljou~XKe-uyi#6RQt*ZJ<43 zZ_mb6#Mha);aKUD0x?|1zf3A;U2>JzFY~27?K$z5^h+Z+l@oWQdx<~0z^zYL{;aLo zzPx~K4BM4$Y=QsHejSdHIsoF6^v=jxG?eSh{O`x zJ{w0@pzXurKPm{%=wuqQCQ_e)GNwmJeU{|JB{EKzfFtj^?IE$^;eLIxF&6P#?pm(N zv0G3~0bgRqsqowi&jsi1NWUe1Jl*W|`*B^jkr?aSh1-~k7i;!*`}c16JKd!%xiMB5 z@NN6kzr63vvcvoctTc&l9IEPpv<&W?;B0^CNgQN%rqTcoTrF z3c;oTYXycoHa|i;BZ>bD!4?8r9fBuoN(9ZxB{? zfZN_6tPijyA-n;=7KdPCfGrHc>VPc>!RmoEgbQ%KZ`Ds{@%sd5_ZMmiVv0%7N7Z3-&o*Tvz=MZAy^}@iV$oGu<{UWC9tv(Yz?r|5Nso`SP0eu%n8AqgJ^UJRsk$^O|EV9 z1GX&$8w6}?2sRE_M*t?dhe^Qtq5ETaR%8RuBXJ_m$Jjq*wUm)QGd}{8_nB7*cnD11 zZC(WoS7CkxChs|~48i1`=jISh-hW;mg2}tk%YX%KMBa;D8iL6?(n~@xd0%>Q2qy1N zFATxtJ?aG^n7mWn6o83-+?)0c#DxHUVo1!L|Vt{RU}E4|eq%ge8HAeuJ?7z(l`6SPd}IZxA*CnCLeMn*vPq z8-&dOChZHt76KFf5*C;r(a~~`AAfSrImkLp-Vg8hAn(UYnaRI;IkM#BOsc6mZjIwV zoRAomh#lwV^y&$sPj2Eq3&@=J?liQL?oOagS&Jv>kfrcFUid=kt?jVj>CSKbRLh9R zpIl3^;Man`{!8FDfbTG;eo_9-;P?L$`0^h6#4mv_@3}Ad68Q2SeCrp)m$i<(C%-iZ zKf6b9g4&mmkfuL`Ib}h6&^=RkFS~Yhcri%1f&Nk9;RQ(ST#c##e-1+mD z1?a2YeWjd>Ve1_3v>4H@=2`nQkAONM2}qLiVM^C&}Fia@WF71dsJhqvSume62M! zW9&6-WO+GTH*dZGx+?Bm*dTOS{-YB~YedGGkpU1Lwt%|{+^-8RKLT41tc*Jtd{`B* z&AIg+}gXkUJf|D2@2gT4?Hd|6>r(zRoa3H3@hn z_dEPd;9*^`%;VI?2$}GN#{zJtz(exk!ecxI0$&b%VF)gIZUx=~{1U+r^Jdf2Q|_4f z@%|%y2&&v6Q9=LyCPQb&m&vD#LOi`V{l(K%}=2A(K8fwoIoC1qp$veDTxrY|*svIfeA3Eej- zGiLznMV)5fYCPr5e)&GR<-*%Jf_*Z|O$=;ke`;u@EJ>MjReqVs9Z1`L;w3_zs@a_SZt|Zc6zoGt%AQa7s2K4T4v6+aOZy{@FZ3VIU{j*{}TANT9t zMp-rOGULqjrC4&T)~D^Dd;#UZ5Z-S28A2=Lq4X&H1Z5{nneh>3f62r;=VXS%i1=y# z$N;T|-)iW@-#l))be=EH?vad^eM6JC8O5IEEd?_Itlq`vG{I{Dx|_#yVBdqY2-Zlq z3Mio_{uBS4m(a9ABl`X_G~1vVgATt8O+SP!`w}#wn>uJ(@q2R4J1|d?UkvVjkCdF& z2u^m$L^U!|Rg*g(aXvzL$sJkSxZ~#1TwZ1`)8xmpbKcn9@!AHjf!uHNRe6a$t|GP) zdp6_ztZfju)cF({Z@tbyG&cvo`2(8oLn?9$j$ zc28iK*rn__uI;KdV<4A1Q`_M62dU@iOe_}SW%d`U6Lt1@t5Ak=u&L>~T3E!0Rn)UP z(*Gj1b2ePRi~1RTSIZvz#NFsyVzI-fZ%^a)m2)FJLwoFEd!;zRNzZZj6VI;Sl`KU~ zTqXuww(3XuEXs#?<=Jzm_5So?V&`$-HG}uT7t_a@UFk#gTS1&s`vQA7qL23$dpXkV z8JcW=c{;AOAB`A460$yciGC#(QyX@qKNo&C!tYqIEvCr4y*hg>YRxgLQA{K`09eU5 zsreT1F7b@!S$?G6ZOB>pFJgI-^IgB**zjC?RL1`qpJmQUh@EjRWI+Du3+9F-{F42c z8!pGIJQv>U5#hX|~j!ba`^qn<)jxPRolQ%-M?;usEScwjqZxY=WyfZ_LhWk>o@n|gkB zo!9Pc?mpCR&L&0d-jcf?n&-nZdu+|{T-Lzdr&Q5-1fHRN6tRoCZ?ismm3!5AmLGx1 z-Hq+QaDnDWV6%Xwfcg0zfh`6WYtMx>11kr%k4tL!wE{~5LuKZN;ionL8w2btftWRc ziDlf_9u;}o9uapHKg^GT%9uoE{1jQYA<4wTIUf+?vQ}E1L60=^FW#0sMwZiCNJy}k18A0U&aH|BD zT;oU-Bk;b!mjlPubHQw)>^R_AAK z+tYgq{*B;!=SPh^{@DO8V^6awGyN7=lMT-Fo0&%|;n5$Ot9^cFx%~WdDrJ9l(ON7Gv>~3c#ezmB3# z3tV_Dj~&!~4e%}Ei&k8-`!PveF}bia%A94WCjMFU`|T!%cP@ZuD6U8%cPsT7^k&dU z5?)U(Nt9K)IeGCvjqsTa&I3}nZ~JvKb57wLOPzhFR4w0m4>NvpBm7RKUSc!OCs*hB z$pOF>G0B+F(v7>)*UN zvLRxBzpySdFY1E7o{S1A~@J=@XWJ0drZ`0O${Z> zkRox|R_JHE?ajq!xb%6xo=IYQbOh4v1F3R;qz9iQzk?W@3#qTzpL4WV-@rM!3g8`7 zy8Io^%7p320{RO?5!-;+cKM8Cc_{KkhFAZ6mZBpgj;>2J~oX{hXuqdWhEZTWg?Q%RQGSmt##d zvAft>JMjMRaUZAfH1PnoZcjyxk_{LgujYaHjuZ5#gWt06vtHY>BmGy2-RMithC;Ed z7aP=C_ZEzcy*YdWyas&eo|6$?dHu>@nI5&Cr9~V|XD)Wld1QP_2!gH1m|PCOz8&mU zdiv>tA7_Gd_zjQ$F$D4WrQo;b@}22pbNMm88y&O0VD6`W4?rCZC`QD^X!>$MKU3vl zaj}OnOhjv_-#p>RkHG4HRsSa!Ru8P@uX7O=IzdKgMKek?m0djMw97tSx{d;O91 zLD@0w_lLcXjxFGW+%xQT@LT;`?!-ria|HZC@uS$_3~=f{@y^-yaAh{i`w(8<*1iJ? zUhpuCsM33M-+zEM_Suf~>$Knb*Oi_PQ(y1>4c~_C`y+|IWJfX%47oCwH4Y*UqCd>o zG`1=^4>zGEx?E2A!fo6M&9nRntYr}P8h}aL)&uJRcAnR-yRhNo5`*l03+v47)8t_M z#dgl1z*l}mNBx1d0K3uSA3X19U6@f%wG1xN55W~9!tK*3(Dq5~NIxsIW*uE91~oo< zWTMHk`xUNS=KM&1DzviG^PfMx!sBUd#N?mMnH00e@N9%R^lIUmpJg%U_>)v?7Cbjj z-JT|Op`3%^8Ja@}0Us~~|Cip8zS(O>;juU>(O_Ar%#p3kco`KJ9@F5lOr`#79uix$ zz@ywsr5Vb`pUZ*%3LZB|{eYh&aMzYbON=WtTPbS@(bNGi9ZG$G%bD(g?=$m#-dG!C zj}$fLFAs)Gw-+3PV&hXp#s%BmvooY60x1vUf93w9m3At9bTp?9h5hdo`v^Izm>+YD zh>NU^@EVRRX|qa9$&pnDC`I|KV(#9|ZEqo2BNDZz7L-&Iw|-u*0Be$QT33xvDM_Ul z@Epo#PI5;F)6hsWQil33T8Xchd+E18x07e*j=4eK*G2uTHPi!353Tv}^+|Y4fZuWF zyLXW|XTh(4?~^;Erp8n5`(tLl;vANDo)+Kb<(sV2P4qR&pRU}vUhbLN2rYj+d;6o9 zn;OLLM1WYJ`xkT3jpJC_LhCAX^5H$?#YsJj@yf1oxdE zA}jGSMvt=l;_8tT_u?Php>w$BS?VG`0^2H;1Xd~legqa9jy=HNhY=>JN?_Z79pTwW z-WYf1$F|VyYGMhYp8)-4fSudkHDINZ34zrV}3+VE3mTe zyOq;rJ)IFSDcdc5m-VcMz61JTJ;wt}0rTtG7ZHLpC&cOzP$Gn-8DH|Xl??; z-2+_+?u0Lh+X`;e7r+($b%5InZg9Qr)KIWTF02CBz!0n-FuB_s7UoCz4Fa|@gf|XY z2QVp@ANe~8*p>iH#`rW~n}xQ3eFfsLheGx-ByJrG2(_^^aznHvSq z_f`U11&owp$mjgT_c&&*tp=|RJkkm*a%DeG-duJ0)={>VGL|9cC&|C{z><5X(%S`c zzS-Y&Z7 zF_vt!*%#Dp(3S3!N;4C9xo+8F`-!_O8WKO=T^3cFd9=@H`UBkYf@@+4(zN8o$I?ov zS2g9$l*7{e2y8sCEx>~HpA2j>u$}?D24Gu5cng4a0NXc!w+vVcSi*x5qN&xuwgJ=L z_zAY1S#Y|RT){A`J(w(@!=--Ppj}&$_4fiRWe}|awx=gUU`b%>f%)qaiLLqrYX>$# z@J6$dV2w82CuQ=Tfj&LC$2n8R5fi#rcul5kDrLUC3akOx3}Ak{1hxQJ12Es8CV?#j z)(C7N&u$-#6~WAyGVzTv{MUjL>y>hIo}fv6+JPf;Yc;Xd&U3xod@p!`9o%!0c}niS+}t~r zexGM&=Ota)Yn`mE1^jeOSK~7V4-h=o?N@0=``ANEVDiyMETT8?hwZwoK-IW zU95e~dnqiw3j|HorcF)o`>ikUS0XQWkFJ(_tOTe3zNz%DjShX8*)?kD{pJz8`e6S> z0_XflEt6M|4O8k+AwlirWv_@vDT_3{vvF{B#C0g{?>#4 zeP4%>Q z+cWPxVeYDi^5z3m>AgfZzjpZ+wga=yo|EgVp!lk_qK?Ag7ioJ;>E;|N!n3HN8F8E@iWf$>B!~% zp^zQ)2dDm!RQf`Z`)_d2q1RTk{xx!s6}e_Fca*%yG`O(bQNA6_g6EaUl{n40wXodf z;7seAGI=uRvM%J(w#<9|$o*|$xiSSC`;!G=J#v38a%&6A?E_BhVX5>T(%$|#a?QHP ztoKcO&3a$@)~+ioH?!WK3eQQ%JzM1NxVT{dE(Ryn&uj0i;1tsHmuznbJWux9dz;A3 z@85Fbnd+mw_FkSN_rGrMBzTVU+k1TB_R9BorhPq?{=0=vzU9j`cPDgd&!_E1&+YIW zfLvqGw#dzIuYC7s{Wm>5zkSjFM9<^lS?TNfZg>`uE8iEYJlfOql{s?%YdyEYv&`4? zsUkPuZ^(Cy#trcF{5@apSJQLNXy)RddwP!Nw>OEMODwkhJE`<{#pXY3@L~$q6&#E| znFv9AcO}WAHQ=1iv)sob%MJ;crECCYrQgjjlR07yylW}DlxOFf26Mh3m_yB`2!|Vg zF0t61)K?4s&%u|&_1+x?B5NtKn&4;RK@)$TXkwTFl(kT{fU?_pmN7Y3&b7{wyK5Sq z5t%y%tOgSVX7X>uXrQN{jSckHC^64#}po;L|Cp5mhWAiPd%scf2U6B*^o2mR0CfI z&J@12^s3-gyK;kZqsbMSxN$f~I&R2Me-d#dq3wXrOk|18IK?8XHb*DY#`5FHcOWZP z1kU@c>au>aZnO|8{xP8r(R4aA9D%Ck|I-$CHFBZmHvcBr>P5>yoc+}spKTBtC5+X zf+dnn!lM>`2l)CuR%GU$mk}IwDlsfFM`J_onJ2l@W<=cH&oX07aQcALKE|_4GyX=h zu$t&D5t&7$?yHeC=Gc_k6L8-7{Vw{+oCB>Uw6vb1^7&!#$hgQXrSq>qU$Es|0sKO- z=s@6A;7mP^+;;?=+g+J+1u-Hn zK5YTKrks#Uzr(Ze3hpPHb?qolZk*wIn#`&mJF5h}4ca~@W_=p#J^J$$NiCT24$8+- zK16t%zI4mw0F2O=;p}JZqP&Xom0grqL0?PxCdz;2@t-MokeRa}zs7-$GE0MDa_EM& zXbm!jW(G9LajEog^JuIg5RLG1yBQ*(Sq07HFG;fnnpMzznYtw>ke`5t;p?q+OnW%L z#@jDm+Ie_>$@`Fl|siHJ6G&0ZyuJVy;)v`&q`#@$xMb<5%n}<|J4iKdIl!s zTI$vWPTy0>doiY+$H6hWG3OVvy2-};!)1P5D`)1$B&vqzp5V@`H8#O>^-sKWztcr- z?)=&hxiR9BvI*Y0_#AM8u}Q6M;X6Fb8yxpzv76y}u;{Z|cxKnw2|31>hWR1|(!_(+z58*i_6O;8v&T`88o$K}C_Nkt&(ieeqjp06& zwrzrLJ>N4NDLP#booSoN(T<`j*PuSHZ8fHC<-|n2{I;zEpL+QDgDQ!a&P=7pitR4- z>yXVKRHIu?e`cHJ<&h>qw`HQ&wo8R4eGs@aWftXaKV~f;bN_iR-(B2CV$L70u<3Vf zA+-C3S9as7jqtq9mwB?tY|e?R27sqdq3`)tV^3+%cfiT&W<;WnmUx;O8MipC<^6|M zdj+Hep{<9%v4L*Fzs~4M?07t7ZSY+zI{*9v&yKsiUq$9-`(?4?{PtvW1k2%hnBSgP z;Tf8rlgOQLCjORh3EfM3+_}bD#AH+xA8-COXOXwUXZ_Do>HkRGZuIL`D39gkYML$k zO{p7BBBbj~d{;A`F?N<0!(K0SYtD=BCWABK7pZibsyP?s$jzQ_Gh^Gxg5T;NZ#VDbIo+ilO*uLf|JDf3p;zSu zT}x)yPIzW(M}E4U6{WO6zL$F(a=yj0Gfm`7$>|I6wGxYM`%Nl+vEbB!lQWN4XJ&i| zBc}qK2Jox=x(^hd?mRMpvc;4QJU^9wNO<+l;YB>meXJRGB%4Uye~3?n?*?dhp6Tgi zXMKh*;fUHw*;4pEC1c`U%CLr@ZDNStJ%MIUKa`;#HqO!U`h1``gCzVV7P}qUGX9)q zkxgF*jCLUKso-=>b*bQc3+}D znvgl+(uCIk<}VzH+81lMj$@7LWhg&h%SC_buqM{f9@$-pwnEcUi9t z0)N$osq|5TzmJbkyfWP$MZB7cQN=bUgS#5s?+Wh6zs{@ES&0fxdz#}HrY?)YUkm=> zg1^qkhqpK1kN1ZG?c5?tWb+Wa=Wg+rVvyx51shYur9R#AbZlA9al@ zdangHhWx_ml`U(6}1ET!2a5}WJyBgFh@ zd-^h|^H=w*b$6j{Wqp$;$gm)8sV#txc za@N8p_cb~rYb7`<`OdV_Tl0S}D+QnRKlEf>oG(l4EO{pW06S}w`kd{`^8AQzXB^L# zbn?yhCdNja&`m2yS5V#(==!qeG4f6>NLNta2I$(LGxEM(kglM- zva_fw>trJ@UXZS!yc+1r&hzNrI$c>{q^4)9z+~CO-V%=KidKBW^n%|xM#Sy zGv$s9lP{9D1SCs@VCLC@;3Ov^13R7=0srgZXZ;5DpP8ozS*`dDAb4zdp2puw-Rqz~ zWPLd&TaHD$lEsQV@7=J~elorK;xj%@Ijg05|Z$ve-0U&-m- zI|4t3U&ybCo|nl+G2`TI(erR{sC{lcH^tf-R5SC5(6vLi3VZ*6XXj9#E*Ov0S$78M zuv?+4I0wJUw|H+Cd6rLS)*{5G)7j^uQ7;7vhsMR8YoXixtDWgLgzojp!G6fbwTAe^ zOh>qScj=p;Us&(aw|qHzsdpRneP^c9uS`T_Owf3cCW~!LtXmVyf>%O}?1wIRrW9+^{t~U>7MwBI&M`JPon+i;Phq)cTpmw~#@@Sd&dKD^ zgl7^q11{h$8sYg~4$n}|#yk4~&tZjmnr}%6&wAMO`R&g1^}=&~KF>V;z_Y0^PZJvr zg6A68O!@szH@9@Z%X6-L$7POu2f~X#jeS}(-GP@eOmh}X>Q#zb`^`zEKjPV0m-h>frgo$=>;{v*0O1B(Mi9K4S(rE2;Y`k$a*mH!n7q zbCs;}!*i_Aw?f~a^M-#G`h#~t|HFKG8B-3!us`h{EYF`|M8PqY{4vvwd%TP$nK9KL z{2$Y%9)iCPeD8f?bL8 z2*G9mTM~ecfwmMkKaFwwoQ&IpT-m|#la1NEylA`K#U&l?e(D7HjXBB7Pj124B-(TC z_f3jS(ubSTz4%ynp5>YvUg7rN3l_Uv3ZL@1sr17R^;!;}(74Xl%Nv7jQTt}ejpzH5 zOm2J|Jln^4cgsI3b!&?T_v1xwC1J^gD^uwsMehCJgw`;5a|%4a zfllt@+4-l)ZOD-;bJzlK%CGi({C#eFy}6#1seD(d*|z?KW6tCOYs~)1TId>meP1EG zn{7X+64_Iyl7E5k4|sNU%@$uk*CM-&xMu@6=ZX!Slq1`l_orB-QM00nGb*90k$4H& zNAT=?Lu6<7Zp5}GQQmP4XRL&8FPCr7wz9f3>p{*8+Va|Mfi84ord9CUN&i)eyiH8{ z5QO`0BRB)EO{F(VoVEs>klh%W*ob#l#q2>`FKf_U*iF?GrS3!S0Fir@$X${*4~+w- zej49h7yo`?7jp5VnRAK_wtaSC|1K`a#GK3ES-U8eo+mtioWs-1Lm~Z{eDvd8G$jeo zZSXsUb{sA3I8@q^n~#=0t7M5i`G!>bD$!p&M`m{K!06A6J2{VH{6YQ_-hCf`GW<55 z=)Eic0)c5rW-T(Cz*)G2efcOd9{|VnS)qL+Z>%q|>=z5akeAta-2~5N$Q>_jT`qE$ z@y30t17b>)dJ6LCu~puN#q`2+MCz6o4}d)An%1p-)eA-O@(wE+{+;zeOLTIz9DD) z_<(xiYQJxvmGJ)|;Aki9cNkZ8!K=NxS9> z|Ew<;KfQ|bDUWz_#QBtCH(}ngd6;EA#LN*L(7lPi4Bz8(`AQ#^vCR_u-Olv4#2zQP zbuR3uy%?auabM=n_n9U(m3e(4JX@)&Im>vA%QJ7k1^VexwjXWl{`@@eka!Y4%i(jX zU-x3EJMlyym=v4|e`Gwhq|CYM%p6DNN#Y3!bY;wKh0jWG4wim-YU1wZbxDcKu2=zc zaP!aA#8Mv}@9i~R3ct|$y+UMCuPKkRe&pG$m)z`1yv?t~V)c~W%(F8V`e6K7D<2;8 z0#K|^c&!BgHecS?MV`B7CcN4x+W@Z>!fW5%^HRiL4L&b`+RcObsq@MEO2&JcRAwH3Qnoi{W@grTJNJ!qjgF_y}Pki zp9_`h;p_cO_!ZFmdg@iTCS~?KU7e24i7k_~dmA{7;2g`di*r&Aj_AD!S*yU2d;Ofw zGj~z<5$^q!)SaUp1#HHBN30!wv&VXRe;IxS>fSURef@pcbzcci2RL2TUB=6p-*U!h zs<-yL09jp)moC<^jnGfNaHl(VN9NFHbIr02=J;gJcw-h8`D>xy2>mLao!&Y0CiiCc zxOTCQF8v+jhrEQLf4}Za)nEE<4D^-gXi60MkGS;ntWlXeE3+}GzfOzD)g1-;Zj|x& zi{baR-+wmquR%MzW0+K(H9MwbIZcNhVrI1kN+!_hird${AWSG zkI(jPYUq*TJKU3+arT&Xt{$310>=@i%HLuojWHo#Y)AeN?@Og90_Vj3YI=>M) z#BG5XLSm~Wml7Y78#$3@X-9BB<1}~kfsF$`!(}!f%+`|GTOY&5+VqZkX5XtnromRPrHWk?6g21I1eKI zvzhX?=RE$)zC8cFf8?D?pZ_0o`HTGZvsnK(cz1T2d6%%o`(Cox{3Phx*K;0F+Bd?L zKTqzK4SuKAtcgu5Fd8rSDJEYq0#Cwk75ui2_RiQGBK66=*F|J*1gG?cRJvSbmiRKw z9lGqv2k%1m;*UWV+AScHEVRh%*MJU@Ig)4R*)#HFik;SiGZh=yDLD6mleHf&e^O{vTg1d=|o|3Vj+rzxwa^hz{D}vl%{D$b5RF%g6I?*|nZoa~T~BPnhkX z!a68}-|EYWFP~3k@{4_ewE^1-Y%$Mnd-3@*<$b8>j&+f5@#u!)DHmZ2^vU;%sLw+a z4E`?st@&Q@YlU+%CU2dDXDd7}9<@Ear}T3V>6iAL@9qr*XEQhr7w=5p=zt@qIL!DW zf!1jAzQjytsQAB=X#EqR@x^Lh+P!i%^Z&-|oe|PU5{s>!$$1yy+2ZmHo(<2sOU(3tf z10;R8E}vgE$7}4ALo~Ksc!@qbZdEgi3Hw8PNtt}mR%D$$k~<%f>--*BA>Sc(S}_B= zMt_e8&Y5m~g7b|zGilbWvPG7&(KjT{)eJchEHw$A$?%N&a{Gwf+`SNy+XPO%dE5o|BIoT=URa(F4HbtB@VLJ+UL z6W}@Am;0-Hxnf5R;7sD1OYdsrp5n^gwO!h$Ns2vxVi;!bqme5bV%P6<^J(9NU#-}= z`Bt`hFDev+R&)OU+lB3Dq~Vt&wvzt1TKs1me%ZBD)_(?bM|ENk1w&e615@BPYQ*;R z9MSXJ99(9e4!mA(#%Z#NJ%Ag&@Hm}QP#t8FWXw;7*M=LvIxp#~e#Aw~|INER61V<< zx*H$Dj$c>bhHQ&qD+Rg=zn6sHH2AF@zTG|FEBr$7y^PO(R}j~{=G`wM?*k7dtiZnd zQdUFRa?0-I+0B{Y&&_#B|3*Of9FO4EgFEQ;lzT_0$**K^$qrR;SPNV)Z&5xAe-G|@ zhjy+Qzq@vh#)fLUvdJW}C&KS$+PP4C+uiVEZzR~~;_qjHlYBds-a~NayE5mL)T^W6ub4Fy@DxqHk{R`ODSv))PqCwyskoc9&l()lwt(1@V`O|maJ&`6p z=WhS8un!(%8XC8L5dxWrRvcq;VM+d5N!fVH-a`-a{sl z{ZNcsR|c)JZ-kk2GzY?X@b6&l3(5lU+ul#P-<8SQ2XDU0Rd3n-Uuky>xXuUck@2js zob3CC?Arlqr~Enk`zR^*_J(ErOeRhm2;D8>>pnbrcXmbIU0Vyg7(hw*Ni239a^x;A zXWvth)ue-lC2N^>aHf7t?%Vh;aCSXrd0*RB!n=ZaXBK_SRsnubcsJziuSt6bg46F4 z?i>@|yKfJxOPjIQwLfTt-%MZTi|8jLQ`*xE&cekz(`QJVA9QsXTw{%3Z^t?-H=q`q ztG|kVV_xXZvuh9Td9E`4+eBF_WqV2)KZ3s$SQ{|0ZTC##IAf!N-$L1@5dL~#9R=`> zEjD5opL%x_#Hq8fFGjHVs@gwh+>Z<_k-Y%?4*J!MtG7==4{m<9nzClf#>49ao}K3? zGxId-DDRv{HZI}yEpud=k&V9ypUc<=pL>uoMEG1QGIHOm83VkMNopgq4i`W8dso&j zVs#eYmh~Sxm@pv}dbxRu$?$7H=1P&dL}a$)?A1v7n!s7OJ(cb!HZ{X`p_F2{pTw6HoOlJ z8@yk5=Z+2W=i|XCQ=RD&!CCC`4!+;v<>JVQ=PKiSC0ycNtCLDyrIsTQ{*fLzuzr8-E;m2=gXmctwBLoM_eSfw;sApcBfg7J5iqw+wk6- zkrbaqJS4G3#O3x<_c=4KmlG?=*eR3tZ8#BIU?K0_jUw&nPkA5u?s_S2q1?2CwW;{C zx`AI^?7-IHYu-ndvTt}D+T@`@aiV`2WNSSy)0csJcjNsps#i_XG)t} zUAM=mCL5XYwZ!1k9}|g#>Z#YK((jL+VEE0EZ{GxCFLBrJhFk%5BV%PL^o_$j{mq3w zklT~G)-ERh@;|7n@LCM7zPIj7PiEW|Z1-`Qb1O3D`V>9_G1TleZ-&=2-IuGv^49!Q?1Ze<^5+-#e92n) zT~_U#FKL2bD9)}$W(PPmvCi~wWDQdfj`5qLGHaM@p26h%hx5v`U01k~^bR({Z}kFr zBKNyIJ3~ZnbKaStN#NARJKdcBA->$&jNH6+DRRx-R{4$1+|{-ko^j+36uCQTT}W;< z@OE$pBs$YqiS4}(4(r#vbIa&h&Mh+;y_r9sy7NQdtCV_q==L<(HRe2#MgBjKH=hK2 z3^)^RCub@Bc_TPRx5j6O*2Wrx!d!v0M`P<|X*8Jv!63^6bXkGBfh!DOrMXmSF(k2KZF$*_rN?K6~jn zZ!Q_yEm}R#p6iU9qlYy{$4oD>o;b41jz&sKiJ~C-t=<%;4-Z>Wj ztA+o&&=%l72%NsXJJVN6KKq#f|B+IEVL!dd-a{XmwD&f(9~?g!?r#03L3=0sw+sKC z=rF{;Kky~sOggYLeW#4yPWUr^gRzFh0B;ZjkSTCyar#{BbK=dk{h&_s%_IJ+WPEIa z*O=uy)Bh0P_XxbQ<1^%M&G<0qAx|tkK2g=Q!X?akB7YO|8<6jhj|yPhfK3BNbSZ25 zDw*A7Q7?6yMSRwC&2%6yWhjR4yqhr0k4f#GZ#!cU{uTms2>VSL?>zV~ULL z_M%{JLHx=^WTGwv_my6~Ie1ns%Nx^N}<{qNhEK23P; zwvvr!+WIPhC=?&*t@aMXA6(x;c>YDxf@Nbgp_FsbkVSKmn>>MEN%e~7{ z>~=gj%_nxI-xHkfZhgFO>7vu%c@=Z$WxO+vc_J{9Ql2;uWDdMgxnPXXQvPXBS8 z?)@$gfy2BW93v#iGWVI(S}*2{8Xo6+GU0(UOi}}3V8*To+{8W6=wP_i>l~?9ZE!i@ zp8o`=@}$o6;Szg|cI#F6yQiLSZI4);1vT%U2U`xm24u3NQO>C%vpr{>1w^%hv*Fav z^jTsD-}7a5Y0I)N{a|4?<>oAtH`52mlo-V+7n!;Hb<)?>;H;m(d=vpkE|x8%fBc5~ zJw5q;Tlj2}E2|Mci;-p4b5Fx3)Yk%U250;az1+?US5|QBn7pE#;^0ltoS{R{RYKnZ zeLXS`mi9~&8QFVd>VcIJ*9>6J7-CU=j?bTQNcr{CNd$mDI%nqAB=mBiR^`F5VPVGy{jXLbhmkB&8aL~;^K z{P=p>(7KX*zO>=9QKmoU$XTOs8@zq`%wF2C0&Rew#Ct1|*?`O|qWq`JILDt$?E?z$ z2UZ*ZrS7JV=Vbkt=zZ2w&imlgjougSqR#(Ay-T|qsmmnl(&Fr@U0%#sYj+fG*D%vB z8{qYQ)-xrr5`Pff<17QTjq=q$&$e6ax#3n~S746mtC3z`nfLawF7I59d7J64*i!If z7FT8q^y`UJ&y%tDA@q{x_wG}b*l+R*=Dl+}-S2-euTHnzdz{5rq@bNf*=(Mj9lmUQ zMQ&cMimRS-Onq3qJ{JJJ%xPnYw^qaNOyPGw{4m+ zv{Em3zsdcUmDu}I`1bilr~A&vS@1P?WROdvtS`Te}m@d{;I*` zB0Inx5AOMbyT9M&tiG8m+M)u8R}y;LE4 zJJ%8m&bSAh`*)h0r8+xNCcB$bpRzkx_np_7z9C9|MnFsd7T)tS-}qp^*mCdf$-fag z6X#Ea=h`1^H}|DGM@xMga`u+Q4rYN<^_$N0yZ9kz|9rV7FFPs_dpFBnEd_!!@*hd~ zZGfLb2S4SH(@kXN-p44uCk4*(3p>;MiS9pQ^cY*tj{nSDcSXqfn6qSD4!o1|T*xqU z>4VS*=2D3ZCQv^4x9rhL9d2>?cNLeBdtF*6+)6^b6h5u!kIcVv&J{VixmS_32Apv>MeK&c_2C4N z8{=0jXUhV)BSr4nBDXCk)|9a_5S%d$o#{P_z!~MsHRp>9=hK=a_A3tU<(v(E5}eG) z#iCrfP4Mi4TyswU`=bBm9Jw-9R)Vv2raNal2fBSd&kD&kYjJPhZi~n}+Xd9@erv`d zwh@0}&d**YGV|No7o0(}JJVN7TQBrwQh)FKc2>tm=JC?!-<7uJCzvuh$u;+vzPB5>TjBXGa@kf>PO12Y+;xP^4%$j$k}Bc9R@%k8>D~saw5gu* z8P|5YckpG}WONx?Z+ku#drcNzt7gW@8hCD?O`}BS6-H)`E~QOdz*)S=YtwJOT$}n5 zM?D6A(yN>ZF0*+l`Mi^P4WocvX5>mNR_n{XU&el}eTduv;501lOs`?!I*WX{ z<~{Xnt|*vqWjwsGn_N*NJP$@t5mG=sBY1?Nhl(%yVM8{Zoo`^de$aL_L4 z3^P|c#5onL3HysbKfkctzTiyxOJ{ng2In+zy7c+RW{uB(sqi?=#0Asfx!zw}-&$Di z5^%OX(3$?JwD&S!ZfN`m+e`nB(gpoaM($R4O8(|N+VA{L5?|xvb*sQ&n9G!7MWx6+f)mD z3plCP&h!UjUsYYm&Dt!!)Uj_bEH|_FJ?LIy0pwmTa=&Bb=Dd3$awmdQ|5RuC+k1es zpD&j+NATQmun)1>N8c|LNF7rF0=Z^#`hGEZ& zuuuP{=;dV5%aS~wxfPuCuXm;&je_$XUv75)A*2^`55tXx$5bX>s`(3Z9{n*`E3o3!^fk$Z=cn{%Iz$lU}^ z{eL>s-&m3?cd(X6YvdFzynPdNf~_8w-}* zk8Pk&BdZvZWt3NoczN}Ut|7E+T!RIPp*1UXKvPN41&Nl8woGpF#YgblYzCp6M z$1=(FWy_Sbhr1Yd^F!^>{}34m!^^1=8QFX%AeBx>O1o>m_n^P2M)CLm|Ns9veK<*7 zBmLs+W!Ip;+F$2Yp6es}{v*{3 z5q;N@YDa_>=DU`@@kq7A*7J{4PuKufI{MNh)w_<~afF(u0qoTJ!z0wnsD9%J^{*&^ zHAVWxBh=0!{qzy)mKcC5i}fQ%s5Qm<-Xqle#Q-*z=-ZD_SH|_CBh>wI0JoLuc}J*? zrF!}i>Y{D{I=bo4`l;Iz`n`VY=>&iWy6ac_sgCaYxqj*@xsiQF5B;}(>VY2m!G7vh zdBgFUJ@krxYQ~=WmVWAvJpn8%*Vpt@&y?%g{nW?h0AAlqlK@({xBmEW_0Zk`mhYqA zK3u)NkAC@Zb!i2FPb>7g!`1Sh`tifnKYIdb>80;KTz%S0-*vcJ)EmI%mHNiRRZFFw zf4F+H62SU>^`(ca%lFee4pS@k18~Fs`oqK2`u+7AhpEr^2e3J*Up!3RaDaaLF!lHW z0PZ0eoZxfO+WWFF$8_^HOwG99Q9a4KUtzWBl?w?T5aq5iq&0? zexz6}*7~6mwY+H5TQM~|CeME^cJ1Q{Yb+0^=<9l^Ummi&ms%Imf9s{@SOQpW?e}mm zb%m`r^i+Sd1@fA`-(PyE`y72+FSW%H$Q63O*}c@OTCeM=u8Im|MRdQXdaBN-UeHV3 zTO^S7qWv!EsqT(xvd)`g0@)ecFIAz|7VArTsf$YlvYRw|cjmzOuKvI8k<4Z*^xvo}0Vx zOU;|h_N8vkJ@!TVvOR?J<9i7H^LuDo`ox}^w%l5-rMBgo`aHjvM&e_8OFduPTk5uE zA8F~^`$$`6R)`*M#YlScg=*2#dlgc*RXtrz?kQKHep9~~QD^B7BkC8L?JpUn1Ki@n ze#qY`dX-kc*DJJoIierc>fg5hJO4Tqee4L}1v!%j)tAE_@N1}kuRo5dk0Sccm}+qJ zO)=Hz=yzi>ST8A7FGh7LrrL_6^t~d1ycu&P^?ym6#>Wwzj;dQNeNB6uHt^aDP$A#sK5&b7yU25r@Y;~oj zud-cj5bn~xnGu)l`WR$46+`xyScdG5n2^006S9BB)a&B6KE<>(7hShgv@xQ;$fspNs0tiq-TYeML;o zMGG;hiXQL`do4U1J^b#-Jz7n-^y^yPYv~WPdf3w2wR*tTz@M@8!&>b$J$9L+U(jm4 z-U~RC&JSSD->=dS*F@SP8%sC!Ru3k0M{o6hLbq0`Z3#WAQa#mO1AnEvPW4vv%Jjm0 z)pcdMVPAD=4}mZ0p&R#A|LCE&R;mp>^yW%+{~iK=dJo-JsXF)28!OeUJ@u+ewSG^5 zZ{AZcsZ`gM>*bYV{R=A9m3s;Nw!QR*-fF{MdTnp@#$LLmw|cH;FW}O?L2mnYW8#C| zK3(k4ryUM`+TvvTH04O2Zg8YempPd}UF%4nZgQkgS2{-4z&{#Y{@-PGy=S`%i)rV| z6582Rl4<9%5^3kA5^3j#l1w`nmqqN z&M3*)?lxn)?Zsld>xgJeUU9A2T(@Tp*hkBrdhdlh>RpS4&W~1&F zhr{IeP*nXVqF;;36!=tB&9DJ4wDl!LYK^V0FH+Ch`u(VSRXhj&_VcK^MeFCI>Ta#C zC{i~?S&xggdloqMX;u|GyQ^1<^h@2PlNbQ>W_)Vv?J;$mqwmB4I{JoUwOl-1i`H)ys}3!5 z{SK}FQ>;D}Pj`8do>{CODAJc>Vbs4^-5WdDh}Hw*mD9B z&e3;T>JR!ROMMbyJumB;ML&(y-A*g_R5Km@!Jd)ZqIza|U4rq`9L1%w*qYFiJXU9*Q^KDehmKewkmGhw>2 z4v6gCB+C6Pq93a`Y-&c^Iaq`@J2h+Uls6EWO!LA6U9ks~c?Hpw%6=Ug*v% zHSoY(_S+QMf1{%wvvixIUa&M&Gi{+FHUnP_%g1~)a^Px5-E8S*N8M*>UfF)j(rX;` zk)_*R|LSAD5jo;hM?Gh0wiw^G^jxj3vGv7T-AtsH%agfqZdBc9SAA+CmVawC*U=Y8 z)wKi|Iha>OE{&Y^emBNlgLPwf=12WhH}!lYJ7H(mtRhe+q8sG3D25moov`kzttn5|bw zRg=>Zxi_k&$GRD9*HwQOnb`w(pdag@{u0%HFH>(v^#^6@KT-WcnR=&4;MDcX9%@BQ zztlrL5YspGP`4Bd{N7@HXAiZ$SifGTZZ6T=%hdW3{Y($_YKgwDhuYk&FF4X)qurjB z=db$v_4yIquGQO-^^x^jwcC1)mT}7SvyK#OH_wZ-z#rEFmkJ!@R$!l#`8z$LIRpP_ zWK-l(ThmuuIwbYjXJYj2|h1bD{8oCn6W1RDlb+-#W(B+o+8h?k>|1F|AWTb+B zKtKMD?0=oDaE!M}6g%!7TYbn<$d=*8voJlNzd^1L^8UIlqDE_YOwbQU80~wRvY!1Z z`-#5STaaI2$>SrU8If`nf2WRn-xj&g+v;D|0k7FiQU?HOvjrkjyxxgRM0L5fHu9+p z9_sQC6!|S(9?_63x9&#eLbk749_>Fb@*j8g5qBZ+)e(J>qptHRVLA_j#2FM%)vra= z^PUo%-X4ozE{QC3J6a(0^D&VlNAh$HF3nMIM)b=L2zs5P{$%O59SP8Z&$spcj=I{Z zd^Xt9I7(AMh+gT$E%Kd#?tRO>LOd7pLYZ_v>p&`VM8Su_|)HN48Y4Q&g=lbJPl313}e5wwPxT zBWE)CyU!nVr=yle^hXY)`d_AXZ@M)(!9)3(e%}!jc?~~HnBk~vEd9KTQk&s&6OJ^Z zFJmOK4AQu6`zm+bo#~b3sj@}!OK@1lJpdzI7ZQ*?tRVbRt|de{CQ z&ks2I6YR~=JWJ;vHqmx!)~Rl4acMJEdaIi}8$t;9 z`=jyYO5GaK^J41Z$WNxnMEY|@VsC#dQtzAR%WVB1A*TI6klpUih&3laZUU!`v!l1s&BK@{K)*sJ?^;ioKElWYrcjzUJ8Gvud`&t^Z4h8 zKm#liGBS@Yn;(&3X_)pN$lssnXSLc8(L@QiYk6LyR&BIo#NlQbYcJaM2Hj_wUzf5&?{$=V-;pIjGx^dW zzkL`I;!F;@-%|fJ5gJQ2o&$CK_ScV9>a~czqFALOk}knTDfM?tUtdhHbUrysTYnx? z%beqQ#a8S0W9nL&HG?eTeIBFMpJSOhjXB!mJflcBZ;NI)Hx*?#Z;8U09kxrgZjY*& zQS=q4+i_P#PP?Iq$X35qq}Eyb&LVZOJ?_3D^^vV#DpHp?`mrK)i=&@0DH}>z-tao! zT~Q6r-=iAZ56ttNB6$|hGMVu={u}*qL^VY8+pc*X;)0JD#^19fKD|0}3X$m!#wNbY z#Gy;=QA@SD(&+=d&FRCl@H^Ti>^(a&M5*^8J(n|^T8D6|&DJ~;VdnIQ5q*^0DD|>+ zz`gEFcc_a}BC*@ZkFC`%)H8_gQd+I~2KkRZiTvADujjyHVq{0@^G!88^u%yrXY}}U zM6m$Kk$m8h{C~`~)|Fa)f+7iQ?S40CNp?P@Wtj+Enj`f5?R5rgiAN(nXV_|yw5HwC zJf{6Q)vw&o!JZj8=*@^^;|yWqbpD=y(DM;7DYpXR?qC_)o4?0+V_>h`GRMR5|0d3& z{0|4c5>fAXTuh~oLB&@@2EJ*@YJ+^c)$;>O&GuBBl%6=gCn5g5k#@}S4!eS&pS2`3 z&cKUJ^J0Q?h8rs-4j#-tY)`@(zovT)qVz<)&Qhn(jwR89zym>grDLH&nN6Y?m*cP(Og1L4%W#3-ys!XF0~2%mRHeVztL+g zH}0Hm_1WO6^C;>C?pH1MWqqx7+>4I-N963M9rcto@C}n<<9V%J{vpdp$L9G?=Kyd- zT{83WcdtYC=Sq3;WQ-JE9lF#KqoJVtU=S{6UmN&Pd5LahMbuUSVo~xg- z)q@fJtgWuM<(W*kVYKVglHY-Kb>yHIT>s-a0l!J%zXuEfyH3AH_#8RuRa<=;(a+gx zo-L4j>;r&E(>%xU{jngQa=;cXoqttSJw;p=RfHKgv9u*HjH)(Ef1=gXjs}NG3&`7A zaAri^svk3&zn4S?EQqRqMr8d<0RK5Yk#u=fJ;~G%Ri9bbas^s7K3nEKVyOuD--rBG2NJCzaYhYAjK9S zCFKEWhb0qg14+0d^`I@&>N+;nm~P3!6{!Ve;fmB_%o0WFAC8_`q_#QIr_9)(X;gh+ z7UU#OuZ&6z-56C*6GQW_*N`3(qFo!gl`GX$TeSQ$cfH=vt>iu;;hMa|W!vaFrX1_zKZ z_x$CL>PAi;DFB!`_=fNl|3~ zzfs+ty?0YIy9!pbwxU=nF6gKwisDMkxZqwYDmpIZiaIU@%A%sSD2jUtsE7y!Zm5Wb z3nHQxuDF+i4hmwapoog^d*gm%e%(R!Z{9iYf8IIooyl{$BkPklZ``;M85vtJwh*WYRUk zq>kpTnqYlLv!W*Wwxii-_us5Vk49#75c#j|0z`#b9qhk=In7Qc*IuH%wuA5~9RkF% z5c8YhcKp)dvO76r=BTR}r31 zlViNP+eo!Cs0+$?DzsP2GTvA8A1pVDxZE?|3k44p%Y-BL(OUxk1d9!d&C|S3)Jvn} zVKlu^D=|N?pHK`2LWY z!PK-O)1q!46MC&Ec(NLu$qt!nGod(){h7t#<<;hc;_a|Mu_U~-+GI+E=SspWF(D94 z4dKTfWx@1nGpDS>y*N-7#{QV{a8or#Pq)KPkGIR@4EvY20iUmYPY$C(kZ58;kqQD>aXlgdZ+7Z&J4IfzaOnD#A2* z7%vaFyJ!IRo8`;@eze={&`|Vh#uatA2knxg@FT_2m&N|Sio!2y{_dt_N_4i9%WH6e z2pWUGiZDKg2qmgLRpdV$?mGZtM+Iw&Fg2Nzv){7=DvOKEJ)xkf7{e3NWkIWFgKA~D zYcF;Cz+k*Y`bS8{zj*QPud#{+^0%e!d0ba?9Ga7ud%z-^;*lud69N^R8cNj5kWBDd zjad~6Uac|7qAQ=RktW%)8muS?u>T~+VQS0`C0iOawfX>z!Cbw}4|K);y5Mhj)tVPd zce<(8j4lfvuaWrya7-c10Vx;x`Q^c%)#j7(B20dkcL#W*qVt28bEw?up<45LWpI6s z*;u(B$VXLj>JL@H`Wjhdgsxk4&rxSZepX5Fegy`LCTkko4iHHUEc{y%?X>MfJ#hPdCmg~Q!zbZlboyTp7mp5J!;12o z+6GhFnmKK8Htz9PNsA4tJD!2x<8ZGnHd8~v*kZFOG#-a>q@l8i_LXKcZ60HhcJPSANNTOoGA%jb;G=(v;G{6S)l!b zN(eKrn@U2jOA%RF+;Br+R+R{VUP(X3gDa%!#=Jv&iA&gDp+m<@B3?%G1ikT4@KS)0 z@8B(aJNh^RqA^(}`_syLVk-T|GLfH9-UD;A4sLilodI&j@31RWiliKQ&nG=Xz zal{Kq`?R7C8!F9G+yX1*3V~OPcR}mpL2>Z&C3~a2aZAu)aV16wcb#8p7L+!C{8kz? zRY@P=x+=3$nztLuf+<*dP#)y4&Y(PauhP6-9;~S}pO;JPC0QYJ#8WDyZG*|uS(Ord z?KwElUIQCK>Zksv55?lMQ1DQ(%m&OUmX`So#WH7r{@bG%cPo|_Atoy@qWL|BKrjNP zwbuw}g2w*wQ}DilP=I-sFG9f@Dbq3^GYzwl#nPZ&480gJDUpWX252k}o@;TwbzOHX za=jq4u?sih&t4PceDE z8uLuW0XRzHEoE53)9s!z^Jj7JM47p%BzOeN zCkcipK-Od7dcra-Tu)fpbwjBv#k$L`yn5cQLK`C` zc2QZdyxhzv?+Go4vT`uyZ03b-g?^ZDPkpEp?m@Sdht?K9h}w2~dGLI>SyGPktboX% z1j_*Q;Gvj*yOsOon__kEKx7fc6a}%ZLIqZUck?gIK4W|Xqm7>&R zkm2jlutlY4qz8ADn)?I6&j-PjQnNm&2XCgm%eM70bAq*b7w+<7k!h0TKUTCY7VJUD z4wp*D4Ew!LM|h14*`xLQdSK9B#{MUvp_#yZR3iKL1*cfaHm5-{G4z8Hj9G|x}d7>PpJJLAx(qTyJDg?ZX}Ri>#pc%@2u z30P`{$vv#YT2T^DRhc(~U}lvpP{pFES4(AO7V1zevszOYU=7x7<+3OX1BTE5PaOrOzIfC)yqul7`)U=mLxyjOO_r^$hgsM;xTA;3b`EanVSefyZ0c^NbqN+l%zIrRzN$;`Q-k@nOYlvDd2oy1;|BA= z7QtH$=Ibqjmm18tErX{U%(GhtGaAgYEybpVyj?uy}7k(u%O;N+EwIV=o(DyZkBcp#&$QWy9OKU%}w2cwe{xSZoyae=J{^H z2leLLZo!gzGiqy*pR{%GOTb)g+GEx53#*BDGgVR>IkXi$fB?;#>0RiMk2!~ z!*Y+pf@mCkT57jfgCO6=ycYy3+n8U1V0jz!NNKRNjVyIS|7Urr^g+;-d8`I)N{C}c z{BuxS7R(Au(+%sFCY8&IrfKCtrj1!t9z5B`Y$%s5%L6hzgylrj+nARsf_t%Ssv>A= zV{WJnu4`lNs+2y~^Oe%C`m8eeqm3C?70j{=ps*0KD%emfz2!BvCSMigYRz5M!F#nb zh_<-aEU6CWqwcAeZrH?{V0>5{PfE<&;{H-(#$-m?1R z2;?jJVWMDoFy()4lQwV83Y{#z9*qITw&s@5;E&qMAo-72990}VSch?fU_O>k1;N*C z&8$)(-qYXdgWB7Q#@qJ0$iMZV60=$fuzmucJ3CEdjJfZDQ(A!;`PypeIx!Q=9jrKU;L{ z3>m4}0|T!mMc9=h(nnX7#P-8U@s3L{Hy?UF^l%v_SNdXoX$JQJTWiiOGcRCe1;$8G zw_zH;q%D?~-j5oq3`4?QAOl^sayz*)K<5pM2J9NA+J4<+;^m7F?xF9hQ+ud!TgW)( zA)PSSc|9uEBI)V9Q-p@$HrDhKxgSB}aS3UNEh&m&De@h~;c-|SSuD$vzbSb>w4%Z+ zE0wlCYE1MJ@MOmN3X`@yh9!1s=nduF(W#hU9=;2=%kqBMzpo;URmCWF*q5{)fEz!; z9^KC{7)baf^ak1{#leTAW`kTAO(nm}`Z=_gF_sL-COGaFK!*A@kni={nu zE&8)k6wqA9=j3tU+E}FR>=*1*(l-)EbH#D!I}(3`t=|7LwpK%z!QZ;Q#MWIxTgbHQ zsgmfC!HVKCq#U~&L))O^)Z7&F9^@C}Z@xWmP-xpdgM~#HKbl^IVW5*SbJWX7^B7Av zJ`DxyL*~IE&@a%^ENZD|0?tq3?_$w|c41reO3sG~*!TY`dSlT8s!kQ`jyEh^gMFKC z=+}3|{+_aeM=wV^|5O)rGSY(O6$+jE*rC@HhCXU!a>tmbFpW}!1&h05G62h9Fy#MH z=`olDn1@zVwYj@uXI!}z4I8V?ja8@MAXHQg!fEI@Su^(NzrUR%nT2K1q2M``bvy}G zA$^s1D$KVf0r>io;PVR8R4)57%Y!Kx0zh9_%eTxCKxOF(4}~V`z!)3xwK8@vJXjWj zGw>Np$dvTxWo2voAv{|i_qoK~M0jLtDcb|Lm{E+OX$+N|x5GtA+Pkvr4ZD)hYl;9nV$(96*s?DA7VKoLMfR~g6&sEC`y(!hQ68w&8 zxgBC^2=i~%W*S;%>4ofQKPKgS(5H z>ndbAxT!)Og8~_iv5Io6p9*qVo{u5#3K^bRQ!cBhHek2`PpY5<6$kfL7*r6`E2I(x zL1$%txwLNIE0@LIAXqt;E|*8Brj^Uopva*24VfUAP;Qkk6cyz14Q-@74)P)HTs1Ppi86(uT@WlD zM#)0Y=IL7Vh9w^d!3?ai4ubn@&A3vLxuZ0gSSyX6Z)(jVOFl0RHepqF=`%$*EGEnS z8sQ@$DfY)-ANsLMJpOf+tjYeU%DhsvI|!EAzKH@;99)li0zA@HB@?ZGR>`F?sah88 zfnY@Aw@MkVeY8q?3?M1YwpW=sc#xw?8eng0A@ z_Ip9@h>@cMX^UXF4X(mp&^^XAh9}30g3n8&(tW4IJXRbBkrO$X^q&-WZG_?pMMq(6 zA;x}wEyKjiYa#sjw&XM{G!#XwBf83n()C5d=80g3R5>2rSRTTU8-mkjwh(-_So(bz zwqMoJ%$B+WmB*(YWe$8@M`=@MF=>c#ijHzSH0B+2t2;``pV`s;RurTfc_)bzmOzvdHOVxlU2XF6arUb$GjxtKIvV&PG7!ASY z9n5$P3U!dx_L&amJ*gVLM$f#1Jm;~rgZT>=KnLkMPsc&23BE21?#02fpa};t0E&a< z!G`u`xzq>w^7d=mn}?+iSWwYE*WUanyUEJnz4qpo%3yJO^I&C=ZZGZTY3PP(U_yKITvd>4Z+@x5!7R?qn^FVcwZD*dX4qj$I9MC}QD>gTV|{gIeJu`N*Ctq6C*9FZ zow*;+_SKoE+62q%%#Us4U^sZP&fFUgrq`Kg!cnvc!h7CZXI^UCzNt>KJJ=STaoPDK zB;z*cOC^UkA?nztLtRkyes1?M>V!%XgD|KQF?@)lub?WxQH-cp$>k4%4h<@4box;R zBM(9Fa3d;9RAHz-@mw0ndnHnD<3d9XdlQyZRLP^nsEX0`K~;>$en3_RQcvSa@Uga@ z2bqDY08a*CsUeQq`u`7G#otnP369>3$A2nhOz#)mpvy(Wm*v4|G)&8TV*kmC_BY!B z>JnM`f^^<(Ym3uF4p$wlnGxy&yHQ@Tk5)UA!eP`1-!QQu~m9|Iv-z6z5h9<>2O6A_UVh3$T0^&x&C5E6|77Io$9kGs^_baYy0 zz8f}c@zhaUvtF*xTf-vwcvwW<3X6z%irYHdSg`EQouw zok`-+=KI>2H`@fawllZXU55Q;Dh3UP;OUoQdD#@S-Y}|*CL89V?IT!NiG+RJ8o}?d zk6=9v@0Oyf?fMIH#y*ZUH|U3RMWNi05b9v9JRyNLJD-r~;U7YCytPA{oz-^O8u<0? zqE3I6;&~6O->|WZ)5ZzV77{dhlzmu{X zR?A?^q*X4$u&~0k#aH0MLoGB5Swjj%0(#` zr(BaKm!n*SatX@CJh|`yO-Gn=Ny_DAn7Y{(qnx2!6XjB#T!M0W4CKp}qFkdVm!e#b za%sw;=iMw;tev4;mU0=&rDdH^^KB27Kgwk(7x(0%luJ`CN4c;k7pGi`a(T*S=C_Qu ziE>Sp!}1|(Rl<|YP%cTiFy$hiT%K|X%0(!bmAU_BTVzj`KgvZZm-OTsDc4B380Dg# zT#|Az$~96hhvjn3w>0IVl#5fY$&;HtQ0+_LZ40txFge+L%kX$Ir#yk_N!cQJ5XWxo zTgtDZe3tT&{~&MnV|l>i%Cg0=I#{;GpEZoEYpK71^0JCpw)B6Hk5NARiOPrZ*sN?R zJR~h!0t^0{ZzCw5q{nII*pj?{zTa%9rQvc-W=SGao z$(F*>RoS9zTk7AP@)^n{f7Ro$jg21KU#90}8OAR` zU#{7fq+C?i+G0yF%wD8&na9;mcS`?-`g;Jwtr&julJax-JI-*gmz9s?@9i0uFm!rd z`2SS@nvBNxC&N=-Y-#T;wA0z^>{w6v|8)Ks+TEHSmyV|WwLGSG)%?ltreSzYOaEsn z*T{M$&w3?4s-@g2%Ec*{qg?hk%{Lcslyatq=hwE>Guf33o*(`|?Mkp*=CPPuw)}}2 zCdm`-I(S!k^duf%r(yg<{-#`7R)S$`qFfX8U|GE7Dfip{Lj6R$FwUWbcBLtoVVGr@ zW9aP4^EXB_?fFUCmBtEr*^;y?%;OP;QHEJOkR@A;zwHnFTTHtW#k9Lr!`w!_4l|fL zl`ZzWhRHuQ#M7#lr^w^{onaW;L^+r~?d;k>yJEB}_W!b7=}Cp{n#b!R@A9AJ zE7wl_>*`aNjwI!?9rgOjc4~PY8K$#IUTBUjO*wad>;T@c57qi7$1sfb)Ut)AYM8u& zdhyVoZ25q{?Jqq3Og#yn-^36LBCN#!T|GJ8Pjjxk^E!**l{d||a;7`M`YOdR{~OCI zg_E=^OMOxLGwQBi%1w8Epj?b{aZfHoxzvZ6f9d5KI@^}>c!cMryz`x0iu&_-!HjHa z#)}tl+TS@BKaZ!p;}OQ6rF@fjJkH}W9#4A5Z6yEw_g@eE|I`DqSG7KK$xHBe#I-wk zAVt1>SFHz~e7+U=$RgG2%O}V;)8C4Gz7_e%Ypv)f-%Nii@@BE>@#SOWzWu3IcmyeVC=}omFZD)rx$s75Uhkh4m-N zef_ys>=OGo>t@y z9tA1npE$X1PpTDp%(PoQzI>eAw`6-^CVd&y@Vbj3E=U>M28+l%$mGd*P z!sk!t`G)63S~)*@Y~k~l^Zc|ttAZ`d(AoX(u&MC*2_t?>CHcz)&?J)UFuZ@V`r5C5(3`IC8mg6B20a(?u+!q`X}3#9^p3*kH*mZ<$@5aJoS&Lp`21l!Kg#nOTRFe+2a)p zvgOFx?ZVVKh0mYI^P6~nnxQ+-g^l+VK7SR@kMX>CE9XbgFMNJyj(_LzT(E56R?g3z zQuzGAJU_+rGYp;GE)1Vt`25Rwek0FIv~qs(%);kS=lOVxjP7&^OMm^`@f z`IC8m!p$qRa(?3e!slD375EqXPVaB-P}2MDc*f&7?{{Ri>KV`Z2zOqbTz-pXlfC0k zE<-st|KWIK&Hvc$NtZ%m`7x_W;Z}8+A$^Wh2`<>+Pgy;8^Czs*xVP5|$@5x2-h3$xwJ3CVR zJ>AonYvue19^{qHPhXt;-+H~@IsOiF9L>o^eo}oS{P^+kuxx(2E%LE)za42lDa_;4 z@B1s&3eUB|BR?0mGu{eMk!QSekRuOseCywSSf~0MJRWa_r^wy;ct+grCcN{LI!X zrnlJKsPo{1)jl1CNBnpMLpG{0ZuF>=Vv`!9JC2(j^tZD+b+rD*$Fl6^;_t@aPVV== zG=1>9MVt6Lj^_Yn`-{KbD0H5`vv`PDw%_=>olA(~|6~6f2LC&SEp$dx`ZLC`kzt%+ zf?<+j6T=k4G{X$TEW;ebJVW!Kv0Ip7gkh9njA0|gIKu?PB*P|#DTZl=8HQPgIfi+L zW(wnH7-1M?7-QJTFwQW+Fv+lqVTxgzVTNIrVUA&*p_$6~8AcdJ8O9hkGK@1!FibLR zVwhr>W|(1^Wtd}_XK1D|eufc-QHC*wjSS-q6AY6Kn;51TrWs}!W*O!f<{6rY7(c@Z z!zjZT!$yX2h6#pAhD{7p4ATrV46_V#4D$@l!;GI{gkh9njA0|gIKu?PB*P|#DTZl= z8HQPgIfi+L<`KrvFv2j(FvhTvVVq%tVUl4J!xY0b!wkbL!yLmrLo=Q6GmJ2dGK?{7 zWEf|dV3=gs#4yD$%`n3-%P_|<&(J)|_!&kRMj6H!HZqJeOfXC`Y+{&Vm}Zz^m}Qt_ zm}h8aFn)#+hEawwhK&s43=<5K44W9H7^WF!7-ku2Z2#x}mp7KRP!?l**0qz|!2|c( zZ;wdBQKw#V-o=+hcHFt&&i$g>?|O;-xzp7<_3sz$zYVcFqi`4k#utG8@{d*kgm7d+ zu^x#~K$;PSnUq^m9`FL^;H{x|s zs;Bb{DtIpCSCWq`Y7E3F#L7 z{TC|#fbpI|UiorMdAxVZ%D?CFb>#QI(o$aDtS0(LyxNi{$#+_$e3}M$&Q|3=Am=cL z370C5ELK71&%?>nuPfgRew6Jh^0ja1Z#<)Iw`a*?OIz|vTs~swM32j5C48mF?;zjx z&6avTBOg!BVOkR{S3R%1rSh{hz*FeT-TH93eq_VvB@13JZ&5z|n`RW=iea}9P82)C z8h-Yc3xy&-mh!IM ze>-{3lV49BmN#%T({m&Y5Ir&S9Lr&bJi_%*cuj=es;gB#N4}ig)f=%u^-m>lqKR(A@%r*z@eHBZpP(MRB-n0q$lZEKS6^L;euv0U zq2K;a`A=Hmd$d(~w{G%m%6|bac24)~9936XzBejjiPx>WJdb+bAP-ll-`K4&zmO-$ zU)IBB9~2CmU)2hd*+UF z{x^|FrJ~06v;B{H0R2bNAKgm%)zs4s_W|MQZVEnPc{`N6A1|QosplHuMp81pekJr_B7uFK_RZysrde?oo& z?cbJqdZPm#GPo-qt>xMEQwM>IJ!2_rH;4#~aDVk-PFXpZqiO?Wm_4Oc(tX?Dc`e?Q19on-JT>QW4DD^+8al6GZP#`={ zPH}TLxTLpfnCfx){;rj;GZ~IIc1C?FTglccU;Uo`?xTSjNZxdu>cQK!>~<%4?1Ywl z4S9d+p?Y(0MD_1Yj?39@)5wRC<4U$$-+D<`oe8u2xbijxT+$W!r^b6Txb(- zKRiYGQ>ovT=Wod;koTgVp4~Ox$LXJ9@*}||-npLq4dfq^-$VHf`GxN*IFS4|^5@81 zynpMV`g7!sluwdJKTxm>`LpC_ke@&v?x}iSB0rA&O!BQhRPYaSyzS4XYdrZGlgC!6ey8VB@(6i*%BRT3Q%@!NLh^r-myv%>Zm7rE->I+K zlb}4Bb9URC{47t;spO}TJNw6w5A*cQBp>YYcgc4rM>EfEzmrGFo&8%QgT!wQdt(50ME)i6Eh&Eq`Df&NlRrY9 zcvA}$-tA|%W#n6aroZu1w|=UBF!=!DW64L8qgt@rT=MCjp70K;=L1jv6!Jej`FZ5q zey)0*J?*2aXBfGQcR2agp8SjCGs&-{oqv)ye4zk8?Y94pn!hRD7i!4Q0vA6Iqx@my zQ^_ADclN9#UrLUjcH3(w)$^w(e>QpIC(V#cLn{9ydH0DPF}mK>bcD02azX>^$y;k(VH8{)0DrOda~ehA4z!kk&Wb+ zdAuhYeqw*W6{_H9>KRUcoyYGc|JdVM^5{xc5KzyLjV`Hj%F-Z%2Eg2dkcOFo$+P5xe^u~L^4cR*9v^kIq?i%xL;f=5 zdo#V4kbk#96}a-hnmqcO^1oAl^ib7*-A3hM4a_3)+sU0D`uttxpY!C0k}n~zp`MG$ zmwS4qk|*)OOW8uSr`?gNzX@M2maUQHe-!zj)Z^}7>&W~6Zp965i*`HfDAjX5Ic{@y zn?{~_RrSj}nQY;sRsJ!`pQzZ30+;-q$9$|He}p_q?&^W1)KktI(fO2bdyMKINq#r^ zSa7*sPUm$&bIiMxZ~LbT&ZqnlxIs(#d5fIxFprX_Kht#0prY@{6Zoo-Y}ZoHfyZjR zN$+}`NIu@P=M!*=ckw1w(2nJ>?l|Si^{QW9Rw&zK@=uD?kkN`wkKz9 zH}VvDb!AIGYzWaOFh4wBIOYC0^WV9{#2D;PWeYD{{VTiTJ@Yo-sv=z|Bl?1 zhvDR5PB^1lv)f|wQ$5}=T=hIjj_kABSn|4Bjn}mkYEM`B6UeX8!{&1GPunPP?S~J@ z^I_$asDH;ZRL|J9$|sWFK;F4dd6aww`CxK1GwgQ6nW|@^C;t-pOXSY}!6;x-4y$RP z<5}{f$msv!&|!ntUyJ^;XLFCBNbv)qfcI!{o(icu0DGCWn~a zMv$M}RrR=f-~sXp9{-s9S&z3pPxZU^rrpTv^dNA#@1!}N6ENQMDgO=i^dg^WR`ht3LT<`7tT!)O1>(0H`#>szdd7W|Vz+a{QDG8N#@3(RC`(L1Ty7l1?Q2rb6 zLhE6E1Q&mrJ=AX$H$Rg{JzjdD%KPt=+X`Ino7tgdR)y2nV0kCw*5Nw+L#W5Sug>w~ zt$au0*7Z8xn*CQ;`SvFDaj6sicUUOB;~{TMJF|i7yq)kpR!uS=a~`4+~l<8|`S zf!Dbo&BAwE;a`K-;|#YR9o4ek247TI&vD@0kuUB&V6MC^vhrb*b?=>_qqn}8`uW`T z5bD3sa+JeuHD6qLdz13+Ibk$!?ACCJ#_OH~bLDwBIA+&O;|#qaccuKT;PoiCslKXz zGWmQf&mYZ#_naQ~a~pYV`%6`SWLMSSj{Gq4_`X`<;kER3%Yci2-1Cmk&S0eKNwS|Z zlzN7Oi~rqoCtH(WLizaZdZE{ozi8zH_h3(k|ye;a(7}rUbQ+}|OM|<^JwWlZTyc}H8 zoA&&cAM6Zi^<;Ndk3G$ZM}bTJy7x34K|PDe-TRK_Q_mLH zsDJX?Xui98VR$VtL4hc$KY*IFJ(DCj1_X#VH^*PIw_obe%C?9`c^$#FF z@r3^7x(UkjO&Z}emXm|X-E-wz=w)DTBu}5Gg6{q}AKaEV zzL)A2+H;ZA!$n(~h*wX}0=M#>-##HvtyDX=rJkK`ru-_kbFv;b*MUpA5^T3TLiy*x z#m}aHnI#eO@2Mv}PxZKR+Z6_jo;WMK?dku+$zx}0dIwR@h2$xAAWkEn3ohx3@%^;5 zNxc4^n zB5wp2J?=TlBgh}Jyt5g+ulg-Uz6QL|byqb}(-r0fOFjK|1iA6rdl!I9y4?Gghfx1Y zaGNeZ_uG%W<87Lc?mY+1MZ=Git^+4ZfXCAluymmf_ygR{{)x&c#i!V zcOTgw14LqH%Bz=d1ebE<-gE8jSq5&)p?qrsn|rNVFp2)TO!K{l@$O8XIaB2iBfrIR z{%96V0T+ARdyieYD!PMy;QKb6{+{4sr+fd3vvYqd-%K%gM^jI77q#;Q@<*s=aUb<( z1Nk4|;i(#Zy)M8=`OXuJl3-O+z(#Y%nrA^7CdaWG*Q-X zj<0V;zWnaOdiJv%$GujQvhvLobN6-X2_K~idVv1PQ;&N;rK{hzxR2$;yT2R?UML?&fZO&b-+!R;sUeb3IHeeYL4q>MVit$T@sOTNU9RShGVuEQTt-ss&& z=8?Pi3ALj=tH8z2G4^w}BHt#Z+`T7sOY-wA=Z|K=&EQh5+3fGt_GKMWmu41z1?Pt>UZyPclw8u zkMR1lOTa}>xTvN7%~Xvy^;yVz;cHEv8ATpzqn6auM|XpZp6nGW=<4m4DW8zf7Gc{& z`RZwmm*WYp{WcO@{FCzP)%UDCPi_`8JfwOO^uMczGvHDWC%t-j4S9_7N)hU6_prw6 z-fQaob}6`|D{_&h>mbTcC3o)$K8yS(aLF(CK74om9`K0jiC?UGT>hR9F6kY=Ps@7s z5i3un&4TB_MSqs5!A!RtA`(lye&U{i>>6R%-`?G)2vt5 zQqL)ms(k7U6^v`KFpq+ZJ?{O&n#;!g3tZBb^!gqBXQ+JM>j#YkmwLv%kEJ)`odaH| zUg~&Bs34c;J|$i8N7c^bspl_p_dcI#%$WTjlX8L>n$+?V%Ksf)^fYn&L~{qvOOmHA zSHHRP|G3q&l{w9uuUrN${_*?!yUbMoxc7Lt@^A-vgzfW2+OrZ|>e_J-^*% zIh8gG9;Tj5ooZk+%lt(>X?egC+eV(#f40V(_UgmYCe|x zzvKPM-FwDgp!_Z5k?&QW-6Zn{xcDvhrut!w2Byy(KW{ zINPD*Ur~?yPDm~Jz`0s}-1iP#eRVFl=*cb6a&n0V<}+}6oj#!kI{)-~LhUiUzq|I{ z2yl_l57m5e>H3^J%=f@Jd)hy#@n&{b{~Sa+4+EEa!0`Pzu6~~G_#nNq!jyjtT;k2} zyBV%rt+x6p)GR1}O660}woF%FaPdQI8?|R3&lw6X_PF=OIKN#^`NVDNu%(p0&vBOL zF60ZyGhY89N1p##;~h=;ZJ$;<-TU&K|4$(I?~f0G+j5du59~-iA3HtIYkG%}H$J23 zO?<2I{zX2KJV!e#$e#okKfCX>I6ZaqR8Rgu)#IkYjsWk@bDIa}P(GPb`DZmSA6VX8 zQun{LdeENt#xY{gYP{}!`A6{7@!(=-@>2B!r?Jg;&(Z$T%J-!FNN~CD$Gv)Z3gt7y zRo<27KftA&G#;Qee>Yyg`#&#y^X(YRQLe66`Aw?M%mx=bQ(k@8WHPs*uE)jR{LvOK7Ph~i z14+Fu)Z|?hJovCX)`Q!sN0|%4O1{eRh@AT|T z9(sv>J5ck>T^E;vi+=Z>MW_FH%DeAwuo#-($=!Fa+ z1#a~m8d%bc{3^$vQU&flGLJmfQRQb-eg*Y6HmQC#r_3&|Y5uzRfV%u04sPqiBUK)^ z3A;@I7kk`yud?L7lDqG+KQ@vRTF4tX>^N$U*vpX6jk}mf?PSs*qnz{pbr9v_;1aL<{uZityG z@7s0db}{wjmZ+asQvNUU=((CNZhrP3Z>fIw-c_e(E_fk7l)bI;{(bpO@}}?A^X@f^ zZ-Gns&kfUZcn0k$MaJ3t6yN(ABkv6^@=4Z9zc3>k!Nm{myK(zcewLNzk7mL0R`}{x z_@Cf%UygbA<=8T{Cx5Bhe=qG>3NH4z?~?tCyyH76pBkb5clW!=;F8{$H(vBB<^A^U zzVE6Y^Pt9Crs~XiaM2U*t>wy<=eNMco+hsz*zP@~3-eH>(NDcp%@=e*lSsp^UBqz*WZdJZ8Ek5K<4O7+0C;G)O9 zm)qsbQ&yfQHw!|asXgxdsGWK2Byh=h;N%~md}ANA=MU<6A6)E-zpdqA zUX30&<#X!aR^{3KHWR@`K1qM_axs7ZLV3<>x7ddd;;^$L5KX=ECTlDAozF}9-9}O<$A%C#u;EA+H zp1-x+Ye&iRw1xct5%rJv)+PQ%J*mT0|Bw>(?Z~gy4>`UN=tai+2DsRn;P`5iSyA$h z$~P_5gg!*RtL6OBEI0~W^px{G$}t|h3taq@_vU@pfJ=J)ajG`|(s;ucsp0$6{)yxX zR=_{e|8J1TlUlB7G%y>%C0^sT2X16TXZ9_1*f^%^cXIc= zK=rmUhvG(Q?=NqtA$wE)T5!>m^u|Lz0vErz_p76ZvRmHkwn%8n=_+1KDo*x6ZdN!#guAcm!^6qV>h;F6E- zJ@7p!KZo+}yQI$kKP{(FvtYo_s^5KY)XCpWo@0OQ9-gxRT*^b^sp`)&S>FC2_vd$p zt<&`8yz!;c;G)NU52YRTzY1>4;ZRlFpZrJgw$1EzyWQ7|{N~#QmZN?357o1nB6C}j z|Ag}H`@EM@zUCLTCpKC2xbf=C!Nq>FUdvmK@@v3t{(9}by?!lh=Y&@HOmNZf&rf~R ziu@mzryY|91%OxsE(b!4G(!D&DB_xy}lHrTih5J1hPt96|Z)#FqIY&-dE$ zQ>y%Ip7IU2_|qTH-2HczH|)>ePWe&ba(%h)6yi>4w+AU7@1}MxV0ym<7ya(LV7(|` zf`)OS^7(gg+dkyHp1Xdp02e)e`)3NdzwZ6pR`gf?sd~bE5CqK$yX^!n{&C-zb?v=# zDIfLjFLS`9e$Mee5}}@-sV8}g`r&x;E}K-p`)@8xjmJ%!xdqt}bOzdUL=Pi_``>huiM3zW;UO(~v# zmh`&sgrH`z+a8vqAGApC7X!(YlwZa7VY~dwfQy~czG@G;b-I-(_t#Aw2`>5KzH8<3 z_hxeU-RV83<|S|`&l#^g7h|HKP(F6D9M=oiY5#k@F}eFLG%iEC4JXfCrS?~oPXxFA z@!A_dlDqG7IX^VuIdJhqx}#PwXcpS-L~vUUHz{AidU6VQJ#4{5rS{xL z`K|DLxaf&rr}?r!`B-p?xA9Pw@5FeYAkR!!z9;$H)D!l`F?!+oaMAC+Q|9W!Q^3U! z(|Lb%>752{%cnR0@&n47OTL$T?cr7A z#%q6e#Pi{{9P)t=H=aBIT=e_n(w9&^JWl1^LKFT z&u273cYTcom;OIVpYVjO

%b(9Qoz7-)<&%-{%RdyUl!XiFZ2t>8^aPwH((MpNBn~b`C~|Li}So z=ymid`6b|m>={q_{A~57o@LDERvvb8;AAQDcO&Ja-)R1FIgU9XtbR*8riR1qcAE!o z%fl}!zkv3v1h?hT8_#LimU=E!J;zagZ*Y-c?3LS5lyB^&`cLEi>rwLj7YZt<=M8YV z?w0cU(zA^Dk@EihY;B#|liyG6aqaEB!6jWOuYDr#3lKZqcdOieXD#(K-K{aMWyIUH zE1WOaSPuQaX}mko{#VJA2N!vNe&-u-DgUY8 zH3MCHBicdrxbKVgqn=a2Mc!Y3JDEH+K<#{vHM$~+?ErTE7vdUw1xU1%om=uWxPYcMLy=$Cv(8X9{1f)SC4&X_3-3o z!5&){w)0?c(Npe?qn>T$G4FYy`m-Mg$etxPN2%lAX1=T=kG-zt^9sh@Wh<>8!rp!P zByd}9z3cs1@IwB4gL*PvJ@YH|`0c|TyQ)7k=c%1;+-3-Q6W9N*ru`R@CwZURnf5

PO{S@&mE%$L8Vfo&8t(&)cd6w}Otau; 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%0Aw`esJMcO1 zB)}=;o3s9B==im>EjPzQK5DcQsqohc)1Yi`LV&|Tx3n&jVX8Dl>h<4UjH=rUQy&nE zm#r_`XnomItuF@yvg2_zesamTs^{U(U7b7=;z%W`+&9D0RxT|RTU8YeWZBppY=~OC z@`9|Gz+A&J?SzR-4Lo6zdny839!Su#g_@rYDnLOsvy`72yURcu&B0($X;eF-+YogP zZQ!FtOkgLW=2M26uXUPHzZ`-As8%He1*?^|T7j;jmmOK1J+TLYI3TMCm0xnNetXm4 zoQV3^2p`QDP8v9qq$i2FGF*gpB=i}XF;!Sge{sIpNG60oZQ6|6dYE}ZG$D7^a;g?`!e zvc8h$)m`O9Mf%lNl;#bToYlKTnG)>kcyFdXZEfcdGh|ic6YXHx=e7Ke8S)of+w-hQ zx3A{6+p_7McIo04o`mn6jK!tHC%x}2hF4qc_UmDOy|q1lnBx`vvsm(P;5Eq+jA#6j z;Jaly9nu5hx5c#B+NS#HTif_``zjN^z<|HCja~)#^AcaIZf&R6$t87@Nv_8j zP5y<~j7F#$K#jT+mO;)(O@_cl=Xc+cT!)}Ox? z&&$u>Y2E*;tiOBK^M6!4FF)V1?zf+R2jBm~x4xCh`F}+`FF(iP`ClzQ?fDOJ{a?iY z^7&7Q7s$^KKF%McHPYV6=Rd(OZ%yz?uawXKXL#C18|*1smc5ufkB z=6}og%jf0#|G0SmiFoY&AK<^p&tLPg^7-G4U+w4rV_c&t%JH|}#~<|bKKplz;9LK( z&;L*0Oa1w`-sgAA&kuf`{`A(Cn2!4V&#dP^{LlIQ@>AX~N0EQa&#zd|e?vSkKfki# z{eRJV{{27C-y}bO)z{1w%lFFp{IK=>mw(`&XJ5(B-ym-kpXO*=TYpVFug?EV{P`{M z`3slk0B@OpZv9Q``EULLe_nom_ir~Ju;2gF*7KkEE)EIu^N;>j^LYtB^6Jl6&wu%+ z`1A7f-#nIg@=yEy{}(QQ2mTjiW9$9zAxr`IiBAdV>>~b=@0Xvy62SMJxGtan3*tHX zDentC|DAZA;8#BXfp}hiUR(S3mK;cYem5Sb70c&8^^DJ7e!e9RmR~LBFX8CFz_a@M zpM8ekDL>yA;2>Ws*CRi_$D04vnRt`<+>sB8Px+j@{JZfyU6b?ww0ur{erUb_)AB*_ zxg*|hzh_50FUYBSiq=X$`lo_@{uTT8bK?2MSNO%>hL1la=1Ny2T>M)6F6U0y<*n 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..904e05c --- /dev/null +++ b/_codeql_build_dir/RingBufferTest[1]_tests.cmake @@ -0,0 +1,53 @@ +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 \]]==]) +add_test([=[RingBufferTest.MoveConstructionWithNonTriviallyCopyableType]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.MoveConstructionWithNonTriviallyCopyableType]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.MoveConstructionWithNonTriviallyCopyableType]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.MoveAssignmentWithNonTriviallyCopyableType]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.MoveAssignmentWithNonTriviallyCopyableType]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.MoveAssignmentWithNonTriviallyCopyableType]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.SwapWithNonTriviallyCopyableType]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.SwapWithNonTriviallyCopyableType]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.SwapWithNonTriviallyCopyableType]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.NonMemberSwapWithNonTriviallyCopyableType]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.NonMemberSwapWithNonTriviallyCopyableType]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.NonMemberSwapWithNonTriviallyCopyableType]=] 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 RingBufferTest.MoveConstructionWithNonTriviallyCopyableType RingBufferTest.MoveAssignmentWithNonTriviallyCopyableType RingBufferTest.SwapWithNonTriviallyCopyableType RingBufferTest.NonMemberSwapWithNonTriviallyCopyableType) 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