2 个版本
0.1.1 | 2024 年 5 月 11 日 |
---|---|
0.1.0 | 2024 年 5 月 2 日 |
#570 in Rust 模式
71 每月下载量
47KB
1K SLoC
isclose — — —
此 crate 提供了一组用于比较任意类型的 trait 和宏。
默认情况下,trait IsClose
为 f32
和 f64
实现。
以下特性还隐藏了额外的实现
用法
use isclose::{IsClose, assert_is_close};
// This will fail!
// assert_eq!(0.1 + 0.2, 0.3)
// This will pass
assert!((0.1 + 0.2).is_close(0.3));
// Equivalent, but gives better error messages
assert_is_close!(0.1 + 0.2, 0.3);
您还可以为自定义类型实现 IsClose
use isclose::{IsClose, assert_is_close};
use std::borrow::Borrow;
#[derive(Debug)]
struct Vector { x: f32, y: f32 }
impl IsClose<f32> for Vector {
// Use the same default tolerances as f32
// You can override the defaults here if necessary
const ABS_TOL: f32 = <f32 as IsClose>::ABS_TOL;
const REL_TOL: f32 = <f32 as IsClose>::REL_TOL;
fn is_close_tol(
&self,
other: impl Borrow<Self>,
rel_tol: impl Borrow<f32>,
abs_tol: impl Borrow<f32>,
) -> bool {
let (other, rel_tol, abs_tol) = (other.borrow(), rel_tol.borrow(), abs_tol.borrow());
self.x.is_close_tol(other.x, rel_tol, abs_tol) &&
self.y.is_close_tol(other.y, rel_tol, abs_tol)
}
}
assert_is_close!(
Vector {
x: 0.1 + 0.2,
y: 0.2 + 0.4,
},
Vector {
x: 0.3,
y: 0.6,
}
)
许可协议
根据您的选择,许可协议为以下之一
- Apache 许可协议第 2 版 (LICENCE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENCE-MIT 或 http://opensource.org/licenses/MIT)
。
除非您明确声明,否则任何您有意提交以包含在此 crate 中的贡献,根据 Apache-2.0 许可协议定义,均应按上述方式双重许可,不附加任何额外条款或条件。
依赖项
~0–310KB