Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
#define CATCH_CONFIG_MAIN
#include "catch.hpp"

#include "DataFormats/Common/interface/StdArray.h"

TEST_CASE("StdArray", "[StdArray]") {
  SECTION("Empty array") {
    edm::StdArray<int, 0> array;
    REQUIRE(array.empty());
    REQUIRE(array.begin() == array.end());
    REQUIRE(array.rbegin() == array.rend());
    for ([[maybe_unused]] auto element : array) {
      REQUIRE(false);
    }
    REQUIRE(std::data(array) == nullptr);
    REQUIRE(std::size(array) == 0);
  }

  SECTION("Default constructor") {
    edm::StdArray<int, 4> array;
    REQUIRE(not array.empty());
    REQUIRE(array.size() == 4);
    REQUIRE(std::data(array) != nullptr);
    REQUIRE(std::size(array) != 0);
  }

  SECTION("Aggregate constructor") {
    edm::StdArray<int, 4> array{{0, 1, 2, 3}};
    REQUIRE(not array.empty());
    REQUIRE(array.size() == 4);
    REQUIRE(array.front() == 0);
    REQUIRE(array.back() == 3);
    for (int i = 0; i < 4; ++i) {
      REQUIRE(array.at(i) == i);
      REQUIRE(array[i] == i);
    }
    REQUIRE(std::data(array) != nullptr);
    REQUIRE(std::size(array) != 0);
  }

  SECTION("Copy constructor") {
    edm::StdArray<int, 4> array{{0, 1, 2, 3}};
    edm::StdArray<int, 4> other = array;
    for (int i = 0; i < 4; ++i) {
      REQUIRE(other[i] == i);
    }
  }

  SECTION("Move constructor") {
    edm::StdArray<int, 4> array{{0, 1, 2, 3}};
    edm::StdArray<int, 4> other = std::move(array);
    for (int i = 0; i < 4; ++i) {
      REQUIRE(other[i] == i);
    }
  }

  SECTION("Copy assignment") {
    edm::StdArray<int, 4> array{{0, 1, 2, 3}};
    edm::StdArray<int, 4> other;
    other = array;
    for (int i = 0; i < 4; ++i) {
      REQUIRE(other[i] == i);
    }
  }

  SECTION("Move assignment") {
    edm::StdArray<int, 4> array{{0, 1, 2, 3}};
    edm::StdArray<int, 4> other;
    other = std::move(array);
    for (int i = 0; i < 4; ++i) {
      REQUIRE(other[i] == i);
    }
  }

  SECTION("Assignment from std::array") {
    edm::StdArray<int, 4> array;
    std::array<int, 4> other{{0, 1, 2, 3}};
    array = other;
    for (int i = 0; i < 4; ++i) {
      REQUIRE(array[i] == i);
    }
  }

  SECTION("Assignment to std::array") {
    edm::StdArray<int, 4> array{{0, 1, 2, 3}};
    std::array<int, 4> other = array;
    for (int i = 0; i < 4; ++i) {
      REQUIRE(other[i] == i);
    }
  }
}