1 个不稳定版本
0.1.0 | 2021年10月24日 |
---|
#1416 在 数学
11KB
235 行
Rust 的单调检查算术
此库提供了包装原始数值类型的类型,并跟踪溢出的可能性,强制执行正确处理,避免恐慌或不正确的值(当在发布构建中禁用溢出检查时)。
Checked
是此库提供的主要类型。
use overflow_proof::Checked;
let a = Checked::new(2u8);
let b = Checked::new(100u8);
// Aritmetic operations can be chained like with normal types
assert!({ ((a + 2) / 3 + 5) * b + 1}.check().is_none());
assert_eq!(*{ a + 2 + b }.check().expect("overflow"), 104);
use overflow_proof::{Checked, WithDeref};
struct OverflowError;
struct BankAccount {
balance: Checked<u64, >,
}
impl BankAccount {
fn debit(&mut self, amount: u64) -> Result<(), OverflowError> {
// Will not compile:
// Ok(self.balance -= amount)
// Overflow must be checked:
Ok(self.balance = {self.balance - amount}.check().ok_or(OverflowError)?)
}
}