Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-16 09:32:52

0001 
0002 #include <catch.hpp>
0003 #include <JANA/Topology/JArrow.h>
0004 
0005 namespace jana::topology::jarrowtests {
0006 
0007 struct TestData { int x; };
0008 
0009 struct BasicParallelArrow : public JArrow {
0010 
0011     BasicParallelArrow() {
0012         AddPort("in", JEventLevel::PhysicsEvent, PortDirection::In);
0013         AddPort("out", JEventLevel::PhysicsEvent, PortDirection::Out);
0014         SetIsParallel(true);
0015     }
0016 
0017     void Fire(JEvent* input, OutputData& outputs, size_t& output_count, JArrow::FireResult& process_status) override {
0018 
0019         input->Insert(new TestData {.x=22});
0020 
0021         outputs[0] = {input, 1};
0022         output_count = 1;
0023         process_status = JArrow::FireResult::KeepGoing;
0024 
0025     }
0026 };
0027 
0028 
0029 TEST_CASE("BasicParallelArrow_Fire") {
0030 
0031     JApplication app;
0032     app.Initialize();
0033     auto event = std::make_shared<JEvent>(&app);
0034 
0035     BasicParallelArrow sut;
0036     JArrow::OutputData outputs;
0037     size_t output_count;
0038     JArrow::FireResult status;
0039 
0040     sut.Fire(event.get(), outputs, output_count, status);
0041 
0042     REQUIRE(event->GetSingle<TestData>()->x == 22);
0043     REQUIRE(output_count == 1);
0044     REQUIRE(outputs[0].first == event.get());
0045     REQUIRE(outputs[0].second == 1);
0046     REQUIRE(status == JArrow::FireResult::KeepGoing);
0047 }
0048 
0049 
0050 
0051 TEST_CASE("BasicParallelArrow_ExecuteSucceeds") {
0052 
0053     JApplication app;
0054     app.Initialize();
0055 
0056     BasicParallelArrow sut;
0057     JEventPool input_pool(app.GetService<JComponentManager>(), 10, 1);
0058     JEventQueue output_queue(10, 1);
0059 
0060     sut.GetPort(0).Attach(&input_pool);
0061     sut.GetPort(1).Attach(&output_queue);
0062 
0063     auto result = sut.Execute( 0);
0064 
0065     REQUIRE(result == JArrow::FireResult::KeepGoing);
0066     REQUIRE(output_queue.GetSize(0) == 1);
0067     JEvent* event = output_queue.Pop(0);
0068     REQUIRE(event->GetSingle<TestData>()->x == 22);
0069 }
0070 
0071 
0072 TEST_CASE("BasicParallelArrow_ExecuteFails") {
0073 
0074     JApplication app;
0075     app.Initialize();
0076 
0077     BasicParallelArrow sut;
0078     JEventQueue input_queue(10, 1);
0079     JEventQueue output_queue(10, 1);
0080 
0081     sut.GetPort(0).Attach(&input_queue);
0082     sut.GetPort(1).Attach(&output_queue);
0083 
0084     auto result = sut.Execute(0);
0085 
0086     REQUIRE(result == JArrow::FireResult::NotRunYet);
0087     REQUIRE(output_queue.GetSize(0) == 0);
0088 }
0089 
0090 
0091 
0092 } // namespace jana::topology::jarrowtests