Crate assertables[−][src]
assert-assume-assure: macros for Rust runtime checking
This Rust crate provides macros for Rust runtime checking.
using assert…!, assume…!, assure…!, described below.
Crate: https://crates.io/crates/assure
Docs: https://docs.rs/assure/
Repo: https://github.com/joelparkerhenderson/assure-rust-crate/
Introduction
This Rust crate provides macros for Rust runtime checking, and each macro comes in three flavors:
-
assert…!returns()or callspanic! -
assume…!returnsResultwithOk(true)orErr(…) -
assure…!returnsResultwithOk(true)orOk(false)orErr(…)
Examples of assert_lt!:
assert_lt!(1, 2); //-> ()
// assert_lt!(2, 1); //-> panic!("assertion failed: `(left == right)`\n left: `2`,\n right: `1`")
Examples of assume_lt!:
let x = assume_lt!(1, 2); //-> Ok(true)
let x = assume_lt!(2, 1); //-> Err("assumption failed: `(left == right)`\n left: `2`,\n right: `1`")
Examples of assure_lt!:
let x = assure_lt!(1, 2); //-> Ok(true)
let x = assure_lt!(2, 1); //-> Ok(false)
Assert
The assert… macros can be useful with Rust testing,
such as with macros that Rust std does not provide.
Example:
fn sum_positive_numbers(a: i32, b: i32) -> Result<i32, String> { assert_lt!(0, a); assert_lt!(0, b); Ok(a + b) } sum_positive_numbers(1, 2); //-> 3 // sum_positive_numbers(-1, -2); //-> panic!("assertion failed: `(left == right)`\n left: `0`,\n right: `-1`")
Assume
The assume… macros can be useful with the ? operator,
such as with early exits in functions.
Example:
fn sum_positive_numbers(a: i32, b: i32) -> Result<i32, String> { assume_lt!(0, a)?; assume_lt!(0, b)?; Ok(a + b) } sum_positive_numbers(1, 2); //-> Ok(3) sum_positive_numbers(-1, -2); //-> Err("assumption failed: `assume_lt(left, right)`\n left: `0`,\n right: `-1`")
Assure
The assure… macros can be useful with chaining,
such as with gate conditions in functions.
Example:
fn sum_positive_numbers(a: i32, b: i32) -> Result<i32, String> { if assure_lt!(0, a).unwrap() && assure_lt!(0, b).unwrap() { Ok(a + b) } else { Err(format!("please use positive numbers")) } } sum_positive_numbers(1, 2); //-> Ok(3) sum_positive_numbers(-1, -2); //-> Err("must use postive numbers")
Messages
When a macro fails, it generates a failure message with the values of expressions with their debug representations, such as:
// assert_lt!(2, 1) //-> panic!("assertion failed: `(left == right)`\n left: `2`,\n right: `1`")
These macros have a second form where a custom message can be provided, such as:
// assert_lt!(2, 1, "my message here"); //-> panic!("my message here")
Macros for values
Examples:
let x = assume_lt!(1, 2); //-> Ok(true)
let x = assume_lt!(2, 1); //-> Err("assumption failed: `assert_lt(left, right)`\n left: `2`\n right: `1`")
assert… macros:
-
assert!(a): assureais true, provided by Ruststd. -
assert_eq!(a, b): assertais equal tob, provided by Ruststd. -
assert_ne!(a, b): assertais not equal tob, provided by Ruststd. -
assert_lt!(a, b): assertais less thanb. -
assert_le!(a, b): assertais less than or equal tob. -
assert_gt!(a, b): assertais greater thanb. -
assert_ge!(a, b): assertais greater than or equal tob.
assume… macros:
-
assume!(a): assumeais true. -
assume_eq!(a, b): assumeais equal tob. -
assume_ne!(a, b): assumeais not equal tob. -
assume_lt!(a, b): assumeais less thanb. -
assume_le!(a, b): assumeais less than or equal tob. -
assume_gt!(a, b): assumeais greater thanb. -
assume_ge!(a, b): assumeais greater than or equal tob.
assure… macros:
-
assure!(a): assureais true. -
assure_eq!(a, b): assureais equal tob. -
assure_ne!(a, b): assureais not equal tob. -
assure_lt!(a, b): assureais less thanb. -
assure_le!(a, b): assureais less than or equal tob. -
assure_gt!(a, b): assureais greater thanb. -
assure_ge!(a, b): assureais greater than or equal tob.
Macros for set checking
These macros help with comparison of set parameters, such as two arrays or two vectors. where the item order does not matter, and the item count does not matter.
Examples:
let x = assume_set_eq!([1, 2], [2, 1]); //-> Ok(true)
let x = assume_set_eq!([1, 2], [3, 4]); //-> Err("assertion failed: `assert_set_eq(left, right)`\n left: `[1, 2]`\n right: `[3, 4]`")
assert_set… macros:
-
assert_set_eq!(a, b): assert the setais equal to the setb. -
assert_set_ne!(a, b): assert the setais not equal to the setb.
assume_set… macros:
-
assume_set_eq!(a, b): assume the setais equal to the setb. -
assume_set_ne!(a, b): assume the setais not equal to the setb.
assure_set… macros:
-
assure_set_eq!(a, b): assure the setais equal to the setb. -
assure_set_ne!(a, b): assure the setais not equal to the setb.
Macros for bag checking
Thes macros help with comparison of bag parameters, such as comparison of two arrays or two vectors, where the item order does not matter, and the item count does matter.
Examples:
let x = assume_bag_eq!([1, 1], [1, 1]); //-> Ok(true)
let x = assume_bag_eq!([1, 1], [1, 1, 1]); //-> Err("assumption failed: `assume_bag_eq(left, right)`\n left: `[1, 1]`\n right: `[1, 1, 1]`")]
assert_bag… macros:
-
[
assert_bag_eq](a, b): assert the bagais equal to the bagb. -
[
assert_bag_ne](a, b): assert the bagais not equal to the bagb.
assume_bag… macros:
-
assume_bag_eq!(a, b): assume the bagais equal to the bagb. -
assume_bag_ne!(a, b): assume the bagais not equal to the bagb.
assure_bag… macros:
-
assure_bag_eq!(a, b): assure the bagais equal to the bagb. -
assure_bag_ne!(a, b): assure the bagais not equal to the bagb.
Macros for IO-related checking
These macros help with IO-related checking, such as comparison of files, streams, etc. These macros return a Result with Ok(true) or Err(std::io::Error::new(std::io::ErrorKind::InvalidInput, message)).
Examples:
let x = assume_io_lt!(1, 2); //-> Ok(true)
let x = assume_io_lt!(2, 1); //-> Err( // std::io::Error::new( // std::io::ErrorKind::InvalidInput, // "assumption failed: `assume_io_lt(left, right)`\n left: `2`\n right: `1`")] // ) // )
assert_io… macros:
-
[
assert_io!](a): assertais true. -
assert_io_eq!(a, b): assertais equal tob. -
assert_io_ne!(a, b): assertais not equal tob. -
assert_io_lt!(a, b): assertais less thanb. -
assert_io_le!(a, b): assertais less than or equal tob. -
assert_io_gt!(a, b): assertais greater thanb. -
assert_io_ge!(a, b): assertais greater than or equal tob.
assume_io… macros:
-
assume_io!(a): assumeais true. -
assume_io_eq!(a, b): assumeais equal tob. -
assume_io_ne!(a, b): assumeais not equal tob. -
assume_io_lt!(a, b): assumeais less thanb. -
assume_io_le!(a, b): assumeais less than or equal tob. -
assume_io_gt!(a, b): assumeais greater thanb. -
assume_io_ge!(a, b): assumeais greater than or equal tob.
assure_io… macros:
-
assure_io!(a): assureais true. -
assure_io_eq!(a, b): assureais equal tob. -
assure_io_ne!(a, b): assureais not equal tob. -
assure_io_lt!(a, b): assureais less thanb. -
assure_io_le!(a, b): assureais less than or equal tob. -
assure_io_gt!(a, b): assureais greater thanb. -
assure_io_ge!(a, b): assureais greater than or equal tob.
Modules
Macros
| assert_bag_eq | Assert two bags are equal. |
| assert_bag_ne | Assert two bags are not equal. |
| assert_ge | Assert one value is greater than or equal to another value. |
| assert_gt | Assert one value is greater than another value. |
| assert_io_eq | Assert two values are equal. |
| assert_io_ge | Assert one value is greater than or equal to another value. |
| assert_io_gt | Assert one value is greater than another value. |
| assert_io_le | Assert one value is less than or equal to another value. |
| assert_io_lt | Assert one value is less than another value. |
| assert_io_ne | Assert two values are equal. |
| assert_le | Assert one value is less than or equal to another value. |
| assert_lt | Assert one value is less than another value. |
| assert_set_eq | Assert two sets are equal. |
| assert_set_ne | Assert two sets are not equal. |
| assume | Assume a condition is true. |
| assume_bag_eq | Assume two bags are equal. |
| assume_bag_ne | Assume two bags are not equal. |
| assume_eq | Assume two values are equal. |
| assume_ge | Assume one value is greater than or equal to another value. |
| assume_gt | Assume one value is greater than another value. |
| assume_io | Assume a condition is true. |
| assume_io_eq | Assume one value is equal to another value. |
| assume_io_ge | Assume one value is greater than or equal to another value. |
| assume_io_gt | Assume one value is greater than another value. |
| assume_io_le | Assume one value is less than or equal to another value. |
| assume_io_lt | assume one value is less than another value. |
| assume_io_ne | Assume one value is not equal to another value. |
| assume_le | Assume one value is less than or equal to another value. |
| assume_lt | Assume one value is less than another value. |
| assume_ne | Assume two values are not equal. |
| assume_set_eq | Assume two sets are equal. |
| assume_set_ne | Assume two sets are not equal. |
| assure | Assure a condition is true. |
| assure_bag_eq | Assure two bags are equal. |
| assure_bag_ne | Assure two bags are not equal. |
| assure_eq | Assure two values are equal. |
| assure_ge | Assure one value is greater than or equal to another value. |
| assure_gt | Assure one value is greater than another value. |
| assure_io | Assure a condition is true. |
| assure_io_eq | Assure one value is equal to another value. |
| assure_io_ge | Assure one value is greater than or equal to another value. |
| assure_io_gt | Assure one value is greater than another value. |
| assure_io_le | Assure one value is less than or equal to another value. |
| assure_io_lt | Assure one value is less than another value. |
| assure_io_ne | Assure one value is not equal to another value. |
| assure_le | Assure one value is less than or equal to another value. |
| assure_lt | Assure one value is less than another value. |
| assure_ne | Assure two values are not equal. |
| assure_set_eq | Assure two sets are equal. |
| assure_set_ne | Assure two sets are not equal. |