From 55a06dbe1d1387c9f849cc0bcf677f632adbfccb Mon Sep 17 00:00:00 2001 From: CaCO3 Date: Fri, 25 Nov 2022 16:47:59 +0100 Subject: [PATCH] resolve release merge conflicts --- .../test_flowpostprocessing.cpp | 378 ++++++++++++------ 1 file changed, 253 insertions(+), 125 deletions(-) diff --git a/code/test/components/jomjol-flowcontroll/test_flowpostprocessing.cpp b/code/test/components/jomjol-flowcontroll/test_flowpostprocessing.cpp index 758868d0..a9dc4f65 100644 --- a/code/test/components/jomjol-flowcontroll/test_flowpostprocessing.cpp +++ b/code/test/components/jomjol-flowcontroll/test_flowpostprocessing.cpp @@ -1,37 +1,20 @@ -#include -#include -#include -#include -#include - -void setUpClassFlowPostprocessing(void); -string process_doFlow(std::vector analog, std::vector digits, t_CNNType digType = Digital100, - bool checkConsistency=false, bool extendedResolution=false, int decimal_shift=0); - -ClassFlowCNNGeneral* _analog; -ClassFlowCNNGeneral* _digit; -std::vector FlowControll; -ClassFlowMakeImage* flowmakeimage; +#include "test_flow_postrocess_helper.h" -class UnderTestPost : public ClassFlowPostProcessing { - public: - UnderTestPost(std::vector* lfc, ClassFlowCNNGeneral *_analog, ClassFlowCNNGeneral *_digit) - : ClassFlowPostProcessing::ClassFlowPostProcessing(lfc, _analog, _digit) {} - using ClassFlowPostProcessing::InitNUMBERS; -}; - -UnderTestPost* undertestPost; /** + * ACHTUNG! Die Test laufen aktuell nur mit ausgeschaltetem Debug in ClassFlowCNNGeneral + * + * * @brief Testet die doFlow-Methode von ClassFlowPostprocessing * digits[] - enthält die liste der vom Model zurückgegebenen Ergebnisse (class100/cont) in der Reihenfolge von links nach rechts * analog[] - enthält die Liste der Zeiger vom Model, wie bei den digits * expected - enthält das erwartete Ergebnis, wobei der Dezimalpunkt genau zwischen digits und analog ist. * */ -void test_doFlow() { +void test_doFlowPP() { + /* * * digit1 = 1.2 @@ -44,12 +27,12 @@ void test_doFlow() { std::vector digits = { 1.2, 6.7}; std::vector analogs = { 9.5, 8.4}; const char* expected = "16.98"; - const char* expected_extended = "16.984"; + //const char* expected_extended = "16.984"; std::string result = process_doFlow(analogs, digits); TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); /* - * https://github.com/jomjol/AI-on-the-edge-device/issues/921 + * https://github.com/jomjol/AI-on-the-edge-device/issues/921#issue-1344032217 * * Das Ergebnis sollte "376529.6" sein. */ @@ -60,7 +43,7 @@ void test_doFlow() { TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); /* - * https://github.com/jomjol/AI-on-the-edge-device/issues/921 + * https://github.com/jomjol/AI-on-the-edge-device/issues/921#issuecomment-1220365920 * * Das Ergebnis sollte "167734.6" sein. Bzw. 16.98 ohne Extended true */ @@ -82,7 +65,7 @@ void test_doFlow() { TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); /* - * https://github.com/jomjol/AI-on-the-edge-device/issues/921 + * https://github.com/jomjol/AI-on-the-edge-device/issues/921#issuecomment-1222672175 * * Das Ergebnis sollte "376529.6" sein. Bzw. 16.98 ohne Extended true */ @@ -107,7 +90,7 @@ void test_doFlow() { digits = { 1.1, 9.0, 4.0}; analogs = { 9.1, 2.6, 6.25, 9.7}; - expected = "193.9259"; + expected = "194.9259"; result = process_doFlow(analogs, digits); TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); @@ -125,11 +108,14 @@ void test_doFlow() { result = process_doFlow(analogs, digits); TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); +} + +void test_doFlowPP1() { // https://github.com/jomjol/AI-on-the-edge-device/issues/942#issuecomment-1226966346 - digits = { 0.0, 2.9, 3.0, 2.9, 3.5, 9.5}; - analogs = { }; - expected = "33330"; - result = process_doFlow(analogs, digits); + std::vector digits = { 0.0, 2.9, 3.0, 2.9, 3.5, 9.5}; + std::vector analogs = { }; + const char* expected = "33330"; + std::string result = process_doFlow(analogs, digits); TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); // https://github.com/jomjol/AI-on-the-edge-device/issues/942#issuecomment-1226966346 @@ -184,13 +170,15 @@ void test_doFlow() { expected = "395.8632"; result = process_doFlow(analogs, digits); TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); +} +void test_doFlowPP2() { // Fehler bei V11.2.0 // https://github.com/jomjol/AI-on-the-edge-device/discussions/950#discussion-4338615 - digits = { 1.0, 9.0, 9.0}; // Übergang wurde um 1 erhöht (200, statt 199) - analogs = { 7.1, 4.8, 8.3}; - expected = "199.748"; - result = process_doFlow(analogs, digits, Digital); + std::vector digits = { 1.0, 9.0, 9.0}; // Übergang wurde um 1 erhöht (200, statt 199) + std::vector analogs = { 7.1, 4.8, 8.3}; + const char* expected = "199.748"; + std::string result = process_doFlow(analogs, digits, Digital); TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); // Fehler bei Rolling (2002-09-09) @@ -198,7 +186,7 @@ void test_doFlow() { digits = { 3.0, 2.0, 2.0, 8.0, 9.0, 4.0, 1.7, 9.8}; // falscher Wert 32290.420 analogs = { }; expected = "32289.420"; - expected_extended= "32289.4198"; + const char* expected_extended= "32289.4198"; // FALSCH! wegen ungenügender Präzision von NUMBERS->Value // expected_extended= "32289.4198"; @@ -303,95 +291,235 @@ void test_doFlow() { result = process_doFlow(analogs, digits, Digital100, false, true, -3); TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str()); + // Fehler bei V12.0.1 + // Lokal + digits = { 9.8, 9.8, 1.9, 0.9, 0.9, 9.9, 2.9, 4.8}; // 211.0345 als falsches Ergebnis + analogs = { 5.5}; + expected = "211.0355"; + expected_extended= "211.03555"; + + // extendResolution=false + result = process_doFlow(analogs, digits, Digital100, false, false, -3); + TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); + // checkConsistency=false und extendResolution=true + result = process_doFlow(analogs, digits, Digital100, false, true, -3); + TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str()); + + // Fehler bei V12.0.1 + // https://github.com/jomjol/AI-on-the-edge-device/issues/1110#issuecomment-1277425333 + digits = { 2.2, 4.5, 5.9}; // 245.938 als falsches Ergebnis + analogs = { 9.4, 3.8, 8.6}; + expected = "245.938"; + expected_extended= "245.9386"; + + // extendResolution=false + result = process_doFlow(analogs, digits, Digital100, false, false, 0); + TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); + + // checkConsistency=false und extendResolution=true + result = process_doFlow(analogs, digits, Digital100, false, true, 0); + TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str()); + + // Fehler bei V12.0.1 + // https://github.com/jomjol/AI-on-the-edge-device/issues/1110#issuecomment-1277425333 + digits = { 2.2, 4.5, 5.9}; // 245.938 kein Fehler. Aber Grenzfall, deshalb mit als Test aufgenommen. + analogs = { 9.4, 3.8, 8.6}; + expected = "245.938"; + expected_extended= "245.9386"; + + // extendResolution=false + result = process_doFlow(analogs, digits, Digital100, false, false, 0); + TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); + + // checkConsistency=false und extendResolution=true + result = process_doFlow(analogs, digits, Digital100, false, true, 0); + TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str()); +} + +void test_doFlowPP3() { + // Fehler bei V12.0.1 + // https://github.com/jomjol/AI-on-the-edge-device/issues/1110#issuecomment-1265523710 + std::vector digits = { 2.0, 4.0, 6.8}; // 246.2045 als falsches Ergebnis + std::vector analogs = { 2.2, 0.1, 4.5}; + const char* expected = "247.204"; + const char* expected_extended= "247.2045"; + + // extendResolution=false + std::string result = process_doFlow(analogs, digits, Digital100, false, false, 0); + TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); + + // checkConsistency=false und extendResolution=true + result = process_doFlow(analogs, digits, Digital100, false, true, 0); + TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str()); + + + // Fehler bei V12.0.1 + // https://github.com/jomjol/AI-on-the-edge-device/issues/1110#issue-1391153343 + digits = { 1.0, 4.0, 2.0}; // 141.9269 als falsches Ergebnis + analogs = { 9.2, 2.5, 6.8, 9.0}; + expected = "142.9269"; + expected_extended= "142.92690"; + + // extendResolution=false + result = process_doFlow(analogs, digits, Digital100, false, false, 0); + TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); + + // checkConsistency=false und extendResolution=true + result = process_doFlow(analogs, digits, Digital100, false, true, 0); + TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str()); + + + // Fehler bei V12.0.1 + // https://github.com/jomjol/AI-on-the-edge-device/issues/1110#issuecomment-1262626388 + digits = { 1.2, 6.8, 0.0, 0.0, 5.0, 2.8}; //170.05387 als falsches Ergebnis + // letztes digit läuft mit analog zeiger mit. Hier nur lösbar mit setAnalogdigitTransistionStart=7.7 + analogs = { 8.7}; + expected = "170.0528"; + expected_extended= "170.05287"; + + // extendResolution=false + UnderTestPost* undertestPost = init_do_flow(analogs, digits, Digital100, false, false, -3); + setAnalogdigitTransistionStart(undertestPost, 7.7); + result = process_doFlow(undertestPost); + TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); + delete undertestPost; + + // checkConsistency=false und extendResolution=true + undertestPost = init_do_flow(analogs, digits, Digital100, false, true, -3); + setAnalogdigitTransistionStart(undertestPost, 7.7); + result = process_doFlow(undertestPost); + TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str()); + delete undertestPost; + + // Fehler bei rolling post V12.0.1 + // lokal watermeter1 + digits = { 0.0, 0.0, 9.0, 1.0}; //90.88174 als falsches Ergebnis + analogs = {9.0, 8.0, 1.8, 7.4}; + expected = "91.8817"; + expected_extended= "91.88174"; + + // extendResolution=false + result = process_doFlow(analogs, digits, Digital100, false, false, 0); + TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); + + // checkConsistency=false und extendResolution=true + result = process_doFlow(analogs, digits, Digital100, false, true, 0); + TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str()); + + + // Fehler bei rolling post V12.0.1 + // lokal watermeter1 + digits = { 0.0, 0.0, 9.0, 1.9}; //91.38403 als falsches Ergebnis + analogs = {3.6, 8.2, 3.2, 2.0}; + expected = "92.3832"; + expected_extended= "92.38320"; + + // extendResolution=false + result = process_doFlow(analogs, digits, Digital100, false, false, 0); + TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); + + // checkConsistency=false und extendResolution=true + result = process_doFlow(analogs, digits, Digital100, false, true, 0); + TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str()); + + // Fehler V11.3.0 + // https://github.com/jomjol/AI-on-the-edge-device/issues/1143#issue-1400807695 + digits = { 7.0, 4.0, 7.0, 2.0, 7.0, 5.4, 9.4}; // 7472.749 als falsches Ergebnis + analogs = {}; + expected = "7472.759"; + expected_extended= "7472.7594"; + + // extendResolution=false + result = process_doFlow(analogs, digits, Digital100, false, false, -3); + TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); + + // checkConsistency=false und extendResolution=true + result = process_doFlow(analogs, digits, Digital100, false, true, -3); + TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str()); + + // Fehler V12.0.1 + // https://github.com/jomjol/AI-on-the-edge-device/issues/1143#issuecomment-1274434805 + digits = { 4.9, 6.9, 6.8}; // 576.8649 als falsches Ergebnis + analogs = {8.6, 6.2, 5.0, 9.0}; + expected = "577.8649"; + expected_extended= "577.86490"; + + // extendResolution=false + result = process_doFlow(analogs, digits, Digital100, false, false, 0); + TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); + + // checkConsistency=false und extendResolution=true + result = process_doFlow(analogs, digits, Digital100, false, true, 0); + TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str()); + + + // Fehler V12.0.1 "TODO 00211.03480 vs 00211.03580" + // Lokal "Hängendes Digit" + digits = { 2.0, 1.0, 1.0, 0.0, 3.0, 4.8}; // 00211.03480 als falsches Ergebnis + analogs = {8.0}; + expected = "211.0358"; + expected_extended= "211.03580"; + + // extendResolution=false + result = process_doFlow(analogs, digits, Digital100, false, false, -3); + TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); + + // checkConsistency=false und extendResolution=true + result = process_doFlow(analogs, digits, Digital100, false, true, -3); + TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str()); + + // Fehler V12.0.1 + // https://github.com/jomjol/AI-on-the-edge-device/issues/1143#issuecomment-1281231468 + digits = { 1.0, 1.9, 6.0}; // 125.923 als falsches Ergebnis + analogs = {9.3, 2.3, 3.1}; + expected = "126.923"; + expected_extended= "126.9231"; + + // extendResolution=false + result = process_doFlow(analogs, digits, Digital100, false, false, 0); + TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); + + // checkConsistency=false und extendResolution=true + result = process_doFlow(analogs, digits, Digital100, false, true, 0); + TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str()); + + // Fehler V12.0.1 + // https://github.com/jomjol/AI-on-the-edge-device/issues/1110#issuecomment-1282168030 + digits = { 3.0, 8.1, 5.9, 0.0, 5.0, 6.7}; // 386.05672 als richtiges Ergebnis. Letztes digit schein mit dem Analogzeiger mitzulaufen + analogs = {7.2}; + expected = "386.0567"; + expected_extended= "386.05672"; + + // extendResolution=false + result = process_doFlow(analogs, digits, Digital100, false, false, -3); + TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); + + // checkConsistency=false und extendResolution=true + result = process_doFlow(analogs, digits, Digital100, false, true, -3); + TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str()); + + // Fehler V12.0.1 + // https://github.com/jomjol/AI-on-the-edge-device/issues/1110#issuecomment-1282168030 + digits = { 1.2, 7.0, 1.2, 2.0, 4.0, 1.8}; // 171.24278 als falsches Ergebnis. + // Test ist nur erfolgreich mit Veränderung des AnalogdigitTransistionStart + analogs = {7.8}; + expected = "171.2417"; + expected_extended= "171.24178"; + + // extendResolution=false + undertestPost = init_do_flow(analogs, digits, Digital100, false, false, -3); + setAnalogdigitTransistionStart(undertestPost, 7.7); + result = process_doFlow(undertestPost); + TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); + delete undertestPost; + + // checkConsistency=false und extendResolution=true + undertestPost = init_do_flow(analogs, digits, Digital100, false, true, -3); + setAnalogdigitTransistionStart(undertestPost, 7.7); + result = process_doFlow(undertestPost); + TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str()); + delete undertestPost; } - -void setUpClassFlowPostprocessing(t_CNNType digType, t_CNNType anaType) -{ - - // wird im doFlow verwendet - flowmakeimage = new ClassFlowMakeImage(&FlowControll); - FlowControll.push_back(flowmakeimage); - - // Die Modeltypen werden gesetzt, da keine Modelle verwendet werden. - _analog = new ClassFlowCNNGeneral(nullptr, anaType); - - _digit = new ClassFlowCNNGeneral(nullptr, digType); - - undertestPost = new UnderTestPost(&FlowControll, _analog, _digit); - -} - - -std::string process_doFlow(std::vector analog, std::vector digits, t_CNNType digType, - bool checkConsistency, bool extendedResolution, int decimal_shift) { - // setup the classundertest - setUpClassFlowPostprocessing(digType, Analogue100); - - printf("SetupClassFlowPostprocessing completed.\n"); - - // digits - if (digits.size()>0) { - general* gen_digit = _digit->GetGENERAL("default", true); - gen_digit->ROI.clear(); - for (int i = 0; iname = name; - digitROI->result_klasse = (int) digits[i]; - digitROI->result_float = digits[i]; - gen_digit->ROI.push_back(digitROI); - } - } - - // analog - if (analog.size()>0) { - general* gen_analog = _analog->GetGENERAL("default", true); - gen_analog->ROI.clear(); - - for (int i = 0; iname = name; - anaROI->result_float = analog[i]; - gen_analog->ROI.push_back(anaROI); - } - } - printf("Setting up of ROIs completed.\n"); - - undertestPost->InitNUMBERS(); - if (checkConsistency) { - printf("checkConsistency=true\n"); - std::vector* NUMBERS = undertestPost->GetNumbers(); - for (int _n = 0; _n < (*NUMBERS).size(); ++_n) { - printf("Setting checkConsistency on number: %d\n", _n); - (*NUMBERS)[_n]->checkDigitIncreaseConsistency = true; - } - } - if (extendedResolution ) { - std::vector* NUMBERS = undertestPost->GetNumbers(); - for (int _n = 0; _n < (*NUMBERS).size(); ++_n) { - printf("Setting extendedResolution on number: %d\n", _n); - (*NUMBERS)[_n]->isExtendedResolution = true; - } - - } - if (decimal_shift!=0) { - std::vector* NUMBERS = undertestPost->GetNumbers(); - for (int _n = 0; _n < (*NUMBERS).size(); ++_n) { - printf("Setting decimal shift on number: %d to %d\n", _n, decimal_shift); - (*NUMBERS)[_n]->DecimalShift = decimal_shift; - (*NUMBERS)[_n]->DecimalShiftInitial = decimal_shift; - } - } - - string time; - // run test - TEST_ASSERT_TRUE(undertestPost->doFlow(time)); - - return undertestPost->getReadout(0); - -} -