pub struct Machine {
pub memory_used: usize,
/* private fields */
}
Expand description
Fake machine implementation to validate an allocation history.
Fields§
§memory_used: usize
Current memory used according to allocations.
Implementations§
Source§impl Machine
impl Machine
Sourcepub fn push(&mut self, event: &Event) -> Result<(), Violation>
pub fn push(&mut self, event: &Event) -> Result<(), Violation>
Push an event into the machine.
§Examples
Checks for a double-free:
use checkers::{Event::*, Request, Region, Machine};
let mut machine = Machine::default();
let request = Request::without_backtrace(Region::new(0.into(), 2, 1));
assert!(machine.push(&Alloc(request)).is_ok());
let request = Request::without_backtrace(Region::new(0.into(), 2, 1));
assert!(machine.push(&Free(request)).is_ok());
let request = Request::without_backtrace(Region::new(0.into(), 2, 1));
assert!(machine.push(&Free(request)).is_err());
Check for a misaligned allocation:
use checkers::{Event::*, Request, Region, Machine, Violation};
let mut machine = Machine::default();
let region = Region::new(5.into(), 2, 4);
let request = Request::without_backtrace(region);
assert!(matches!(
machine.push(&Alloc(request)).unwrap_err(),
Violation::MisalignedAlloc { .. }
));
Tries to deallocate part of other region:
use checkers::{Event::*, Request, Region, Machine, Violation};
let mut machine = Machine::default();
let existing = Region::new(100.into(), 100, 1);
let request = Request::without_backtrace(existing);
assert!(machine.push(&Alloc(request)).is_ok());
let request = Request::without_backtrace(Region::new(150.into(), 50, 1));
assert!(matches!(
machine.push(&Free(request)).unwrap_err(),
Violation::MissingFree { .. }
));
let request = Request::without_backtrace(Region::new(100.into(), 50, 1));
assert!(matches!(
machine.push(&Free(request)).unwrap_err(),
Violation::IncompleteFree { .. }
));
Sourcepub fn trailing_regions(&self) -> Vec<Request>
pub fn trailing_regions(&self) -> Vec<Request>
Access all trailing regions (ones which have not been deallocated).
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Machine
impl RefUnwindSafe for Machine
impl Send for Machine
impl Sync for Machine
impl Unpin for Machine
impl UnwindSafe for Machine
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more