这个项目能做什么

MathAssertions.TUnit 是一个面向 TUnit 框架的 .NET 仅测试用断言库,属于 DotNetAssertions 家族。它不用于生产代码。该仓库发布两个 NuGet 包:MathAssertions,即框架无关的核心,包含静态辅助类和几何基元;以及 MathAssertions.TUnit,即 TUnit 适配器,在十二个适配器类中暴露约 85 个流畅入口点。流畅入口点由 TUnit 的 [GenerateAssertion] 源生成器生成,并集成到 Assert.That(value).Method(...) 中。要求为 TUnit 1.66.27 或更高版本以及 .NET 10;断言路径不使用运行时反射,并且兼容 AOT 且可裁剪。 覆盖范围包括标量、System.Numerics 复合类型(Vector2/3/4、Quaternion、Matrix4x4、Plane、Complex)、span 以及泛型 ReadOnlyTensorSpan 的容差比较;处理 SO(3) 双覆盖的四元数旋转等价性;轴角形式断言;具有独立位置和旋转容差的组合位姿与刚体变换近似相等;用于单调性、有序性、有界性、数列和 Cauchy 收敛的序列谓词;通过 Welford 均值和方差、中位数、百分位数、标准差进行的统计;Matrix4x4 和 Vector3 对的线性代数不变量;长整数数论谓词,例如整除性、防溢出的素性、互质性、GCD/LCM、完全平方和模同余;以及具有八种基元 record struct 类型、包含、最近点、相交和点云聚合检查的 3D 几何表面。复合类型的失败消息包括逐分量或逐单元的 delta 以及超出轴诊断。MathAssertions.Render 命名空间提供 PoseRenderer,用于对位置和方向位姿进行确定性、便于快照的文本渲染,以便与 SnapshotAssertions.TUnit 一起使用。 设计细节:近似相等是逐分量的,而不是欧几里得距离;值在比较前会拓宽为 double,因此 double 容差会以完整精度得到遵守;NaN 和无穷语义已记录为与 TUnit 的 IsCloseTo 基元匹配。配套的 MathAssertions 包可被其他测试框架复用,但目前尚未发布适用于 NUnit、xUnit 或 MSTest 的适配器。ReadOnlyTensorSpan 仅在静态 MathTolerance 层级暴露,因为 TUnit 的 [GenerateAssertion] 构建器无法在 await 之间捕获 ref-struct 值。README 还展示了如何通过一行 [GenerateAssertion] 扩展将 DSL 扩展到消费者定义的领域类型、如何将 protobuf 位姿消息投影到 System.Numerics 类型,以及如何将断言与 Assert.Multiple 结合使用。许可证:MIT。