ソースを参照

test: 优化部分测试代码

RyanCW 6 時間 前
コミット
cbda13f753

+ 0 - 1
.gitignore

@@ -19,6 +19,5 @@ build
 default.profdata
 default.profraw
 test/fuzzer/corpus
-docs
 
 fuzz-*

+ 8 - 2
.vscode/settings.json

@@ -9,7 +9,11 @@
     "Lua.addonManager.enable": false,
     "Lua.signatureHelp.enable": false,
     "clangd.enable": true,
-    "clangd.arguments": [
+    "clangd.arguments": [],
+    "liveServer.settings.file": "${workspaceFolder}/coverage/**",
+    "liveServer.settings.ignoreFiles": [
+        "**", // 第一步:先忽略所有文件(简单粗暴)
+        "!coverage/**" // 第二步:用感叹号 ! 把 coverage 目录“救”回来
     ],
     "C_Cpp.intelliSenseEngine": "disabled",
     "C_Cpp.errorSquiggles": "disabled", // 关闭微软的波浪线
@@ -39,5 +43,7 @@
         "--suppress=constVariablePointer",
         "--suppress=constParameter",
         "--suppress=unusedStructMember",
-    ]
+    ],
+    "makefile.configureOnOpen": false,
+    "liveServer.settings.port": 5501
 }

+ 1 - 1
example/RyanJsonExample.c

@@ -159,7 +159,7 @@ static RyanJsonBool_e loadJsonExample(void)
 	str = RyanJsonPrint(jsonRoot, 250, RyanJsonFalse, NULL);
 	if (strcmp(str, jsonstr) != 0)
 	{
-		printf("%s:%d 序列化与反序列化后的数据不对应\r\n", __FILE__, __LINE__);
+		printf("%s:%d 序列化与反序列化后的数据不对应  %s\r\n", __FILE__, __LINE__, str);
 		RyanJsonFree(str);
 		RyanJsonDelete(jsonRoot);
 		return RyanJsonFalse;

+ 0 - 2
run_base_coverage.sh

@@ -19,8 +19,6 @@ llvm-profdata merge -sparse default.profraw -o default.profdata
 # 3. 生成覆盖率报告(文本汇总)
 # ================================
 # 注意:llvm-cov report 只支持汇总统计,不支持行级参数
-# --show-functions       显示函数级覆盖率
-# --show-region-summary  显示区域覆盖率
 llvm-cov report ./build/linux/x86/release/RyanJson \
   -instr-profile=default.profdata \
   -show-mcdc-summary \

+ 6 - 1
run_coverage.sh

@@ -1,6 +1,10 @@
 #!/bin/bash
 set -e  # 遇到错误立即退出
 
+xmake
+echo "xmake build success"
+
+# git clone -b coverage git@github.com:Ryan-CW-Code/RyanJson.git coverage
 # ================================
 # 1. 运行 fuzzer
 # ================================
@@ -11,7 +15,7 @@ set -e  # 遇到错误立即退出
   -runs=99999999 \
   -verbosity=0 \
   -max_len=8192 \
-  -workers=5 \
+  -workers=10 \
   -jobs=10
 
 
@@ -41,6 +45,7 @@ llvm-cov show ./build/linux/x86/release/RyanJson \
   -format=html \
   -output-dir=coverage/docs \
   -show-mcdc-summary \
+  -show-branches=count \
   -show-expansions \
   -show-regions \
   -show-line-counts-or-regions \

+ 1 - 1
test/RFC8259Test/RyanJsonRFC8259JsonTest.c

@@ -280,8 +280,8 @@ RyanJsonBool_e RFC8259JsonTest(void)
 	(void)cJSON_InitHooks(&hooks);
 
 	runTestWithLogAndTimer(testRFC8259RyanJson);
-	runTestWithLogAndTimer(testRFC8259cJSON);
 	runTestWithLogAndTimer(testRFC8259yyjson);
+	runTestWithLogAndTimer(testRFC8259cJSON);
 
 	return RyanJsonTrue;
 }

+ 2 - 1
test/RyanJsonTest.c

@@ -92,7 +92,7 @@ RyanJsonBool_e RyanJsonTestFun(void)
 		RyanJson_t jsonRoot, item;
 
 		// const char *jsonstr = "{\"emoji\":\"\\uD83D\\uDE00\"} ";
-		const char *jsonstr = "{\"name\":\"Mash\",\"star\":4,\"hits\":[2,2,1,3]}";
+		const char *jsonstr = "{\"name\":\"Mash\",\"star\":0.2,\"hits\":[2,2,1,3]}";
 		// const char *jsonstr = "{\"star\":4}";
 		// const char *jsonstr = "\"name\"";
 		// const char *jsonstr =
@@ -121,6 +121,7 @@ RyanJsonBool_e RyanJsonTestFun(void)
 	// example内部会替换hooks,所以需要重新设置
 	result = RyanJsonExample();
 	RyanJsonInitHooks(v_malloc_tlsf, v_free_tlsf, v_realloc_tlsf);
+	// RyanJsonInitHooks(v_malloc, v_free, v_realloc);
 	if (RyanJsonTrue != result)
 	{
 		printf("%s:%d RyanJsonExample fail\r\n", __FILE__, __LINE__);

+ 11 - 5
test/RyanJsonTest.h

@@ -28,11 +28,11 @@ extern "C" {
 		v_mcheck(&area, &use);                                                                                                     \
 		if (area != 0 || use != 0)                                                                                                 \
 		{                                                                                                                          \
-			RyanMqttLog_e("内存泄漏");                                                                                         \
+			printf("内存泄漏\r\n");                                                                                            \
 			while (1)                                                                                                          \
 			{                                                                                                                  \
 				v_mcheck(&area, &use);                                                                                     \
-				RyanMqttLog_e("|||----------->>> area = %d, size = %d", area, use);                                        \
+				printf("|||----------->>> area = %d, size = %d\r\n", area, use);                                           \
 				delay(3000);                                                                                               \
 			}                                                                                                                  \
 		}                                                                                                                          \
@@ -51,11 +51,17 @@ uint64_t platformUptimeMs(void);
 	do                                                                                                                                 \
 	{                                                                                                                                  \
 		testRunCount++;                                                                                                            \
-		printf("┌── [TEST %d] 开始执行: " #fun "()\r\n", testRunCount);                                                            \
+		/* 开始执行:绿色高亮,文件名放在 [TEST n] 后面 */                                                                         \
+		printf("\x1b[32m┌── [TEST %d | %s:%d] 开始执行: %s()\x1b[0m\r\n", testRunCount, __FILE__, __LINE__, #fun);                 \
+                                                                                                                                           \
 		funcStartMs = platformUptimeMs();                                                                                          \
 		result = fun();                                                                                                            \
-		printf("└── [TEST %" PRIu32 "] 结束执行: 返回值 = %" PRId32 " %s | 耗时: %" PRIu64 " ms\x1b[0m\r\n\r\n", testRunCount,     \
-		       result, (result == RyanJsonTrue) ? "✅" : "❌", (platformUptimeMs() - funcStartMs));                                \
+                                                                                                                                           \
+		/* 结束执行:根据结果显示绿色或红色,文件名放在 [TEST n] 后面 */                                                           \
+		printf("%s└── [TEST %" PRIu32 " | %s:%d] 结束执行: 结果 %s | 耗时: %" PRIu64 " ms\x1b[0m\r\n\r\n",                         \
+		       (result == RyanJsonTrue) ? "\x1b[32m" : "\x1b[31m", testRunCount, __FILE__, __LINE__,                               \
+		       (result == RyanJsonTrue) ? "✅" : "❌", (platformUptimeMs() - funcStartMs));                                        \
+                                                                                                                                           \
 		RyanJsonCheckCodeNoReturn(RyanJsonTrue == result, { return RyanJsonFalse; });                                              \
 	} while (0)
 

+ 4 - 0
test/baseTest/equality/RyanJsonBaseTestEqualityDouble.c

@@ -154,6 +154,10 @@ RyanJsonBool_e RyanJsonBaseTestEqualityDouble(void)
 
 		// 验证序列化后再解析,然后判断double是否一致(往返测试)
 		char *serializedStr = RyanJsonPrint(jsonRoot, 128, RyanJsonFalse, NULL);
+		RyanJsonCheckCode(NULL != serializedStr, {
+			printf("serializedStr: %s, doubleString: %s, doubleValue: %g\r\n", serializedStr, jsondoubleStr, doubleValue);
+			goto err;
+		});
 		RyanJsonDelete(jsonRoot);
 
 		RyanJson_t roundtripJson = RyanJsonParse(serializedStr);

+ 14 - 9
xmake.lua

@@ -12,6 +12,16 @@ target("RyanJson", function()
     set_arch("x86")           -- 架构:x86(32位)
     set_languages("gnu99")    -- 使用 GNU C99 标准,启用 GNU 扩展
 
+    -- 编译优化策略
+    set_policy("build.ccache", false) -- 禁用 ccache 缓存
+    set_optimize("fastest")           -- 使用 -O3,最高级别优化
+
+    -- 警告设置:启用所有警告(Clang 下相当于 -Weverything)
+    set_warnings("everything")
+
+    add_defines("RyanJsonSnprintfSupportScientific=true")
+    add_defines("RyanJsonLinuxTestEnv")
+
     -- 定义宏:启用 Fuzzer 功能
     -- Fuzzer 与覆盖率相关编译/链接选项
     add_defines("isEnableFuzzer")
@@ -20,13 +30,6 @@ target("RyanJson", function()
     add_cxflags("-fprofile-instr-generate", "-fcoverage-mapping", {force = true})
     add_ldflags("-fprofile-instr-generate", "-fcoverage-mapping", {force = true})
 
-    -- 编译优化策略
-    set_policy("build.ccache", false) -- 禁用 ccache 缓存
-    set_optimize("fastest")           -- 使用 -O3,最高级别优化
-
-    -- 警告设置:启用所有警告(Clang 下相当于 -Weverything)
-    set_warnings("everything")
-
     -- 链接器安全硬化与优化选项
     add_ldflags(
         "-flto",                    -- 启用 LTO(链接时优化)
@@ -120,25 +123,27 @@ target("RyanJson", function()
         {force = true}
     )
 
-    -- 公共头文件目录
+    -- 头文件
     add_includedirs('./RyanJson', {public = true})
     add_includedirs('./example', {public = true})
     add_includedirs('./test/fuzzer', {public = true})
     add_includedirs('./test', {public = true})
     add_includedirs('./test/baseTest', {public = true})
     add_includedirs('./test/baseTest/equality', {public = true})
+    add_includedirs('./test/RFC8259Test', {public = true})
     add_includedirs('./test/externalModule/valloc', {public = true})
     add_includedirs('./test/externalModule/tlsf', {public = true})
     add_includedirs('./test/externalModule/cJSON', {public = true})
     add_includedirs('./test/externalModule/yyjson', {public = true})
 
-    -- 源文件分开列出,保持清晰结构
+    -- 源文件
     add_files('./RyanJson/*.c', {public = true})
     add_files('./example/*.c', {public = true})
     add_files('./test/fuzzer/*.c', {public = true})
     add_files('./test/*.c', {public = true}, {cxflags = "-w"})          -- 测试代码,关闭警告
     add_files('./test/baseTest/*.c', {public = true}, {cxflags = "-w"}) -- 基础测试,关闭警告
     add_files('./test/baseTest/equality/*.c', {public = true}, {cxflags = "-w"}) -- 一致性测试
+    add_files('./test/RFC8259Test/*.c', {public = true}, {cxflags = "-w"})      -- 
     add_files('./test/externalModule/valloc/*.c', {public = true}, {cxflags = "-w"})   -- valloc,关闭警告
     add_files('./test/externalModule/tlsf/*.c', {public = true}, {cxflags = "-w"})     -- tlsf,关闭警告
     add_files('./test/externalModule/cJSON/*.c', {public = true}, {cxflags = "-w"}) -- 第三方库 cJSON,关闭警告