8#include <framework/pcore/MsgHandler.h>
11#include <TClonesArray.h>
14#include <gtest/gtest.h>
20 TEST(MsgHandlerTest, conversion)
23 TVector3 a(1.0, 2.0, 3.0);
24 handler.add(&a,
"vector");
25 TVector3 b(42.0, 7.0, -20.0);
26 handler.add(&b,
"vectorb");
27 TNamed c(
"abc",
"def");
28 handler.add(&c,
"named");
29 EvtMessage* msg = handler.encode_msg(MSG_EVENT);
33 vector<TObject*> objs;
36 ASSERT_EQ(3, objs.size());
37 ASSERT_EQ(3, names.size());
38 ASSERT_EQ(
"vector", names[0]);
39 ASSERT_EQ(
"vectorb", names[1]);
40 ASSERT_EQ(
"named", names[2]);
42 auto a2 =
dynamic_cast<TVector3*
>(objs[0]);
43 ASSERT_NE(a2,
nullptr);
44 EXPECT_TRUE(*a2 == a);
46 auto b2 =
dynamic_cast<TVector3*
>(objs[1]);
47 ASSERT_NE(b2,
nullptr);
48 EXPECT_TRUE(*b2 == b);
50 auto c2 =
dynamic_cast<TNamed*
>(objs[2]);
51 ASSERT_NE(c2,
nullptr);
52 EXPECT_TRUE(std::string(c2->GetName()) == c.GetName());
53 EXPECT_TRUE(std::string(c2->GetTitle()) == c.GetTitle());
58 TEST(MsgHandlerTest, compression)
60 TClonesArray longarray(
"Belle2::EventMetaData");
61 longarray.ExpandCreate(1000);
62 for (
int algo : {0, 1, 2}) {
63 for (
int level = 0; level < 10; ++level) {
65 handler.add(&longarray,
"mcparticles");
66 EvtMessage* msg = handler.encode_msg(MSG_EVENT);
69 vector<TObject*> objs;
72 ASSERT_EQ(1, objs.size());
73 ASSERT_EQ(1, names.size());
74 ASSERT_EQ(names[0],
"mcparticles");
75 for (
auto o : objs)
delete o;
Class to manage streamed object.
A class to encode/decode an EvtMessage.
virtual void decode_msg(EvtMessage *msg, std::vector< TObject * > &objlist, std::vector< std::string > &namelist)
Decode an EvtMessage into a vector list of objects with names.
Abstract base class for different kinds of events.