runtime-sized-array 0.1.0

A variable-length array, also called runtime-sized
Documentation
use runtime_sized_array::{Array, ArrayError};

#[deprecated]
#[inline]
fn testable() -> Array<i32> {
    let mut vec = vec![1,2,3];
    vec.into()
}

#[test]
fn as_mut_ptr() {
    let mut arr: Array<i32> = vec![1,2,4].into();
    let ptr = arr.as_mut_ptr();
    unsafe {
        for i in 0..arr.size() {
            *ptr.add(i) += 2;
        }
    }
}


#[test]
fn as_ptr() {
    let mut arr: Array<i32> = vec![1,2,4].into();
    let ptr = arr.as_ptr();
    unsafe {
        for i in 0..arr.size() {
            assert_eq!(arr[i], *ptr.add(i));
        }
    }
}


#[test]
fn from_pointer() {
    let mut vec = vec![1,2,3];
    let ptr = vec.as_mut_ptr();
    let size = vec.len();
    unsafe {
        let arr: Array<i32> = Array::from_pointer(ptr, size);
    }
}


#[test]
fn get() {
    let arr: Array<i32> = vec![1, 2, 4].into();
    unsafe {
        assert_eq!(arr.get(1), &2)
    }
}


#[test]
fn get_mut() {
    let mut arr: Array<i32> = vec![1,2,4].into();
    unsafe {
        *arr.get_mut(1) = 2;
    }
}


#[test]
fn get_mut_ptr() {
    let arr: Array<i32> = vec![1,2,4].into();
    unsafe {
        assert_eq!(*arr.get_ptr(1), 2)
    }
}


#[test]
fn get_ptr() {
    let arr: Array<i32> = vec![1,2,4].into();
    unsafe {
        assert_eq!(*arr.get_ptr(1), 2)
    }

}


#[test]
fn into_vec() {
    let vec = vec![1,2,4];
    let arr: Array<i32> = vec.clone().into();
    assert_eq!(arr.into_vec(), vec);
}


#[test]
fn iter() {
    let mut arr: Array<i32> = vec![1,2,4].into();
    let mut iterator = arr.iter();

    assert_eq!(iterator.next(), Some(&1));
    assert_eq!(iterator.next(), Some(&2));
    assert_eq!(iterator.next(), Some(&4));
    assert_eq!(iterator.next(), None);
}


#[test]
fn iter_mut() {
    let mut arr: Array<i32> = vec![1,2,4].into();
    for elem in arr.iter_mut() {
        *elem += 2;
    }
    assert_eq!(arr[0], 3);
}


#[test]
fn new() {
    let arr: Result<Array<i32>, ArrayError> = Array::new(5);
    assert!(arr.is_ok());
    let arr = arr.unwrap();
    assert_eq!(arr.size(), 5);
}


#[test]
fn set() {
    let mut arr: Array<i32> = vec![1,2,4].into();
    unsafe {
        arr.set(1, 5);
    }
}


#[test]
fn size() {
    let arr: Array<i32> = vec![1,2,4].into();
    unsafe {
        assert_eq!(*arr.get_ptr(1), 2)
    }
}


#[test]
fn take_from_iter() {
    let mut iter = vec![0,1,2,3,4,5].into_iter();
    let arr : Array<i32> = Array::take_from_iter(&mut iter, 3);

    for i in 0..3 {
        assert_eq!(arr[i], i as i32)
    }
}


#[test]
fn try_get() {
    let arr: Array<i32> = vec![1,2,4].into();
    assert_eq!(arr.try_get(1), Some(&2));
    assert_eq!(arr.try_get(10), None);
}


#[test]
fn try_get_mut() {
    let mut arr: Array<i32> = vec![1,2,4].into();
    *arr.try_get_mut(1).unwrap() = 5;
    assert_eq!(arr.try_get_mut(10), None);
}


#[test]
fn try_set() {
    let mut arr: Array<i32> = vec![1,2,4].into();
    assert_eq!(arr.try_set(1, 5), Some(()));
    assert_eq!(arr.try_set(10, 4), None);
}