File indexing completed on 2024-04-06 12:13:15
0001 #include <cppunit/extensions/HelperMacros.h>
0002
0003 #include "FWCore/Utilities/interface/VecArray.h"
0004
0005 class testVecArray : public CppUnit::TestFixture {
0006 CPPUNIT_TEST_SUITE(testVecArray);
0007 CPPUNIT_TEST(test);
0008 CPPUNIT_TEST_SUITE_END();
0009
0010 public:
0011 void setUp() {}
0012 void tearDown() {}
0013
0014 void test();
0015 template <typename T>
0016 void testIterators(T& array);
0017 template <typename T>
0018 void testIterator(T iter, T end);
0019 };
0020
0021
0022 CPPUNIT_TEST_SUITE_REGISTRATION(testVecArray);
0023
0024 void testVecArray::test() {
0025 edm::VecArray<int, 4> array;
0026 CPPUNIT_ASSERT(array.empty());
0027 CPPUNIT_ASSERT(array.size() == 0);
0028 CPPUNIT_ASSERT(array.capacity() == 4);
0029 CPPUNIT_ASSERT((edm::VecArray<int, 4>::capacity() == 4));
0030
0031 auto iter = array.begin();
0032 auto end = array.end();
0033 CPPUNIT_ASSERT(iter == end);
0034
0035 array.push_back_unchecked(1);
0036 CPPUNIT_ASSERT(!array.empty());
0037 CPPUNIT_ASSERT(array.size() == 1);
0038 CPPUNIT_ASSERT(array.front() == 1);
0039 CPPUNIT_ASSERT(array.back() == 1);
0040 iter = array.begin();
0041 end = array.end();
0042 CPPUNIT_ASSERT(iter != end);
0043 CPPUNIT_ASSERT(*iter == 1);
0044 ++iter;
0045 CPPUNIT_ASSERT(iter == end);
0046
0047 array.emplace_back_unchecked(2);
0048 CPPUNIT_ASSERT(array.size() == 2);
0049 CPPUNIT_ASSERT(array.back() == 2);
0050 array.push_back(3);
0051 CPPUNIT_ASSERT(array.size() == 3);
0052 CPPUNIT_ASSERT(array.back() == 3);
0053 array.emplace_back(4);
0054 CPPUNIT_ASSERT(array.size() == 4);
0055 CPPUNIT_ASSERT(array.front() == 1);
0056 CPPUNIT_ASSERT(array.back() == 4);
0057 CPPUNIT_ASSERT(array[0] == 1 && array[1] == 2 && array[2] == 3 && array[3] == 4);
0058
0059 CPPUNIT_ASSERT_THROW(array.push_back(5), std::length_error);
0060 CPPUNIT_ASSERT_THROW(array.emplace_back(5), std::length_error);
0061
0062 auto ptr = array.data();
0063 CPPUNIT_ASSERT(ptr[0] == 1 && ptr[1] == 2 && ptr[2] == 3 && ptr[3] == 4);
0064
0065 testIterators(array);
0066 testIterators(const_cast<const decltype(array)&>(array));
0067
0068 edm::VecArray<int, 4> array2;
0069 array2.push_back(11);
0070 array2.push_back(12);
0071
0072 array.swap(array2);
0073 CPPUNIT_ASSERT(array.size() == 2);
0074 CPPUNIT_ASSERT(array2.size() == 4);
0075 CPPUNIT_ASSERT(array[0] == 11 && array[1] == 12);
0076 CPPUNIT_ASSERT(array2[0] == 1 && array2[1] == 2 && array2[2] == 3 && array2[3] == 4);
0077
0078 array = array2;
0079 CPPUNIT_ASSERT(array.size() == array2.size());
0080 CPPUNIT_ASSERT(array.size() == 4);
0081 CPPUNIT_ASSERT(array[0] == 1 && array[1] == 2 && array[2] == 3 && array[3] == 4);
0082 CPPUNIT_ASSERT(array2[0] == 1 && array2[1] == 2 && array2[2] == 3 && array2[3] == 4);
0083
0084 ptr = array.data();
0085 ptr[1] = 10;
0086 iter = array.begin() + 1;
0087 CPPUNIT_ASSERT(*iter == 10);
0088
0089 iter = array.begin() + 2;
0090 *iter = 50;
0091 CPPUNIT_ASSERT(array[0] == 1 && array[1] == 10 && array[2] == 50 && array[3] == 4);
0092
0093 CPPUNIT_ASSERT(!array.empty());
0094 array.clear();
0095 CPPUNIT_ASSERT(array.empty());
0096 CPPUNIT_ASSERT(array.size() == 0);
0097 CPPUNIT_ASSERT(array2.size() == 4);
0098
0099 array.resize(2);
0100 CPPUNIT_ASSERT(array.size() == 2);
0101 array.pop_back();
0102 CPPUNIT_ASSERT(array.size() == 1);
0103 CPPUNIT_ASSERT_THROW(array.resize(6), std::length_error);
0104 CPPUNIT_ASSERT(array.size() == 1);
0105 array.resize(4);
0106 CPPUNIT_ASSERT(array.size() == 4);
0107 array.resize(1);
0108 CPPUNIT_ASSERT(array.size() == 1);
0109 }
0110
0111 template <typename T>
0112 void testVecArray::testIterators(T& array) {
0113 testIterator(array.begin(), array.end());
0114 testIterator(array.cbegin(), array.cend());
0115 }
0116 template <typename T>
0117 void testVecArray::testIterator(T iter, T end) {
0118 CPPUNIT_ASSERT(iter != end);
0119 CPPUNIT_ASSERT(*iter == 1);
0120 ++iter;
0121 CPPUNIT_ASSERT(iter != end);
0122 CPPUNIT_ASSERT(*iter == 2);
0123 ++iter;
0124 CPPUNIT_ASSERT(iter != end);
0125 CPPUNIT_ASSERT(*iter == 3);
0126 ++iter;
0127 CPPUNIT_ASSERT(iter != end);
0128 CPPUNIT_ASSERT(*iter == 4);
0129 ++iter;
0130 CPPUNIT_ASSERT(iter == end);
0131 }