Sfoglia il codice sorgente

add @Plawasan test cases. Works now with setable analogdigitTransistionstart

Frank Haverland 3 anni fa
parent
commit
0e55fc7f7e

+ 1 - 1
code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp

@@ -228,7 +228,7 @@ int ClassFlowCNNGeneral::ZeigerEvalAnalogToDigitNeu(float zahl, float ziffer_vor
     // Kein Nulldurchgang hat stattgefunden.
     // Nur eval_vorgaenger verwendet, da ziffer_vorgaenger hier falsch sein könnte.
     // ziffer_vorgaenger<=0.1 & eval_vorgaenger=9 entspricht analog wurde zurückgesetzt wegen vorhergehender analog, die noch nicht auf 0 sind.
-    if ((eval_vorgaenger>=9 && (ziffer_vorgaenger>analogDigitalTransitionStart || ziffer_vorgaenger<=0.2) && roundedUp)
+    if ((eval_vorgaenger>=6 && (ziffer_vorgaenger>analogDigitalTransitionStart || ziffer_vorgaenger<=0.2) && roundedUp)
         // digit läuft dem Analog vor. Darf aber erst passieren, wenn 
         // digit wirklich schnon los läuft, deshalb 9
         || (eval_vorgaenger>9 && ziffer_vorgaenger>analogDigitalTransitionStart && ergebnis_nachkomma<=1))

+ 1 - 1
code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.h

@@ -20,7 +20,7 @@ class ClassFlowCNNGeneral :
     public ClassFlowImage
 {
 protected:
-    bool debugdetailgeneral = true;
+    bool debugdetailgeneral = false;
     t_CNNType CNNType;
     std::vector<general*> GENERAL;
     float CNNGoodThreshold;

+ 8 - 0
code/test/components/jomjol-flowcontroll/test_ZeigerEvalAnalogToDigitNeu.cpp

@@ -93,4 +93,12 @@ void test_analogToDigit_Transition() {
     // Besonderheit: 
     TEST_ASSERT_EQUAL_INT(5,  undertest->ZeigerEvalAnalogToDigitNeu( 5.9, 9.4, 9, 9.2));
 
+    // https://github.com/jomjol/AI-on-the-edge-device/issues/1110#issuecomment-1282168030
+    // Standard: dig=1.8, ana=7.8 => erg=9
+    // Transition = ja
+    // Nulldurchgang = nein
+    // Versatz = nein
+    // Besonderheit: Digit läuft mit Analog mit. Deshalb 1.8 (vs. 7.8)
+    TEST_ASSERT_EQUAL_INT(1,  undertest->ZeigerEvalAnalogToDigitNeu( 1.8, 7.8, 7, 7.7));
+
 }

+ 10 - 0
code/test/components/jomjol-flowcontroll/test_flow_postrocess_helper.cpp

@@ -142,3 +142,13 @@ void setDecimalShift(UnderTestPost* _underTestPost, int _decimal_shift) {
         }       
     }
 }
+
+void setAnalogdigitTransistionStart(UnderTestPost* _underTestPost, float _analogdigitTransistionStart) {
+    if (_analogdigitTransistionStart!=0) {
+        std::vector<NumberPost*>* NUMBERS = _underTestPost->GetNumbers();    
+        for (int _n = 0; _n < (*NUMBERS).size(); ++_n) {
+            printf("Setting decimal shift on number: %d to %f\n", _n, _analogdigitTransistionStart);
+            (*NUMBERS)[_n]->AnalogDigitalTransitionStart = _analogdigitTransistionStart; 
+        }       
+    }
+}

+ 8 - 0
code/test/components/jomjol-flowcontroll/test_flow_postrocess_helper.h

@@ -99,4 +99,12 @@ void setExtendedResolution(UnderTestPost* _UnderTestPost, bool _extendedResoluti
  */
 void setDecimalShift(UnderTestPost* _UnderTestPost, int decimal_shift);
 
+/**
+ * @brief Set the Analogdigit Transistion Start 
+ * 
+ * @param _underTestPost the testobject  
+ * @param _analogdigitTransistionStart the analog to digit transition start
+ */
+void setAnalogdigitTransistionStart(UnderTestPost* _underTestPost, float _analogdigitTransistionStart);
+
 #endif // TEST_FLOW_H

+ 61 - 8
code/test/components/jomjol-flowcontroll/test_flowpostprocessing.cpp

@@ -366,21 +366,24 @@ void test_doFlow() {
        // 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};
-        // Aktuell nicht sicher, ob doch
-        expected = "170.0538";
-        expected_extended= "170.05387";
-        //expected = "170.0528";
-        //expected_extended= "170.05287";
+        expected = "170.0528";
+        expected_extended= "170.05287";
         
         // extendResolution=false
-        result = process_doFlow(analogs, digits, Digital100, false, false, -3);
+        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
-        result = process_doFlow(analogs, digits, Digital100, false, true, -3);
+        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
@@ -459,7 +462,57 @@ void test_doFlow() {
         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;
 }