Belle II Software  release-05-01-25
msghandler.cc
1 #include <framework/pcore/MsgHandler.h>
2 
3 #include <TVector3.h>
4 #include <TClonesArray.h>
5 #include <TNamed.h>
6 
7 #include <fstream>
8 #include <gtest/gtest.h>
9 
10 using namespace std;
11 using namespace Belle2;
12 
13 namespace {
14  TEST(MsgHandlerTest, conversion)
15  {
16  MsgHandler handler;
17  TVector3 a(1.0, 2.0, 3.0);
18  handler.add(&a, "vector");
19  TVector3 b(42.0, 7.0, -20.0);
20  handler.add(&b, "vectorb");
21  TNamed c("abc", "def");
22  handler.add(&c, "named");
23  EvtMessage* msg = handler.encode_msg(MSG_EVENT);
24 
25  {
26  MsgHandler handler2;
27  vector<TObject*> objs;
28  vector<string> names;
29  handler2.decode_msg(msg, objs, names);
30  ASSERT_EQ(3, objs.size());
31  ASSERT_EQ(3, names.size());
32  ASSERT_EQ("vector", names[0]);
33  ASSERT_EQ("vectorb", names[1]);
34  ASSERT_EQ("named", names[2]);
35 
36  auto a2 = dynamic_cast<TVector3*>(objs[0]);
37  ASSERT_NE(a2, nullptr);
38  EXPECT_TRUE(*a2 == a);
39 
40  auto b2 = dynamic_cast<TVector3*>(objs[1]);
41  ASSERT_NE(b2, nullptr);
42  EXPECT_TRUE(*b2 == b);
43 
44  auto c2 = dynamic_cast<TNamed*>(objs[2]);
45  ASSERT_NE(c2, nullptr);
46  EXPECT_TRUE(std::string(c2->GetName()) == c.GetName());
47  EXPECT_TRUE(std::string(c2->GetTitle()) == c.GetTitle());
48  }
49  delete msg;
50  }
51 
52  TEST(MsgHandlerTest, compression)
53  {
54  TClonesArray longarray("Belle2::EventMetaData");
55  longarray.ExpandCreate(1000);
56  for (int algo : {0, 1, 2}) {
57  for (int level = 0; level < 10; ++level) {
58  MsgHandler handler(algo * 100 + level);
59  handler.add(&longarray, "mcparticles");
60  EvtMessage* msg = handler.encode_msg(MSG_EVENT);
61  {
62  MsgHandler handler2;
63  vector<TObject*> objs;
64  vector<string> names;
65  handler2.decode_msg(msg, objs, names);
66  ASSERT_EQ(1, objs.size());
67  ASSERT_EQ(1, names.size());
68  ASSERT_EQ(names[0], "mcparticles");
69  for (auto o : objs) delete o;
70  }
71  }
72  }
73  }
74 } // namespace
Belle2::EvtMessage
Class to manage streamed object.
Definition: EvtMessage.h:60
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::MsgHandler::decode_msg
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.
Definition: MsgHandler.cc:107
Belle2::TEST
TEST(TestgetDetectorRegion, TestgetDetectorRegion)
Test Constructors.
Definition: utilityFunctions.cc:18
Belle2::MsgHandler
A class to encode/decode an EvtMessage.
Definition: MsgHandler.h:104