test_flowpostprocessing.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
  1. #include "test_flow.h"
  2. /**
  3. * @brief Testet die doFlow-Methode von ClassFlowPostprocessing
  4. * digits[] - enthält die liste der vom Model zurückgegebenen Ergebnisse (class100/cont) in der Reihenfolge von links nach rechts
  5. * analog[] - enthält die Liste der Zeiger vom Model, wie bei den digits
  6. * expected - enthält das erwartete Ergebnis, wobei der Dezimalpunkt genau zwischen digits und analog ist.
  7. *
  8. */
  9. void test_doFlow() {
  10. /*
  11. *
  12. * digit1 = 1.2
  13. * digit2 = 6.7
  14. * analog1 = 9.5
  15. * analog2 = 8.4
  16. *
  17. * Das Ergebnis sollte "16.984" sein. Bzw. 16.98 ohne Extended true
  18. */
  19. std::vector<float> digits = { 1.2, 6.7};
  20. std::vector<float> analogs = { 9.5, 8.4};
  21. const char* expected = "16.98";
  22. const char* expected_extended = "16.984";
  23. std::string result = process_doFlow(analogs, digits);
  24. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  25. /*
  26. * https://github.com/jomjol/AI-on-the-edge-device/issues/921
  27. *
  28. * Das Ergebnis sollte "376529.6" sein.
  29. */
  30. digits = { 3.0, 7.0, 6.0, 5.0, 2.5, 9.6};
  31. analogs = { 6.4};
  32. expected = "376529.6";
  33. result = process_doFlow(analogs, digits);
  34. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  35. /*
  36. * https://github.com/jomjol/AI-on-the-edge-device/issues/921
  37. *
  38. * Das Ergebnis sollte "167734.6" sein. Bzw. 16.98 ohne Extended true
  39. */
  40. digits = { 1.1, 6.0, 7.0, 7.0, 3.0, 4.6};
  41. analogs = { 6.2};
  42. expected = "167734.6";
  43. result = process_doFlow(analogs, digits);
  44. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  45. /*
  46. * https://github.com/jomjol/AI-on-the-edge-device/issues/919
  47. *
  48. * Das Ergebnis sollte "58.96889" sein. Bzw. 16.98 ohne Extended true
  49. */
  50. digits = { 5.0, 8.6};
  51. analogs = { 9.8, 6.7, 8.9, 8.6, 9.8};
  52. expected = "58.96889";
  53. result = process_doFlow(analogs, digits);
  54. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  55. /*
  56. * https://github.com/jomjol/AI-on-the-edge-device/issues/921#issuecomment-1222672175
  57. *
  58. * Das Ergebnis sollte "376529.6" sein. Bzw. 16.98 ohne Extended true
  59. */
  60. digits = { 2.9, 7.0, 6.8, 9.9, 8.0, 3.9};
  61. analogs = { 9.7};
  62. expected = "377083.9";
  63. result = process_doFlow(analogs, digits);
  64. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  65. digits = { 1.1, 9.0, 4.0};
  66. analogs = { 6.1, 2.6, 6.25, 9.7};
  67. expected = "194.6259";
  68. result = process_doFlow(analogs, digits);
  69. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  70. digits = { 1.1, 9.0, 4.0};
  71. analogs = { 8.1, 2.6, 6.25, 9.7};
  72. expected = "193.8259";
  73. result = process_doFlow(analogs, digits);
  74. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  75. digits = { 1.1, 9.0, 4.0};
  76. analogs = { 9.1, 2.6, 6.25, 9.7};
  77. expected = "193.9259";
  78. result = process_doFlow(analogs, digits);
  79. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  80. // https://github.com/jomjol/AI-on-the-edge-device/discussions/950
  81. digits = { 1.0, 9.0, 9.0};
  82. analogs = { 7.1, 4.8, 8.3};
  83. expected = "199.748";
  84. result = process_doFlow(analogs, digits);
  85. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  86. // https://github.com/jomjol/AI-on-the-edge-device/issues/948
  87. digits = { 1.0, 9.0, 9.0};
  88. analogs = { 7.1, 4.8, 8.3};
  89. expected = "199.748";
  90. result = process_doFlow(analogs, digits);
  91. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  92. // https://github.com/jomjol/AI-on-the-edge-device/issues/942#issuecomment-1226966346
  93. digits = { 0.0, 2.9, 3.0, 2.9, 3.5, 9.5};
  94. analogs = { };
  95. expected = "33330";
  96. result = process_doFlow(analogs, digits);
  97. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  98. // https://github.com/jomjol/AI-on-the-edge-device/issues/942#issuecomment-1226966346
  99. digits = { 9.9, 2.8, 2.9, 2.9, 3.7, 9.7};
  100. analogs = { };
  101. expected = "33340";
  102. result = process_doFlow(analogs, digits);
  103. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  104. // https://github.com/jomjol/AI-on-the-edge-device/issues/942
  105. digits = { 0.0, 9.9, 6.8, 9.9, 3.7, 0.8, 6.9, 8.7};
  106. analogs = { };
  107. expected = "704179";
  108. result = process_doFlow(analogs, digits);
  109. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  110. // https://github.com/jomjol/AI-on-the-edge-device/issues/942#issuecomment-1228343319
  111. 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)
  112. analogs = { };
  113. expected = "7153693";
  114. result = process_doFlow(analogs, digits);
  115. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  116. // Analoger Übergang Zähler Jomjolcom/jomjol/AI-on-the-edge-device/issues/942#issuecomment-1228343319
  117. digits = { 1.0, 9.0, 4.3}; // changed 3.7 --> 2.7 (see picture in issue)
  118. analogs = { 8.9, 0.7, 8.9, 9.4 };
  119. expected = "194.9089";
  120. result = process_doFlow(analogs, digits);
  121. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  122. // Fehler bei V11.2.0
  123. // https://github.com/jomjol/AI-on-the-edge-device/issues/921#issuecomment-1229552041
  124. digits = { 2.9, 7.0, 7.0, 9.1, 8.1, 8.5}; // 376.9884(1) als falsches Ergebnis
  125. analogs = { 4.1 };
  126. expected = "377988.4";
  127. result = process_doFlow(analogs, digits);
  128. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  129. // Fehler bei V11.2.0
  130. // https://github.com/jomjol/AI-on-the-edge-device/issues/921#issuecomment-1233149877
  131. digits = { 0.0, 0.0, 7.0, 8.9}; // 79.9999(6) als falsches Ergebnis
  132. analogs = { 0.1, 0.1, 0.1, 9.6};
  133. expected = "78.9999";
  134. result = process_doFlow(analogs, digits);
  135. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  136. // Fehler bei V11.2.0
  137. // https://github.com/jomjol/AI-on-the-edge-device/issues/921#issuecomment-1236119370
  138. digits = { 3.1, 9.1, 5.7}; // 9.1 führt zu falscher Erkennung eines unvollständigen Übergangs
  139. analogs = { 8.8, 6.1, 3.0, 2.0};
  140. expected = "395.8632";
  141. result = process_doFlow(analogs, digits);
  142. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  143. // Fehler bei V11.2.0
  144. // https://github.com/jomjol/AI-on-the-edge-device/discussions/950#discussion-4338615
  145. digits = { 1.0, 9.0, 9.0}; // Übergang wurde um 1 erhöht (200, statt 199)
  146. analogs = { 7.1, 4.8, 8.3};
  147. expected = "199.748";
  148. result = process_doFlow(analogs, digits, Digital);
  149. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  150. // Fehler bei Rolling (2002-09-09)
  151. // https://github.com/jomjol/AI-on-the-edge-device/issues/921#issuecomment-1242730397
  152. digits = { 3.0, 2.0, 2.0, 8.0, 9.0, 4.0, 1.7, 9.8}; // falscher Wert 32290.420
  153. analogs = { };
  154. expected = "32289.420";
  155. expected_extended= "32289.4198";
  156. // FALSCH! wegen ungenügender Präzision von NUMBERS->Value
  157. // expected_extended= "32289.4198";
  158. // extendResolution=false, checkConsistency=false
  159. result = process_doFlow(analogs, digits, Digital100, false, false, -3);
  160. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  161. // extendResolution=true
  162. result = process_doFlow(analogs, digits, Digital100, false, true, -3);
  163. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  164. // checkConsistency=true und extendResolution=true
  165. result = process_doFlow(analogs, digits, Digital100, false, true, -3);
  166. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  167. // Fehler Rolling (2022-09-10)
  168. // not documented as issue
  169. digits = { 0.0, 0.0, 7.9, 3.8}; // 84.99401 als falsches Ergebnis
  170. analogs = { 0.0, 9.4, 4.1, 0.1};
  171. expected = "83.9940";
  172. expected_extended= "83.99401";
  173. // checkConsistency=false
  174. result = process_doFlow(analogs, digits, Digital100, false);
  175. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  176. // checkConsistency=true
  177. result = process_doFlow(analogs, digits, Digital100, true);
  178. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  179. // extendResolution=true
  180. result = process_doFlow(analogs, digits, Digital100, false, true);
  181. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  182. // checkConsistency=true und extendResolution=true
  183. result = process_doFlow(analogs, digits, Digital100, false, true);
  184. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  185. // Fehler Rolling (2022-09-10)
  186. // https://github.com/jomjol/AI-on-the-edge-device/issues/994#issue-1368570945
  187. digits = { 0.0, 0.0, 1.0, 2.0, 2.8, 1.9, 2.8, 5.6}; // 123245.6 als falsches Ergebnis
  188. analogs = { };
  189. expected = "123236";
  190. expected_extended= "123235.6";
  191. // checkConsistency=true
  192. result = process_doFlow(analogs, digits, Digital100, false, false);
  193. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  194. // checkConsistency=true
  195. result = process_doFlow(analogs, digits, Digital100, true, false);
  196. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  197. // extendResolution=true
  198. result = process_doFlow(analogs, digits, Digital100, false, true);
  199. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  200. // Fehler bei V11.2.0
  201. // https://github.com/jomjol/AI-on-the-edge-device/discussions/950#discussioncomment-3661982
  202. digits = { 3.0, 2.0, 4.1, 9.0, 4.0, 6.3, 9.2}; // 3249.459 als falsches Ergebnis
  203. analogs = { };
  204. expected = "3249.469";
  205. expected_extended= "3249.4692";
  206. // checkConsistency=true
  207. result = process_doFlow(analogs, digits, Digital100, false, false, -3);
  208. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  209. // extendResolution=true
  210. result = process_doFlow(analogs, digits, Digital100, false, true, -3);
  211. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  212. // Fehler bei V11.2.0
  213. // https://github.com/jomjol/AI-on-the-edge-device/issues/1020#issue-1375648891
  214. digits = { 0.0, 2.0, 6.1, 9.2}; // 259.9227 als falsches Ergebnis
  215. analogs = { 9.0, 2.5, 2.9, 7.2};
  216. expected = "269.9227";
  217. expected_extended= "269.92272";
  218. // extendResolution=true
  219. result = process_doFlow(analogs, digits, Digital100, false, false);
  220. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  221. // checkConsistency=false und extendResolution=true
  222. result = process_doFlow(analogs, digits, Digital100, false, true);
  223. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  224. // Fehler bei V11.3.1
  225. // https://github.com/jomjol/AI-on-the-edge-device/issues/1028#issuecomment-1250239481
  226. digits = { 1.1, 6.0, 9.1, 3.0, 5.3, 9.4}; // 169.3493 als falsches Ergebnis
  227. analogs = { 3.5};
  228. expected = "169.3593";
  229. expected_extended= "169.35935";
  230. // extendResolution=false
  231. result = process_doFlow(analogs, digits, Digital100, false, false, -3);
  232. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  233. // checkConsistency=false und extendResolution=true
  234. result = process_doFlow(analogs, digits, Digital100, false, true, -3);
  235. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  236. // Fehler bei V12.0.1
  237. // Lokal
  238. digits = { 9.8, 9.8, 1.9, 0.9, 0.9, 9.9, 2.9, 4.8}; // 211.0345 als falsches Ergebnis
  239. analogs = { 5.5};
  240. expected = "211.0355";
  241. expected_extended= "211.03555";
  242. // extendResolution=false
  243. result = process_doFlow(analogs, digits, Digital100, false, false, -3);
  244. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  245. // checkConsistency=false und extendResolution=true
  246. result = process_doFlow(analogs, digits, Digital100, false, true, -3);
  247. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  248. // Fehler bei V12.0.1
  249. // https://github.com/jomjol/AI-on-the-edge-device/issues/1110#issuecomment-1277425333
  250. digits = { 2.2, 4.5, 5.9}; // 245.938 als falsches Ergebnis
  251. analogs = { 9.4, 3.8, 8.6};
  252. expected = "245.938";
  253. expected_extended= "245.9386";
  254. // extendResolution=false
  255. result = process_doFlow(analogs, digits, Digital100, false, false, 0);
  256. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  257. // checkConsistency=false und extendResolution=true
  258. result = process_doFlow(analogs, digits, Digital100, false, true, 0);
  259. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  260. // Fehler bei V12.0.1
  261. // https://github.com/jomjol/AI-on-the-edge-device/issues/1110#issuecomment-1277425333
  262. digits = { 2.2, 4.5, 5.9}; // 245.938 kein Fehler. Aber Grenzfall, deshalb mit als Test aufgenommen.
  263. analogs = { 9.4, 3.8, 8.6};
  264. expected = "245.938";
  265. expected_extended= "245.9386";
  266. // extendResolution=false
  267. result = process_doFlow(analogs, digits, Digital100, false, false, 0);
  268. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  269. // checkConsistency=false und extendResolution=true
  270. result = process_doFlow(analogs, digits, Digital100, false, true, 0);
  271. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  272. // Fehler bei V12.0.1
  273. // https://github.com/jomjol/AI-on-the-edge-device/issues/1110#issuecomment-1265523710
  274. digits = { 2.0, 4.0, 6.8}; // 246.2045 als falsches Ergebnis
  275. analogs = { 2.2, 0.1, 4.5};
  276. expected = "247.204";
  277. expected_extended= "247.2045";
  278. // extendResolution=false
  279. result = process_doFlow(analogs, digits, Digital100, false, false, 0);
  280. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  281. // checkConsistency=false und extendResolution=true
  282. result = process_doFlow(analogs, digits, Digital100, false, true, 0);
  283. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  284. // Fehler bei V12.0.1
  285. // https://github.com/jomjol/AI-on-the-edge-device/issues/1110#issue-1391153343
  286. digits = { 1.0, 4.0, 2.0}; // 142.9269 als falsches Ergebnis
  287. analogs = { 9.2, 2.5, 6.8, 9.0};
  288. expected = "141.9269";
  289. expected_extended= "141.92690";
  290. // extendResolution=false
  291. result = process_doFlow(analogs, digits, Digital100, false, false, 0);
  292. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  293. // checkConsistency=false und extendResolution=true
  294. result = process_doFlow(analogs, digits, Digital100, false, true, 0);
  295. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  296. // Fehler bei V12.0.1
  297. // https://github.com/jomjol/AI-on-the-edge-device/issues/1110#issuecomment-1262626388
  298. digits = { 1.2, 6.8, 0.0, 0.0, 5.0, 2.8}; //170.05387 als falsches Ergebnis
  299. analogs = { 8.7};
  300. expected = "170.0528";
  301. expected_extended= "170.05287";
  302. // extendResolution=false
  303. result = process_doFlow(analogs, digits, Digital100, false, false, -3);
  304. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  305. // checkConsistency=false und extendResolution=true
  306. result = process_doFlow(analogs, digits, Digital100, false, true, -3);
  307. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  308. // Fehler bei rolling post V12.0.1
  309. // lokal watermeter1
  310. digits = { 0.0, 0.0, 9.0, 1.0}; //91.88174 als falsches Ergebnis
  311. analogs = {9.0, 8.0, 1.8, 7.4};
  312. expected = "90.8817";
  313. expected_extended= "90.88174";
  314. // extendResolution=false
  315. result = process_doFlow(analogs, digits, Digital100, false, false, 0);
  316. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  317. // checkConsistency=false und extendResolution=true
  318. result = process_doFlow(analogs, digits, Digital100, false, true, 0);
  319. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  320. // Fehler bei rolling post V12.0.1
  321. // lokal watermeter1
  322. digits = { 0.0, 0.0, 9.0, 1.9}; //91.38403 als falsches Ergebnis
  323. analogs = {3.6, 8.2, 3.2, 2.0};
  324. expected = "92.3832";
  325. expected_extended= "92.38320";
  326. // extendResolution=false
  327. result = process_doFlow(analogs, digits, Digital100, false, false, 0);
  328. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  329. // checkConsistency=false und extendResolution=true
  330. result = process_doFlow(analogs, digits, Digital100, false, true, 0);
  331. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  332. // Fehler V11.3.0
  333. // https://github.com/jomjol/AI-on-the-edge-device/issues/1143#issue-1400807695
  334. digits = { 7.0, 4.0, 7.0, 2.0, 7.0, 5.4, 9.4}; // 7472.749 als falsches Ergebnis
  335. analogs = {};
  336. expected = "7472.759";
  337. expected_extended= "7472.7594";
  338. // extendResolution=false
  339. result = process_doFlow(analogs, digits, Digital100, false, false, -3);
  340. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  341. // checkConsistency=false und extendResolution=true
  342. result = process_doFlow(analogs, digits, Digital100, false, true, -3);
  343. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  344. // Fehler V12.0.1
  345. // https://github.com/jomjol/AI-on-the-edge-device/issues/1143#issuecomment-1274434805
  346. digits = { 4.9, 6.9, 6.8}; // 576.8649 als falsches Ergebnis
  347. analogs = {8.6, 6.2, 5.0, 9.0};
  348. // fall unklar ob wirklich 577 oder 576, erst mal 577
  349. expected = "576.8649";
  350. expected_extended= "576.86490";
  351. // extendResolution=false
  352. result = process_doFlow(analogs, digits, Digital100, false, false, 0);
  353. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  354. // checkConsistency=false und extendResolution=true
  355. result = process_doFlow(analogs, digits, Digital100, false, true, 0);
  356. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  357. // Fehler V12.0.1 "TODO 00211.03480 vs 00211.03580"
  358. // Lokal
  359. digits = { 4.9, 6.9, 6.8}; // 576.8649 als falsches Ergebnis
  360. analogs = {8.6, 6.2, 5.0, 9.0};
  361. // fall unklar ob wirklich 577 oder 576, erst mal 577
  362. expected = "576.8649";
  363. expected_extended= "576.86490";
  364. // extendResolution=false
  365. result = process_doFlow(analogs, digits, Digital100, false, false, 0);
  366. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  367. // checkConsistency=false und extendResolution=true
  368. result = process_doFlow(analogs, digits, Digital100, false, true, 0);
  369. TEST_ASSERT_EQUAL_STRING(expected_extended, result.c_str());
  370. }