GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/trigger/test_quad_cam.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 62 0 62
Functions: 100.0% 3 0 3
Branches: 56.2% 86 0 153
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 /**
2 * @file test_quad_cam.cpp
3 *
4 */
5
6 #include "pch.h"
7
8 4 TEST(trigger, testQuadCamInput) {
9
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
10 1 engineConfiguration->globalTriggerAngleOffset = -37;
11 1 engineConfiguration->crankingTimingAngle = 3;
12 1 engineConfiguration->triggerInputPins[1] = Gpio::Unassigned;
13 1 engineConfiguration->isFasterEngineSpinUpEnabled = false;
14 1 engineConfiguration->alwaysInstantRpm = true;
15
16
1/1
✓ Branch 1 taken 1 time.
1 setCrankOperationMode();
17
18 // changing to 'ONE TOOTH' trigger on CRANK with CAM/VVT
19 1 engineConfiguration->vvtMode[0] = VVT_SINGLE_TOOTH;
20 1 engineConfiguration->vvtMode[1] = VVT_SINGLE_TOOTH;
21
22 1 engineConfiguration->camInputs[0] = Gpio::A10; // we just need to indicate that we have CAM
23
24 // this crank trigger would be easier to test, crank shape is less important for this test
25
1/1
✓ Branch 1 taken 1 time.
1 eth.setTriggerType(trigger_type_e::TT_HALF_MOON);
26
27
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(0, Sensor::getOrZero(SensorType::Rpm));
28
29
1/1
✓ Branch 1 taken 1 time.
1 eth.fireFall(12.5);
30
1/1
✓ Branch 1 taken 1 time.
1 eth.fireRise(12.5);
31
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ( 0, Sensor::getOrZero(SensorType::Rpm));
32
33
1/1
✓ Branch 1 taken 1 time.
1 eth.fireFall(12.5);
34
1/1
✓ Branch 1 taken 1 time.
1 eth.fireRise(12.5);
35 // first time we have RPM
36
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(2400, Sensor::getOrZero(SensorType::Rpm));
37
38 // need to be out of VVT sync to see VVT sync in action
39
1/1
✓ Branch 1 taken 1 time.
1 eth.fireFall(12.5);
40
1/1
✓ Branch 1 taken 1 time.
1 eth.fireRise(12.5);
41
1/1
✓ Branch 1 taken 1 time.
1 eth.fireFall(12.5);
42
1/1
✓ Branch 1 taken 1 time.
1 eth.fireRise(12.5);
43
1/1
✓ Branch 1 taken 1 time.
1 eth.fireFall(12.5);
44
1/1
✓ Branch 1 taken 1 time.
1 eth.fireRise(12.5);
45
46
1/1
✓ Branch 1 taken 1 time.
1 eth.moveTimeForwardUs(MS2US(3)); // shifting VVT phase a few angles
47
48 1 float d = 4;
49
50 1 int firstCam = 0;
51 1 int secondCam = 1;
52
53 1 int firstBank = 0;
54 1 int secondBank = 1;
55
56 1 int firstCamSecondBank = secondBank * CAMS_PER_BANK + firstCam;
57 1 int secondCamSecondBank = secondBank * CAMS_PER_BANK + secondCam;
58
59 // Cams should have no position yet
60
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(0, engine->triggerCentral.getVVTPosition(firstBank, firstCam));
61
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(0, engine->triggerCentral.getVVTPosition(firstBank, secondCam));
62
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(0, engine->triggerCentral.getVVTPosition(secondBank, firstCam));
63
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(0, engine->triggerCentral.getVVTPosition(secondBank, secondCam));
64
65
2/2
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
1 hwHandleVvtCamSignal(TriggerValue::RISE, getTimeNowNt(), firstCam);
66
2/2
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
1 hwHandleVvtCamSignal(TriggerValue::RISE, getTimeNowNt(), secondCam);
67
2/2
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
1 hwHandleVvtCamSignal(TriggerValue::RISE, getTimeNowNt(), firstCamSecondBank);
68
2/2
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
1 hwHandleVvtCamSignal(TriggerValue::RISE, getTimeNowNt(), secondCamSecondBank);
69
70 1 float basePos = -80.2f;
71
72 // All four cams should now have the same position
73
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_NEAR_M3(basePos, engine->triggerCentral.getVVTPosition(firstBank, firstCam));
74
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_NEAR_M3(basePos, engine->triggerCentral.getVVTPosition(firstBank, secondCam));
75
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_NEAR_M3(basePos, engine->triggerCentral.getVVTPosition(secondBank, firstCam));
76
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_NEAR_M3(basePos, engine->triggerCentral.getVVTPosition(secondBank, secondCam));
77
78 // Now fire cam events again, but with time gaps between each
79
1/1
✓ Branch 1 taken 1 time.
1 eth.moveTimeForwardMs(1);
80
2/2
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
1 hwHandleVvtCamSignal(TriggerValue::RISE, getTimeNowNt(), firstCam);
81
1/1
✓ Branch 1 taken 1 time.
1 eth.moveTimeForwardMs(1);
82
2/2
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
1 hwHandleVvtCamSignal(TriggerValue::RISE, getTimeNowNt(), secondCam);
83
1/1
✓ Branch 1 taken 1 time.
1 eth.moveTimeForwardMs(1);
84
2/2
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
1 hwHandleVvtCamSignal(TriggerValue::RISE, getTimeNowNt(), firstCamSecondBank);
85
1/1
✓ Branch 1 taken 1 time.
1 eth.moveTimeForwardMs(1);
86
2/2
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
1 hwHandleVvtCamSignal(TriggerValue::RISE, getTimeNowNt(), secondCamSecondBank);
87
88 // All four cams should have different positions, each retarded by 1ms from the last
89 1 float oneMsDegrees = 1000 / engine->rpmCalculator.oneDegreeUs;
90
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_NEAR(basePos - oneMsDegrees * 1, engine->triggerCentral.getVVTPosition(firstBank, firstCam), EPS3D);
91
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_NEAR(basePos - oneMsDegrees * 2, engine->triggerCentral.getVVTPosition(firstBank, secondCam), EPS3D);
92
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_NEAR(basePos - oneMsDegrees * 3, engine->triggerCentral.getVVTPosition(secondBank, firstCam), EPS3D);
93
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_NEAR(basePos - oneMsDegrees * 4, engine->triggerCentral.getVVTPosition(secondBank, secondCam), EPS3D);
94 1 }
95