#单元测试 #浮点数

无std assert_float_eq

浮点数相等断言

8个稳定版本

使用旧的Rust 2015

1.1.3 2018年11月1日
1.0.4 2018年10月31日

调试 中排名 234

Download history 2556/week @ 2024-03-14 2420/week @ 2024-03-21 2576/week @ 2024-03-28 2580/week @ 2024-04-04 2980/week @ 2024-04-11 3168/week @ 2024-04-18 3369/week @ 2024-04-25 3063/week @ 2024-05-02 2995/week @ 2024-05-09 2938/week @ 2024-05-16 2996/week @ 2024-05-23 3262/week @ 2024-05-30 3679/week @ 2024-06-06 2933/week @ 2024-06-13 3194/week @ 2024-06-20 2297/week @ 2024-06-27

每月下载量12,651次
35 个crate(24个直接)中使用

MIT/Apache

27KB
391

assert_float_eq

Build Status Latest Version

用于检查用户定义容差内的浮点数相等的断言。在 stdno_std 环境中均有效。

目录

入门

首先,将 assert_float_eq 添加到你的 Cargo.toml

[dependencies]
assert_float_eq = "1"

然后,在 lib.rs 中导入宏

#[macro_use]
extern crate assert_float_eq;

最后,像使用其他Rust断言一样使用断言

assert_float_absolute_eq!(3.0, 4.0, 1.0);   // 4.0-3.0 <= 1.0
assert_float_relative_eq!(4.0, 3.9, 0.03);  // (4.0-3.0) / 4.0 <= 0.3
assert_f32_near!(1.0e-45, 7.0e-45, 4);      // exactly 4 steps away
assert_f64_near!(5.0e-324, 2.5e-323, 4);    // exactly 4 steps away

当需要更柔软的错误处理时,assert_float_eq 还包括 "期望",它返回一个 Result<(), T: Display>,表示比较是否成功

expect_float_absolute_eq!(3.0, 4.0, 1.0);   // Ok(_)
expect_float_absolute_eq!(3.0, 4.0, 0.9);   // Err(_)

expect_float_relative_eq!(4.0, 3.9, 0.03);   // Ok(_)
expect_float_relative_eq!(4.0, 3.9, 0.02);   // Err(_)

expect_f32_near!(1.0e-45, 7.0e-45, 4);       // Ok(_)
expect_f32_near!(1.0e-45, 7.0e-45, 3);       // Err(_)

expect_f64_near!(5.0e-324, 2.5e-323, 4);     // Ok(_)
expect_f64_near!(5.0e-324, 2.5e-323, 3);     // Err(_)

描述

assert_float_eq 导出4个宏,每个宏都提供了比较浮点数的不同启发式方法。

assert_float_absolute_eq 比较的是,两个浮点数之间的差的绝对值小于epsilon(默认为1e-6),即 | a - b | < epsilon。这是一个最容易理解的宏,因为它确保两个浮点数之间的差异低于某个固定的阈值。然而,对于非常小或非常大的浮点数,绝对比较可能会导致错误的比较,因为误差容忍度不会随着浮点精度而缩放。

assert_float_relative_eq 比较浮点数之间的值,使得浮点数之间差异的相对值小于 epsilon(默认 1e-6),或者 (| a - b | / max(|a|, |b|) < epsilon`。这是一个易于理解的宏,并且适用于大浮点数,然而,它对于小(非正常)浮点数,尤其是 0 来说会失败。例如,1e-45 和 3e-45 之间的相对误差约为 67%,尽管它们之间没有 32 位表示。

assert_f32_nearassert_f64_near 通过默认的步数确保两个浮点数彼此之间相差几个步骤,默认为 4。步骤比较适用于所有浮点数值,尽管最初看起来有些反直觉。一步相当于浮点数底层数字的直接增加/减少,就像它们是有符号整数一样。例如,对于 32 位浮点数,从 0.0 到 1e-6 需要 ~1e9 步,然而,对于值为 3e37 的浮点数,每一步都会使浮点数增加 ~3e30。

每个 assert_* 宏也有一个 expect_* 变体,它返回一个 Result,表示比较是否成功。

文档

assert_float_eq 的文档可以在 docs.rs 上找到。

许可证

assert_float_eq 同时受 Apache 2.0 许可证和 MIT 许可证的约束。请参阅 LICENCE-MIT 和 LICENCE-APACHE 文件了解许可证。

贡献

除非您明确说明,否则您根据 Apache-2.0 许可证定义的任何有意提交以包含在 assert_float_eq 中的贡献,将如上所述双许可,没有任何额外条款或条件。

无运行时依赖

功能