id/TEST.md

1.9 KiB

Test Report: @go/id

📋 测试概览

  • 测试时间: 2026-06-22
  • 测试环境: darwin/amd64 (Intel i9-9980HK)
  • Go 版本: 1.26.1

功能测试 (Functional Tests)

场景 状态 描述
TestMakeID PASS 生成长度符合预期的通用 ID。
TestGetForMysql PASS 生成 MySQL 友好主键,支持并验证右旋首位分片散列逻辑。
TestGetForPostgreSQL PASS 生成 PostgreSQL 友好主键,无右旋散列。
TestPrintIDs PASS 打印 6-12 位在正常/MySQL 模式下连续 10 个生成 ID 的效果,肉眼观测扩散度。
TestReversibility PASS 双射可逆验证:测试 100k+ ID 经过 Exchange+Hash 后无损逆还原,证明算法在数学上的完备无损性。
TestCollisionRate PASS 高并发碰撞测试:验证 710 位 ID 在 100k500k 并发生成时的 0 碰撞率。
TestCheckHashDiff PASS 差分诊断测试:检查相邻生成的 ID 在各个阶段的字符差分扩散情况。

性能基准 (Benchmarks)

函数 平均耗时 性能分析
MakeID-10 754.8 ns/op 栈分配与双径哈希重构后,性能极其优秀。
GetForMysql-10 576.9 ns/op 极速无阻碍,完全满足超高并发微服务场景。
  • 集成 @go/randFastInt 优化,在高并发下彻底规避了锁竞争。
  • ID 生成性能稳定,满足高性能主键生成场景。

🛡️ 鲁棒性防御 (Robustness)

  • 并发安全:核心计数器使用 sync.Mutex 保护。
  • 碰撞漏洞根治:通过引入 FoldInt 模加折叠机制,彻底消除高位在 ExchangeInt 重排与哈希截断时带来的信息丢失问题,高并发下 7~10 位碰撞率完全降为 0%
  • 扩展性:支持自定义钩子,轻松对接 Redis 等分布式协调服务。