more tests

This commit is contained in:
nora 2022-04-03 14:44:42 +02:00
parent b5290e0a44
commit c99eb2f84a
2 changed files with 38 additions and 8 deletions

View file

@ -4,7 +4,7 @@
//! A crate for stuffing things into a pointer.
mod strategies;
pub mod strategies;
use std::fmt::{Debug, Formatter};
use std::marker::PhantomData;
@ -203,10 +203,6 @@ where
}
}
// pointers are `Eq`
fn _assert_eq<T: Eq>() {}
const _: fn() = _assert_eq::<*mut ()>;
impl<T, S> Eq for StuffedPtr<T, S>
where
S: StuffingStrategy,
@ -283,6 +279,9 @@ mod tests {
use crate::StuffedPtr;
use std::mem;
// note: the tests mostly use the `PanicsInDrop` type and strategy, to make sure that no
// extra is ever dropped accidentally.
#[test]
fn set_get_ptr_no_extra() {
unsafe {
@ -325,6 +324,34 @@ mod tests {
drop(stuffed_ptr);
}
#[test]
fn clone() {
let mut unit = ();
let stuffed_ptr1: StuffedPtr<(), PanicsInDrop> = StuffedPtr::new_ptr(&mut unit);
let _ = stuffed_ptr1.clone();
let stuffed_ptr1: StuffedPtr<(), PanicsInDrop> = StuffedPtr::new_extra(PanicsInDrop);
let stuffed_ptr2 = stuffed_ptr1.clone();
mem::forget((stuffed_ptr1, stuffed_ptr2));
}
#[test]
fn eq() {
// two pointers
let mut unit = ();
let stuffed_ptr1: StuffedPtr<(), PanicsInDrop> = StuffedPtr::new_ptr(&mut unit);
let stuffed_ptr2: StuffedPtr<(), PanicsInDrop> = StuffedPtr::new_ptr(&mut unit);
assert_eq!(stuffed_ptr1, stuffed_ptr2);
let stuffed_ptr1: StuffedPtr<(), PanicsInDrop> = StuffedPtr::new_ptr(&mut unit);
let stuffed_ptr2: StuffedPtr<(), PanicsInDrop> = StuffedPtr::new_extra(PanicsInDrop);
assert_ne!(stuffed_ptr1, stuffed_ptr2);
mem::forget(stuffed_ptr2);
}
#[test]
fn dont_drop_extra_when_pointer() {
let mut unit = ();
@ -345,7 +372,6 @@ mod tests {
// Debug
let _ = format!("{stuffed_ptr1:?}");
mem::forget(stuffed_ptr1);
mem::forget(stuffed_ptr2);
mem::forget((stuffed_ptr1, stuffed_ptr2));
}
}

View file

@ -1,3 +1,7 @@
//! Several pre-defined strategies to use with `StuffedPtr`.
//!
//! * `()`: An empty strategy, is always the pointer
use crate::StuffingStrategy;
unsafe impl StuffingStrategy for () {
@ -17,7 +21,7 @@ unsafe impl StuffingStrategy for () {
}
#[cfg(test)]
pub mod test_strategies {
pub(crate) mod test_strategies {
use crate::StuffingStrategy;
use std::fmt::{Debug, Formatter};