2026-04-30 22:16:01 +08:00
# 测试报告 (Test Report)
2026-07-04 21:48:26 +08:00
## [v1.5.4] - 2026-07-04
- **连续大写驼峰边界转换校验**: Verified `GetLowerName` correctly lowercases acronyms like `ID` to `id` , `IDTime` to `idTime` , `SHAURLName` to `shaurlName` , and `API` to `api` .
- **单测覆盖率**: All unit tests (including `TestNameConversions` and `TestToMap` regression tests) passed without issues.
2026-04-30 22:16:01 +08:00
## 覆盖场景 (Coverage Scenarios)
2026-05-04 12:15:34 +08:00
- **语义化转换**: `To[T]` 和 `As` 覆盖基础类型、Slice、Map 及智能 JSON 自动穿透转换。
- **核心类型转换**: `Int64` , `Uint64` , `Float64` , `Bool` , `String` , `time.Time` ,包括边界值、零值及非法字符串输入。
- **时间类型原生支持**: 支持 `time.Time` 类型及自定义格式(通过 Struct Tag `format=` 指定)。
- **容器处理**: `ToMap` , `ToSlice` , `FillMap` , `FillSlice` 等泛型工具,支持 Struct 拍平与 KV 序列化。
- **高性能 JSON 引擎**:
- **元数据缓存**: 引入 `encoderStructDescriptor` 缓存,大幅减少反射开销。
- **MapRange 遍历**: 优化 Map 序列化路径。
- **批量转义**: `writeString` 优化,大幅提升长文本处理速度。
- **脱敏支持**: `ToJSONDesensitizeBytes` 原生支持字段脱敏,并优化了脱敏路径的计算性能。
- **JSON 构建与解析**:
- **零分配摩擦匹配**: `normalizeEqual` 算法实现 0 内存分配的归一化 Key 匹配,支持 UTF-8。
- **智能 Slice 扩容**: 尊重预设 Capacity, 减少反序列化时的内存重分配。
- **FastDecoder**: 实现单路径流式解析, 支持嵌套指针、Slice 和 Map 的智能初始化。
2026-05-04 23:48:00 +08:00
- **深度合并支持**: 支持在 `Convert` 过程中对 Map 和 Struct 进行深度递归合并。即使目标 Map 存储的是非指针结构体,也能通过反射寻址实现局部字段覆盖,而不丢失未提及的默认值。
2026-04-30 22:16:01 +08:00
- **指针与接口**: `RealValue` 处理多级指针与接口解包。
2026-05-04 12:15:34 +08:00
- **实用工具**: `UniqueAppend` ($O(n)$ 去重), `If` (泛型三元), `SplitArgs` (支持引用格式)。
2026-04-30 22:16:01 +08:00
## 性能基准 (Benchmark Results - Intel(R) Core(TM) i9)
2026-05-04 12:15:34 +08:00
- `If` : ~0.24 ns/op (0 allocs/op)
- `Int64` : ~20 ns/op (0 allocs/op)
- `ToJSON (SimpleStruct)` : ** ~297 ns/op** (96 B/op) - 相比 v1.2.0 提升约 50%
- `ToJSON (Map - No Sort)` : ** ~649 ns/op** (152 B/op) - 移除排序后性能大幅提升
- `ToJSON (String Escaping)` : ** ~172 ns/op** (64 B/op) - 批量转义优化成果
2026-05-04 14:51:13 +08:00
- `ToJSON (Time Support)` : ** ~522 ns/op** (232 B/op) - 原生 time.Time 处理
- `ParseTime (RFC3339)` : ** ~143 ns/op** (72 B/op) - 极致优化解析
- `ParseTime (Numeric String)` : ** ~188 ns/op** (0 B/op) - 紧凑格式零分配
- `ParseTime (Native Number)` : ** ~7 ns/op** (0 B/op) - 原生数字时间戳 0 分配 & 极致性能
- `FormatTime` : ** ~628 ns/op** (120 B/op) - 使用 Replacer 性能倍增
2026-05-04 12:15:34 +08:00
- `UnmarshalJSON (Frictionless)` : ** ~421 ns/op** (72 B/op) - 0 分配 Key 匹配
- `ToMap` : ~816 ns/op (含 Struct 拍平与类型转换)
- `ToSlice` : ~1819 ns/op
2026-05-02 23:00:44 +08:00
- `UniqueAppend` : 大数据量下的 $O(n)$ 时间复杂度。
2026-05-04 14:10:18 +08:00
### 性能概览
| 场景 | 耗时 | 内存分配 | 说明 |
| :--- | :--- | :--- | :--- |
| **对象深度映射** | ~620 ns/op | 80 B/op | 引入 `performRecursiveTo` 引擎,就地赋值,无内存逃逸 |
| **Struct 序列化** | ~290 ns/op | 96 B/op | 引入元数据缓存,反射开销极低 |
| **Map 序列化** | ~650 ns/op | 152 B/op | 采用 MapRange + 无序化,性能翻倍 |
| **Frictionless 匹配** | ~420 ns/op | 72 B/op | 零分配 Key 比对, GC 压力极小 |
| **字符串转义** | ~170 ns/op | 64 B/op | 批量处理,长文本优势明显 |