File indexing completed on 2026-07-26 08:22:23
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <gtest/gtest.h>
0010
0011 #include "traccc/utils/subspace.hpp"
0012
0013 using namespace traccc;
0014
0015 TEST(subspace, init) {
0016 const std::array<detray::dindex_type<default_algebra>, 2> indices{1, 2};
0017 subspace<default_algebra, 6, 2> s{indices};
0018
0019 ASSERT_EQ(s.get_index(0), indices[0]);
0020 ASSERT_EQ(s.get_index(1), indices[1]);
0021 ASSERT_EQ(s.get_sign(0), false);
0022 ASSERT_EQ(s.get_sign(1), false);
0023 ASSERT_EQ(s.get_valid(0), true);
0024 ASSERT_EQ(s.get_valid(1), true);
0025
0026 const auto H = s.projector<2>();
0027
0028 ASSERT_EQ(getter::element(H, 0, 0), 0);
0029 ASSERT_EQ(getter::element(H, 0, 1), 1);
0030 ASSERT_EQ(getter::element(H, 0, 2), 0);
0031 ASSERT_EQ(getter::element(H, 0, 3), 0);
0032 ASSERT_EQ(getter::element(H, 0, 4), 0);
0033 ASSERT_EQ(getter::element(H, 0, 5), 0);
0034 ASSERT_EQ(getter::element(H, 1, 0), 0);
0035 ASSERT_EQ(getter::element(H, 1, 1), 0);
0036 ASSERT_EQ(getter::element(H, 1, 2), 1);
0037 ASSERT_EQ(getter::element(H, 1, 3), 0);
0038 ASSERT_EQ(getter::element(H, 1, 4), 0);
0039 ASSERT_EQ(getter::element(H, 1, 5), 0);
0040 }
0041
0042 TEST(subspace, set_index) {
0043 const std::array<detray::dindex_type<default_algebra>, 2> indices{1, 2};
0044 subspace<default_algebra, 6, 2> s{indices};
0045
0046 s.set_index(0, 5);
0047
0048 ASSERT_EQ(s.get_index(0), 5);
0049 ASSERT_EQ(s.get_index(1), indices[1]);
0050 ASSERT_EQ(s.get_sign(0), false);
0051 ASSERT_EQ(s.get_sign(1), false);
0052 ASSERT_EQ(s.get_valid(0), true);
0053 ASSERT_EQ(s.get_valid(1), true);
0054
0055 s.set_index(1, 4);
0056
0057 ASSERT_EQ(s.get_index(0), 5);
0058 ASSERT_EQ(s.get_index(1), 4);
0059 ASSERT_EQ(s.get_sign(0), false);
0060 ASSERT_EQ(s.get_sign(1), false);
0061 ASSERT_EQ(s.get_valid(0), true);
0062 ASSERT_EQ(s.get_valid(1), true);
0063
0064 s.set_index(0, 3);
0065
0066 ASSERT_EQ(s.get_index(0), 3);
0067 ASSERT_EQ(s.get_index(1), 4);
0068 ASSERT_EQ(s.get_sign(0), false);
0069 ASSERT_EQ(s.get_sign(1), false);
0070 ASSERT_EQ(s.get_valid(0), true);
0071 ASSERT_EQ(s.get_valid(1), true);
0072
0073 s.set_index(1, 0);
0074
0075 ASSERT_EQ(s.get_index(0), 3);
0076 ASSERT_EQ(s.get_index(1), 0);
0077 ASSERT_EQ(s.get_sign(0), false);
0078 ASSERT_EQ(s.get_sign(1), false);
0079 ASSERT_EQ(s.get_valid(0), true);
0080 ASSERT_EQ(s.get_valid(1), true);
0081
0082 const auto H = s.projector<2>();
0083
0084 ASSERT_EQ(getter::element(H, 0, 0), 0);
0085 ASSERT_EQ(getter::element(H, 0, 1), 0);
0086 ASSERT_EQ(getter::element(H, 0, 2), 0);
0087 ASSERT_EQ(getter::element(H, 0, 3), 1);
0088 ASSERT_EQ(getter::element(H, 0, 4), 0);
0089 ASSERT_EQ(getter::element(H, 0, 5), 0);
0090 ASSERT_EQ(getter::element(H, 1, 0), 1);
0091 ASSERT_EQ(getter::element(H, 1, 1), 0);
0092 ASSERT_EQ(getter::element(H, 1, 2), 0);
0093 ASSERT_EQ(getter::element(H, 1, 3), 0);
0094 ASSERT_EQ(getter::element(H, 1, 4), 0);
0095 ASSERT_EQ(getter::element(H, 1, 5), 0);
0096 }
0097
0098 TEST(subspace, set_sign) {
0099 const std::array<detray::dindex_type<default_algebra>, 2> indices{1, 2};
0100 subspace<default_algebra, 6, 2> s{indices};
0101
0102 s.set_sign(0, true);
0103
0104 ASSERT_EQ(s.get_index(0), 1);
0105 ASSERT_EQ(s.get_index(1), 2);
0106 ASSERT_EQ(s.get_sign(0), true);
0107 ASSERT_EQ(s.get_sign(1), false);
0108 ASSERT_EQ(s.get_valid(0), true);
0109 ASSERT_EQ(s.get_valid(1), true);
0110
0111 s.set_sign(1, true);
0112
0113 ASSERT_EQ(s.get_index(0), 1);
0114 ASSERT_EQ(s.get_index(1), 2);
0115 ASSERT_EQ(s.get_sign(0), true);
0116 ASSERT_EQ(s.get_sign(1), true);
0117 ASSERT_EQ(s.get_valid(0), true);
0118 ASSERT_EQ(s.get_valid(1), true);
0119
0120 const auto H1 = s.projector<2>();
0121
0122 ASSERT_EQ(getter::element(H1, 0, 0), 0);
0123 ASSERT_EQ(getter::element(H1, 0, 1), -1);
0124 ASSERT_EQ(getter::element(H1, 0, 2), 0);
0125 ASSERT_EQ(getter::element(H1, 0, 3), 0);
0126 ASSERT_EQ(getter::element(H1, 0, 4), 0);
0127 ASSERT_EQ(getter::element(H1, 0, 5), 0);
0128 ASSERT_EQ(getter::element(H1, 1, 0), 0);
0129 ASSERT_EQ(getter::element(H1, 1, 1), 0);
0130 ASSERT_EQ(getter::element(H1, 1, 2), -1);
0131 ASSERT_EQ(getter::element(H1, 1, 3), 0);
0132 ASSERT_EQ(getter::element(H1, 1, 4), 0);
0133 ASSERT_EQ(getter::element(H1, 1, 5), 0);
0134
0135 s.set_sign(0, false);
0136
0137 ASSERT_EQ(s.get_index(0), 1);
0138 ASSERT_EQ(s.get_index(1), 2);
0139 ASSERT_EQ(s.get_sign(0), false);
0140 ASSERT_EQ(s.get_sign(1), true);
0141 ASSERT_EQ(s.get_valid(0), true);
0142 ASSERT_EQ(s.get_valid(1), true);
0143
0144 const auto H2 = s.projector<2>();
0145
0146 ASSERT_EQ(getter::element(H2, 0, 0), 0);
0147 ASSERT_EQ(getter::element(H2, 0, 1), 1);
0148 ASSERT_EQ(getter::element(H2, 0, 2), 0);
0149 ASSERT_EQ(getter::element(H2, 0, 3), 0);
0150 ASSERT_EQ(getter::element(H2, 0, 4), 0);
0151 ASSERT_EQ(getter::element(H2, 0, 5), 0);
0152 ASSERT_EQ(getter::element(H2, 1, 0), 0);
0153 ASSERT_EQ(getter::element(H2, 1, 1), 0);
0154 ASSERT_EQ(getter::element(H2, 1, 2), -1);
0155 ASSERT_EQ(getter::element(H2, 1, 3), 0);
0156 ASSERT_EQ(getter::element(H2, 1, 4), 0);
0157 ASSERT_EQ(getter::element(H2, 1, 5), 0);
0158 }
0159
0160 TEST(subspace, set_invalid) {
0161 const std::array<detray::dindex_type<default_algebra>, 2> indices{1, 2};
0162 subspace<default_algebra, 6, 2> s{indices};
0163
0164 s.set_invalid(1);
0165
0166 ASSERT_EQ(s.get_index(0), 1);
0167 ASSERT_EQ(s.get_sign(0), false);
0168 ASSERT_EQ(s.get_valid(0), true);
0169 ASSERT_EQ(s.get_valid(1), false);
0170
0171 const auto H1 = s.projector<2>();
0172
0173 ASSERT_EQ(getter::element(H1, 0, 0), 0);
0174 ASSERT_EQ(getter::element(H1, 0, 1), 1);
0175 ASSERT_EQ(getter::element(H1, 0, 2), 0);
0176 ASSERT_EQ(getter::element(H1, 0, 3), 0);
0177 ASSERT_EQ(getter::element(H1, 0, 4), 0);
0178 ASSERT_EQ(getter::element(H1, 0, 5), 0);
0179 ASSERT_EQ(getter::element(H1, 1, 0), 0);
0180 ASSERT_EQ(getter::element(H1, 1, 1), 0);
0181 ASSERT_EQ(getter::element(H1, 1, 2), 0);
0182 ASSERT_EQ(getter::element(H1, 1, 3), 0);
0183 ASSERT_EQ(getter::element(H1, 1, 4), 0);
0184 ASSERT_EQ(getter::element(H1, 1, 5), 0);
0185
0186 s.set_index(1, 5);
0187
0188 ASSERT_EQ(s.get_index(0), 1);
0189 ASSERT_EQ(s.get_index(1), 5);
0190 ASSERT_EQ(s.get_sign(0), false);
0191 ASSERT_EQ(s.get_sign(1), false);
0192 ASSERT_EQ(s.get_valid(0), true);
0193 ASSERT_EQ(s.get_valid(1), true);
0194
0195 const auto H2 = s.projector<2>();
0196
0197 ASSERT_EQ(getter::element(H2, 0, 0), 0);
0198 ASSERT_EQ(getter::element(H2, 0, 1), 1);
0199 ASSERT_EQ(getter::element(H2, 0, 2), 0);
0200 ASSERT_EQ(getter::element(H2, 0, 3), 0);
0201 ASSERT_EQ(getter::element(H2, 0, 4), 0);
0202 ASSERT_EQ(getter::element(H2, 0, 5), 0);
0203 ASSERT_EQ(getter::element(H2, 1, 0), 0);
0204 ASSERT_EQ(getter::element(H2, 1, 1), 0);
0205 ASSERT_EQ(getter::element(H2, 1, 2), 0);
0206 ASSERT_EQ(getter::element(H2, 1, 3), 0);
0207 ASSERT_EQ(getter::element(H2, 1, 4), 0);
0208 ASSERT_EQ(getter::element(H2, 1, 5), 1);
0209 }