Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-07-26 08:22:23

0001 /**
0002  * traccc library, part of the ACTS project (R&D line)
0003  *
0004  * (c) 2026 CERN for the benefit of the ACTS project
0005  *
0006  * Mozilla Public License Version 2.0
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 }