GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/actuators/test_dc_motor.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 97 0 97
Functions: 100.0% 24 0 24
Branches: 84.0% 126 0 150
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 #include "pch.h"
2
3 #include "dc_motor.h"
4
5 using ::testing::InSequence;
6 using ::testing::NiceMock;
7 using ::testing::StrictMock;
8
9 4 TEST(DcMotor, Disable) {
10
1/1
✓ Branch 2 taken 1 time.
1 StrictMock<MockOutputPin> dpin;
11
12
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(dpin, setValue(1, testing::_))
13
1/1
✓ Branch 3 taken 1 time.
3 .Times(2); // happens twice - once for initial disable, once for set(0)
14
15
1/1
✓ Branch 2 taken 1 time.
1 TwoPinDcMotor dut(dpin);
16 2 }
17
18 4 TEST(DcMotor, Disable2) {
19
1/1
✓ Branch 2 taken 1 time.
1 StrictMock<MockOutputPin> dpin;
20
21
6/6
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
✓ Branch 18 taken 1 time.
✓ Branch 21 taken 1 time.
1 EXPECT_CALL(dpin, setValue(1, testing::_)).Times(4);
22
23
1/1
✓ Branch 2 taken 1 time.
1 TwoPinDcMotor dut(dpin);
24
25
1/1
✓ Branch 1 taken 1 time.
1 dut.disable(nullptr);
26 2 }
27
28 4 TEST(DcMotor, Enable) {
29
1/1
✓ Branch 2 taken 1 time.
1 StrictMock<MockOutputPin> dpin;
30
31 {
32
1/1
✓ Branch 2 taken 1 time.
1 InSequence is;
33
34 // Construction disables
35
6/6
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
✓ Branch 18 taken 1 time.
✓ Branch 21 taken 1 time.
1 EXPECT_CALL(dpin, setValue(1, testing::_)).Times(2);
36
37 // Then enable
38
5/5
✓ Branch 3 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(dpin, setValue(0, testing::_));
39 1 }
40
41
1/1
✓ Branch 2 taken 1 time.
1 TwoPinDcMotor dut(dpin);
42
1/1
✓ Branch 1 taken 1 time.
1 dut.enable();
43 2 }
44
45 4 TEST(DcMotor, SetUnconfigured) {
46
1/1
✓ Branch 2 taken 1 time.
1 StrictMock<MockOutputPin> dpin;
47
6/6
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
✓ Branch 18 taken 1 time.
✓ Branch 21 taken 1 time.
1 EXPECT_CALL(dpin, setValue(1, testing::_)).Times(3);
48
49
1/1
✓ Branch 2 taken 1 time.
1 TwoPinDcMotor dut(dpin);
50
3/7
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
1 EXPECT_FLOAT_EQ(dut.get(), 0);
51
4/20
✓ Branch 3 taken 1 time.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✗ Branch 30 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 43 not taken.
✗ Branch 48 not taken.
✗ Branch 51 not taken.
✗ Branch 57 not taken.
✗ Branch 61 not taken.
✗ Branch 64 not taken.
✗ Branch 69 not taken.
✗ Branch 72 not taken.
1 EXPECT_NO_THROW(dut.set(0.5f));
52
53 // Readback should work even without configuration
54
3/7
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
1 EXPECT_FLOAT_EQ(dut.get(), 0.5f);
55 2 }
56
57 4 TEST(DcMotor, PwmEnablePinModePositive) {
58
1/1
✓ Branch 2 taken 1 time.
1 NiceMock<MockOutputPin> dpin;
59
1/1
✓ Branch 2 taken 1 time.
1 TwoPinDcMotor dut(dpin);
60 1 dut.setType(TwoPinDcMotor::ControlType::PwmEnablePin);
61
62
1/1
✓ Branch 2 taken 1 time.
1 MockPwm enable;
63
1/1
✓ Branch 2 taken 1 time.
1 MockPwm dir1;
64
1/1
✓ Branch 2 taken 1 time.
1 MockPwm dir2;
65
66
4/4
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
1 EXPECT_CALL(enable, setSimplePwmDutyCycle(0.5f));
67
4/4
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
1 EXPECT_CALL(dir1, setSimplePwmDutyCycle(1));
68
4/4
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
1 EXPECT_CALL(dir2, setSimplePwmDutyCycle(0));
69
70
1/1
✓ Branch 1 taken 1 time.
1 dut.configure(enable, dir1, dir2, false);
71
1/1
✓ Branch 1 taken 1 time.
1 dut.set(0.5f);
72 2 }
73
74 4 TEST(DcMotor, PwmEnablePinModeNegative) {
75
1/1
✓ Branch 2 taken 1 time.
1 NiceMock<MockOutputPin> dpin;
76
1/1
✓ Branch 2 taken 1 time.
1 TwoPinDcMotor dut(dpin);
77 1 dut.setType(TwoPinDcMotor::ControlType::PwmEnablePin);
78
79
1/1
✓ Branch 2 taken 1 time.
1 MockPwm enable;
80
1/1
✓ Branch 2 taken 1 time.
1 MockPwm dir1;
81
1/1
✓ Branch 2 taken 1 time.
1 MockPwm dir2;
82
83
84
4/4
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
1 EXPECT_CALL(enable, setSimplePwmDutyCycle(0.5f));
85
4/4
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
1 EXPECT_CALL(dir1, setSimplePwmDutyCycle(0));
86
4/4
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
1 EXPECT_CALL(dir2, setSimplePwmDutyCycle(1));
87
88
1/1
✓ Branch 1 taken 1 time.
1 dut.configure(enable, dir1, dir2, false);
89
1/1
✓ Branch 1 taken 1 time.
1 dut.set(-0.5f);
90 2 }
91
92 4 TEST(DcMotor, PwmDirectionPinsModePositive) {
93
1/1
✓ Branch 2 taken 1 time.
1 NiceMock<MockOutputPin> dpin;
94
1/1
✓ Branch 2 taken 1 time.
1 TwoPinDcMotor dut(dpin);
95 1 dut.setType(TwoPinDcMotor::ControlType::PwmDirectionPins);
96
97
1/1
✓ Branch 2 taken 1 time.
1 MockPwm enable;
98
1/1
✓ Branch 2 taken 1 time.
1 MockPwm dir1;
99
1/1
✓ Branch 2 taken 1 time.
1 MockPwm dir2;
100
101
102
4/4
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
1 EXPECT_CALL(enable, setSimplePwmDutyCycle(1));
103
4/4
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
1 EXPECT_CALL(dir1, setSimplePwmDutyCycle(0.5f));
104
4/4
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
1 EXPECT_CALL(dir2, setSimplePwmDutyCycle(0));
105
106
1/1
✓ Branch 1 taken 1 time.
1 dut.configure(enable, dir1, dir2, false);
107
1/1
✓ Branch 1 taken 1 time.
1 dut.set(0.5f);
108 2 }
109
110 4 TEST(DcMotor, PwmDirectionPinsModeNegative) {
111
1/1
✓ Branch 2 taken 1 time.
1 NiceMock<MockOutputPin> dpin;
112
1/1
✓ Branch 2 taken 1 time.
1 TwoPinDcMotor dut(dpin);
113 1 dut.setType(TwoPinDcMotor::ControlType::PwmDirectionPins);
114
115
1/1
✓ Branch 2 taken 1 time.
1 MockPwm enable;
116
1/1
✓ Branch 2 taken 1 time.
1 MockPwm dir1;
117
1/1
✓ Branch 2 taken 1 time.
1 MockPwm dir2;
118
119
120
4/4
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
1 EXPECT_CALL(enable, setSimplePwmDutyCycle(1));
121
4/4
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
1 EXPECT_CALL(dir1, setSimplePwmDutyCycle(0));
122
4/4
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
1 EXPECT_CALL(dir2, setSimplePwmDutyCycle(0.5f));
123
124
1/1
✓ Branch 1 taken 1 time.
1 dut.configure(enable, dir1, dir2, false);
125
1/1
✓ Branch 1 taken 1 time.
1 dut.set(-0.5f);
126 2 }
127