Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-07-31 02:19:16

0001 /*----------------------------------------------------------------------
0002 
0003 Test program for edm::signalslot::Signal class.
0004 
0005  ----------------------------------------------------------------------*/
0006 
0007 #include <catch.hpp>
0008 #include <cassert>
0009 #include <iostream>
0010 #include <string>
0011 #include "FWCore/Utilities/interface/Signal.h"
0012 
0013 static int s_value = 0;
0014 static void setValueFunct(int iValue) { s_value = iValue; }
0015 
0016 TEST_CASE("edm::signalslot::Signal", "[Signal]") {
0017   SECTION("connectTest") {
0018     edm::signalslot::Signal<void(int)> sig;
0019     REQUIRE(sig.slots().size() == 0);
0020 
0021     int value1 = 0;
0022     sig.connect([&](int iValue) -> void { value1 = iValue; });
0023     REQUIRE(sig.slots().size() == 1);
0024 
0025     int value2 = 0;
0026     sig.connect([&](int iValue) { value2 = iValue; });
0027     REQUIRE(sig.slots().size() == 2);
0028 
0029     sig.connect(setValueFunct);
0030     //see that the slots we created are actually there
0031     for (auto const& slot : sig.slots()) {
0032       slot(5);
0033     }
0034     REQUIRE(value1 == 5);
0035     REQUIRE(value2 == 5);
0036     REQUIRE(value2 == s_value);
0037   }
0038 
0039   SECTION("emitTest") {
0040     edm::signalslot::Signal<void(int)> sig;
0041 
0042     int value1 = 0;
0043     sig.connect([&](int iValue) { value1 = iValue; });
0044 
0045     int value2 = 0;
0046     sig.connect([&](int iValue) { value2 = iValue; });
0047 
0048     sig.emit(5);
0049     REQUIRE(value1 == 5);
0050     REQUIRE(value2 == 5);
0051 
0052     sig.emit(1);
0053     REQUIRE(value1 == 1);
0054     REQUIRE(value2 == 1);
0055   }
0056 }