File indexing completed on 2025-07-31 02:19:16
0001
0002
0003
0004
0005
0006
0007 #include <catch.hpp>
0008 #include "FWCore/Utilities/interface/get_underlying_safe.h"
0009 #include "FWCore/Utilities/interface/propagate_const_array.h"
0010
0011 namespace {
0012 class ConstChecker {
0013 public:
0014 int value() { return 0; }
0015
0016 int const value() const { return 1; }
0017 };
0018
0019
0020 class Incomplete;
0021
0022 }
0023
0024 TEST_CASE("propagate_const_array basic operations", "[propagate_const_array]") {
0025 SECTION("test propagate_const_array<T[]>") {
0026 ConstChecker checker[10];
0027 edm::propagate_const_array<ConstChecker[]> pChecker(checker);
0028
0029 REQUIRE(0 == pChecker[1].value());
0030 REQUIRE(0 == pChecker.get()[1].value());
0031 REQUIRE(0 == get_underlying_safe(pChecker)[1].value());
0032
0033 const edm::propagate_const_array<ConstChecker[]> pConstChecker(checker);
0034
0035 REQUIRE(1 == pConstChecker[1].value());
0036 REQUIRE(1 == pConstChecker.get()[1].value());
0037 REQUIRE(1 == get_underlying_safe(pConstChecker)[1].value());
0038 }
0039
0040
0041 SECTION("test for edm::propagate_const_array<shared_ptr<T>>") {
0042
0043 auto checker = std::shared_ptr<ConstChecker[]>(new ConstChecker[10]);
0044 edm::propagate_const_array<std::shared_ptr<ConstChecker[]>> pChecker(checker);
0045
0046 REQUIRE(0 == pChecker[1].value());
0047 REQUIRE(0 == pChecker.get()[1].value());
0048 REQUIRE(0 == get_underlying_safe(pChecker)[1].value());
0049
0050 const edm::propagate_const_array<std::shared_ptr<ConstChecker[]>> pConstChecker(checker);
0051
0052 REQUIRE(1 == pConstChecker[1].value());
0053 REQUIRE(1 == pConstChecker.get()[1].value());
0054 REQUIRE(1 == get_underlying_safe(pConstChecker)[1].value());
0055 }
0056
0057 SECTION("test for edm::propagate_const_array<unique_ptr<T>>") {
0058 auto checker = std::make_unique<ConstChecker[]>(10);
0059 edm::propagate_const_array<std::unique_ptr<ConstChecker[]>> pChecker(std::move(checker));
0060
0061 REQUIRE(0 == pChecker[1].value());
0062 REQUIRE(0 == pChecker.get()[1].value());
0063 REQUIRE(0 == get_underlying_safe(pChecker)[1].value());
0064
0065 const edm::propagate_const_array<std::unique_ptr<ConstChecker[]>> pConstChecker(
0066 std::make_unique<ConstChecker[]>(10));
0067
0068 REQUIRE(1 == pConstChecker[1].value());
0069 REQUIRE(1 == pConstChecker.get()[1].value());
0070 }
0071
0072 SECTION("test for edm::propagate_const_array<T[]> with incomplete types") {
0073 edm::propagate_const_array<Incomplete[]> pIncomplete(nullptr);
0074
0075 REQUIRE(nullptr == get_underlying(pIncomplete));
0076 }
0077 }