mirror of
https://github.com/Noratrieb/stuff.git
synced 2026-01-14 16:35:08 +01:00
more tests
This commit is contained in:
parent
b5290e0a44
commit
c99eb2f84a
2 changed files with 38 additions and 8 deletions
40
src/lib.rs
40
src/lib.rs
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue