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(ð, 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(ð, 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(ð, 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(ð, 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 |