Assertables: Rust crate of macros assert, assume, assure

This assertables Rust crate provides macros assert…!, assume…!, assure…!, all for runtime reliability checking, and all described below. By SixArm.com.

Crate: https://crates.io/crates/assure

Docs: https://docs.rs/assure/

Repo: https://github.com/joelparkerhenderson/assure-rust-crate/

Contents:

Introduction

This Rust crate provides macros for Rust runtime checking, and each macro comes in three flavors:

Examples of assert_lt!:

rust assert_lt!(1, 2); //-> ()

rust // assert_lt!(2, 1); //-> panic!("assertion failed: `(left == right)`\n left: `2`,\n right: `1`")

Examples of assume_lt!:

rust let x = assume_lt!(1, 2); //-> Ok(true)

rust let x = assume_lt!(2, 1); //-> Err("assumption failed: `(left == right)`\n left: `2`,\n right: `1`")

Examples of assure_lt!:

rust let x = assure_lt!(1, 2); //-> Ok(true)

rust 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:

```rust fn sumpositivenumbers(a: i32, b: i32) -> Result { assertlt!(0, a); assertlt!(0, b); Ok(a + b) }

sumpositivenumbers(1, 2); //-> 3

// sumpositivenumbers(-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:

```rust fn sumpositivenumbers(a: i32, b: i32) -> Result { assumelt!(0, a)?; assumelt!(0, b)?; Ok(a + b) }

sumpositivenumbers(1, 2); //-> Ok(3)

sumpositivenumbers(-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:

```rust fn sumpositivenumbers(a: i32, b: i32) -> Result { if assurelt!(0, a).unwrap() && assurelt!(0, b).unwrap() { Ok(a + b) } else { Err(format!("please use positive numbers")) } }

sumpositivenumbers(1, 2); //-> Ok(3)

sumpositivenumbers(-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:

rust // 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:

rust // assert_lt!(2, 1, "my message here"); //-> panic!("my message here")

Macros list

Macros for values

Examples:

rust let x = assume_lt!(1, 2); //-> Ok(true)

rust let x = assume_lt!(2, 1); //-> Err("assumption failed: `assert_lt(left, right)`\n left: `2`\n right: `1`")

assert… macros:

assume… macros:

assure… macros:

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:

rust let x = assume_set_eq!([1, 2], [2, 1]); //-> Ok(true)

rust 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:

assume_set… macros:

assure_set… macros:

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:

rust let x = assume_bag_eq!([1, 1], [1, 1]); //-> Ok(true)

rust 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:

assume_bag… macros:

assure_bag… macros:

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:

rust let x = assume_io_lt!(1, 2); //-> Ok(true)

rust 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:

assume_io… macros:

assure_io… macros: