| Line | Branch | Decision | Exec | Source |
|---|---|---|---|---|
| 1 | /* | |||
| 2 | * @file test_fuel_wall_wetting.cpp | |||
| 3 | * | |||
| 4 | * See also test_accel_enrichment.cpp | |||
| 5 | * | |||
| 6 | * @date Oct 16, 2019 | |||
| 7 | * @author Andrey Belomutskiy, (c) 2012-2020 | |||
| 8 | */ | |||
| 9 | ||||
| 10 | #include "pch.h" | |||
| 11 | ||||
| 12 | struct MockWallController : public IWallFuelController { | |||
| 13 | 111 | MOCK_METHOD(bool, getEnable, (), (const, override)); | ||
| 14 | 111 | MOCK_METHOD(float, getAlpha, (), (const, override)); | ||
| 15 | 111 | MOCK_METHOD(float, getBeta, (), (const, override)); | ||
| 16 | }; | |||
| 17 | ||||
| 18 | 4 | TEST(fuel, testWallWettingEnrichmentMath) { | ||
| 19 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
| 20 | ||||
| 21 |
1/1✓ Branch 2 taken 1 time.
|
1 | MockWallController wallController; | |
| 22 | ||||
| 23 | // WW is enabled! | |||
| 24 |
6/6✓ Branch 2 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 15 taken 1 time.
✓ Branch 18 taken 1 time.
✓ Branch 21 taken 1 time.
|
1 | EXPECT_CALL(wallController, getEnable()).WillRepeatedly(Return(true)); | |
| 25 | ||||
| 26 | // 1/2 of fuel remains on walls | |||
| 27 |
6/6✓ Branch 2 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 15 taken 1 time.
✓ Branch 18 taken 1 time.
✓ Branch 21 taken 1 time.
|
1 | EXPECT_CALL(wallController, getAlpha()).WillRepeatedly(Return(0.5f)); | |
| 28 | ||||
| 29 | // 1/4 of fuel is lands on walls | |||
| 30 |
6/6✓ Branch 2 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 15 taken 1 time.
✓ Branch 18 taken 1 time.
✓ Branch 21 taken 1 time.
|
1 | EXPECT_CALL(wallController, getBeta()).WillRepeatedly(Return(0.25f)); | |
| 31 | ||||
| 32 | // install our mock in to the engine | |||
| 33 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->engineModules.get<WallFuelController>().set(&wallController); | |
| 34 | ||||
| 35 | 1 | WallFuel wallFuel; | ||
| 36 | ||||
| 37 | // each invocation of 'adjust' changes WallWetting internal state | |||
| 38 |
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(1.3333, wallFuel.adjust(1), EPS4D); | |
| 39 |
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(1.1111, wallFuel.adjust(1), EPS4D); | |
| 40 |
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(1.0370, wallFuel.adjust(1), EPS4D); | |
| 41 |
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(1.0123, wallFuel.adjust(1), EPS4D); | |
| 42 | ||||
| 43 | // get to steady state | |||
| 44 |
2/2✓ Branch 0 taken 50 times.
✓ Branch 1 taken 1 time.
|
2/2✓ Decision 'true' taken 50 times.
✓ Decision 'false' taken 1 time.
|
51 | for (size_t i = 0; i < 50; i++) { |
| 45 |
1/1✓ Branch 1 taken 50 times.
|
50 | wallFuel.adjust(1); | |
| 46 | } | |||
| 47 | ||||
| 48 |
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(1, wallFuel.adjust(1), EPS4D); | |
| 49 | ||||
| 50 | // now run half the fuel | |||
| 51 |
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(0.3333, wallFuel.adjust(0.5), EPS4D); | |
| 52 |
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(0.4444, wallFuel.adjust(0.5), EPS4D); | |
| 53 |
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(0.4815, wallFuel.adjust(0.5), EPS4D); | |
| 54 |
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(0.4938, wallFuel.adjust(0.5), EPS4D); | |
| 55 | ||||
| 56 |
2/2✓ Branch 0 taken 50 times.
✓ Branch 1 taken 1 time.
|
2/2✓ Decision 'true' taken 50 times.
✓ Decision 'false' taken 1 time.
|
51 | for (size_t i = 0; i < 50; i++) { |
| 57 |
1/1✓ Branch 1 taken 50 times.
|
50 | wallFuel.adjust(0.5); | |
| 58 | } | |||
| 59 | ||||
| 60 |
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(0.5, wallFuel.adjust(0.5), EPS4D); | |
| 61 | 2 | } | ||
| 62 | ||||
| 63 | 4 | TEST(fuel, testWallWettingEnrichmentScheduling) { | ||
| 64 | ||||
| 65 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
| 66 | 1 | engineConfiguration->isFasterEngineSpinUpEnabled = false; | ||
| 67 | ||||
| 68 |
1/1✓ Branch 1 taken 1 time.
|
1 | setCrankOperationMode(); | |
| 69 | ||||
| 70 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.setTriggerType(trigger_type_e::TT_HALF_MOON); | |
| 71 | ||||
| 72 | ||||
| 73 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireTriggerEvents2(/* count */ 4, 25 /* ms */); | |
| 74 |
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( 1200, Sensor::getOrZero(SensorType::Rpm)) << "RPM"; | |
| 75 | ||||
| 76 | 1 | int expectedInvocationCounter = 1; | ||
| 77 | ||||
| 78 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 time.
|
2/2✓ Decision 'true' taken 4 times.
✓ Decision 'false' taken 1 time.
|
5 | for (int i = 0; i < 4; i++) { |
| 79 |
4/9✓ Branch 3 taken 4 times.
✓ Branch 6 taken 4 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 28 taken 4 times.
✗ Branch 29 not taken.
|
4 | ASSERT_EQ(expectedInvocationCounter, engine->injectionEvents.elements[i].getWallFuel().invocationCounter); | |
| 80 | } | |||
| 81 | ||||
| 82 | // Cylinder 5 doesn't exist - shouldn't have been called! | |||
| 83 |
4/9✓ Branch 2 taken 1 time.
✓ Branch 6 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ(0, engine->injectionEvents.elements[5].getWallFuel().invocationCounter); | |
| 84 | ||||
| 85 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.engine.periodicFastCallback(); | |
| 86 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.engine.periodicFastCallback(); | |
| 87 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.engine.periodicFastCallback(); | |
| 88 | ||||
| 89 | // still same 1 per cylinder - wall wetting is NOT invoked from 'periodicFastCallback' | |||
| 90 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 time.
|
2/2✓ Decision 'true' taken 4 times.
✓ Decision 'false' taken 1 time.
|
5 | for (int i = 0; i < 4; i++) { |
| 91 |
4/9✓ Branch 3 taken 4 times.
✓ Branch 6 taken 4 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 28 taken 4 times.
✗ Branch 29 not taken.
|
4 | ASSERT_EQ(expectedInvocationCounter, engine->injectionEvents.elements[i].getWallFuel().invocationCounter); | |
| 92 | } | |||
| 93 | ||||
| 94 | // Cylinder 5 doesn't exist - shouldn't have been called! | |||
| 95 |
4/9✓ Branch 2 taken 1 time.
✓ Branch 6 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ(0, engine->injectionEvents.elements[5].getWallFuel().invocationCounter); | |
| 96 | 1 | } | ||
| 97 |