Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-07-31 02:19:16

0001 #include <catch.hpp>
0002 
0003 #include "FWCore/Utilities/interface/VecArray.h"
0004 
0005 template <typename T>
0006 void testIterator(T iter, T end) {
0007   REQUIRE(iter != end);
0008   REQUIRE(*iter == 1);
0009   ++iter;
0010   REQUIRE(iter != end);
0011   REQUIRE(*iter == 2);
0012   ++iter;
0013   REQUIRE(iter != end);
0014   REQUIRE(*iter == 3);
0015   ++iter;
0016   REQUIRE(iter != end);
0017   REQUIRE(*iter == 4);
0018   ++iter;
0019   REQUIRE(iter == end);
0020 }
0021 
0022 template <typename T>
0023 void testIterators(T& array) {
0024   testIterator(array.begin(), array.end());
0025   testIterator(array.cbegin(), array.cend());
0026 }
0027 
0028 TEST_CASE("edm::VecArray", "[VecArray]") {
0029   edm::VecArray<int, 4> array;
0030   REQUIRE(array.empty());
0031   REQUIRE(array.size() == 0);
0032   REQUIRE(array.capacity() == 4);
0033   REQUIRE((edm::VecArray<int, 4>::capacity() == 4));
0034 
0035   auto iter = array.begin();
0036   auto end = array.end();
0037   REQUIRE(iter == end);
0038 
0039   array.push_back_unchecked(1);
0040   REQUIRE(!array.empty());
0041   REQUIRE(array.size() == 1);
0042   REQUIRE(array.front() == 1);
0043   REQUIRE(array.back() == 1);
0044   iter = array.begin();
0045   end = array.end();
0046   REQUIRE(iter != end);
0047   REQUIRE(*iter == 1);
0048   ++iter;
0049   REQUIRE(iter == end);
0050 
0051   array.emplace_back_unchecked(2);
0052   REQUIRE(array.size() == 2);
0053   REQUIRE(array.back() == 2);
0054   array.push_back(3);
0055   REQUIRE(array.size() == 3);
0056   REQUIRE(array.back() == 3);
0057   array.emplace_back(4);
0058   REQUIRE(array.size() == 4);
0059   REQUIRE(array.front() == 1);
0060   REQUIRE(array.back() == 4);
0061   REQUIRE((array[0] == 1 && array[1] == 2 && array[2] == 3 && array[3] == 4));
0062 
0063   REQUIRE_THROWS_AS(array.push_back(5), std::length_error);
0064   REQUIRE_THROWS_AS(array.emplace_back(5), std::length_error);
0065 
0066   auto ptr = array.data();
0067   REQUIRE((ptr[0] == 1 && ptr[1] == 2 && ptr[2] == 3 && ptr[3] == 4));
0068 
0069   testIterators(array);
0070   testIterators(const_cast<const decltype(array)&>(array));
0071 
0072   edm::VecArray<int, 4> array2;
0073   array2.push_back(11);
0074   array2.push_back(12);
0075 
0076   array.swap(array2);
0077   REQUIRE(array.size() == 2);
0078   REQUIRE(array2.size() == 4);
0079   REQUIRE((array[0] == 11 && array[1] == 12));
0080   REQUIRE((array2[0] == 1 && array2[1] == 2 && array2[2] == 3 && array2[3] == 4));
0081 
0082   array = array2;
0083   REQUIRE(array.size() == array2.size());
0084   REQUIRE(array.size() == 4);
0085   REQUIRE((array[0] == 1 && array[1] == 2 && array[2] == 3 && array[3] == 4));
0086   REQUIRE((array2[0] == 1 && array2[1] == 2 && array2[2] == 3 && array2[3] == 4));
0087 
0088   ptr = array.data();
0089   ptr[1] = 10;
0090   iter = array.begin() + 1;
0091   REQUIRE(*iter == 10);
0092 
0093   iter = array.begin() + 2;
0094   *iter = 50;
0095   REQUIRE((array[0] == 1 && array[1] == 10 && array[2] == 50 && array[3] == 4));
0096 
0097   REQUIRE(!array.empty());
0098   array.clear();
0099   REQUIRE(array.empty());
0100   REQUIRE(array.size() == 0);
0101   REQUIRE(array2.size() == 4);
0102 
0103   array.resize(2);
0104   REQUIRE(array.size() == 2);
0105   array.pop_back();
0106   REQUIRE(array.size() == 1);
0107   REQUIRE_THROWS_AS(array.resize(6), std::length_error);
0108   REQUIRE(array.size() == 1);
0109   array.resize(4);
0110   REQUIRE(array.size() == 4);
0111   array.resize(1);
0112   REQUIRE(array.size() == 1);
0113 }