GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/trigger/test_real_cas_24_plus_1.cpp
Date: 2025-10-03 00:57:22
Warnings: 1 unchecked decisions!
Coverage Exec Excl Total
Lines: 100.0% 29 0 29
Functions: 100.0% 3 0 3
Branches: 50.8% 33 0 65
Decisions: 66.7% 4 - 6

Line Branch Decision Exec Source
1 // Mitsubishi 4B11 trigger pattern
2 // Crank: 36-2-1
3 // Cam: Single tooth (half moon)
4
5 #include "pch.h"
6
7 #include "engine_csv_reader.h"
8
9 4 TEST(realCas24Plus1, spinningOnBench) {
10 extern bool unitTestTaskPrecisionHack;
11 1 unitTestTaskPrecisionHack = true;
12
1/1
✓ Branch 2 taken 1 time.
1 EngineCsvReader reader(/*triggerCount*/1, /* vvtCount */ 1);
13
14
1/1
✓ Branch 1 taken 1 time.
1 reader.open("tests/trigger/resources/cas_nissan_24_plus_1.csv");
15
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
16
17 1 engineConfiguration->isFasterEngineSpinUpEnabled = true;
18 1 engineConfiguration->alwaysInstantRpm = true;
19
20 1 engineConfiguration->isPhaseSyncRequiredForIgnition = true;
21
22 // 24 teeth at cam speed + 1 tooth
23 // AKA 12 teeth at crank speed + 1 cam tooth
24 1 engineConfiguration->vvtMode[0] = VVT_SINGLE_TOOTH;
25
1/1
✓ Branch 1 taken 1 time.
1 eth.setTriggerType(trigger_type_e::TT_12_TOOTH_CRANK);
26
27 1 bool gotFullSync = false;
28
29
3/3
✓ Branch 1 taken 449 times.
✓ Branch 3 taken 448 times.
✓ Branch 4 taken 1 time.
0/1
? Decision couldn't be analyzed.
449 while (reader.haveMore()) {
30
1/1
✓ Branch 1 taken 448 times.
448 reader.processLine(&eth);
31
32 // Expect that all teeth are in the correct spot
33
1/1
✓ Branch 2 taken 448 times.
448 float angleError = getTriggerCentral()->triggerToothAngleError;
34
3/15
✓ Branch 2 taken 448 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 448 times.
✗ Branch 5 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 448 times.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✗ Branch 29 not taken.
✗ Branch 34 not taken.
✗ Branch 38 not taken.
✗ Branch 41 not taken.
448 EXPECT_TRUE(angleError < 3 && angleError > -3) << "tooth angle of " << angleError << " at timestamp " << (getTimeNowNt() / 1e8);
35
36
1/1
✓ Branch 1 taken 448 times.
448 auto rpm = Sensor::getOrZero(SensorType::Rpm);
37 // We should get first RPM on exactly the first (primary) sync point - this means the instant RPM pre-sync event copy all worked OK
38
1/1
✓ Branch 1 taken 448 times.
448 reader.assertFirstRpm(808, 7);
39
40
1/1
✓ Branch 1 taken 448 times.
448 bool hasFullSync = getTriggerCentral()->triggerState.hasSynchronizedPhase();
41
4/4
✓ Branch 0 taken 40 times.
✓ Branch 1 taken 408 times.
✓ Branch 2 taken 1 time.
✓ Branch 3 taken 39 times.
2/2
✓ Decision 'true' taken 1 time.
✓ Decision 'false' taken 447 times.
448 if (!gotFullSync && hasFullSync) {
42 1 gotFullSync = true;
43
44 // Should get full sync on the first cam tooth
45
2/6
✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_EQ(reader.lineIndex(), 40);
46
2/6
✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
1 EXPECT_NEAR(rpm, 915.08f, 0.1);
47 }
48
49
1/1
✓ Branch 1 taken 448 times.
448 float vvt = engine->triggerCentral.getVVTPosition(/*bankIndex*/0, /*camIndex*/0);
50
2/2
✓ Branch 0 taken 409 times.
✓ Branch 1 taken 39 times.
2/2
✓ Decision 'true' taken 409 times.
✓ Decision 'false' taken 39 times.
448 if (vvt != 0) {
51 // cam position should never be reported outside of correct range
52
3/10
✓ Branch 2 taken 409 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 409 times.
✗ Branch 5 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 409 times.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
409 EXPECT_TRUE(vvt > -10 && vvt < -9);
53 }
54 }
55
56
4/9
✓ Branch 3 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 33 not taken.
1 ASSERT_EQ(0u, eth.recentWarnings()->getCount());
57 1 }
58