threadcell 1.0.3

A cell whose value can only be accessed by a owning thread
Documentation
use threadcell::ThreadCell;

#[test]
fn smoke() {
    let _owned = ThreadCell::new_owned(123);
    let _disowned = ThreadCell::new_disowned(234);
}

#[test]
fn access_owned() {
    let owned = ThreadCell::new_owned(123);
    assert_eq!(*owned.get(), 123);
}

#[test]
fn is_acquired() {
    let owned = ThreadCell::new_disowned(123);
    assert!(!owned.is_acquired());
    owned.acquire();
    assert!(owned.is_acquired());
}

#[test]
fn try_acquire_once() {
    let owned = ThreadCell::new_disowned(123);
    assert!(!owned.is_acquired());
    assert!(owned.try_acquire_once());
    assert!(!owned.try_acquire_once());
}

#[test]
#[should_panic]
fn access_disowned() {
    let disowned = ThreadCell::new_disowned(234);
    let _fail = disowned.get();
}

#[test]
fn mutate_owned() {
    let mut owned = ThreadCell::new_owned(123);
    *owned.get_mut() = 234;
    assert_eq!(*owned.get(), 234);
}

#[test]
fn release() {
    let threadcell = ThreadCell::new_owned(());
    threadcell.release();
    assert!(!threadcell.is_owned());
}

#[test]
fn try_with() {
    let threadcell = ThreadCell::new_disowned(234);
    threadcell
        .try_with(|v| assert_eq!(*v, 234))
        .expect("Acquired");
}

#[test]
fn try_with_mut() {
    let mut threadcell = ThreadCell::new_disowned(234);
    threadcell.try_with_mut(|v| *v = 345).expect("Acquired");
    threadcell
        .try_with(|v| assert_eq!(*v, 345))
        .expect("Acquired");
}

#[test]
fn try_get() {
    let threadcell = ThreadCell::new_owned(234);
    assert_eq!(*threadcell.try_get().expect("Acquired"), 234);
}

#[test]
fn try_acquire_get() {
    let threadcell = ThreadCell::new_disowned(234);
    assert_eq!(*threadcell.try_acquire_get().expect("Acquired"), 234);
}

#[test]
fn try_get_mut() {
    let mut threadcell = ThreadCell::new_owned(234);
    *threadcell.try_get_mut().expect("Acquired") = 345;
    assert_eq!(*threadcell.get(), 345);
}

#[test]
fn try_acquire_get_mut() {
    let mut threadcell = ThreadCell::new_disowned(234);
    *threadcell.try_acquire_get_mut().expect("Acquired") = 345;
    assert_eq!(*threadcell.get(), 345);
}

#[test]
fn try_release() {
    let threadcell = ThreadCell::new_owned(234);
    assert!(threadcell.try_release());
    assert!(!threadcell.try_release());
}

#[test]
fn is_disowned() {
    let threadcell = ThreadCell::new_disowned(234);
    assert!(threadcell.is_disowned());
    threadcell.acquire();
    assert!(!threadcell.is_disowned());
}