File indexing completed on 2025-09-17 09:22:27
0001 #include "MultiLevelTopologyTests.h"
0002 #include "JANA/Engine/JExecutionEngine.h"
0003 #include "JANA/JApplicationFwd.h"
0004 #include "JANA/JException.h"
0005 #include "JANA/Topology/JArrow.h"
0006 #include "JANA/Topology/JTopologyBuilder.h"
0007 #include "JANA/Utils/JEventLevel.h"
0008
0009 #include <iostream>
0010 #include <map>
0011
0012 namespace jana {
0013 namespace timeslice_tests {
0014
0015
0016 TEST_CASE("TimeslicesTests_FineGrained") {
0017
0018 JApplication app;
0019 app.SetParameterValue("jana:loglevel", "trace");
0020 app.SetParameterValue("jana:nevents", "5");
0021 app.SetParameterValue("jana:max_inflight_events", "4");
0022
0023 app.Add(new MyTimesliceSource);
0024 app.Add(new MyTimesliceUnfolder);
0025 app.Add(new MyEventProcessor);
0026 app.Add(new JFactoryGeneratorT<MyProtoClusterFactory>);
0027 app.Add(new JFactoryGeneratorT<MyClusterFactory>);
0028 app.SetTicker(true);
0029
0030 app.Initialize();
0031 auto ee = app.GetService<JExecutionEngine>();
0032 auto top = app.GetService<JTopologyBuilder>();
0033 enum ArrowId {TS_SRC=0, TS_MAP=1, TS_UNF=2, TS_FLD=3, PH_MAP=4, PH_TAP=5};
0034 JArrow::FireResult result = JArrow::FireResult::NotRunYet;
0035
0036 result = ee->Fire(TS_SRC, 0);
0037 REQUIRE(result == JArrow::FireResult::KeepGoing);
0038
0039 REQUIRE(top->arrows[TS_SRC]->get_port(1).queue == top->queues[0]);
0040 REQUIRE(top->pools[0]->GetCapacity() == 4);
0041 REQUIRE(top->pools[0]->GetSize(0) == 3);
0042 REQUIRE(top->queues[0]->GetSize(0) == 1);
0043
0044 result = ee->Fire(TS_MAP, 0);
0045 REQUIRE(result == JArrow::FireResult::KeepGoing);
0046 REQUIRE(top->queues[0]->GetSize(0) == 0);
0047 REQUIRE(top->queues[1]->GetSize(0) == 1);
0048
0049
0050 result = ee->Fire(TS_UNF, 0);
0051 REQUIRE(result == JArrow::FireResult::KeepGoing);
0052
0053
0054 result = ee->Fire(TS_UNF, 0);
0055 REQUIRE(result == JArrow::FireResult::KeepGoing);
0056
0057 result = ee->Fire(PH_MAP, 0);
0058 REQUIRE(result == JArrow::FireResult::KeepGoing);
0059
0060 result = ee->Fire(PH_TAP, 0);
0061 REQUIRE(result == JArrow::FireResult::KeepGoing);
0062
0063 result = ee->Fire(TS_FLD, 0);
0064 REQUIRE(result == JArrow::FireResult::KeepGoing);
0065
0066 REQUIRE(top->pools[0]->GetSize(0) == 3);
0067 REQUIRE(top->pools[1]->GetSize(0) == 4);
0068
0069 }
0070
0071 TEST_CASE("TimeslicesTests") {
0072
0073 JApplication app;
0074 app.SetParameterValue("jana:loglevel", "trace");
0075 app.SetParameterValue("jana:nevents", "5");
0076
0077 app.Add(new MyTimesliceSource);
0078 app.Add(new MyTimesliceUnfolder);
0079 app.Add(new MyEventProcessor);
0080 app.Add(new JFactoryGeneratorT<MyProtoClusterFactory>);
0081 app.Add(new JFactoryGeneratorT<MyClusterFactory>);
0082 app.SetTicker(true);
0083 try {
0084 app.Run();
0085 }
0086 catch (JException& e) {
0087 std::cout << e << std::endl;
0088 throw e;
0089 }
0090 }
0091
0092
0093 }
0094
0095
0096 namespace multilevel_source_tests {
0097
0098 TEST_CASE("MultilevelSource_Trivial") {
0099
0100
0101 JApplication app;
0102 auto* source = new MyMultilevelSource;
0103 auto* proc = new MyMultilevelProcessor;
0104
0105 source->SetEventLevels({JEventLevel::PhysicsEvent});
0106 source->data_stream = {{JEventLevel::PhysicsEvent, 4}, {JEventLevel::PhysicsEvent, 5}, {JEventLevel::PhysicsEvent, 6}};
0107 proc->expected_data_stream = {{-1,-1,4}, {-1,-1,5}, {-1,-1,6}};
0108
0109 app.Add(source);
0110 app.Add(proc);
0111 app.Run();
0112 }
0113
0114
0115
0116 }
0117 }
0118
0119
0120
0121
0122
0123