armc 1.3.2

Armc is a rust implementation that facilitates Mutex access to variables.
Documentation
#[cfg(test)]

#[test]
fn it_works() {
    use crate::Armc;
    let result = Armc::new(5);
    *result.lock() -= 1;
    assert_eq!(*result.as_ref(), 4);
}

#[test]
fn it_works_async() {
    use std::thread;
    use crate::Armc;
    let numbers : Vec<usize> = (0..10).collect();
    let numbers = Armc::new(numbers);
    let numbers_clone = numbers.clone(); 

    let handle = thread::spawn(move ||{
        for (i,n) in numbers_clone.iter().enumerate() {
            numbers_clone.clone().lock()[i] += n * 2;
        }
    });
    for (i,n) in numbers.iter().enumerate() {
        numbers.clone().lock()[i] += n * 2;
    }
    handle.join().unwrap();
    println!("{:?}",numbers.as_ref());
}

#[test]
fn test_cast_to_arc() {
    use std::sync::{Arc, Mutex};
    use crate::Armc;
    let result = Armc::new(5);
    *result.lock() -= 1;
    let arc_r : Arc<i32>  = result.clone().into();
    assert_eq!(*result.as_ref(), 4);
    assert_eq!(*arc_r.as_ref(), 4);
    let arc_mut_r : Arc<Mutex<i32>> = result.into();
    assert_eq!(*arc_mut_r.lock().unwrap(), 4);
}

#[test]
fn test_cast_pointer_address_in_usize() {
    use std::ptr;
    let n = -50;
    let pointer = &n as *const i32;
    let addr = pointer as usize;
    let readed_n = unsafe {
        let p = addr as *const i32;
         ptr::read(p) as i32   
    };
    println!("oringinal number {} address:{:x?} and readed_n:{}",n,addr,readed_n);
}

#[test]
fn test_unwrap() {
    use crate::Armc;
    let result = Armc::new(5);
    *result.lock() -= 1;
    println!("{:?}",result);
    match Armc::try_unwrap(result) {
        Ok(_) => assert!(true),
        Err(_) => assert!(false),
    }
}