testMemory.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. #include "../../common/testCommon.h"
  2. static void *yyMalloc(void *ctx, size_t size)
  3. {
  4. (void)ctx;
  5. return unityTestMalloc(size);
  6. }
  7. static void *yyRealloc(void *ctx, void *ptr, size_t oldSize, size_t size)
  8. {
  9. (void)ctx;
  10. (void)oldSize;
  11. return unityTestRealloc(ptr, size);
  12. }
  13. static void yyFree(void *ctx, void *ptr)
  14. {
  15. (void)ctx;
  16. unityTestFree(ptr);
  17. }
  18. static void RyanJsonMemoryFootprint(const char *jsonstr, int32_t *footprint)
  19. {
  20. unityTestLeakScope_t leakScope = unityTestLeakScopeBegin();
  21. RyanJsonInitHooks(unityTestMalloc, unityTestFree, unityTestRealloc);
  22. RyanJson_t json = RyanJsonParse(jsonstr);
  23. TEST_ASSERT_NOT_NULL_MESSAGE(json, "RyanJson 解析失败");
  24. *footprint = unityTestGetUse() - leakScope.baseline;
  25. RyanJsonDelete(json);
  26. unityTestLeakScopeEnd(leakScope, "RyanJson 释放后 TLSF used 未回到基线");
  27. }
  28. static void cJSONMemoryFootprint(const char *jsonstr, int32_t *footprint)
  29. {
  30. unityTestLeakScope_t leakScope = unityTestLeakScopeBegin();
  31. cJSON_Hooks hooks = {.malloc_fn = unityTestMalloc, .free_fn = unityTestFree};
  32. cJSON_InitHooks(&hooks);
  33. cJSON *json = cJSON_Parse(jsonstr);
  34. TEST_ASSERT_NOT_NULL_MESSAGE(json, "cJSON 解析失败");
  35. *footprint = unityTestGetUse() - leakScope.baseline;
  36. cJSON_Delete(json);
  37. unityTestLeakScopeEnd(leakScope, "cJSON 释放后 TLSF used 未回到基线");
  38. }
  39. static void yyjsonMemoryFootprint(const char *jsonstr, int32_t *footprint)
  40. {
  41. unityTestLeakScope_t leakScope = unityTestLeakScopeBegin();
  42. yyjson_alc yyalc = {yyMalloc, yyRealloc, yyFree, NULL};
  43. // 先解析成只读文档
  44. yyjson_doc *doc = yyjson_read_opts(jsonstr, strlen(jsonstr), YYJSON_READ_NOFLAG, &yyalc, NULL);
  45. TEST_ASSERT_NOT_NULL_MESSAGE(doc, "yyjson 解析只读文档失败");
  46. // 从只读文档拷贝为可变文档
  47. yyjson_mut_doc *mdoc = yyjson_doc_mut_copy(doc, &yyalc);
  48. yyjson_doc_free(doc);
  49. TEST_ASSERT_NOT_NULL_MESSAGE(mdoc, "yyjson 拷贝可变文档失败");
  50. *footprint = unityTestGetUse() - leakScope.baseline;
  51. yyjson_mut_doc_free(mdoc);
  52. unityTestLeakScopeEnd(leakScope, "yyjson 释放后 TLSF used 未回到基线");
  53. }
  54. static void printfJsonCompare(const char *id, const char *title, const char *jsonstr)
  55. {
  56. int32_t ryanJsonCount = 0;
  57. int32_t cJSONCount = 0;
  58. int32_t yyjsonCount = 0;
  59. RyanJsonMemoryFootprint(jsonstr, &ryanJsonCount);
  60. cJSONMemoryFootprint(jsonstr, &cJSONCount);
  61. yyjsonMemoryFootprint(jsonstr, &yyjsonCount);
  62. (void)testLog("%s 原始长度: %lu, 模拟分配(header=%lu,align=%lu) 峰值占用 -> RyanJson:%ld, cJSON:%ld, yyjson:%ld\r\n", title,
  63. (unsigned long)strlen(jsonstr), (unsigned long)RyanJsonTestAllocHeaderSize, (unsigned long)RyanJsonTestAllocAlignSize,
  64. (long)ryanJsonCount, (long)cJSONCount, (long)yyjsonCount);
  65. (void)testLog("[MEM][COMPARE] id=%s strict=%d head=%d sci=%d len=%lu header=%lu align=%lu ryanjson=%ld cjson=%ld yyjson=%ld\r\n",
  66. (NULL != id) ? id : "unknown",
  67. (int)RyanJsonStrictObjectKeyCheck,
  68. (int)RyanJsonDefaultAddAtHead,
  69. (int)RyanJsonSnprintfSupportScientific,
  70. (unsigned long)strlen(jsonstr),
  71. (unsigned long)RyanJsonTestAllocHeaderSize,
  72. (unsigned long)RyanJsonTestAllocAlignSize,
  73. (long)ryanJsonCount,
  74. (long)cJSONCount,
  75. (long)yyjsonCount);
  76. TEST_ASSERT_TRUE_MESSAGE(ryanJsonCount > 0 && cJSONCount > 0 && yyjsonCount > 0, "内存统计值必须大于 0");
  77. TEST_ASSERT_TRUE_MESSAGE(ryanJsonCount < cJSONCount, "RyanJson 内存占用应低于 cJSON");
  78. if (ryanJsonCount >= yyjsonCount)
  79. {
  80. (void)testLog("提示: 当前模拟参数下 RyanJson(%ld) 未低于 yyjson(%ld)\r\n", (long)ryanJsonCount, (long)yyjsonCount);
  81. }
  82. if (cJSONCount > 0 && yyjsonCount > 0)
  83. {
  84. double saveVsCjson = 100.0 - ((double)ryanJsonCount * 100.0) / (double)cJSONCount;
  85. double saveVsYyjson = 100.0 - ((double)ryanJsonCount * 100.0) / (double)yyjsonCount;
  86. (void)testLog("内存优化程度 -> 比 cJSON 节省: \033[1;32m%.2f%%\033[0m, 比 yyjson 节省: \033[1;32m%.2f%%\033[0m\r\n",
  87. saveVsCjson, saveVsYyjson);
  88. }
  89. }
  90. static void testMixedJsonMemory(void)
  91. {
  92. static const char jsonstr[] =
  93. "{\"item1\":{\"inter\":16,\"double\":16.89,\"string\":\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null,"
  94. "\"item\":{\"inter\":16,"
  95. "\"double\":16.89,\"string\":\"hello\","
  96. "\"boolTrue\":true,\"boolFalse\":false,\"null\":null},\"arrayInt\":[16,16,16,16,16],\"arrayDouble\":[16.89,16.89,16.89,"
  97. "16.89,16.89],"
  98. "\"arrayString\":[\"hello\",\"hello\",\"hello\","
  99. "\"hello\",\"hello\"],\"array\":[16,16.89,\"hello\",true,false,null],\"arrayItem\":[{\"inter\":16,\"double\":16.89,"
  100. "\"string\":\"hello\","
  101. "\"boolTrue\":true,\"boolFalse\":false,"
  102. "\"null\":null},{\"inter\":16,\"double\":16.89,\"string\":\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null}]"
  103. "},\"item2\":{"
  104. "\"inter\":16,\"double\":16.89,\"string\":"
  105. "\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null,\"item\":{\"inter\":16,\"double\":16.89,\"string\":"
  106. "\"hello\",\"boolTrue\":"
  107. "true,\"boolFalse\":false,\"null\":null},"
  108. "\"arrayInt\":[16,16,16,16,16],\"arrayDouble\":[16.89,16.89,16.89,16.89,16.89],\"arrayString\":[\"hello\",\"hello\","
  109. "\"hello\",\"hello\","
  110. "\"hello\"],\"array\":[16,16.89,\"hello\","
  111. "true,false,null],\"arrayItem\":[{\"inter\":16,\"double\":16.89,\"string\":\"hello\",\"boolTrue\":true,\"boolFalse\":"
  112. "false,\"null\":null},{"
  113. "\"inter\":16,\"double\":16.89,\"string\":"
  114. "\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null}]},\"item3\":{\"inter\":16,\"double\":16.89,\"string\":"
  115. "\"hello\",\"boolTrue\":"
  116. "true,\"boolFalse\":false,\"null\":null,"
  117. "\"item\":{\"inter\":16,\"double\":16.89,\"string\":\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null},"
  118. "\"arrayInt\":[16,16,16,16,"
  119. "16],\"arrayDouble\":[16.89,16.89,16.89,"
  120. "16.89,16.89],\"arrayString\":[\"hello\",\"hello\",\"hello\",\"hello\",\"hello\"],\"array\":[16,16.89,\"hello\",true,"
  121. "false,null],"
  122. "\"arrayItem\":[{\"inter\":16,\"double\":16.89,"
  123. "\"string\":\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null},{\"inter\":16,\"double\":16.89,\"string\":"
  124. "\"hello\",\"boolTrue\":"
  125. "true,\"boolFalse\":false,\"null\":null}]}"
  126. ",\"item4\":{\"inter\":16,\"double\":16.89,\"string\":\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null,"
  127. "\"item\":{\"inter\":16,"
  128. "\"double\":16.89,\"string\":\"hello\","
  129. "\"boolTrue\":true,\"boolFalse\":false,\"null\":null},\"arrayInt\":[16,16,16,16,16],\"arrayDouble\":[16.89,16.89,16.89,"
  130. "16.89,16.89],"
  131. "\"arrayString\":[\"hello\",\"hello\",\"hello\","
  132. "\"hello\",\"hello\"],\"array\":[16,16.89,\"hello\",true,false,null],\"arrayItem\":[{\"inter\":16,\"double\":16.89,"
  133. "\"string\":\"hello\","
  134. "\"boolTrue\":true,\"boolFalse\":false,"
  135. "\"null\":null},{\"inter\":16,\"double\":16.89,\"string\":\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null}]"
  136. "}}";
  137. printfJsonCompare("mixed", "混合对象", jsonstr);
  138. }
  139. static void testObjectJsonMemory(void)
  140. {
  141. static const char jsonstr[] =
  142. "{\"message\":\"success感谢又拍云(upyun.com)提供CDN赞助\",\"status\":200,\"date\":\"20230822\",\"time\":\"2023-08-22 "
  143. "09:44:54\",\"cityInfo\":{\"city\":\"郑州市\",\"citykey\":\"101180101\",\"parent\":\"河南\",\"updateTime\":\"07:46\"},"
  144. "\"data\":{\"shidu\":"
  145. "\"85%\",\"pm25\":20,\"pm10\":56,"
  146. "\"quality\":\"良\",\"wendu\":\"29\",\"ganmao\":\"极少数敏感人群应减少户外活动\",\"forecast\":[{\"date\":\"22\",\"high\":"
  147. "\"高温 "
  148. "35℃\",\"low\":\"低温 "
  149. "23℃\",\"ymd\":\"2023-08-22\",\"week\":\"星期二\",\"sunrise\":\"05:51\",\"sunset\":\"19:05\",\"aqi\":78,\"fx\":\"东南风\","
  150. "\"fl\":\"2级\","
  151. "\"type\":\"晴\",\"notice\":"
  152. "\"愿你拥有比阳光明媚的心情\"},{\"date\":\"23\",\"high\":\"高温 33℃\",\"low\":\"低温 "
  153. "23℃\",\"ymd\":\"2023-08-23\",\"week\":\"星期三\",\"sunrise\":\"05:52\",\"sunset\":\"19:04\",\"aqi\":71,\"fx\":\"南风\","
  154. "\"fl\":\"2级\","
  155. "\"type\":\"中雨\",\"notice\":"
  156. "\"记得随身携带雨伞哦\"},{\"date\":\"24\",\"high\":\"高温 31℃\",\"low\":\"低温 "
  157. "21℃\",\"ymd\":\"2023-08-24\",\"week\":\"星期四\",\"sunrise\":\"05:52\",\"sunset\":\"19:03\",\"aqi\":74,\"fx\":\"东风\","
  158. "\"fl\":\"2级\","
  159. "\"type\":\"晴\",\"notice\":"
  160. "\"愿你拥有比阳光明媚的心情\"},{\"date\":\"25\",\"high\":\"高温 30℃\",\"low\":\"低温 "
  161. "23℃\",\"ymd\":\"2023-08-25\",\"week\":\"星期五\",\"sunrise\":\"05:53\",\"sunset\":\"19:02\",\"aqi\":93,\"fx\":\"东风\","
  162. "\"fl\":\"1级\","
  163. "\"type\":\"小雨\",\"notice\":"
  164. "\"雨虽小,注意保暖别感冒\"},{\"date\":\"26\",\"high\":\"高温 25℃\",\"low\":\"低温 "
  165. "22℃\",\"ymd\":\"2023-08-26\",\"week\":\"星期六\",\"sunrise\":\"05:54\",\"sunset\":\"19:00\",\"aqi\":80,\"fx\":\"东北风\","
  166. "\"fl\":\"1级\","
  167. "\"type\":\"阴\",\"notice\":"
  168. "\"不要被阴云遮挡住好心情\"},{\"date\":\"27\",\"high\":\"高温 27℃\",\"low\":\"低温 "
  169. "20℃\",\"ymd\":\"2023-08-27\",\"week\":\"星期日\",\"sunrise\":\"05:55\",\"sunset\":\"18:59\",\"aqi\":74,\"fx\":\"西北风\","
  170. "\"fl\":\"1级\","
  171. "\"type\":\"阴\",\"notice\":"
  172. "\"不要被阴云遮挡住好心情\"},{\"date\":\"28\",\"high\":\"高温 30℃\",\"low\":\"低温 "
  173. "20℃\",\"ymd\":\"2023-08-28\",\"week\":\"星期 "
  174. "一\",\"sunrise\":\"05:55\",\"sunset\":\"18:58\",\"aqi\":80,\"fx\":\"东北风\",\"fl\":\"2级\",\"type\":\"多云\",\"notice\":"
  175. "\"阴晴之间,谨防紫外线侵扰\"},{\"date\":\"29\",\"high\":"
  176. "\"高温 30℃\",\"low\":\"低温 "
  177. "20℃\",\"ymd\":\"2023-08-29\",\"week\":\"星期二\",\"sunrise\":\"05:56\",\"sunset\":\"18:56\",\"aqi\":80,\"fx\":\"东北风\","
  178. "\"fl\":\"2级\","
  179. "\"type\":\"多云\",\"notice\":"
  180. "\"阴晴之间,谨防紫外线侵扰\"},{\"date\":\"30\",\"high\":\"高温 31℃\",\"low\":\"低温 "
  181. "20℃\",\"ymd\":\"2023-08-30\",\"week\":\"星期三\",\"sunrise\":\"05:57\",\"sunset\":\"18:55\",\"aqi\":92,\"fx\":\"南风\","
  182. "\"fl\":\"1级\","
  183. "\"type\":\"晴\",\"notice\":"
  184. "\"愿你拥有比阳光明媚的心情\"},{\"date\":\"31\",\"high\":\"高温 33℃\",\"low\":\" 低温 "
  185. "22℃\",\"ymd\":\"2023-08-31\",\"week\":\"星期四\",\"sunrise\":\"05:57\",\"sunset\":\"18:54\",\"aqi\":91,\"fx\":\"南风\","
  186. "\"fl\":\"1级\","
  187. "\"type\":\"晴\",\"notice\":"
  188. "\"愿你拥有比阳光明媚的心情\"},{\"date\":\"01\",\"high\":\"高温 34℃\",\"low\":\"低温 "
  189. "23℃\",\"ymd\":\"2023-09-01\",\"week\":\"星期五\",\"sunrise\":\"05:58\",\"sunset\":\"18:52\",\"aqi\":91,\"fx\":\"西风\","
  190. "\"fl\":\"1级\","
  191. "\"type\":\"晴\",\"notice\":"
  192. "\"愿你拥有比阳光明媚的心情\"},{\"date\":\"02\",\"high\":\"高温 36℃\",\"low\":\"低温 "
  193. "25℃\",\"ymd\":\"2023-09-02\",\"week\":\"星期六\",\"sunrise\":\"05:59\",\"sunset\":\"18:51\",\"aqi\":78,\"fx\":\"南风\","
  194. "\"fl\":\"1级\","
  195. "\"type\":\"阴\",\"notice\":"
  196. "\"不要被阴云遮挡住好心情\"},{\"date\":\"03\",\"high\":\"高温 35℃\",\"low\":\"低温 "
  197. "24℃\",\"ymd\":\"2023-09-03\",\"week\":\"星期日\",\"sunrise\":\"06:00\",\"sunset\":\"18:50\",\"aqi\":82,\"fx\":\"东北风\","
  198. "\"fl\":\"1级\","
  199. "\"type\":\"晴\",\"notice\":"
  200. "\"愿你拥有比阳光明媚的心情\"},{\"date\":\"04\",\"high\":\"高温 35℃\",\"low\":\"低温 "
  201. "25℃\",\"ymd\":\"2023-09-04\",\"week\":\"星期一\",\"sunrise\":\"06:00\",\"sunset\":\"18:48\",\"aqi\":88,\"fx\":\"南风\","
  202. "\"fl\":\"2级\","
  203. "\"type\":\"晴\",\"notice\":"
  204. "\"愿你拥有比阳光明媚的心情\"},{\"date\":\"05\",\"high\":\"高温 35℃\",\"low\":\"低温 "
  205. "25℃\",\"ymd\":\"2023-09-05\",\"week\":\"星期二\",\"sunrise\":\"06:01\",\"sunset\":\"18:47\",\"aqi\":58,\"fx\":\"南风\","
  206. "\"fl\":\"2级\","
  207. "\"type\":\"阴\",\"notice\":"
  208. "\"不要被阴云遮挡住好心情\"}],\"yesterday\":{\"date\":\"21\",\"high\":\"高温 34℃\",\"low\":\"低温 "
  209. "24℃\",\"ymd\":\"2023-08-21\",\"week\":\" "
  210. "星期一\",\"sunrise\":\"05:50\",\"sunset\":\"19:07\",\"aqi\":60,\"fx\":\"西风\",\"fl\":\"2级\",\"type\":\"小雨\","
  211. "\"notice\":"
  212. "\"雨虽小,注意保暖别感冒\"}}}";
  213. printfJsonCompare("weather_object", "经典天气对象", jsonstr);
  214. }
  215. static void testArrayJsonMemory(void)
  216. {
  217. static const char jsonstr[] =
  218. "{\"item1\":{\"arrayInt\":[16,16,16,16,16,16,16,16,16,16],\"arrayDouble\":[16.89,16.89,16.89,16.89,16.89,16.89,16.89,16."
  219. "89,16.89,16.89],"
  220. "\"arrayString\":[\"hello\",\"hello\","
  221. "\"hello\",\"hello\",\"hello\",\"hello\",\"hello\",\"hello\",\"hello\",\"hello\"],\"array\":[16,16.89,\"hello\",true,"
  222. "false,null,16,16.89,"
  223. "\"hello\",true,false,null]},\"item2\":{"
  224. "\"arrayInt\":[16,16,16,16,16,16,16,16,16,16],\"arrayDouble\":[16.89,16.89,16.89,16.89,16.89,16.89,16.89,16.89,16.89,16."
  225. "89],\"arrayString\":["
  226. "\"hello\",\"hello\",\"hello\",\"hello\","
  227. "\"hello\",\"hello\",\"hello\",\"hello\",\"hello\",\"hello\"],\"array\":[16,16.89,\"hello\",true,false,null,16,16.89,"
  228. "\"hello\",true,false,"
  229. "null]},\"item3\":{\"arrayInt\":[16,16,16,"
  230. "16,16,16,16,16,16,16],\"arrayDouble\":[16.89,16.89,16.89,16.89,16.89,16.89,16.89,16.89,16.89,16.89],\"arrayString\":["
  231. "\"hello\",\"hello\","
  232. "\"hello\",\"hello\",\"hello\",\"hello\","
  233. "\"hello\",\"hello\",\"hello\",\"hello\"],\"array\":[16,16.89,\"hello\",true,false,null,16,16.89,\"hello\",true,false,"
  234. "null]},\"item4\":{"
  235. "\"arrayInt\":[16,16,16,16,16,16,16,16,16,16],"
  236. "\"arrayDouble\":[16.89,16.89,16.89,16.89,16.89,16.89,16.89,16.89,16.89,16.89],\"arrayString\":[\"hello\",\"hello\","
  237. "\"hello\",\"hello\","
  238. "\"hello\",\"hello\",\"hello\",\"hello\","
  239. "\"hello\",\"hello\"],\"array\":[16,16.89,\"hello\",true,false,null,16,16.89,\"hello\",true,false,null]}}";
  240. printfJsonCompare("deep_array", "深度数组", jsonstr);
  241. }
  242. static void testSmallMixedJsonMemory(void)
  243. {
  244. static const char jsonstr[] =
  245. "{\"inter\":16,\"double\":16.89,\"string\":\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null}";
  246. printfJsonCompare("small_mixed", "小型混合对象", jsonstr);
  247. }
  248. static void testSmallStringJsonMemory(void)
  249. {
  250. static const char jsonstr[] =
  251. "{\"inter\":\"16\",\"double\":\"16.89\",\"string\":\"hello\",\"boolTrue\":\"true\",\"boolFalse\":\"false\",\"null\":"
  252. "\"null\"}";
  253. printfJsonCompare("small_string", "小型字符串对象", jsonstr);
  254. }
  255. static void testCompressedBusinessJsonMemory(void)
  256. {
  257. static const char jsonstr[] =
  258. "{\"0\":\"0\",\"1\":\"189774523\",\"2\":{\"7\":\"3\",\"8\":\"103\",\"9\":\"37\",\"20\":\"0\",\"26\":\"37\",\"27\":"
  259. "\"367\",\"28\":\"367\",\"s\":\"0\",\"t\":\"0\",\"a\":\"24.98\",\"2a\":\"0\",\"1p\":\"23628\"},\"3\":\"0\",\"22\":"
  260. "\"epmgrow1105\",\"23\":\"0\",\"29\":\"0\",\"i\":\"4\",\"b\":\"900\",\"c\":\"1\",\"rsrp\":\"-111\",\"rsrq\":\"-4\","
  261. "\"sinr\":\"0\",\"soc\":\"XXXXXXX\",\"j\":\"0\",\"g\":\"898604asdf0210\",\"h\":\"866968798839\",\"d\":\"1.3.5."
  262. "00.20991231\",\"f\":\"0\",\"k\":\"1\",\"l\":\"20000\",\"m\":\"20000\",\"u\":\"0\",\"v\":\"0\",\"e\":\"1\",\"w\":\"0."
  263. "00\",\"n\":\"0\",\"2h\":\"0\",\"o\":\"30\",\"1v\":\"12000\",\"2c\":\"0\",\"p\":\"1\",\"q\":\"1\",\"x\":\"0\",\"y\":"
  264. "\"167\",\"r\":\"0\",\"1x\":\"0\",\"1w\":\"0\",\"1y\":\"100.00\",\"1u\":\"0\"}";
  265. printfJsonCompare("compressed_business", "压缩业务对象", jsonstr);
  266. }
  267. void testMemoryRunner(void)
  268. {
  269. UnitySetTestFile(__FILE__);
  270. unityTestSetAllocSimulation(1U);
  271. RUN_TEST(testMixedJsonMemory);
  272. RUN_TEST(testObjectJsonMemory);
  273. RUN_TEST(testArrayJsonMemory);
  274. RUN_TEST(testSmallMixedJsonMemory);
  275. RUN_TEST(testSmallStringJsonMemory);
  276. RUN_TEST(testCompressedBusinessJsonMemory);
  277. unityTestSetAllocSimulation(0U);
  278. }