oom 0.3.0

One or Many types (Haskell NonEmpty)
Documentation
use oom::{NonEmptyMutSlice, NonEmptyVec};
use std::path::Path;

#[test]
fn test_muts() {
    let config_dirs = &mut [
        Path::new("/home/user/.config/nvim"),
        Path::new("/etc/nvim"),
        Path::new("/usr/share/nvim"),
    ];
    let mut s = NonEmptyMutSlice::from_slice_checked(config_dirs).unwrap();

    assert_eq!(s.len().get(), 3);
    assert_eq!(s.is_empty(), false);

    let first = Path::new("/home/user/.config/neovim");
    let last = Path::new("/home/user/.config/vim");

    {
        *(s.first_mut()) = first;
        assert_eq!(*s.first(), first);
    }

    {
        *(s.last_mut()) = last;
        assert_eq!(*s.last(), last);
    }

    let arr = &mut [0, 1, 2];
    let mut s = NonEmptyMutSlice::from_slice_checked(arr).unwrap();

    {
        let (first, rest) = s.split_first_mut();
        *first = 42;
        rest[0] = 2;
        rest[1] = 3;
        assert_eq!(s.as_slice(), &[42, 2, 3][..]);
    }

    {
        let (last, rest) = s.split_last_mut();
        *last = 0;
        rest[0] = 42;
        rest[1] = 42;
        assert_eq!(s.as_slice(), &[42, 42, 0][..]);
    }

    let v = vec![1, 2, 3];
    let v = NonEmptyVec::from_vec_checked(v).unwrap();
    assert_eq!(v.as_slice(), &[1, 2, 3]);

    let v = Vec::<u32>::with_capacity(42);
    match NonEmptyVec::from_vec_checked(v) {
        Ok(_) => panic!("slice is empty"),
        Err(v) => assert!(v.is_empty()),
    }
}