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 }