GCC Code Coverage Report


Directory: ./
File: src/calib/dispatcher.test.cc
Date: 2025-09-01 06:19:01
Exec Total Coverage
Lines: 58 58 100.0%
Functions: 14 14 100.0%
Branches: 101 140 72.1%

Line Branch Exec Source
1 #include "na64calib/dispatcher.hh"
2 #include <gtest/gtest.h>
3
4 namespace na64dp {
5 namespace calib {
6
7 class ClientInt : public na64dp::util::Observable<int>::iObserver {
8 public:
9 int value;
10 4 ClientInt() : value(0) {}
11 2 virtual void handle_update(const int & v) override {
12 2 value = v;
13 2 }
14 };
15
16 class ClientFloat : public na64dp::util::Observable<float>::iObserver {
17 public:
18 float value;
19 2 ClientFloat() : value(0.) {}
20 1 virtual void handle_update(const float & v) override {
21 1 value = v;
22 1 }
23 };
24
25 class CalibDispatcher : public ::testing::Test {
26 public:
27 Dispatcher dispatcher;
28
2/2
✓ Branch 2 taken 3 times.
✓ Branch 5 taken 3 times.
9 CalibDispatcher() : dispatcher(log4cpp::Category::getInstance("calib.manager")) {}
29 };
30
31 8 TEST_F( CalibDispatcher, ObservableCreatedOnSubscription ) {
32
2/2
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
2 auto key = Dispatcher::info_id<int>("subscription-test");
33
3/5
✓ Branch 1 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
2 ASSERT_FALSE( dispatcher.observable_exists( key ) );
34
35 2 ClientInt ci1, ci2;
36
2/2
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
4 dispatcher.subscribe<int>(ci1, "subscription-test");
37
3/5
✓ Branch 1 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
2 ASSERT_TRUE( dispatcher.observable_exists( key ) );
38
2/2
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
4 dispatcher.subscribe<int>(ci2, "subscription-test");
39
3/5
✓ Branch 1 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
2 ASSERT_TRUE( dispatcher.observable_exists( key ) );
40
41
2/2
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
4 dispatcher.unsubscribe<int>(ci2, "subscription-test");
42
3/5
✓ Branch 1 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
2 ASSERT_TRUE( dispatcher.observable_exists( key ) );
43
2/2
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
4 dispatcher.unsubscribe<int>(ci1, "subscription-test");
44
3/5
✓ Branch 1 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
2 ASSERT_FALSE( dispatcher.observable_exists( key ) );
45 2 }
46
47 8 TEST_F( CalibDispatcher, ObservablesNotified ) {
48 2 ClientInt ci1, ci2;
49 2 ClientFloat cf1, cf2;
50
51
7/13
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 39 taken 1 times.
6 EXPECT_THROW( dispatcher.set<int>("notification-test-one", 42)
52 2 , na64dp::errors::NoCalibrationInfoEntry );
53
54
3/4
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
6 EXPECT_TRUE( dispatcher.subscribe<int>(ci1, "notification-test-one") );
55
3/4
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
6 EXPECT_FALSE( dispatcher.subscribe<int>(ci1, "notification-test-one") );
56
3/4
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
6 EXPECT_TRUE( dispatcher.subscribe<int>(ci2, "notification-test-one") );
57
3/4
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
6 EXPECT_TRUE( dispatcher.subscribe<float>(cf1, "notification-test-two") );
58
3/4
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
6 EXPECT_TRUE( dispatcher.subscribe<float>(cf2, "notification-test-three") );
59
60
2/2
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
4 dispatcher.set<int>("notification-test-one", 42);
61
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ( ci1.value, 42 );
62
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ( ci2.value, 42 );
63
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ( cf1.value, 0. );
64
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ( cf2.value, 0. );
65
66
2/2
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
4 dispatcher.set<float>("notification-test-three", 12.34);
67
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ( ci1.value, 42 );
68
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ( ci2.value, 42 );
69
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ( cf1.value, 0. );
70
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR( cf2.value, 12.34, 1e-2 );
71
72
2/2
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
4 dispatcher.unsubscribe<int>( ci1, "notification-test-one" );
73
2/2
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
4 dispatcher.unsubscribe<int>( ci2, "notification-test-one" );
74
2/2
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
4 dispatcher.unsubscribe<float>( cf1, "notification-test-two" );
75
2/2
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
4 dispatcher.unsubscribe<float>( cf2, "notification-test-three" );
76 2 }
77
78 8 TEST_F( CalibDispatcher, Handle ) {
79 struct MockData { int a; float b; };
80 {
81
2/2
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
4 Handle<MockData> varHandle( "handle-test", dispatcher );
82
4/5
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
6 EXPECT_TRUE( dispatcher.observable_exists(Dispatcher::info_id<MockData>("handle-test")) );
83
6/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 29 taken 1 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✓ Branch 34 taken 1 times.
2 EXPECT_THROW( varHandle->a
84 2 , errors::PrematureDereferencing );
85
2/2
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
4 dispatcher.set<MockData>( "handle-test", MockData{43, 34.12} );
86
87
3/4
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
2 EXPECT_EQ( varHandle->a, 43 );
88
3/4
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
2 EXPECT_NEAR( varHandle->b, 34.12, 1e-2 );
89 2 }
90
4/5
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
6 EXPECT_FALSE( dispatcher.observable_exists(Dispatcher::info_id<MockData>("handle-test")) );
91 2 }
92
93 }
94 }
95
96