diff --git a/unit_tests/test-framework/engine_csv_reader.h b/unit_tests/test-framework/engine_csv_reader.h index 069300308e..b152bf30cf 100644 --- a/unit_tests/test-framework/engine_csv_reader.h +++ b/unit_tests/test-framework/engine_csv_reader.h @@ -30,6 +30,14 @@ public: return cvsReader.lineIndex(); } + void setReadingOffset(int offset) { + cvsReader.readingOffset = offset; + } + + void setFlipOnRead(bool v) { + cvsReader.flipOnRead = v; + } + void processLine(EngineTestHelper *eth) { cvsReader.processLine(eth); } diff --git a/unit_tests/tests/trigger/test_real_4b11.cpp b/unit_tests/tests/trigger/test_real_4b11.cpp index 8893b6ec7d..47f9b455d6 100644 --- a/unit_tests/tests/trigger/test_real_4b11.cpp +++ b/unit_tests/tests/trigger/test_real_4b11.cpp @@ -4,10 +4,10 @@ #include "pch.h" -#include "logicdata_csv_reader.h" +#include "engine_csv_reader.h" TEST(real4b11, running) { - CsvReader reader(1, /* vvtCount */ 0); + EngineCsvReader reader(1, /* vvtCount */ 0); reader.open("tests/trigger/resources/4b11-running.csv"); EngineTestHelper eth(engine_type_e::TEST_ENGINE); @@ -16,8 +16,6 @@ TEST(real4b11, running) { eth.setTriggerType(trigger_type_e::TT_36_2_1); - bool gotRpm = false; - while (reader.haveMore()) { reader.processLine(ð); @@ -25,21 +23,14 @@ TEST(real4b11, running) { float angleError = getTriggerCentral()->triggerToothAngleError; EXPECT_TRUE(angleError < 3 && angleError > -3) << "tooth angle of " << angleError << " at timestamp " << (getTimeNowNt() / 1e8); - 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 - EXPECT_EQ(reader.lineIndex(), 30); - EXPECT_NEAR(rpm, 1436.23f, 0.1); - } + reader.assertFirstRpm(1436, 30); } ASSERT_EQ(0, eth.recentWarnings()->getCount()); } TEST(real4b11, runningDoubledEdge) { - CsvReader reader(1, /* vvtCount */ 0); + EngineCsvReader reader(1, /* vvtCount */ 0); // This log has an extra duplicate edge at 5.393782 seconds (hand added) reader.open("tests/trigger/resources/4b11-running-doubled-edge.csv"); @@ -49,20 +40,9 @@ TEST(real4b11, runningDoubledEdge) { eth.setTriggerType(trigger_type_e::TT_36_2_1); - - bool gotRpm = false; - while (reader.haveMore()) { reader.processLine(ð); - - 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 - EXPECT_EQ(reader.lineIndex(), 30); - EXPECT_NEAR(rpm, 1436.23f, 0.1); - } + reader.assertFirstRpm(1436, 30); } // Should get a warning for the doubled edge, but NOT one for a trigger error! diff --git a/unit_tests/tests/trigger/test_real_4g93.cpp b/unit_tests/tests/trigger/test_real_4g93.cpp index dcf5579c65..78074aa3c3 100644 --- a/unit_tests/tests/trigger/test_real_4g93.cpp +++ b/unit_tests/tests/trigger/test_real_4g93.cpp @@ -5,10 +5,10 @@ #include "pch.h" -#include "logicdata_csv_reader.h" +#include "engine_csv_reader.h" TEST(real4g93, cranking) { - CsvReader reader(1, /* vvtCount */ 1); + EngineCsvReader reader(1, /* vvtCount */ 1); reader.open("tests/trigger/resources/4g93-cranking.csv"); EngineTestHelper eth(engine_type_e::TEST_ENGINE); @@ -21,9 +21,6 @@ TEST(real4g93, cranking) { eth.setTriggerType(trigger_type_e::TT_MITSU_4G63_CRANK); - bool gotRpm = false; - bool gotSync = false; - static const float gapRatios[2][4] = { { 0, NAN, INFINITY, 0.89f }, // no sync { 0.4f, 3.788f, 0.62f, 1.02f } @@ -37,23 +34,16 @@ TEST(real4g93, cranking) { TriggerCentral *tc = getTriggerCentral(); - 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 - EXPECT_EQ(reader.lineIndex(), 6); - EXPECT_NEAR(rpm, 132.77f, 0.1); - } + reader.assertFirstRpm(133, 6); + auto rpm = Sensor::getOrZero(SensorType::Rpm); - if (!gotSync && tc->triggerState.hasSynchronizedPhase()) { - gotSync = true; + if (!reader.gotSync && tc->triggerState.hasSynchronizedPhase()) { + reader.gotSync = true; EXPECT_EQ(reader.lineIndex(), 17); EXPECT_NEAR(rpm, 204.01f, 0.1); } -// float instantRpm = tc->instantRpm.getInstantRpm(); -// not looking too bad horrible printf("rpm=%f instant=%f\n", rpm, instantRpm); TriggerDecoderBase& vvtDecoder = tc->vvtState[/*bankIndex*/0][/*camIndex*/0]; @@ -68,14 +58,14 @@ TEST(real4g93, cranking) { } } - ASSERT_TRUE(gotRpm); - ASSERT_TRUE(gotSync); + ASSERT_TRUE(reader.gotRpm); + ASSERT_TRUE(reader.gotSync); ASSERT_EQ(0, eth.recentWarnings()->getCount()); } TEST(real4g93, crankingOn11) { - CsvReader reader(2, /* vvtCount */ 0); + EngineCsvReader reader(2, /* vvtCount */ 0); reader.open("tests/trigger/resources/4g93-cranking.csv"); EngineTestHelper eth(engine_type_e::TEST_ENGINE); @@ -85,26 +75,14 @@ TEST(real4g93, crankingOn11) { eth.setTriggerType(trigger_type_e::TT_MAZDA_MIATA_NA); - bool gotRpm = false; while (reader.haveMore()) { reader.processLine(ð); - - 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 - EXPECT_EQ(reader.lineIndex(), 7); - EXPECT_NEAR(rpm, 168.43f, 0.1); - } - -// float instantRpm = engine->triggerCentral.instantRpm.getInstantRpm(); -// printf("%d rpm=%f instant=%f\n", reader.lineIndex(), rpm, instantRpm); + reader.assertFirstRpm(168, 7); } } TEST(real4g93, crankingCamOnly) { - CsvReader reader(1, /* vvtCount */ 0); + EngineCsvReader reader(1, /* vvtCount */ 0); reader.open("tests/trigger/resources/4g93-cranking-cam-only.csv"); EngineTestHelper eth(engine_type_e::TEST_ENGINE); @@ -113,31 +91,28 @@ TEST(real4g93, crankingCamOnly) { eth.setTriggerType(trigger_type_e::TT_MITSU_4G9x_CAM); - bool gotRpm = false; - bool gotSync = false; - while (reader.haveMore()) { reader.processLine(ð); // Expect that all teeth are in the correct spot auto rpm = Sensor::getOrZero(SensorType::Rpm); - if (!gotRpm && rpm) { - gotRpm = true; + if (!reader.gotRpm && rpm) { + reader.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 EXPECT_EQ(reader.lineIndex(), 17); EXPECT_NEAR(rpm, 194.61f, 0.1); } - if (!gotSync && engine->triggerCentral.triggerState.getShaftSynchronized() && engine->triggerCentral.triggerState.hasSynchronizedPhase()) { - gotSync = true; + if (!reader.gotSync && engine->triggerCentral.triggerState.getShaftSynchronized() && engine->triggerCentral.triggerState.hasSynchronizedPhase()) { + reader.gotSync = true; EXPECT_EQ(reader.lineIndex(), 17); } } - ASSERT_TRUE(gotRpm); - ASSERT_TRUE(gotSync); + ASSERT_TRUE(reader.gotRpm); + ASSERT_TRUE(reader.gotSync); ASSERT_EQ(1, eth.recentWarnings()->getCount()); } diff --git a/unit_tests/tests/trigger/test_real_bosch_quick_start.cpp b/unit_tests/tests/trigger/test_real_bosch_quick_start.cpp index 80e4d5844e..46702cc64b 100644 --- a/unit_tests/tests/trigger/test_real_bosch_quick_start.cpp +++ b/unit_tests/tests/trigger/test_real_bosch_quick_start.cpp @@ -1,61 +1,41 @@ #include "pch.h" -#include "logicdata_csv_reader.h" +#include "engine_csv_reader.h" TEST(realBQS, realHarleyCranking) { - CsvReader reader(/*triggerCount*/1, /* vvtCount */ 0); - reader.readingOffset = 1; + EngineCsvReader reader(/*triggerCount*/1, /* vvtCount */ 0); + reader.setReadingOffset(1); reader.open("tests/ignition_injection/resources/hd-req-sync_3.csv"); - reader.flipOnRead = true; + reader.setFlipOnRead(true); EngineTestHelper eth(engine_type_e::ET_BOSCH_QUICK_START); - bool gotRpm = false; while (reader.haveMore()) { reader.processLine(ð); auto rpm = Sensor::getOrZero(SensorType::Rpm); - if (gotRpm) { + if (reader.gotRpm) { ASSERT_TRUE(Sensor::get(SensorType::Rpm).Valid); } - - if (!gotRpm && rpm) { - gotRpm = true; - - EXPECT_EQ(reader.lineIndex(), 163); - EXPECT_NEAR(rpm, 184, 1); - break; - } - - + reader.assertFirstRpm(184, 163); } ASSERT_TRUE(Sensor::get(SensorType::Rpm).Valid); } TEST(realBQS, readAsPrimarySensor) { - CsvReader reader(/*triggerCount*/1, /* vvtCount */ 0); + EngineCsvReader reader(/*triggerCount*/1, /* vvtCount */ 0); reader.open("tests/trigger/resources/BQS-longer.csv"); - reader.flipOnRead = true; + reader.setFlipOnRead(true); EngineTestHelper eth(engine_type_e::ET_BOSCH_QUICK_START); - bool gotRpm = false; while (reader.haveMore()) { reader.processLine(ð); - - auto rpm = Sensor::getOrZero(SensorType::Rpm); - if (!gotRpm && rpm) { - gotRpm = true; - - EXPECT_EQ(reader.lineIndex(), 13); - EXPECT_NEAR(rpm, 2035.53466f, 0.1); - break; - } - + reader.assertFirstRpm(2036, 13); } ASSERT_TRUE(Sensor::get(SensorType::Rpm).Valid); - ASSERT_FLOAT_EQ(Sensor::get(SensorType::Rpm).Value, 2035.53467); + ASSERT_NEAR(Sensor::get(SensorType::Rpm).Value, 1874, 1); } diff --git a/unit_tests/tests/trigger/test_real_cas_24_plus_1.cpp b/unit_tests/tests/trigger/test_real_cas_24_plus_1.cpp index ff27ab0460..4ac3a40b2e 100644 --- a/unit_tests/tests/trigger/test_real_cas_24_plus_1.cpp +++ b/unit_tests/tests/trigger/test_real_cas_24_plus_1.cpp @@ -22,7 +22,6 @@ TEST(realCas24Plus1, spinningOnBench) { engineConfiguration->vvtMode[0] = VVT_SINGLE_TOOTH; eth.setTriggerType(trigger_type_e::TT_12_TOOTH_CRANK); - bool gotRpm = false; bool gotFullSync = false; while (reader.haveMore()) { diff --git a/unit_tests/tests/trigger/test_real_gm_24x.cpp b/unit_tests/tests/trigger/test_real_gm_24x.cpp index 964d808a42..f2f5950992 100644 --- a/unit_tests/tests/trigger/test_real_gm_24x.cpp +++ b/unit_tests/tests/trigger/test_real_gm_24x.cpp @@ -1,9 +1,9 @@ #include "pch.h" -#include "logicdata_csv_reader.h" +#include "engine_csv_reader.h" TEST(crankingGm24x_5, gmRealCrankingFromFile) { - CsvReader reader(1, /* vvtCount */ 0); + EngineCsvReader reader(1, /* vvtCount */ 0); reader.open("tests/trigger/resources/gm_24x_cranking.csv"); EngineTestHelper eth(engine_type_e::TEST_ENGINE); @@ -12,8 +12,6 @@ TEST(crankingGm24x_5, gmRealCrankingFromFile) { eth.setTriggerType(trigger_type_e::TT_GM_24x_5); - bool gotRpm = false; - while (reader.haveMore()) { reader.processLine(ð); @@ -21,14 +19,7 @@ TEST(crankingGm24x_5, gmRealCrankingFromFile) { float angleError = getTriggerCentral()->triggerToothAngleError; EXPECT_TRUE(angleError < 3 && angleError > -3) << "tooth angle of " << angleError << " at timestamp " << (getTimeNowNt() / 1e8); - 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 - EXPECT_EQ(reader.lineIndex(), 23); - EXPECT_NEAR(rpm, 77.0f, 0.1); - } + reader.assertFirstRpm(77, 23); } ASSERT_EQ( 0, eth.recentWarnings()->getCount())<< "warningCounter#vwRealCranking";