Line | Branch | Decision | Exec | Source |
---|---|---|---|---|
1 | /** | |||
2 | * @file test_fuel_map.cpp | |||
3 | * | |||
4 | * @date Nov 6, 2013 | |||
5 | * @author Andrey Belomutskiy, (c) 2012-2020 | |||
6 | */ | |||
7 | ||||
8 | #include "pch.h" | |||
9 | ||||
10 | #include "fuel_math.h" | |||
11 | #include "trigger_structure.h" | |||
12 | #include "trigger_decoder.h" | |||
13 | #include "util/injection_crank_helper.h" | |||
14 | ||||
15 | using ::testing::FloatNear; | |||
16 | ||||
17 | 4 | TEST(misc, testFuelMap) { | ||
18 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("Setting up TEST_ENGINE\r\n"); | |
19 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
20 | ||||
21 |
1/1✓ Branch 1 taken 1 time.
|
1 | setFlatInjectorLag(0.2); | |
22 | ||||
23 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.engine.updateSlowSensors(); | |
24 | ||||
25 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Clt, 36.605f); | |
26 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Iat, 30.0f); | |
27 | ||||
28 | // because all the correction tables are zero | |||
29 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("*************************************************** getRunningFuel 1\r\n"); | |
30 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.engine.periodicFastCallback(); | |
31 |
4/10✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
|
1 | ASSERT_NEAR(5.3679, getRunningFuel(5), EPS4D) << "base fuel"; | |
32 | ||||
33 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("*************************************************** setting IAT table\r\n"); | |
34 |
2/2✓ Branch 0 taken 16 times.
✓ Branch 1 taken 1 time.
|
2/2✓ Decision 'true' taken 16 times.
✓ Decision 'false' taken 1 time.
|
17 | for (int i = 0; i < IAT_CURVE_SIZE; i++) { |
35 | 16 | config->iatFuelCorrBins[i] = i * 10; | ||
36 | 16 | config->iatFuelCorr[i] = 2 * i; | ||
37 | } | |||
38 | 1 | config->iatFuelCorr[0] = 2; | ||
39 | ||||
40 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("*************************************************** setting CLT table\r\n"); | |
41 |
2/2✓ Branch 0 taken 16 times.
✓ Branch 1 taken 1 time.
|
2/2✓ Decision 'true' taken 16 times.
✓ Decision 'false' taken 1 time.
|
17 | for (int i = 0; i < CLT_CURVE_SIZE; i++) { |
42 | 16 | config->cltFuelCorrBins[i] = i * 10; | ||
43 | 16 | config->cltFuelCorr[i] = i; | ||
44 | } | |||
45 | ||||
46 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Clt, 70.0f); | |
47 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Iat, 30.0f); | |
48 | ||||
49 |
1/1✓ Branch 1 taken 1 time.
|
1 | setFlatInjectorLag(0); | |
50 | ||||
51 |
1/1✓ Branch 2 taken 1 time.
|
1 | float iatCorrection = getIatFuelCorrection(); | |
52 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 6, iatCorrection) << "IAT"; | |
53 |
1/1✓ Branch 2 taken 1 time.
|
1 | float cltCorrection = getCltFuelCorrection(); | |
54 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 7, cltCorrection) << "CLT"; | |
55 | ||||
56 | ||||
57 | 1 | engineConfiguration->mafAdcChannel = EFI_ADC_10; | ||
58 | ||||
59 | // 1005 * 2 for IAT correction | |||
60 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("*************************************************** getRunningFuel 2\r\n"); | |
61 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.engine.periodicFastCallback(); | |
62 | ||||
63 | // Check that runningFuel corrects appropriately | |||
64 |
3/8✓ 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.
|
1 | EXPECT_EQ( 42, getRunningFuel(1)) << "v1"; | |
65 |
3/8✓ 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.
|
1 | EXPECT_EQ( 84, getRunningFuel(2)) << "v1"; | |
66 | ||||
67 |
1/1✓ Branch 1 taken 1 time.
|
1 | setTestFuelCrankingTable(4000); | |
68 | ||||
69 | // Should use 20 degree correction in case of failed sensor | |||
70 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::resetMockValue(SensorType::Clt); | |
71 |
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(12.4, getCrankingFuel3(2, 0), EPS4D); | |
72 | ||||
73 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Clt, 0); | |
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(7.7333, getCrankingFuel3(2, 4), EPS4D); | |
75 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Clt, 8); | |
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_M4(7, getCrankingFuel3(2, 15)); | |
77 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Clt, 70); | |
78 |
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_M4(8, getCrankingFuel3(2, 0)); | |
79 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Clt, 70); | |
80 |
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_M4(4, getCrankingFuel3(2, 50)); | |
81 | 1 | } | ||
82 | ||||
83 | ||||
84 | 1 | static void configureFordAspireTriggerWaveform(TriggerWaveform * s) { | ||
85 | 1 | s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::Rise); | ||
86 | ||||
87 | 1 | s->addEvent720(53.747, TriggerValue::RISE, TriggerWheel::T_SECONDARY); | ||
88 | 1 | s->addEvent720(121.90, TriggerValue::FALL, TriggerWheel::T_SECONDARY); | ||
89 | 1 | s->addEvent720(232.76, TriggerValue::RISE, TriggerWheel::T_SECONDARY); | ||
90 | 1 | s->addEvent720(300.54, TriggerValue::FALL, TriggerWheel::T_SECONDARY); | ||
91 | 1 | s->addEvent720(360, TriggerValue::RISE, TriggerWheel::T_PRIMARY); | ||
92 | ||||
93 | 1 | s->addEvent720(409.8412, TriggerValue::RISE, TriggerWheel::T_SECONDARY); | ||
94 | 1 | s->addEvent720(478.6505, TriggerValue::FALL, TriggerWheel::T_SECONDARY); | ||
95 | 1 | s->addEvent720(588.045, TriggerValue::RISE, TriggerWheel::T_SECONDARY); | ||
96 | 1 | s->addEvent720(657.03, TriggerValue::FALL, TriggerWheel::T_SECONDARY); | ||
97 | 1 | s->addEvent720(720, TriggerValue::FALL, TriggerWheel::T_PRIMARY); | ||
98 | ||||
99 |
3/8✓ Branch 3 taken 1 time.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 10 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 25 taken 1 time.
✗ Branch 26 not taken.
|
1 | ASSERT_FLOAT_EQ(53.747 / 720, s->wave.getSwitchTime(0)); | |
100 |
3/9✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 33 not taken.
|
1 | ASSERT_EQ( TriggerValue::RISE, s->wave.getChannelState(1, 0)) << "@0"; | |
101 |
3/9✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 33 not taken.
|
1 | ASSERT_EQ( TriggerValue::RISE, s->wave.getChannelState(1, 0)) << "@0"; | |
102 | ||||
103 |
3/9✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 33 not taken.
|
1 | ASSERT_EQ( TriggerValue::FALL, s->wave.getChannelState(0, 1)) << "@1"; | |
104 |
3/9✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 33 not taken.
|
1 | ASSERT_EQ( TriggerValue::FALL, s->wave.getChannelState(1, 1)) << "@1"; | |
105 | ||||
106 |
3/9✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 33 not taken.
|
1 | ASSERT_EQ( TriggerValue::FALL, s->wave.getChannelState(0, 2)) << "@2"; | |
107 |
3/9✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 33 not taken.
|
1 | ASSERT_EQ( TriggerValue::RISE, s->wave.getChannelState(1, 2)) << "@2"; | |
108 | ||||
109 |
3/9✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 33 not taken.
|
1 | ASSERT_EQ( TriggerValue::FALL, s->wave.getChannelState(0, 3)) << "@3"; | |
110 |
3/9✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 33 not taken.
|
1 | ASSERT_EQ( TriggerValue::FALL, s->wave.getChannelState(1, 3)) << "@3"; | |
111 | ||||
112 |
3/9✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 33 not taken.
|
1 | ASSERT_EQ( TriggerValue::RISE, s->wave.getChannelState(0, 4)) << "@4"; | |
113 |
3/9✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 33 not taken.
|
1 | ASSERT_EQ( TriggerValue::RISE, s->wave.getChannelState(1, 5)) << "@5"; | |
114 |
3/9✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 33 not taken.
|
1 | ASSERT_EQ( TriggerValue::FALL, s->wave.getChannelState(1, 8)) << "@8"; | |
115 |
3/8✓ Branch 3 taken 1 time.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 10 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 25 taken 1 time.
✗ Branch 26 not taken.
|
1 | ASSERT_FLOAT_EQ(121.90 / 720, s->wave.getSwitchTime(1)); | |
116 |
3/8✓ Branch 3 taken 1 time.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 10 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 25 taken 1 time.
✗ Branch 26 not taken.
|
1 | ASSERT_FLOAT_EQ(657.03 / 720, s->wave.getSwitchTime(8)); | |
117 | ||||
118 |
4/10✓ Branch 4 taken 1 time.
✓ Branch 9 taken 1 time.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 time.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 27 not taken.
✗ Branch 30 not taken.
✓ Branch 37 taken 1 time.
✗ Branch 38 not taken.
|
1 | ASSERT_EQ(0, s->wave.findAngleMatch(53.747 / 720.0).value_or(-1)) << "expecting 0"; | |
119 |
3/10✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 36 taken 1 time.
✗ Branch 37 not taken.
|
1 | ASSERT_FALSE(s->wave.findAngleMatch(53 / 720.0).Valid) << "expecting not found"; | |
120 |
4/9✓ Branch 4 taken 1 time.
✓ Branch 9 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(7, s->wave.findAngleMatch(588.045 / 720.0).value_or(-1)); | |
121 | ||||
122 |
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, s->wave.findInsertionAngle(23.747 / 720.0)) << "expecting 0"; | |
123 |
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( 1, s->wave.findInsertionAngle(63.747 / 720.0)) << "expecting 1"; | |
124 | } | |||
125 | ||||
126 | 4 | TEST(misc, testAngleResolver) { | ||
127 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("*************************************************** testAngleResolver\r\n"); | |
128 | ||||
129 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
130 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.setTriggerType(trigger_type_e::TT_FORD_ASPIRE); | |
131 | 1 | engineConfiguration->globalTriggerAngleOffset = 175; | ||
132 | ||||
133 | 1 | TriggerWaveform * ts = &engine->triggerCentral.triggerShape; | ||
134 | 1 | TriggerFormDetails *triggerFormDetails = &engine->triggerCentral.triggerFormDetails; | ||
135 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->updateTriggerConfiguration(); | |
136 | ||||
137 |
3/9✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
|
1 | ASSERT_NEAR(52.76, triggerFormDetails->eventAngles[3], EPS4D) << "index 2"; // this angle is relation to synch point | |
138 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 10 not taken.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 28 taken 1 time.
✗ Branch 29 not taken.
|
1 | ASSERT_NEAR(0.3233, ts->wave.getSwitchTime(2), EPS4D) << "time 2"; | |
139 |
3/9✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
|
1 | ASSERT_NEAR(412.76, triggerFormDetails->eventAngles[6], EPS4D) << "index 5"; | |
140 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 10 not taken.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 28 taken 1 time.
✗ Branch 29 not taken.
|
1 | ASSERT_NEAR(0.5733, ts->wave.getSwitchTime(5), EPS4D) << "time 5"; | |
141 | ||||
142 |
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(4, ts->getTriggerWaveformSynchPointIndex()); | |
143 | ||||
144 |
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( 10u, ts->getSize()) << "shape size"; | |
145 | ||||
146 |
1/1✓ Branch 2 taken 1 time.
|
1 | TriggerWaveform t; | |
147 |
1/1✓ Branch 1 taken 1 time.
|
1 | configureFordAspireTriggerWaveform(&t); | |
148 | 1 | } | ||
149 | ||||
150 | TEST(misc, testPinHelper) { | |||
151 | printf("*************************************************** testPinHelper\r\n"); | |||
152 | ASSERT_EQ(0, getElectricalValue(0, OM_DEFAULT)); | |||
153 | ASSERT_EQ(1, getElectricalValue(1, OM_DEFAULT)); | |||
154 | ||||
155 | ASSERT_EQ(0, getElectricalValue(1, OM_INVERTED)); | |||
156 | ASSERT_EQ(1, getElectricalValue(0, OM_INVERTED)); | |||
157 | } | |||
158 |