Skip to content

Rust wrapper function which checks that the given closure does not modify input data.

License

Notifications You must be signed in to change notification settings

paulMConstant/rust-assert-not-modified

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

assert-not-modified

Rust macro which, given a variable and a block of code, executes the block of code and checks that the variable has not changed.

For instance, this can check that a function does not have side effects.

The given variable must implement Clone and Debug.

Panics

Panics if data is modified with the message "Data was modified where it should not have been".

Example

#[macro_use] extern crate assert_not_modified;

// This function returns Err but modifies x anyway. This is misleading.
fn modify_x_or_err(x: &mut i32) -> Result<(), String> {
    *x = *x + 1;
    Err("Something wrong happened !".to_owned())
}

// This test will expose the lying function :
assert!(std::panic::catch_unwind(|| {
    let mut x = 3;
    assert_not_modified!(x, modify_x_or_err(&mut x)); // Panics
})
.is_err());

About

Rust wrapper function which checks that the given closure does not modify input data.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages