GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/test_engine_math.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 46 0 46
Functions: 100.0% 6 0 6
Branches: 48.1% 63 0 131
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 /*
2 * @file test_engine_math.c
3 *
4 * @date Nov 14, 2013
5 * @author Andrey Belomutskiy, (c) 2012-2020
6 */
7
8 #include "pch.h"
9
10 #include "speed_density.h"
11 #include "maf.h"
12
13 4 TEST(misc, testIgnitionPlanning) {
14
1/1
✓ Branch 1 taken 1 time.
1 printf("*************************************************** testIgnitionPlanning\r\n");
15
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
16
1/1
✓ Branch 1 taken 1 time.
1 setTable(config->lambdaTable, 0.92f);
17
1/1
✓ Branch 1 taken 1 time.
1 setupSimpleTestEngineWithMafAndTT_ONE_trigger(&eth);
18
19
1/1
✓ Branch 1 taken 1 time.
1 engine->periodicFastCallback();
20
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(12.857, engine->fuelComputer.targetAFR, EPS4D) << "testIgnitionPlanning_AFR";
21
22
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(IM_BATCH, engineConfiguration->injectionMode);
23 1 }
24
25 4 TEST(misc, testEngineMath) {
26
1/1
✓ Branch 1 taken 1 time.
1 printf("*************************************************** testEngineMath\r\n");
27
28 // todo: let's see if we can make 'engine' unneeded in this test?
29
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
30
1/1
✓ Branch 1 taken 1 time.
1 setTable(config->lambdaTable, 0.92f);
31 1 setTable(config->veTable, 80);
32
33
1/1
✓ Branch 1 taken 1 time.
1 setCamOperationMode();
34 1 engineConfiguration->fuelAlgorithm = engine_load_mode_e::LM_SPEED_DENSITY;
35
36
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( 50, getOneDegreeTimeMs(600) * 180, EPS4D) << "600 RPM";
37
3/9
✓ Branch 4 taken 1 time.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ( 5, getOneDegreeTimeMs(6000) * 180) << "6000 RPM";
38
39 1 auto fuelComputer = &engine->fuelComputer;
40
41
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Clt, 300);
42
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Iat, 350);
43
4/9
✓ 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.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_FLOAT_EQ(312.5, fuelComputer->getTCharge(1000, 0));
44
4/9
✓ 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.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_FLOAT_EQ(313.5833, fuelComputer->getTCharge(1000, 50));
45
4/9
✓ 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.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_FLOAT_EQ(314.6667, fuelComputer->getTCharge(1000, 100));
46
47
48
4/9
✓ 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.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_FLOAT_EQ(312.5, fuelComputer->getTCharge(4000, 0));
49
4/9
✓ 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.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_FLOAT_EQ(320.0833, fuelComputer->getTCharge(4000, 50));
50
4/9
✓ 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.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_FLOAT_EQ(327.6667, fuelComputer->getTCharge(4000, 100));
51
52 // test Air Interpolation mode
53 1 engineConfiguration->tChargeMode = TCHARGE_MODE_AIR_INTERP;
54 1 engineConfiguration->tChargeAirCoefMin = 0.098f;
55 1 engineConfiguration->tChargeAirCoefMax = 0.902f;
56 1 engineConfiguration->tChargeAirFlowMax = 153.6f;
57 // calc. some airMass given the engine displacement=1.839 and 4 cylinders (FORD_ESCORT_GT)
58
1/1
✓ Branch 1 taken 1 time.
1 fuelComputer->sdAirMassInOneCylinder = SpeedDensityBase::getAirmassImpl(/*VE*/1.0f, /*MAP*/100.0f, /*tChargeK*/273.15f + 20.0f);
59
3/8
✓ 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.
✓ Branch 24 taken 1 time.
✗ Branch 25 not taken.
1 ASSERT_NEAR(0.59418f, fuelComputer->sdAirMassInOneCylinder, EPS4D);
60
61
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Clt, 90);
62
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Iat, 20);
63
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Map, 100);
64
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Tps1, 0);
65
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Rpm, 1000);
66
67 // calc. airFlow using airMass, and find tCharge
68
1/1
✓ Branch 1 taken 1 time.
1 engine->periodicFastCallback();
69
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_NEAR(57.0099f, engine->engineState.sd.tCharge, EPS3D);
70
3/8
✓ 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.
✓ Branch 24 taken 1 time.
✗ Branch 25 not taken.
1 ASSERT_NEAR(50.6476f/*kg/h*/, engine->engineState.airflowEstimate, EPS4D);
71 1 }
72
73 TEST(misc, testIgnitionMapGenerator) {
74 float rpmBin[16];
75 setRpmBin(rpmBin, 16, 800, 7000);
76 ASSERT_EQ(650, rpmBin[0]);
77 ASSERT_EQ( 800, rpmBin[1]) << "@1";
78 ASSERT_EQ( 1100, rpmBin[2]) << "@2";
79 ASSERT_EQ( 1400, rpmBin[3]) << "rpm@3";
80 ASSERT_EQ( 4700, rpmBin[14]) << "rpm@14";
81 ASSERT_EQ(7000, rpmBin[15]);
82
83 ASSERT_NEAR(36.0, getInitialAdvance(6000, 100, 36), 0.1);
84 ASSERT_NEAR(9.9, getInitialAdvance(600, 100, 36), 0.2);
85
86 ASSERT_NEAR(34.2, getInitialAdvance(2400, 40, 36), 0.1);
87 ASSERT_NEAR(41.9, getInitialAdvance(4400, 40, 36), 0.2);
88 ASSERT_NEAR(14.2, getInitialAdvance(800, 20, 36), 0.2);
89 }
90