GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/trigger/test_symmetrical_crank.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 46 0 46
Functions: 100.0% 7 0 7
Branches: 44.8% 69 0 154
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 /*
2 * @file test_symmetrical_crank.cpp
3 *
4 * @date Feb 14, 2020
5 * @author Andrey Belomutskiy, (c) 2012-2020
6 */
7
8 #include "pch.h"
9
10 4 static void postFourEvents(EngineTestHelper *eth, float mult) {
11 4 eth->fireFall(mult * 394);
12 4 eth->fireRise(mult * 16);
13 4 eth->fireFall(mult * 294);
14 4 eth->fireRise(mult * 16);
15 4 }
16
17 4 TEST(engine, testAngleLogicInSymmetricalCrankIssue2980) {
18
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::MAZDA_MIATA_NB2);
19
20 1 TriggerFormDetails *triggerForm = &engine->triggerCentral.triggerFormDetails;
21
22 1 TriggerWaveform * form = &engine->triggerCentral.triggerShape;
23
24 #define EXPECT_FINDANGLE(angle, idx) EXPECT_EQ(form->findAngleIndex(triggerForm, angle) & 0xFFFF'FFFE, idx);
25
26 // Check one angle just after every trigger tooth, for two full revolutions (720 degrees, one engine cycle, 4 loops of the trigger)
27
28 // First quarter
29
3/7
✓ Branch 4 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.
1 EXPECT_FINDANGLE(0 * 180 + 5, 0u); // 5
30
3/7
✓ Branch 4 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.
1 EXPECT_FINDANGLE(0 * 180 + 115, 2u); // 115
31
32 // Second quarter
33
3/7
✓ Branch 4 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.
1 EXPECT_FINDANGLE(1 * 180 + 5, 4u); // 180+5 = 185
34
3/7
✓ Branch 4 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.
1 EXPECT_FINDANGLE(1 * 180 + 115, 6u); // 180+115 = 295
35
36 // Third quarter
37
3/7
✓ Branch 4 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.
1 EXPECT_FINDANGLE(2 * 180 + 5, 8u); // 360+5 = 365
38
3/7
✓ Branch 4 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.
1 EXPECT_FINDANGLE(2 * 180 + 115, 10u); // 360+115 = 475
39
40 // Fourth quarter
41
3/7
✓ Branch 4 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.
1 EXPECT_FINDANGLE(3 * 180 + 5, 12u); // 540+5 = 545
42
3/7
✓ Branch 4 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.
1 EXPECT_FINDANGLE(3 * 180 + 115, 14u); // 540+115 = 655
43 2 }
44
45 4 TEST(engine, testSymmetricalCrank) {
46
47
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::MAZDA_MIATA_NB2);
48
49 // this test is not about isFasterEngineSpinUpEnabled so let's disable it to simplify things
50 1 engineConfiguration->isFasterEngineSpinUpEnabled = false;
51 1 engineConfiguration->alwaysInstantRpm = true;
52
53
5/10
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 time.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
1 ASSERT_EQ(FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR, getEngineRotationState()->getOperationMode());
54
55 1 float mult = 0.02;
56
57
4/10
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
1 ASSERT_EQ( 0, round(Sensor::getOrZero(SensorType::Rpm))) << "RPM#0";
58
59
1/1
✓ Branch 1 taken 1 time.
1 postFourEvents(&eth, mult);
60
4/10
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
1 ASSERT_EQ( 0, round(Sensor::getOrZero(SensorType::Rpm))) << "RPM#0";
61
62
1/1
✓ Branch 1 taken 1 time.
1 eth.fireFall(mult * 394);
63
1/1
✓ Branch 1 taken 1 time.
1 eth.fireRise(mult * 16);
64
1/1
✓ Branch 1 taken 1 time.
1 eth.fireFall(mult * 294);
65
3/9
✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
1 ASSERT_FALSE(engine->triggerCentral.triggerState.getShaftSynchronized());
66
1/1
✓ Branch 1 taken 1 time.
1 eth.fireRise(mult * 16);
67
3/9
✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
1 ASSERT_TRUE(engine->triggerCentral.triggerState.getShaftSynchronized());
68
69
4/10
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
1 ASSERT_EQ( 0, round(Sensor::getOrZero(SensorType::Rpm))) << "RPM#0";
70
71
1/1
✓ Branch 1 taken 1 time.
1 postFourEvents(&eth, mult);
72
4/10
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
1 ASSERT_EQ(2084, round(Sensor::getOrZero(SensorType::Rpm))) << "RPM#11";
73
74
1/1
✓ Branch 1 taken 1 time.
1 postFourEvents(&eth, mult);
75
4/10
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
1 ASSERT_EQ(2084, round(Sensor::getOrZero(SensorType::Rpm))) << "RPM#11";
76
77
1/1
✓ Branch 1 taken 1 time.
1 postFourEvents(&eth, mult);
78
4/10
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
1 ASSERT_EQ(2084, round(Sensor::getOrZero(SensorType::Rpm))) << "RPM#11";
79 1 }
80