File indexing completed on 2024-04-06 12:12:31
0001 #include "Utilities/Testing/interface/CppUnit_testdriver.icpp"
0002 #include "cppunit/extensions/HelperMacros.h"
0003
0004 #include "DataFormats/Common/interface/View.h"
0005
0006 class testView : public CppUnit::TestFixture {
0007 CPPUNIT_TEST_SUITE(testView);
0008 CPPUNIT_TEST(basic);
0009 CPPUNIT_TEST(createFromArray);
0010 CPPUNIT_TEST(directAccess);
0011 CPPUNIT_TEST(iterateForward);
0012 CPPUNIT_TEST(iterateBackward);
0013 CPPUNIT_TEST(cloning);
0014 CPPUNIT_TEST(ptrs);
0015 CPPUNIT_TEST_SUITE_END();
0016
0017 public:
0018 testView() {}
0019 ~testView() {}
0020 void setUp() {}
0021 void tearDown() {}
0022
0023 void basic();
0024 void createFromArray();
0025 void directAccess();
0026 void iterateForward();
0027 void iterateBackward();
0028 void cloning();
0029 void ptrs();
0030
0031 private:
0032 typedef int value_type;
0033 typedef edm::View<value_type> View;
0034 typedef View::const_iterator const_iterator;
0035 typedef View::const_reverse_iterator const_reverse_iterator;
0036 typedef View::const_reference const_reference;
0037 typedef View::size_type size_type;
0038 };
0039
0040
0041 CPPUNIT_TEST_SUITE_REGISTRATION(testView);
0042
0043 void testView::basic() {
0044 View v1;
0045 CPPUNIT_ASSERT(v1.size() == 0);
0046 CPPUNIT_ASSERT(v1.empty());
0047 View v2(v1);
0048 CPPUNIT_ASSERT(v1 == v2);
0049 View v3;
0050 v3 = v1;
0051 CPPUNIT_ASSERT(v3 == v1);
0052
0053 CPPUNIT_ASSERT(!(v1 < v2));
0054 CPPUNIT_ASSERT(v1 <= v2);
0055 CPPUNIT_ASSERT(!(v1 > v2));
0056 CPPUNIT_ASSERT(v1 >= v2);
0057 CPPUNIT_ASSERT(!(v1 != v2));
0058 }
0059
0060 void testView::createFromArray() {
0061 value_type vals[] = {1, 2, 3, 4, 5};
0062 size_t sz = sizeof(vals) / sizeof(value_type);
0063
0064 View v1;
0065 edm::View<int>::fill_from_range(vals, vals + sz, v1);
0066 CPPUNIT_ASSERT(v1.size() == 5);
0067 View v2;
0068 edm::View<int>::fill_from_range(vals, vals + sz, v2);
0069 CPPUNIT_ASSERT(v1 == v2);
0070 }
0071
0072 void testView::directAccess() {
0073 value_type vals[] = {1, 2, 3, 4, 5};
0074 size_t sz = sizeof(vals) / sizeof(value_type);
0075
0076 View v1;
0077 edm::View<int>::fill_from_range(vals, vals + sz, v1);
0078 for (size_type i = 0; i < v1.size(); ++i) {
0079 CPPUNIT_ASSERT(v1[i] == vals[i]);
0080 }
0081 }
0082
0083 void testView::iterateForward() {
0084 value_type vals[] = {1, 2, 3, 4, 5};
0085 size_t sz = sizeof(vals) / sizeof(value_type);
0086
0087 View v1;
0088 edm::View<int>::fill_from_range(vals, vals + sz, v1);
0089
0090 const_iterator i = v1.begin();
0091 CPPUNIT_ASSERT(*i == 1);
0092 ++i;
0093 CPPUNIT_ASSERT(*i == 2);
0094 }
0095
0096 void testView::iterateBackward() {
0097 value_type vals[] = {1, 2, 3, 4, 5};
0098 size_t sz = sizeof(vals) / sizeof(value_type);
0099
0100 View v1;
0101 edm::View<int>::fill_from_range(vals, vals + sz, v1);
0102
0103 const_reverse_iterator i = v1.rbegin();
0104 CPPUNIT_ASSERT(*i == 5);
0105 ++i;
0106 CPPUNIT_ASSERT(*i == 4);
0107 }
0108
0109 void testView::cloning() {
0110 value_type vals[] = {1, 2, 3, 4, 5};
0111 size_t sz = sizeof(vals) / sizeof(value_type);
0112
0113 View v1;
0114 edm::View<int>::fill_from_range(vals, vals + sz, v1);
0115
0116 auto base = v1.clone();
0117 CPPUNIT_ASSERT(base);
0118 edm::View<int>* view = dynamic_cast<edm::View<int>*>(base.get());
0119 CPPUNIT_ASSERT(view);
0120 if (view) {
0121 CPPUNIT_ASSERT(*view == v1);
0122 }
0123 }
0124
0125 void testView::ptrs() {
0126 value_type vals[] = {1, 2, 3, 4, 5};
0127 size_t sz = sizeof(vals) / sizeof(value_type);
0128
0129 View v1;
0130 edm::View<int>::fill_from_range(vals, vals + sz, v1);
0131 size_t i = 0;
0132 for (auto ptr : v1.ptrs()) {
0133 CPPUNIT_ASSERT(*ptr == vals[i++]);
0134 }
0135 }