GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/util/test_closed_loop_controller.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 73 0 73
Functions: 100.0% 25 0 25
Branches: 100.0% 132 0 132
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 #include "closed_loop_controller.h"
2
3 #include "gmock/gmock.h"
4 #include "gtest/gtest.h"
5
6 using ::testing::StrictMock;
7 using ::testing::Return;
8 using ::testing::Eq;
9
10 class TestController : public ClosedLoopController<float, float> {
11 public:
12 10 MOCK_METHOD(expected<float>, getSetpoint, (), (override));
13 8 MOCK_METHOD(expected<float>, observePlant, (), (override));
14
2/2
✓ Branch 3 taken 3 times.
✓ Branch 6 taken 3 times.
6 MOCK_METHOD(expected<float>, getOpenLoop, (float setpoint), (override));
15
3/3
✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✓ Branch 10 taken 2 times.
4 MOCK_METHOD(expected<float>, getClosedLoop, (float setpoint, float observation), (override));
16
2/2
✓ Branch 3 taken 5 times.
✓ Branch 6 taken 5 times.
10 MOCK_METHOD(void, setOutput, (expected<float> outputValue), (override));
17 };
18
19 4 TEST(ClosedLoopController, TestSetpoint) {
20
1/1
✓ Branch 2 taken 1 time.
1 StrictMock<TestController> controller;
21
22 // If getSetpoint returns unexpected, no other functions should be called
23
3/3
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
✓ Branch 8 taken 1 time.
3 EXPECT_CALL(controller, getSetpoint())
24
3/3
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
3 .WillOnce(Return(unexpected));
25
26 // And output should be called with unexpected
27
5/5
✓ Branch 4 taken 1 time.
✓ Branch 7 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
✓ Branch 18 taken 1 time.
1 EXPECT_CALL(controller, setOutput(Eq(unexpected)));
28
29
1/1
✓ Branch 1 taken 1 time.
1 controller.update();
30 2 }
31
32 4 TEST(ClosedLoopController, TestSetpointSuccessPlantFail) {
33
1/1
✓ Branch 2 taken 1 time.
1 StrictMock<TestController> controller;
34
35 // If getSetpoint returns unexpected, no other functions should be called
36
3/3
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
✓ Branch 8 taken 1 time.
3 EXPECT_CALL(controller, getSetpoint())
37
3/3
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
3 .WillOnce(Return(25.0f));
38
39 // Fail to observe plant - exec should stop there
40
3/3
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
✓ Branch 8 taken 1 time.
3 EXPECT_CALL(controller, observePlant())
41
3/3
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
3 .WillOnce(Return(unexpected));
42
43 // And output should be called with unexpected
44
5/5
✓ Branch 4 taken 1 time.
✓ Branch 7 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
✓ Branch 18 taken 1 time.
1 EXPECT_CALL(controller, setOutput(Eq(unexpected)));
45
46
1/1
✓ Branch 1 taken 1 time.
1 controller.update();
47 2 }
48
49 4 TEST(ClosedLoopController, TestPlantSuccessOpenLoopFail) {
50
1/1
✓ Branch 2 taken 1 time.
1 StrictMock<TestController> controller;
51
52 // Return valid setpoint
53
3/3
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
✓ Branch 8 taken 1 time.
3 EXPECT_CALL(controller, getSetpoint())
54
3/3
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
3 .WillOnce(Return(25.0f));
55
56 // Return valid observation
57
3/3
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
✓ Branch 8 taken 1 time.
3 EXPECT_CALL(controller, observePlant())
58
3/3
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
3 .WillOnce(Return(75.0f));
59
60 // Setpoint should get passed to open loop
61 // It will fail, nothing else should be called
62
4/4
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 12 taken 1 time.
3 EXPECT_CALL(controller, getOpenLoop(25.0f))
63
3/3
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
3 .WillOnce(Return(unexpected));
64
65 // And output should be called with unexpected
66
5/5
✓ Branch 4 taken 1 time.
✓ Branch 7 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
✓ Branch 18 taken 1 time.
1 EXPECT_CALL(controller, setOutput(Eq(unexpected)));
67
68
1/1
✓ Branch 1 taken 1 time.
1 controller.update();
69 2 }
70
71
72 4 TEST(ClosedLoopController, TestPlantOpenLoopSuccessClosedLoopFail) {
73
1/1
✓ Branch 2 taken 1 time.
1 StrictMock<TestController> controller;
74
75 // Return valid setpoint
76
3/3
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
✓ Branch 8 taken 1 time.
3 EXPECT_CALL(controller, getSetpoint())
77
3/3
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
3 .WillOnce(Return(25.0f));
78
79 // Return valid observation
80
3/3
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
✓ Branch 8 taken 1 time.
3 EXPECT_CALL(controller, observePlant())
81
3/3
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
3 .WillOnce(Return(75.0f));
82
83 // Setpoint should get passed to open loop
84 // Return something valid
85
4/4
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 12 taken 1 time.
3 EXPECT_CALL(controller, getOpenLoop(25.0f))
86
3/3
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
3 .WillOnce(Return(37.0f));
87
88 // Setpoint & observation should get passed
89 // But return invalid
90
5/5
✓ Branch 2 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 9 taken 1 time.
✓ Branch 12 taken 1 time.
✓ Branch 16 taken 1 time.
3 EXPECT_CALL(controller, getClosedLoop(25.0f, 75.0f))
91
3/3
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
3 .WillOnce(Return(unexpected));
92
93 // And output should be called with unexpected
94
5/5
✓ Branch 4 taken 1 time.
✓ Branch 7 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
✓ Branch 18 taken 1 time.
1 EXPECT_CALL(controller, setOutput(Eq(unexpected)));
95
96
1/1
✓ Branch 1 taken 1 time.
1 controller.update();
97 2 }
98
99 4 TEST(ClosedLoopController, TestAllSuccess) {
100
1/1
✓ Branch 2 taken 1 time.
1 StrictMock<TestController> controller;
101
102 // Return valid setpoint
103
3/3
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
✓ Branch 8 taken 1 time.
3 EXPECT_CALL(controller, getSetpoint())
104
3/3
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
3 .WillOnce(Return(25.0f));
105
106 // Return valid observation
107
3/3
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
✓ Branch 8 taken 1 time.
3 EXPECT_CALL(controller, observePlant())
108
3/3
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
3 .WillOnce(Return(75.0f));
109
110 // Setpoint should get passed to open loop
111 // Return something valid
112
4/4
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 12 taken 1 time.
3 EXPECT_CALL(controller, getOpenLoop(25.0f))
113
3/3
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
3 .WillOnce(Return(37.0f));
114
115 // Setpoint & observation should get passed
116 // Return something valid
117
5/5
✓ Branch 2 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 9 taken 1 time.
✓ Branch 12 taken 1 time.
✓ Branch 16 taken 1 time.
3 EXPECT_CALL(controller, getClosedLoop(25.0f, 75.0f))
118
3/3
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
3 .WillOnce(Return(22.0f));
119
120 // Output should get called with sum of open & closed loop
121
4/4
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 12 taken 1 time.
✓ Branch 16 taken 1 time.
1 EXPECT_CALL(controller, setOutput(expected<float>(59.0f)));
122
123
1/1
✓ Branch 1 taken 1 time.
1 controller.update();
124 2 }
125