File indexing completed on 2024-08-24 09:50:40
0001 #include "catch.hpp"
0002
0003 #include "DataFormats/Common/interface/RefToBase.h"
0004 #include "DataFormats/Common/interface/Ref.h"
0005 #include "DataFormats/Common/interface/TestHandle.h"
0006
0007 #include <vector>
0008
0009 namespace testreftobase {
0010 struct Base {
0011 virtual ~Base() {}
0012 virtual int val() const = 0;
0013 };
0014
0015 struct Inherit1 : public Base {
0016 virtual int val() const { return 1; }
0017 };
0018 struct Inherit2 : public Base {
0019 virtual int val() const { return 2; }
0020 };
0021 }
0022
0023 using namespace testreftobase;
0024
0025 TEST_CASE("test RefToBase", "[RefToBase]") {
0026 SECTION("Class type") {
0027 using namespace edm;
0028
0029 std::vector<Inherit1> v1(2, Inherit1());
0030
0031 TestHandle<std::vector<Inherit1> > h1(&v1, ProductID(1, 1));
0032 Ref<std::vector<Inherit1> > r1(h1, 1);
0033 RefToBase<Base> b1(r1);
0034
0035 SECTION("Value check") {
0036 CHECK(&(*b1) == static_cast<Base*>(&(v1[1])));
0037 CHECK(b1.operator->() == b1.get());
0038 CHECK(b1.get() == static_cast<Base*>(&(v1[1])));
0039 CHECK(b1.id() == ProductID(1, 1));
0040 }
0041 SECTION("Copy constructor") {
0042
0043 RefToBase<Base> b2(b1);
0044 CHECK(&(*b2) == static_cast<Base*>(&(v1[1])));
0045 CHECK(b2.id() == b1.id());
0046 }
0047
0048 SECTION("operator=") {
0049
0050 RefToBase<Base> b3;
0051 CHECK(b3.isNull());
0052 CHECK(!(b3.isNonnull()));
0053 CHECK(!b3);
0054 b3 = b1;
0055 CHECK(&(*b3) == static_cast<Base*>(&(v1[1])));
0056 CHECK(b3.id() == b1.id());
0057 CHECK(!(b3.isNull()));
0058 CHECK(b3.isNonnull());
0059 CHECK(!(!b3));
0060 }
0061
0062 SECTION("castTo inheriting type") { CHECK(b1.castTo<Ref<std::vector<Inherit1> > >() == r1); }
0063 SECTION("castTo incorrect inherting type") {
0064 CHECK_THROWS_AS(b1.castTo<Ref<std::vector<Inherit2> > >(), cms::Exception);
0065 }
0066
0067
0068
0069
0070
0071 }
0072
0073 SECTION("builtin type") {
0074 using namespace edm;
0075 std::vector<int> v1(2, 3);
0076
0077 TestHandle<std::vector<int> > h1(&v1, ProductID(1, 1));
0078 Ref<std::vector<int> > r1(h1, 1);
0079 RefToBase<int> b1(r1);
0080
0081 SECTION("Value check") {
0082 CHECK(&(*b1) == &v1[1]);
0083 CHECK(b1.operator->() == b1.get());
0084 CHECK(b1.get() == (&(v1[1])));
0085 CHECK(b1.id() == ProductID(1, 1));
0086 }
0087 SECTION("castTo Ref") { CHECK(b1.castTo<Ref<std::vector<int> > >() == r1); }
0088
0089
0090
0091 }
0092 }