2 #include <doctest/doctest.h> 24 template <
class T,
bool triangular = false>
class PairMatrix 28 std::vector<std::vector<T>> matrix;
34 for (
size_t i = 0; i < matrix.size(); i++) {
35 if constexpr (triangular) {
36 matrix[i].resize(i + 1, default_value);
39 matrix[i].resize(n, default_value);
50 auto size()
const {
return matrix.size(); }
52 inline const T& operator()(
size_t i,
size_t j)
const 54 if constexpr (triangular) {
59 assert(i < matrix.size());
60 assert(j < matrix[i].size());
64 void set(
size_t i,
size_t j,
T val)
69 if (i >= matrix.size()) {
72 if constexpr (!triangular) {
81 for (
size_t i = 0; i < matrix.size(); i++) {
82 for (
size_t j = 0; j < matrix.size(); j++) {
88 void setZero() {
set(
T()); }
91 TEST_CASE(
"[Faunus] PairMatrix")
95 SUBCASE(
"full matrix")
99 CHECK_EQ(m.size(), 4);
100 CHECK_EQ(m(i, j), 12.1);
101 CHECK_EQ(m(i, j), m(j, i));
102 CHECK_EQ(m(0, 2), 0);
103 CHECK_EQ(m(2, 0), 0);
106 SUBCASE(
"full matrix - default value")
109 for (
size_t i = 0; i < 5; i++)
110 for (
size_t j = 0; j < 5; j++)
111 CHECK_EQ(m(i, j), 3.1);
114 SUBCASE(
"triangular matrix - default value")
117 for (
size_t i = 0; i < 5; i++)
118 for (
size_t j = 0; j < 5; j++)
119 CHECK_EQ(m(i, j), 3.1);
122 SUBCASE(
"triangular matrix")
126 CHECK_EQ(m.size(), 4);
127 CHECK_EQ(m(i, j), 12.1);
128 CHECK_EQ(m(i, j), m(j, i));
129 CHECK_EQ(m(0, 2), 0);
130 CHECK_EQ(m(2, 0), 0);
double T
floating point size
Definition: units.h:73
Cell list class templates.
Definition: actions.cpp:11
Container for data between pairs.
Definition: pairmatrix.h:24