diff --git a/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp b/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp index 2d08ff01..ac652534 100644 --- a/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp +++ b/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp @@ -134,7 +134,22 @@ string ClassFlowCNNGeneral::getReadout(int _analog = 0, bool _extendedResolution return result; } - +/** + * @brief Determines the number of an ROI in connection with previous ROI results + * + * @param number: is the current ROI as float value from recognition + * @param number_of_predecessors: is the last (lower) ROI as float from recognition + * @param eval_predecessors: is the evaluated number. Sometimes a much lower value can change higer values + * example: 9.8, 9.9, 0.1 + * 0.1 => 0 (eval_predecessors) + * The 0 makes a 9.9 to 0 (eval_predecessors) + * The 0 makes a 9.8 to 0 + * @param Analog_Predecessors false/true if the last ROI is an analog or digital ROI (default=false) + * runs in special handling because analog is much less precise + * @param digitalAnalogTransitionStart start of the transitionlogic begins on number_of_predecessor (default=9.2) + * + * @return int the determined number of the current ROI + */ int ClassFlowCNNGeneral::PointerEvalHybridNew(float number, float number_of_predecessors, int eval_predecessors, bool Analog_Predecessors, float digitalAnalogTransitionStart) { int result; diff --git a/code/test/components/jomjol-flowcontroll/test_cnnflowcontroll.cpp b/code/test/components/jomjol-flowcontroll/test_cnnflowcontroll.cpp index 5f6e6496..dac99de1 100644 --- a/code/test/components/jomjol-flowcontroll/test_cnnflowcontroll.cpp +++ b/code/test/components/jomjol-flowcontroll/test_cnnflowcontroll.cpp @@ -41,6 +41,22 @@ void test_ZeigerEval() /** * @brief test if all combinations of digit * evaluation are running correctly + * + * Desciption on call undertest.PointerEvalHybridNew(float number, float number_of_predecessors, int eval_predecessors, bool Analog_Predecessors, float digitalAnalogTransitionStart) + * @param number: is the current ROI as float value from recognition + * @param number_of_predecessors: is the last (lower) ROI as float from recognition + * @param eval_predecessors: is the evaluated number. Sometimes a much lower value can change higer values + * example: 9.8, 9.9, 0.1 + * 0.1 => 0 (eval_predecessors) + * The 0 makes a 9.9 to 0 (eval_predecessors) + * The 0 makes a 9.8 to 0 + * @param Analog_Predecessors false/true if the last ROI is an analog or digital ROI (default=false) + * runs in special handling because analog is much less precise + * @param digitalAnalogTransitionStart start of the transitionlogic begins on number_of_predecessor (default=9.2) + * + * + * + * */ void test_ZeigerEvalHybrid() { UnderTestCNN undertest = UnderTestCNN(nullptr, Digital100); @@ -55,11 +71,11 @@ void test_ZeigerEvalHybrid() { printf("PointerEvalHybridNew(5.7, 0, -1)\n"); // the 5.7 and no previous should trunc to 5 - TEST_ASSERT_EQUAL(6, undertest.PointerEvalHybridNew(5.7, 0, -1)); + TEST_ASSERT_EQUAL(5, undertest.PointerEvalHybridNew(5.7, 0, -1, false, 9.2)); // the 5.8 and no previous should round up to 6 printf("PointerEvalHybridNew(5.8, 0, -1)\n"); - TEST_ASSERT_EQUAL(6, undertest.PointerEvalHybridNew(5.8, 0, -1)); + TEST_ASSERT_EQUAL(6, undertest.PointerEvalHybridNew(5.8, 8.0, 8, false, 8.0)); // the 5.7 with previous and the previous between 0.3-0.5 should round up to 6 TEST_ASSERT_EQUAL(6, undertest.PointerEvalHybridNew(5.7, 0.4, 1)); @@ -70,8 +86,9 @@ void test_ZeigerEvalHybrid() { // the 5.3 with previous and the previous <=0.5 should trunc to 5 TEST_ASSERT_EQUAL(5, undertest.PointerEvalHybridNew(5.3, 0.1, 1)); - // the 5.3 with previous and the previous >=9.5 should reduce to 4 - TEST_ASSERT_EQUAL(4, undertest.PointerEvalHybridNew(5.3, 9.6, 9)); + // the 5.2 with previous and the previous >=9.8 should reduce to 4 + // the digit is already over transistion, but a analog pointer runs behind + TEST_ASSERT_EQUAL(4, undertest.PointerEvalHybridNew(5.2, 9.8, 9, false, 9.0)); // the 5.7 with previous and the previous >=9.5 should trunc to 5 TEST_ASSERT_EQUAL(5, undertest.PointerEvalHybridNew(5.7, 9.6, 9)); diff --git a/code/test/components/jomjol-flowcontroll/test_flow_postrocess_helper.cpp b/code/test/components/jomjol-flowcontroll/test_flow_postrocess_helper.cpp index b8ebd4c2..a5676b07 100644 --- a/code/test/components/jomjol-flowcontroll/test_flow_postrocess_helper.cpp +++ b/code/test/components/jomjol-flowcontroll/test_flow_postrocess_helper.cpp @@ -33,7 +33,17 @@ std::string process_doFlow(UnderTestPost* _underTestPost) { return _underTestPost->getReadout(0); } - +/** + * @brief setup flow like it runs after recognition. + * + * @param analog the analog recognitions as array begins with the highest ROI + * @param digits the digital regocnitions as array begins with the highest ROI + * @param digType type of the model defaults do Digital100 + * @param checkConsistency for Digital type only. Not relvant for newer models + * @param extendedResolution the lowest ROI will directly used (9.7 => 9.7) if false 9.7 => 9 + * @param decimal_shift the decimal point offset. -3 corresponds to x.yyy + * @return std::string the value result + */ std::string process_doFlow(std::vector analog, std::vector digits, t_CNNType digType, bool checkConsistency, bool extendedResolution, int decimal_shift) { // setup the classundertest diff --git a/code/test/components/jomjol-flowcontroll/test_flow_pp_negative.cpp b/code/test/components/jomjol-flowcontroll/test_flow_pp_negative.cpp index 1e31c9cc..e33ffcfa 100644 --- a/code/test/components/jomjol-flowcontroll/test_flow_pp_negative.cpp +++ b/code/test/components/jomjol-flowcontroll/test_flow_pp_negative.cpp @@ -109,7 +109,9 @@ void testNegative_Issues() { setAllowNegatives(underTestPost, false); setPreValue(underTestPost, preValue_extended); std::string result = process_doFlow(underTestPost); - TEST_ASSERT_EQUAL_STRING("Neg. Rate - Read: - Raw: 22017.98 - Pre: 22018.09 ", underTestPost->getReadoutError().c_str()); + TEST_ASSERT_EQUAL_STRING("Neg. Rate - Read: - Raw: 22017.98 - Pre: 22018.08 ", underTestPost->getReadoutError().c_str()); + // if negativ no result any more + TEST_ASSERT_EQUAL_STRING("", result.c_str()); delete underTestPost; diff --git a/code/test/components/jomjol-flowcontroll/test_flowpostprocessing.cpp b/code/test/components/jomjol-flowcontroll/test_flowpostprocessing.cpp index 4ff4cebe..715d7a91 100644 --- a/code/test/components/jomjol-flowcontroll/test_flowpostprocessing.cpp +++ b/code/test/components/jomjol-flowcontroll/test_flowpostprocessing.cpp @@ -113,28 +113,28 @@ void test_doFlowPP1() { // https://github.com/jomjol/AI-on-the-edge-device/issues/942#issuecomment-1226966346 std::vector digits = { 0.0, 2.9, 3.0, 2.9, 3.5, 9.5}; std::vector analogs = { }; - const char* expected = "33330"; + const char* expected = "33339"; 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 digits = { 9.9, 2.8, 2.9, 2.9, 3.7, 9.7}; analogs = { }; - expected = "33340"; + expected = "33339"; result = process_doFlow(analogs, digits); TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); // https://github.com/jomjol/AI-on-the-edge-device/issues/942 digits = { 0.0, 9.9, 6.8, 9.9, 3.7, 0.8, 6.9, 8.7}; analogs = { }; - expected = "704179"; + expected = "704178"; 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-1228343319 digits = { 9.9, 6.8, 1.1, 4.7, 2.7, 6.0, 9.0, 2.8}; // changed 3.7 --> 2.7 (see picture in issue) analogs = { }; - expected = "7153693"; + expected = "7153692"; result = process_doFlow(analogs, digits); TEST_ASSERT_EQUAL_STRING(expected, result.c_str()); @@ -184,7 +184,7 @@ void test_doFlowPP2() { // https://github.com/jomjol/AI-on-the-edge-device/issues/921#issuecomment-1242730397 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 = "32289.419"; const char* expected_extended= "32289.4198"; // FALSCH! wegen ungenügender Präzision von NUMBERS->Value // expected_extended= "32289.4198"; @@ -229,7 +229,7 @@ void test_doFlowPP2() { // https://github.com/jomjol/AI-on-the-edge-device/issues/994#issue-1368570945 digits = { 0.0, 0.0, 1.0, 2.0, 2.8, 1.9, 2.8, 5.6}; // 123245.6 als falsches Ergebnis analogs = { }; - expected = "123236"; + expected = "123235"; expected_extended= "123235.6"; // checkConsistency=true