cast/TEST.md

42 lines
2.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 测试报告 (Test Report)
## 覆盖场景 (Coverage Scenarios)
- **语义化转换**: `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 的智能初始化。
- **指针与接口**: `RealValue` 处理多级指针与接口解包。
- **实用工具**: `UniqueAppend` ($O(n)$ 去重)`If` (泛型三元)`SplitArgs` (支持引用格式)。
## 性能基准 (Benchmark Results - Intel(R) Core(TM) i9)
- `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) - 批量转义优化成果
- `ToJSON (Time Support)`: **~524 ns/op** (232 B/op) - 原生 time.Time 处理
- `ParseTime (RFC3339)`: **~238 ns/op** (144 B/op) - 高性能解析
- `ParseTime (Numeric)`: **~161 ns/op** (0 B/op) - 紧凑格式零分配
- `UnmarshalJSON (Frictionless)`: **~421 ns/op** (72 B/op) - 0 分配 Key 匹配
- `ToMap`: ~816 ns/op (含 Struct 拍平与类型转换)
- `ToSlice`: ~1819 ns/op
- `UniqueAppend`: 大数据量下的 $O(n)$ 时间复杂度。
### 性能概览
| 场景 | 耗时 | 内存分配 | 说明 |
| :--- | :--- | :--- | :--- |
| **对象深度映射** | ~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 | 批量处理,长文本优势明显 |