| Line | Branch | Decision | Exec | Source |
|---|---|---|---|---|
| 1 | #include "pch.h" | |||
| 2 | ||||
| 3 | #include "logicdata_csv_reader.h" | |||
| 4 | ||||
| 5 | ✗ | static void prepare(EngineTestHelper *eth, trigger_type_e trigger) { | ||
| 6 | ||||
| 7 | ✗ | engineConfiguration->isFasterEngineSpinUpEnabled = true; | ||
| 8 | ✗ | engineConfiguration->alwaysInstantRpm = true; | ||
| 9 | ✗ | engineConfiguration->invertPrimaryTriggerSignal = false; | ||
| 10 | ||||
| 11 | ✗ | engineConfiguration->isPhaseSyncRequiredForIgnition = true; | ||
| 12 | ||||
| 13 | ✗ | eth->setTriggerType(trigger); | ||
| 14 | ||||
| 15 | ✗ | ASSERT_FALSE(engine->triggerCentral.triggerShape.shapeDefinitionError); | ||
| 16 | ||||
| 17 | ✗ | engineConfiguration->vvtMode[0] = VVT_INACTIVE; | ||
| 18 | } | |||
| 19 | ||||
| 20 | ✗ | static void constructTriggerFromRecording(CsvReader *reader) { | ||
| 21 | ✗ | int magic = 20; | ||
| 22 | ||||
| 23 | ✗ | if (reader->lineIndex() == magic) { | ||
| 24 | ||||
| 25 | ✗ | int len = 8; | ||
| 26 | ✗ | double last = reader->history.get(magic - 1); | ||
| 27 | ✗ | printf("last=%f\n", last); | ||
| 28 | ||||
| 29 | ✗ | double time360 = last - reader->history.get(magic - 1 - 8); | ||
| 30 | ||||
| 31 | ✗ | float current = 0; | ||
| 32 | ||||
| 33 | ✗ | for (int i=len - 1;i>=0;i--) { | ||
| 34 | ✗ | double tooth = last - reader->history.get(magic - 1 - i); | ||
| 35 | // printf("index=%d width=%f\n", i, tooth); | |||
| 36 | ✗ | double angle = 360 - (360 * tooth / time360); | ||
| 37 | //printf("index=%d, to=%f\n", i, angle); | |||
| 38 | ||||
| 39 | ✗ | bool isRise = (i % 2) == 1; | ||
| 40 | ✗ | const char * front = isRise ? "RISE" : "FALL"; | ||
| 41 | ||||
| 42 | ✗ | printf("\ts->addEvent360(%f, TriggerValue::%s);\n", angle, front); | ||
| 43 | ✗ | current += tooth; | ||
| 44 | } | |||
| 45 | ||||
| 46 | // printf("time360=%f\n", time360); | |||
| 47 | } | |||
| 48 | ✗ | } | ||
| 49 | ||||
| 50 | ✗ | static void runTriggerTest(const char *fileName, uint32_t totalErrors, int syncCounter, float firstRpm) { | ||
| 51 | ✗ | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | ||
| 52 | ||||
| 53 | ✗ | prepare(ð, trigger_type_e::TT_VVT_MITSU_6G72); | ||
| 54 | ||||
| 55 | ✗ | bool gotRpm = false; | ||
| 56 | ||||
| 57 | ✗ | CsvReader reader(/*trigger channels count*/1, /* vvtCount */ 0); | ||
| 58 | ✗ | reader.flipOnRead = true; | ||
| 59 | ||||
| 60 | ✗ | reader.open(fileName); | ||
| 61 | ✗ | while (reader.haveMore()) { | ||
| 62 | ✗ | reader.processLine(ð); | ||
| 63 | ||||
| 64 | ✗ | constructTriggerFromRecording(&reader); | ||
| 65 | ||||
| 66 | ||||
| 67 | ✗ | auto rpm = Sensor::getOrZero(SensorType::Rpm); | ||
| 68 | // printf("rpm %f\n", rpm); | |||
| 69 | ||||
| 70 | ✗ | if (!gotRpm && rpm) { | ||
| 71 | ✗ | gotRpm = true; | ||
| 72 | ||||
| 73 | // EXPECT_EQ(eventCount, 7); | |||
| 74 | ✗ | EXPECT_NEAR(rpm, firstRpm, 0.1); | ||
| 75 | } | |||
| 76 | } | |||
| 77 | ✗ | ASSERT_TRUE(gotRpm); | ||
| 78 | ✗ | ASSERT_EQ(totalErrors, engine->triggerCentral.triggerState.totalTriggerErrorCounter); | ||
| 79 | ✗ | ASSERT_EQ(syncCounter, engine->triggerCentral.triggerState.getSynchronizationCounter()); | ||
| 80 | ✗ | } | ||
| 81 | ||||
| 82 | ||||
| 83 | /* | |||
| 84 | TEST(real6g72, data1) { | |||
| 85 | runTriggerTest("tests/trigger/resources/3000gt.csv", 0, 15, 195.515f); | |||
| 86 | } | |||
| 87 | ||||
| 88 | TEST(real6g72, data2) { | |||
| 89 | runTriggerTest("tests/trigger/resources/3000gt_cranking_cam_first_crank_second_only_cam.csv", 2, 9, 157.843f); | |||
| 90 | } | |||
| 91 | */ | |||
| 92 | ||||
| 93 | 5 | void generateLog(const char* filename) { | ||
| 94 |
1/1✓ Branch 2 taken 5 times.
|
5 | CsvReader reader(/*triggerCount*/ 1, /* vvtCount */ 1); | |
| 95 | ||||
| 96 |
1/1✓ Branch 1 taken 5 times.
|
5 | reader.open(filename, NORMAL_ORDER, NORMAL_ORDER); | |
| 97 | ||||
| 98 |
1/1✓ Branch 2 taken 5 times.
|
5 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
| 99 |
1/1✓ Branch 1 taken 5 times.
|
5 | setVerboseTrigger(true); | |
| 100 | ||||
| 101 | 5 | engineConfiguration->vvtMode[0] = vvt_mode_e::VVT_MITSUBISHI_6G72; | ||
| 102 |
1/1✓ Branch 1 taken 5 times.
|
5 | eth.setTriggerType(trigger_type_e::TT_3_TOOTH_CRANK); | |
| 103 | ||||
| 104 | 5 | engineConfiguration->globalTriggerAngleOffset = 125; | ||
| 105 | 5 | engineConfiguration->isFasterEngineSpinUpEnabled = true; | ||
| 106 | 5 | engineConfiguration->alwaysInstantRpm = true; | ||
| 107 | 5 | engineConfiguration->isPhaseSyncRequiredForIgnition = true; | ||
| 108 | ||||
| 109 | 5 | int n = 0; | ||
| 110 | 5 | bool firstRpm = false; | ||
| 111 |
3/3✓ Branch 1 taken 2731 times.
✓ Branch 3 taken 2726 times.
✓ Branch 4 taken 5 times.
|
0/1? Decision couldn't be analyzed.
|
2731 | while (reader.haveMore()) { |
| 112 |
1/1✓ Branch 1 taken 2726 times.
|
2726 | reader.processLine(ð); | |
| 113 |
1/1✓ Branch 1 taken 2726 times.
|
2726 | auto rpm = Sensor::getOrZero(SensorType::Rpm); | |
| 114 |
4/4✓ Branch 0 taken 2520 times.
✓ Branch 1 taken 206 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 2515 times.
|
2/2✓ Decision 'true' taken 5 times.
✓ Decision 'false' taken 2721 times.
|
2726 | if ((rpm) && (!firstRpm)) { |
| 115 |
1/1✓ Branch 1 taken 5 times.
|
5 | printf("Got first RPM %f, at %d\n", rpm, n); | |
| 116 | 5 | firstRpm = true; | ||
| 117 | } | |||
| 118 | 2726 | n++; | ||
| 119 | } | |||
| 120 | 10 | } | ||
| 121 | ||||
| 122 | 4 | TEST(real6g72, sync_3000gt_cranking_rusefi) { | ||
| 123 | 1 | generateLog("tests/trigger/resources/3000gt_cranking_rusefi.csv"); | ||
| 124 | 1 | } | ||
| 125 | ||||
| 126 | 4 | TEST(real6g72, sync_3000gt_cranking_rusefi_2) { | ||
| 127 | 1 | generateLog("tests/trigger/resources/3000gt_cranking_rusefi_2.csv"); | ||
| 128 | 1 | } | ||
| 129 | ||||
| 130 | 4 | TEST(real6g72, sync_3000gt_crank_cam_cranking) { | ||
| 131 | 1 | generateLog("tests/trigger/resources/3000gt_crank_cam_cranking.csv"); | ||
| 132 | 1 | } | ||
| 133 | ||||
| 134 | 4 | TEST(real6g72, sync_3000gt_crank_cam_cranking_2) { | ||
| 135 | 1 | generateLog("tests/trigger/resources/3000gt_crank_cam_cranking_2.csv"); | ||
| 136 | 1 | } | ||
| 137 | ||||
| 138 | 4 | TEST(real6g72, sync_3000gt_crank_cam_cranking_idle) { | ||
| 139 | 1 | generateLog("tests/trigger/resources/3000gt_crank_cam_cranking_idle.csv"); | ||
| 140 | 1 | } | ||
| 141 |