only:refactoring

This commit is contained in:
rusefillc 2024-12-29 14:06:25 -05:00
parent 41040541a8
commit 1155d8e1b7
5 changed files with 61 additions and 28 deletions

View File

@ -0,0 +1,3 @@
#include "engine_csv_reader.h"

View File

@ -0,0 +1,48 @@
// file engine_csv_reader.h
#pragma once
#include "logicdata_csv_reader.h"
class EngineCsvReader {
public:
EngineCsvReader(size_t triggerCount, size_t vvtCount) : cvsReader(triggerCount, vvtCount) {
}
bool gotRpm = false;
bool gotSync = false;
bool prevSync = false;
int expectedFirstRpm = -1;
int expectedFirstRpmAtIndex = -1;
// composition good, inheritance less good?
CsvReader cvsReader;
void open(const char *fileName, const int* triggerColumnIndexes = NORMAL_ORDER, const int *vvtColumnIndexes = NORMAL_ORDER) {
cvsReader.open(fileName, triggerColumnIndexes, vvtColumnIndexes);
}
bool haveMore() {
return cvsReader.haveMore();
}
int lineIndex() const {
return cvsReader.lineIndex();
}
void processLine(EngineTestHelper *eth) {
cvsReader.processLine(eth);
}
void assertFirstRpm(int expectedFirstRpm, int expectedFirstRpmAtIndex) {
auto rpm = Sensor::getOrZero(SensorType::Rpm);
if (!gotRpm && rpm) {
gotRpm = true;
EXPECT_NEAR(rpm, expectedFirstRpm, 1);
EXPECT_EQ(lineIndex(), expectedFirstRpmAtIndex);
}
}
};

View File

@ -9,8 +9,6 @@ const int NORMAL_ORDER[2] = {0, 1};
const int REVERSE_ORDER[2] = {1, 0}; const int REVERSE_ORDER[2] = {1, 0};
class CsvReader { class CsvReader {
public: public:
CsvReader(size_t triggerCount, size_t vvtCount) : CsvReader(triggerCount, vvtCount, 0.0) {} CsvReader(size_t triggerCount, size_t vvtCount) : CsvReader(triggerCount, vvtCount, 0.0) {}

View File

@ -1,39 +1,28 @@
// file test_hd_cranking.cpp // file test_hd_cranking.cpp
#include "pch.h" #include "pch.h"
#include "logicdata_csv_reader.h" #include "engine_csv_reader.h"
TEST(harley, crankingSomethingCam) { TEST(harley, hdCrankingWithCam) {
CsvReader reader(1, /* vvtCount */ 1); EngineCsvReader reader(1, /* vvtCount */ 1);
reader.open("tests/ignition_injection/resources/hd-req-sync_3.csv"); reader.open("tests/ignition_injection/resources/hd-req-sync_3.csv");
EngineTestHelper eth(engine_type_e::HARLEY); EngineTestHelper eth(engine_type_e::HARLEY);
engineConfiguration->vvtMode[0] = VVT_BOSCH_QUICK_START; engineConfiguration->vvtMode[0] = VVT_BOSCH_QUICK_START;
eth.applyTriggerWaveform(); eth.applyTriggerWaveform();
bool gotRpm = false;
bool gotSync = false;
bool prevSync = false;
while (reader.haveMore()) { while (reader.haveMore()) {
reader.processLine(&eth); reader.processLine(&eth);
// whole pattern is a copy-paste from test_real_4b11.cpp, is better API possible? reader.assertFirstRpm(184, 60);
auto rpm = Sensor::getOrZero(SensorType::Rpm); auto rpm = Sensor::getOrZero(SensorType::Rpm);
if (!gotRpm && rpm) {
gotRpm = true;
// We should get first RPM on exactly the first sync point - this means the instant RPM pre-sync event copy all worked OK if (!reader.gotSync && engine->triggerCentral.triggerState.hasSynchronizedPhase()) {
EXPECT_EQ(reader.lineIndex(), 60);
EXPECT_NEAR(rpm, 184, 1);
}
if (!gotSync && engine->triggerCentral.triggerState.hasSynchronizedPhase()) {
EXPECT_EQ(reader.lineIndex(), 269); EXPECT_EQ(reader.lineIndex(), 269);
gotSync = true; reader.gotSync = true;
} }
if (gotSync) { if (reader.gotSync) {
// we have loss of sync, interesting! // we have loss of sync, interesting!
// EXPECT_TRUE(engine->triggerCentral.triggerState.hasSynchronizedPhase()) << "Loss " << reader.lineIndex(); // EXPECT_TRUE(engine->triggerCentral.triggerState.hasSynchronizedPhase()) << "Loss " << reader.lineIndex();
} }

View File

@ -4,10 +4,10 @@
#include "pch.h" #include "pch.h"
#include "logicdata_csv_reader.h" #include "engine_csv_reader.h"
TEST(realCas24Plus1, spinningOnBench) { TEST(realCas24Plus1, spinningOnBench) {
CsvReader reader(/*triggerCount*/1, /* vvtCount */ 1); EngineCsvReader reader(/*triggerCount*/1, /* vvtCount */ 1);
reader.open("tests/trigger/resources/cas_nissan_24_plus_1.csv"); reader.open("tests/trigger/resources/cas_nissan_24_plus_1.csv");
EngineTestHelper eth(engine_type_e::TEST_ENGINE); EngineTestHelper eth(engine_type_e::TEST_ENGINE);
@ -33,13 +33,8 @@ TEST(realCas24Plus1, spinningOnBench) {
EXPECT_TRUE(angleError < 3 && angleError > -3) << "tooth angle of " << angleError << " at timestamp " << (getTimeNowNt() / 1e8); EXPECT_TRUE(angleError < 3 && angleError > -3) << "tooth angle of " << angleError << " at timestamp " << (getTimeNowNt() / 1e8);
auto rpm = Sensor::getOrZero(SensorType::Rpm); auto rpm = Sensor::getOrZero(SensorType::Rpm);
if (!gotRpm && rpm) {
gotRpm = true;
// We should get first RPM on exactly the first (primary) sync point - this means the instant RPM pre-sync event copy all worked OK // We should get first RPM on exactly the first (primary) sync point - this means the instant RPM pre-sync event copy all worked OK
EXPECT_EQ(reader.lineIndex(), 7); reader.assertFirstRpm(808, 7);
EXPECT_NEAR(rpm, 808.32f, 0.1);
}
bool hasFullSync = getTriggerCentral()->triggerState.hasSynchronizedPhase(); bool hasFullSync = getTriggerCentral()->triggerState.hasSynchronizedPhase();
if (!gotFullSync && hasFullSync) { if (!gotFullSync && hasFullSync) {