File indexing completed on 2024-04-06 12:03:56
0001 #include "cppunit/extensions/HelperMacros.h"
0002 #include "DataFormats/Provenance/interface/ProductID.h"
0003 #include "DataFormats/Common/interface/DetSetRefVector.h"
0004 #include "DataFormats/Common/interface/TestHandle.h"
0005
0006 class testDetSetRefVector : public CppUnit::TestFixture {
0007 CPPUNIT_TEST_SUITE(testDetSetRefVector);
0008 CPPUNIT_TEST(checkConstruction);
0009 CPPUNIT_TEST(checkFind);
0010 CPPUNIT_TEST_SUITE_END();
0011
0012 public:
0013 void setUp() {}
0014 void tearDown() {}
0015 void checkConstruction();
0016 void checkFind();
0017 };
0018
0019 CPPUNIT_TEST_SUITE_REGISTRATION(testDetSetRefVector);
0020 namespace testdetsetrefvector {
0021 class Value {
0022 public:
0023
0024 Value() : d_(0.0) {}
0025
0026
0027
0028 explicit Value(double d) : d_(d) {}
0029
0030
0031
0032 double val() const { return d_; }
0033
0034
0035 ~Value() {}
0036
0037
0038 bool operator<(Value const& other) const { return d_ < other.d_; }
0039
0040
0041
0042 private:
0043 double d_;
0044 };
0045
0046 }
0047
0048 using namespace testdetsetrefvector;
0049 typedef edm::DetSetVector<Value> dsv_type;
0050 typedef dsv_type::detset detset;
0051
0052 void testDetSetRefVector::checkConstruction() {
0053 dsv_type c;
0054 detset d3;
0055 Value v1(1.1);
0056 Value v2(2.2);
0057 d3.id = edm::det_id_type(3);
0058 d3.data.push_back(v1);
0059 d3.data.push_back(v2);
0060 c.insert(d3);
0061 detset d1;
0062 Value v1a(4.1);
0063 Value v2a(3.2);
0064 d1.id = edm::det_id_type(1);
0065 d1.data.push_back(v1a);
0066 d1.data.push_back(v2a);
0067 c.insert(d1);
0068 c.post_insert();
0069
0070 edm::TestHandle<dsv_type> pc2(&c, edm::ProductID(1, 1));
0071
0072 {
0073 std::vector<edm::det_id_type> ids;
0074 ids.push_back(1);
0075 ids.push_back(3);
0076
0077 edm::DetSetRefVector<Value> refVector(pc2, ids);
0078 CPPUNIT_ASSERT(refVector.size() == ids.size());
0079
0080 dsv_type::const_iterator dsvItr = c.begin();
0081 for (edm::DetSetRefVector<Value>::const_iterator it = refVector.begin(), itEnd = refVector.end(); it != itEnd;
0082 ++it, ++dsvItr) {
0083 CPPUNIT_ASSERT(it->id == dsvItr->id);
0084 CPPUNIT_ASSERT(it->data.size() == dsvItr->data.size());
0085 }
0086 }
0087
0088 {
0089 std::vector<edm::det_id_type> ids;
0090 ids.push_back(3);
0091
0092 edm::DetSetRefVector<Value> refVector(pc2, ids);
0093 CPPUNIT_ASSERT(refVector.size() == ids.size());
0094
0095 edm::DetSetRefVector<Value>::const_iterator itRef = refVector.begin();
0096 for (std::vector<edm::det_id_type>::const_iterator itId = ids.begin(), itIdEnd = ids.end(); itId != itIdEnd;
0097 ++itRef, ++itId) {
0098 CPPUNIT_ASSERT(itRef->id == *itId);
0099 CPPUNIT_ASSERT(itRef->id == c.find(*itId)->id);
0100 CPPUNIT_ASSERT(itRef->data.size() == c.find(*itId)->data.size());
0101 }
0102 }
0103 }
0104
0105 void testDetSetRefVector::checkFind() {
0106 dsv_type c;
0107 detset d3;
0108 Value v1(1.1);
0109 Value v2(2.2);
0110 d3.id = edm::det_id_type(3);
0111 d3.data.push_back(v1);
0112 d3.data.push_back(v2);
0113 c.insert(d3);
0114 detset d1;
0115 Value v1a(4.1);
0116 Value v2a(3.2);
0117 d1.id = edm::det_id_type(1);
0118 d1.data.push_back(v1a);
0119 d1.data.push_back(v2a);
0120 c.insert(d1);
0121 c.post_insert();
0122
0123 edm::TestHandle<dsv_type> pc2(&c, edm::ProductID(1, 1));
0124
0125 {
0126 std::vector<edm::det_id_type> ids;
0127 ids.push_back(1);
0128 ids.push_back(3);
0129
0130 edm::DetSetRefVector<Value> refVector(pc2, ids);
0131
0132 CPPUNIT_ASSERT(refVector.find(1)->id == c.find(1)->id);
0133 CPPUNIT_ASSERT(refVector.find(3)->id == c.find(3)->id);
0134 CPPUNIT_ASSERT(refVector.find(4) == refVector.end());
0135 }
0136 }