GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/trigger/test_real_cranking_nissan_vq40.cpp
Date: 2025-10-03 00:57:22
Warnings: 1 unchecked decisions!
Coverage Exec Excl Total
Lines: 100.0% 39 0 39
Functions: 100.0% 7 0 7
Branches: 48.9% 45 0 92
Decisions: 75.0% 6 - 8

Line Branch Decision Exec Source
1 /*
2 * @file test_real_cranking_nissan_vq40.cpp
3 *
4 * @date Jul 21, 2021
5 * @author Andrey Belomutskiy, (c) 2012-2021
6 */
7
8 #include "pch.h"
9 #include "logicdata_csv_reader.h"
10
11 2 static void test(int engineSyncCam, float camOffsetAdd) {
12
1/1
✓ Branch 2 taken 2 times.
2 CsvReader reader(1, /* vvtCount */ 2);
13
14
1/1
✓ Branch 1 taken 2 times.
2 reader.open("tests/trigger/resources/nissan_vq40_cranking-1.csv");
15
1/1
✓ Branch 2 taken 2 times.
2 EngineTestHelper eth (engine_type_e::HELLEN_121_NISSAN_6_CYL);
16 2 setTable(config->ignitionIatCorrTable, 0);
17 2 engineConfiguration->isFasterEngineSpinUpEnabled = false;
18 2 engineConfiguration->alwaysInstantRpm = true;
19
20 // Different sync cam may result in different TDC point, so we might need different cam offsets.
21 2 engineConfiguration->vvtOffsets[0] += camOffsetAdd;
22 2 engineConfiguration->vvtOffsets[2] += camOffsetAdd;
23 2 engineConfiguration->engineSyncCam = engineSyncCam;
24
25 2 bool hasSeenFirstVvt = false;
26
27
3/3
✓ Branch 1 taken 1626 times.
✓ Branch 3 taken 1624 times.
✓ Branch 4 taken 2 times.
0/1
? Decision couldn't be analyzed.
1626 while (reader.haveMore()) {
28
1/1
✓ Branch 1 taken 1624 times.
1624 reader.processLine(&eth);
29
1/1
✓ Branch 1 taken 1624 times.
1624 float vvt1 = engine->triggerCentral.getVVTPosition(/*bankIndex*/0, /*camIndex*/0);
30
1/1
✓ Branch 1 taken 1624 times.
1624 float vvt2 = engine->triggerCentral.getVVTPosition(/*bankIndex*/1, /*camIndex*/0);
31
32
2/2
✓ Branch 0 taken 1298 times.
✓ Branch 1 taken 326 times.
2/2
✓ Decision 'true' taken 1298 times.
✓ Decision 'false' taken 326 times.
1624 if (vvt1 != 0) {
33
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1296 times.
2/2
✓ Decision 'true' taken 2 times.
✓ Decision 'false' taken 1296 times.
1298 if (!hasSeenFirstVvt) {
34
2/6
✓ Branch 2 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
2 EXPECT_NEAR(vvt1, 1.4, /*precision*/1);
35 2 hasSeenFirstVvt = true;
36 }
37
38 // cam position should never be reported outside of correct range
39
3/10
✓ Branch 2 taken 1298 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1298 times.
✗ Branch 5 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 1298 times.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
1298 EXPECT_TRUE(vvt1 > -3 && vvt1 < 3);
40 }
41
42
2/2
✓ Branch 0 taken 1298 times.
✓ Branch 1 taken 326 times.
2/2
✓ Decision 'true' taken 1298 times.
✓ Decision 'false' taken 326 times.
1624 if (vvt2 != 0) {
43 // cam position should never be reported outside of correct range
44
3/10
✓ Branch 2 taken 1298 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1298 times.
✗ Branch 5 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 1298 times.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
1298 EXPECT_TRUE(vvt2 > -3 && vvt2 < 3);
45 }
46 }
47
48
3/7
✓ Branch 2 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
2 EXPECT_NEAR(engine->triggerCentral.getVVTPosition(/*bankIndex*/0, /*camIndex*/0), 1.351, 1e-2);
49
3/7
✓ Branch 2 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
2 EXPECT_NEAR(engine->triggerCentral.getVVTPosition(/*bankIndex*/1, /*camIndex*/0), 1.548, 1e-2);
50
4/10
✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 26 not taken.
✗ Branch 29 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
2 ASSERT_EQ(102, round(Sensor::getOrZero(SensorType::Rpm)))<< reader.lineIndex();
51
52 // TODO: why warnings?
53
4/9
✓ Branch 3 taken 2 times.
✓ Branch 8 taken 2 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
2 ASSERT_EQ(2u, eth.recentWarnings()->getCount());
54
4/9
✓ Branch 2 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
2 ASSERT_EQ(ObdCode::CUSTOM_OUT_OF_ORDER_COIL, eth.recentWarnings()->get(0).Code); // this is from a coil being protected by overdwell protection
55
4/9
✓ Branch 2 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
2 ASSERT_EQ(ObdCode::CUSTOM_PRIMARY_TOO_MANY_TEETH, eth.recentWarnings()->get(1).Code);
56 2 }
57
58 // On Nissan VQ, all cams have the same pattern, so all should be equally good for engine sync. Check them all!
59
60 4 TEST(realCrankingVQ40, normalCrankingSyncCam1) {
61 1 test(0, 0);
62 1 }
63
64 4 TEST(realCrankingVQ40, normalCrankingSyncCam2) {
65 1 test(2, -360);
66 1 }
67