Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use on_drop::OnDrop;
use std::sync::Arc;
use std::mem::ManuallyDrop;
use std::sync::atomic::{AtomicBool, Ordering::Relaxed};

#[test]
#[should_panic(expected = "drop 2 times")]
fn test(){
    let droped = Arc::new(AtomicBool::new(false));
    let droped_tmp = droped.clone();
    let drop_item =OnDrop::new(1, move|| droped_tmp.store(true, Relaxed));
    let mut drop_item=ManuallyDrop::new(drop_item);
    unsafe{ ManuallyDrop::drop(&mut drop_item) };
    assert_eq!(droped.load(Relaxed), true);
    unsafe{ ManuallyDrop::drop(&mut drop_item) };
}