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.
|
//! A crate for stuffing things into a pointer.
|
||||||
|
|
||||||
mod strategies;
|
pub mod strategies;
|
||||||
|
|
||||||
use std::fmt::{Debug, Formatter};
|
use std::fmt::{Debug, Formatter};
|
||||||
use std::marker::PhantomData;
|
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>
|
impl<T, S> Eq for StuffedPtr<T, S>
|
||||||
where
|
where
|
||||||
S: StuffingStrategy,
|
S: StuffingStrategy,
|
||||||
|
|
@ -283,6 +279,9 @@ mod tests {
|
||||||
use crate::StuffedPtr;
|
use crate::StuffedPtr;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
|
|
||||||
|
// note: the tests mostly use the `PanicsInDrop` type and strategy, to make sure that no
|
||||||
|
// extra is ever dropped accidentally.
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn set_get_ptr_no_extra() {
|
fn set_get_ptr_no_extra() {
|
||||||
unsafe {
|
unsafe {
|
||||||
|
|
@ -325,6 +324,34 @@ mod tests {
|
||||||
drop(stuffed_ptr);
|
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]
|
#[test]
|
||||||
fn dont_drop_extra_when_pointer() {
|
fn dont_drop_extra_when_pointer() {
|
||||||
let mut unit = ();
|
let mut unit = ();
|
||||||
|
|
@ -345,7 +372,6 @@ mod tests {
|
||||||
// Debug
|
// Debug
|
||||||
let _ = format!("{stuffed_ptr1:?}");
|
let _ = format!("{stuffed_ptr1:?}");
|
||||||
|
|
||||||
mem::forget(stuffed_ptr1);
|
mem::forget((stuffed_ptr1, stuffed_ptr2));
|
||||||
mem::forget(stuffed_ptr2);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,7 @@
|
||||||
|
//! Several pre-defined strategies to use with `StuffedPtr`.
|
||||||
|
//!
|
||||||
|
//! * `()`: An empty strategy, is always the pointer
|
||||||
|
|
||||||
use crate::StuffingStrategy;
|
use crate::StuffingStrategy;
|
||||||
|
|
||||||
unsafe impl StuffingStrategy for () {
|
unsafe impl StuffingStrategy for () {
|
||||||
|
|
@ -17,7 +21,7 @@ unsafe impl StuffingStrategy for () {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub mod test_strategies {
|
pub(crate) mod test_strategies {
|
||||||
use crate::StuffingStrategy;
|
use crate::StuffingStrategy;
|
||||||
use std::fmt::{Debug, Formatter};
|
use std::fmt::{Debug, Formatter};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue