diff --git a/GaudiKernel/include/Gaudi/MonitoringHub.h b/GaudiKernel/include/Gaudi/MonitoringHub.h index 11caf288ac945835c768ca23b1341c4d531061a1..e684647788bbfd16d2734d2f1f139f7977c939ef 100644 --- a/GaudiKernel/include/Gaudi/MonitoringHub.h +++ b/GaudiKernel/include/Gaudi/MonitoringHub.h @@ -28,23 +28,23 @@ namespace Gaudi::Monitoring { inline constexpr bool has_merge_and_reset_v = Gaudi::cpp17::is_detected_v<has_merge_and_reset_, T>; struct MergeAndResetBase { - virtual ~MergeAndResetBase() = default; + virtual ~MergeAndResetBase() = default; virtual void operator()( void*, void* ) const = 0; }; - using MergeAndReset_t = void (*)(void*, void*); + using MergeAndReset_t = void ( * )( void*, void* ); template <typename T> MergeAndReset_t makeMergeAndResetFor() { - if constexpr ( has_merge_and_reset_v<T> ) { - return [](void *ptr, void* other) { + if constexpr ( has_merge_and_reset_v<T> ) { + return []( void* ptr, void* other ) { reinterpret_cast<T*>( ptr )->mergeAndReset( std::move( *reinterpret_cast<T*>( other ) ) ); }; } else { - return [](void*,void*) { }; + return []( void*, void* ) {}; } } - + } // namespace details /// Central entity in a Gaudi application that manages monitoring objects (i.e. counters, histograms, etc.). @@ -106,7 +106,7 @@ namespace Gaudi::Monitoring { /// function reseting internal data. void ( *m_reset )( void* ); /// function calling merge and reset on internal data with the internal data of another entity - details::MergeAndReset_t m_mergeAndReset{nullptr}; + details::MergeAndReset_t m_mergeAndReset{ nullptr }; /// function converting the internal data to json. json ( *m_getJSON )( const void* ); }; diff --git a/GaudiKernel/tests/src/CounterHistosUnitTest.cpp b/GaudiKernel/tests/src/CounterHistosUnitTest.cpp index 2cc6617ad479bd24e6af0e7a8e1504ce2af450ab..6025f2731a8d26994eff3731902dc5f25a700268 100644 --- a/GaudiKernel/tests/src/CounterHistosUnitTest.cpp +++ b/GaudiKernel/tests/src/CounterHistosUnitTest.cpp @@ -26,13 +26,13 @@ struct ServiceLocator { struct Algo { ServiceLocator* serviceLocator() { return &m_serviceLocator; } std::string name() { return ""; } - ServiceLocator m_serviceLocator{}; + ServiceLocator m_serviceLocator{}; }; struct HistSink : public Gaudi::Monitoring::Hub::Sink { - virtual void registerEntity(Gaudi::Monitoring::Hub::Entity ent) override { m_entities.push_back(ent); } - virtual void removeEntity(Gaudi::Monitoring::Hub::Entity const& ent) override { - auto it = std::find(begin(m_entities), end(m_entities), ent); - if (it != m_entities.end()) m_entities.erase(it); + virtual void registerEntity( Gaudi::Monitoring::Hub::Entity ent ) override { m_entities.push_back( ent ); } + virtual void removeEntity( Gaudi::Monitoring::Hub::Entity const& ent ) override { + auto it = std::find( begin( m_entities ), end( m_entities ), ent ); + if ( it != m_entities.end() ) m_entities.erase( it ); } std::deque<Gaudi::Monitoring::Hub::Entity> m_entities; }; @@ -120,37 +120,39 @@ BOOST_AUTO_TEST_CASE( test_custom_axis ) { BOOST_AUTO_TEST_CASE( test_histos_merge_reset, *boost::unit_test::tolerance( 1e-14 ) ) { using namespace Gaudi::Accumulators; - Algo algo; + Algo algo; HistSink histSink; - algo.serviceLocator()->monitoringHub().addSink(&histSink); + algo.serviceLocator()->monitoringHub().addSink( &histSink ); - Histogram<1, atomicity::full, float> hist1(&algo, "TestHist1", "Test histogram 1", Axis<float>{10, 0., 10.}); - Histogram<1, atomicity::full, float> hist2(&algo, "TestHist2", "Test histogram 2", Axis<float>{10, 0., 10.}); + Histogram<1, atomicity::full, float> hist1( &algo, "TestHist1", "Test histogram 1", Axis<float>{ 10, 0., 10. } ); + Histogram<1, atomicity::full, float> hist2( &algo, "TestHist2", "Test histogram 2", Axis<float>{ 10, 0., 10. } ); // test all combinations of entities made (a) as part of the Histogram's constructor and (b) separately auto ent1a = histSink.m_entities[0]; auto ent2a = histSink.m_entities[1]; - Gaudi::Monitoring::Hub::Entity ent1b("","TestHist1",std::string("histogram:Histogram:")+typeid(float).name(),hist1); - Gaudi::Monitoring::Hub::Entity ent2b("","TestHist2",std::string("histogram:Histogram:")+typeid(float).name(),hist2); + Gaudi::Monitoring::Hub::Entity ent1b( "", "TestHist1", std::string( "histogram:Histogram:" ) + typeid( float ).name(), + hist1 ); + Gaudi::Monitoring::Hub::Entity ent2b( "", "TestHist2", std::string( "histogram:Histogram:" ) + typeid( float ).name(), + hist2 ); - for ( int i=0; i<10; ++i) { + for ( int i = 0; i < 10; ++i ) { hist1[i] += i; - hist2[i] += 2*i; + hist2[i] += 2 * i; } - ent1a.mergeAndReset(ent2a); - BOOST_TEST(hist1.toJSON().at( "nEntries" ).get<unsigned long>() == 135); - BOOST_TEST(hist2.toJSON().at( "nEntries" ).get<unsigned long>() == 0); - ent2b.mergeAndReset(ent1b); - BOOST_TEST(hist1.toJSON().at( "nEntries" ).get<unsigned long>() == 0); - BOOST_TEST(hist2.toJSON().at( "nEntries" ).get<unsigned long>() == 135); - ent1a.mergeAndReset(ent2b); - BOOST_TEST(hist1.toJSON().at( "nEntries" ).get<unsigned long>() == 135); - BOOST_TEST(hist2.toJSON().at( "nEntries" ).get<unsigned long>() == 0); - ent2b.mergeAndReset(ent1a); - BOOST_TEST(hist1.toJSON().at( "nEntries" ).get<unsigned long>() == 0); - BOOST_TEST(hist2.toJSON().at( "nEntries" ).get<unsigned long>() == 135); + ent1a.mergeAndReset( ent2a ); + BOOST_TEST( hist1.toJSON().at( "nEntries" ).get<unsigned long>() == 135 ); + BOOST_TEST( hist2.toJSON().at( "nEntries" ).get<unsigned long>() == 0 ); + ent2b.mergeAndReset( ent1b ); + BOOST_TEST( hist1.toJSON().at( "nEntries" ).get<unsigned long>() == 0 ); + BOOST_TEST( hist2.toJSON().at( "nEntries" ).get<unsigned long>() == 135 ); + ent1a.mergeAndReset( ent2b ); + BOOST_TEST( hist1.toJSON().at( "nEntries" ).get<unsigned long>() == 135 ); + BOOST_TEST( hist2.toJSON().at( "nEntries" ).get<unsigned long>() == 0 ); + ent2b.mergeAndReset( ent1a ); + BOOST_TEST( hist1.toJSON().at( "nEntries" ).get<unsigned long>() == 0 ); + BOOST_TEST( hist2.toJSON().at( "nEntries" ).get<unsigned long>() == 135 ); } BOOST_AUTO_TEST_CASE( test_2d_histos, *boost::unit_test::tolerance( 1e-14 ) ) { diff --git a/GaudiKernel/tests/src/GenericSinkUnitTest.cpp b/GaudiKernel/tests/src/GenericSinkUnitTest.cpp index 85209cb8748232bacf3ba3ca204e5fe176876166..e050dc80b48246b28476a09e39d0917d3511dcff 100644 --- a/GaudiKernel/tests/src/GenericSinkUnitTest.cpp +++ b/GaudiKernel/tests/src/GenericSinkUnitTest.cpp @@ -25,57 +25,52 @@ struct ServiceLocator { struct Algo { ServiceLocator* serviceLocator() { return &m_serviceLocator; } std::string name() { return ""; } - ServiceLocator m_serviceLocator{}; + ServiceLocator m_serviceLocator{}; }; // A class to be used in Entities and through the Sink/Hub machinery but // not deriving from counters and with no mergeAndReset method // Basically accumulate data into a string struct Store { - std::string m_data; - Gaudi::Monitoring::Hub* m_monitoringHub{nullptr}; + std::string m_data; + Gaudi::Monitoring::Hub* m_monitoringHub{ nullptr }; - template <typename OWNER> Store( OWNER* o, std::string const& name, const std::string storeType ) - : m_monitoringHub( &o->serviceLocator()->monitoringHub() ) { + template <typename OWNER> + Store( OWNER* o, std::string const& name, const std::string storeType ) + : m_monitoringHub( &o->serviceLocator()->monitoringHub() ) { m_monitoringHub->registerEntity( o->name(), name, storeType, *this ); } ~Store() { m_monitoringHub->removeEntity( *this ); } - void reset() { m_data = ""; } - void storeData( std::string const& data ) { m_data += data; } - nlohmann::json toJSON() const { - return m_data; - } + void reset() { m_data = ""; } + void storeData( std::string const& data ) { m_data += data; } + nlohmann::json toJSON() const { return m_data; } }; // dummy Sink for the purpose of testing Hub and Sink with non mergeable items struct NonMergeableSink : public Gaudi::Monitoring::Hub::Sink { - virtual void registerEntity(Gaudi::Monitoring::Hub::Entity ent) override { - m_entities.push_back(ent); - } - virtual void removeEntity(Gaudi::Monitoring::Hub::Entity const& ent) override { - auto it = std::find(begin(m_entities), end(m_entities), ent); - if (it != m_entities.end()) m_entities.erase(it); + virtual void registerEntity( Gaudi::Monitoring::Hub::Entity ent ) override { m_entities.push_back( ent ); } + virtual void removeEntity( Gaudi::Monitoring::Hub::Entity const& ent ) override { + auto it = std::find( begin( m_entities ), end( m_entities ), ent ); + if ( it != m_entities.end() ) m_entities.erase( it ); } std::deque<Gaudi::Monitoring::Hub::Entity> m_entities; }; BOOST_AUTO_TEST_CASE( test_entity_no_merge_reset, *boost::unit_test::tolerance( 1e-14 ) ) { - Algo algo; + Algo algo; NonMergeableSink sink; - algo.serviceLocator()->monitoringHub().addSink(&sink); + algo.serviceLocator()->monitoringHub().addSink( &sink ); - Store store1(&algo, "TestStore1", "store:test"); - Store store2(&algo, "TestStore2", "store:test"); + Store store1( &algo, "TestStore1", "store:test" ); + Store store2( &algo, "TestStore2", "store:test" ); - store1.storeData("Hel"); - store1.storeData("lo "); - store2.storeData("World !"); + store1.storeData( "Hel" ); + store1.storeData( "lo " ); + store2.storeData( "World !" ); auto& entities = sink.m_entities; std::sort( begin( entities ), end( entities ), []( const auto& a, const auto& b ) { return a.name < b.name; } ); std::string output; - for (auto& ent : entities) { - output += ent.toJSON().get<std::string>(); - } + for ( auto& ent : entities ) { output += ent.toJSON().get<std::string>(); } BOOST_TEST( output == "Hello World !" ); }