iof 0.5.0

Read from and write data to console or file in simple formats.
Documentation
use fmt::Default;
use iof::*;
use std::io::Cursor;

#[test]
fn read_array_0() {
    let reader = Cursor::new("".as_bytes());
    let mut reader = InputStream::new(reader);

    let vec: [i32; 0] = reader.read();
    assert_eq!(vec, []);

    assert!(<[u32; 0]>::try_read_from(&mut reader, Default::new()).is_ok());
    assert!(<[u32; 1]>::try_read_from(&mut reader, Default::new()).is_err());
}

#[test]
fn read_boxed_array_0() {
    let reader = Cursor::new("".as_bytes());
    let mut reader = InputStream::new(reader);

    let vec: Box<[i32; 0]> = reader.read();
    assert_eq!(vec.as_ref(), &[]);

    assert!(<Box<[u32; 0]>>::try_read_from(&mut reader, Default::new()).is_ok());
    assert!(<Box<[u32; 1]>>::try_read_from(&mut reader, Default::new()).is_err());
}

#[test]
fn read_array_1() {
    let reader = Cursor::new("1".as_bytes());
    let mut reader = InputStream::new(reader);

    let vec: [i32; 1] = reader.read();
    assert_eq!(vec, [1]);

    assert!(<[u32; 0]>::try_read_from(&mut reader, Default::new()).is_ok());
    assert!(<[u32; 1]>::try_read_from(&mut reader, Default::new()).is_err());
}

#[test]
fn read_boxed_array_1() {
    let reader = Cursor::new("1".as_bytes());
    let mut reader = InputStream::new(reader);

    let vec: Box<[i32; 1]> = reader.read();
    assert_eq!(vec.as_ref(), &[1]);

    assert!(<Box<[u32; 0]>>::try_read_from(&mut reader, Default::new()).is_ok());
    assert!(<Box<[u32; 1]>>::try_read_from(&mut reader, Default::new()).is_err());
}

#[test]
fn read_array_4() {
    let reader = Cursor::new("1 -2 3 -4".as_bytes());
    let mut reader = InputStream::new(reader);

    let vec: [i32; 4] = reader.read();
    assert_eq!(vec, [1, -2, 3, -4]);

    assert!(<[u32; 0]>::try_read_from(&mut reader, Default::new()).is_ok());
    assert!(<[u32; 1]>::try_read_from(&mut reader, Default::new()).is_err());
}

#[test]
fn read_boxed_array_4() {
    let reader = Cursor::new("1 -2 3 -4".as_bytes());
    let mut reader = InputStream::new(reader);

    let vec: Box<[i32; 4]> = reader.read();
    assert_eq!(vec.as_ref(), &[1, -2, 3, -4]);

    assert!(<Box<[u32; 0]>>::try_read_from(&mut reader, Default::new()).is_ok());
    assert!(<Box<[u32; 1]>>::try_read_from(&mut reader, Default::new()).is_err());
}

#[test]
fn try_read_array_4() {
    let reader = Cursor::new("1 -2 3 -4".as_bytes());
    let mut reader = InputStream::new(reader);

    let vec: [i32; 4] = reader.try_read().unwrap();
    assert_eq!(vec, [1, -2, 3, -4]);

    assert!(<[u32; 0]>::try_read_from(&mut reader, Default::new()).is_ok());
    assert!(<[u32; 1]>::try_read_from(&mut reader, Default::new()).is_err());
}

#[test]
fn try_read_boxed_array_4() {
    let reader = Cursor::new("1 -2 3 -4".as_bytes());
    let mut reader = InputStream::new(reader);

    let vec: Box<[i32; 4]> = reader.try_read().unwrap();
    assert_eq!(vec.as_ref(), &[1, -2, 3, -4]);

    assert!(<Box<[u32; 0]>>::try_read_from(&mut reader, Default::new()).is_ok());
    assert!(<Box<[u32; 1]>>::try_read_from(&mut reader, Default::new()).is_err());
}

#[test]
#[should_panic = "expect more characters before EOF"]
fn read_array_insufficient() {
    let reader = Cursor::new("-1 -2".as_bytes());
    let mut reader = InputStream::new(reader);

    let _: [i32; 4] = reader.read();
}

#[test]
#[should_panic = "expect more characters before EOF"]
fn read_boxed_array_insufficient() {
    let reader = Cursor::new("-1 -2".as_bytes());
    let mut reader = InputStream::new(reader);

    let _: Box<[i32; 4]> = reader.read();
}

#[test]
fn display() {
    let s = [1, 2, 3];
    assert_eq!(s.try_write_into_string_with_sep(&[" "]).unwrap(), "1 2 3");

    let s = [[1, 2, 3], [4, 5, 6]];
    assert_eq!(
        s.try_write_into_string_with_sep(&["\n", " "]).unwrap(),
        "1 2 3\n4 5 6",
    );

    let s = [[1, 2], [3, 4]];
    assert_eq!(
        s.try_write_into_string_with_sep(&["\n", " "]).unwrap(),
        "1 2\n3 4",
    );

    let s = [[1, 2]];
    assert_eq!(
        s.try_write_into_string_with_sep(&["\n", " "]).unwrap(),
        "1 2",
    );

    let s: [[usize; 0]; 0] = [];
    assert_eq!(s.try_write_into_string_with_sep(&[" "]).unwrap(), "");
}