Project
Loading...
Searching...
No Matches
test_Concepts.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12#include "Framework/Concepts.h"
13#include <TH1.h>
14#include "Framework/ASoA.h"
19#include "Framework/Condition.h"
21
22#include <catch_amalgamated.hpp>
23
24using namespace o2::framework;
25using namespace o2::soa;
26using namespace o2;
27
28struct P {
30 {
31 }
32
34};
35
36namespace o2::aod
37{
38namespace ct
39{
41}
42DECLARE_SOA_CONFIGURABLE_EXTENDED_TABLE(TracksMore, TracksIU, "TRKMORE", ct::Test);
43} // namespace o2::aod
44
45TEST_CASE("IdentificationConcepts")
46{
47 // ASoA
48 int i;
49 REQUIRE(not_void<decltype(i)>);
50
51 REQUIRE(is_persistent_column<o2::aod::track::CollisionId>);
52
53 REQUIRE(is_self_index_column<o2::aod::mcparticle::DaughtersIdSlice>);
54
55 REQUIRE(!is_index_column<o2::aod::mcparticle::DaughtersIdSlice>);
56 REQUIRE(is_index_column<o2::aod::track::CollisionId>);
57 REQUIRE(is_index_column<o2::aod::indices::CollisionIds>);
58
61
62 REQUIRE(has_parent_t<o2::aod::Track>);
63
64 REQUIRE(is_metadata<o2::aod::TracksIUExtensionMetadata>);
65
66 REQUIRE(is_metadata_trait<o2::aod::MetadataTrait<o2::aod::Hash<"TRACK/0"_h>>>);
67
69
70 REQUIRE(has_extension<o2::aod::MetadataTrait<o2::aod::Hash<"EXTRACK/0"_h>>::metadata>);
71
72 REQUIRE(is_spawnable_column<o2::aod::track::Pt>);
73
74 REQUIRE(is_indexing_column<Index<>>);
75
76 REQUIRE(is_dynamic_column<o2::aod::track::Energy<o2::aod::track::Signed1Pt, o2::aod::track::Tgl>>);
77
78 REQUIRE(is_marker_column<o2::soa::Marker<1>>);
79
80 REQUIRE(is_column<o2::aod::track::Pt>);
81 REQUIRE(is_column<Index<>>);
82 REQUIRE(is_column<o2::aod::track::Energy<o2::aod::track::Signed1Pt, o2::aod::track::Tgl>>);
83 REQUIRE(is_column<o2::soa::Marker<1>>);
84
85 REQUIRE(is_table<o2::aod::Collisions>);
86
87 REQUIRE(is_iterator<o2::aod::Collision>);
88
89 REQUIRE(with_originals<o2::aod::Collisions>);
90
94 REQUIRE(with_sources_generator<o2::aod::MetadataTrait<o2::aod::Hash<"MA_RN3_SP/0"_h>>::metadata>);
95
96 REQUIRE(with_base_table<o2::aod::Tracks>);
97
98 REQUIRE(is_index_table<o2::aod::Run3MatchedSparse>);
99
100 Preslice<o2::aod::Tracks> ps = o2::aod::track::collisionId;
101 REQUIRE(is_preslice<decltype(ps)>);
102
103 struct : PresliceGroup {
104 Preslice<o2::aod::Tracks> pc = o2::aod::track::collisionId;
105 Preslice<o2::aod::McParticles> pmcc = o2::aod::mcparticle::mcCollisionId;
106 } preslices;
107 REQUIRE(is_preslice_group<decltype(preslices)>);
108 REQUIRE(is_preslice<decltype(preslices.pc)>);
109 REQUIRE(is_preslice<decltype(preslices.pmcc)>);
110
111 REQUIRE(has_filtered_policy<soa::Filtered<o2::aod::Tracks>::iterator>);
112
113 REQUIRE(is_filtered_iterator<soa::Filtered<o2::aod::Tracks>::iterator>);
114
115 REQUIRE(is_filtered_table<soa::Filtered<o2::aod::Tracks>>);
116
117 REQUIRE(is_filtered<soa::Filtered<o2::aod::Tracks>::iterator>);
118 REQUIRE(is_filtered<soa::Filtered<o2::aod::Tracks>>);
119
120 REQUIRE(is_not_filtered_table<o2::aod::Collisions>);
121
122 REQUIRE(is_join<o2::aod::Tracks>);
123
124 auto tl = []() -> SmallGroups<o2::aod::Collisions> { return {{}, SelectionVector{}}; };
125 REQUIRE(is_smallgroups<decltype(tl())>);
126
127 // AnalysisHelpers
128 REQUIRE(is_producable<o2::aod::Collisions>);
129
131 REQUIRE(is_produces<decltype(prod)>);
132
133 struct : ProducesGroup {
135 } prodg;
136 REQUIRE(is_produces_group<decltype(prodg)>);
137
138 REQUIRE(is_spawnable<o2::aod::Tracks>);
139
141 REQUIRE(is_spawns<decltype(spw)>);
142
144 REQUIRE(is_builds<decltype(bld)>);
145
148 REQUIRE(is_defines<decltype(def)>);
149 REQUIRE(is_defines<decltype(ddef)>);
150
151 OutputObj<TH1F> oo{"test"};
152 REQUIRE(is_outputobj<decltype(oo)>);
153
155 REQUIRE(is_service<decltype(srv)>);
156
157 Partition<o2::aod::Tracks> part = o2::aod::track::collisionId >= 0;
158 REQUIRE(is_partition<decltype(part)>);
159
160 // AnalysisTask
162 REQUIRE(is_enumeration<decltype(en)>);
163
164 // Condition
165 Condition<int> c{""};
166 REQUIRE(is_condition<decltype(c)>);
167
168 struct : ConditionGroup {
170 } cg;
171 REQUIRE(is_condition_group<decltype(cg)>);
172
173 // Configurable
174 Configurable<int> cc{"", 1, ""};
175 REQUIRE(is_configurable<decltype(cc)>);
176
177 ConfigurableAxis ca{"", {0, 1, 2, 3}, ""};
178 REQUIRE(is_configurable_axis<decltype(ca)>);
179
180 REQUIRE(is_process_configurable<decltype(P::doprocess1)>);
181 REQUIRE(is_process_configurable<decltype((P::doprocess1))>);
182
183 struct : ConfigurableGroup {
184 Configurable<int> c{"", 1, ""};
185 } ccg;
186 REQUIRE(is_configurable_group<decltype(ccg)>);
187
188 // Expressions
189 expressions::Filter f = o2::aod::track::pt > 1.0f;
190 REQUIRE(expressions::is_filter<decltype(f)>);
191
192 // Combinations
194 REQUIRE(is_combinations_generator<C>);
195}
#define DECLARE_SOA_CONFIGURABLE_EXTENDED_TABLE(_Name_, _OriginalTable_, _Description_,...)
Definition ASoA.h:3313
#define DECLARE_SOA_CONFIGURABLE_EXPRESSION_COLUMN(_Name_, _Getter_, _Type_, _Label_)
Definition ASoA.h:2552
int32_t i
Test
Definition Utils.h:55
uint32_t c
Definition RawData.h:2
T::template iterator_template_o< FilteredIndexPolicy, self_t > iterator
Definition ASoA.h:3847
GLdouble f
Definition glcorearb.h:310
Collisions_001 Collisions
Defining ITS Vertex explicitly as messageable.
Definition Cartesian.h:288
std::vector< int64_t > SelectionVector
Definition ASoA.h:446
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
FIXME: do not use data model tables.
void process1(aod::Collisions const &)
PROCESS_SWITCH(P, process1, "", true)
A struct, containing the root of the expression tree.
std::vector< o2::mch::ChannelCode > cc
TEST_CASE("IdentificationConcepts")