Documentation
use array::{NDArray, NDData};
use array::csv::CSVFile;

#[test]
fn array() {
    let mut array = NDArray::<f64>::new(&[10, 5], 0.0);
    let mut csvfile = CSVFile::new("/tmp/test1.csv");
    for i in 0..array.shape()[0] {
        for j in 0..array.shape()[1] {
            array[&[i, j]] = (i * 2 + j * 5) as f64;
        }
    }
    assert!(csvfile.write_data(&array) == Ok(()));
    let array2 : NDArray<f64> = csvfile.read_array().unwrap();
    assert!(array2.shape() == array.shape());
    assert!(array2.strides() == array.strides());
    for i in 0..array2.shape()[0] {
        for j in 0..array2.shape()[1] {
            assert!(array[&[i,j]] == array2[&[i,j]]);
        }
    }
}

#[test]
fn rows() {
    let mut array = NDArray::<f64>::new(&[10, 5], 0.0);
    let mut csvfile = CSVFile::new("/tmp/test2.csv");
    for i in 0..array.shape()[0] {
        for j in 0..array.shape()[1] {
            array[&[i, j]] = (i * 2 + j * 5) as f64;
        }
    }
    assert!(csvfile.write_data(&array) == Ok(()));
    for i in 0..array.shape()[0] {
        let row : NDArray<f64> = csvfile.read_row(i).unwrap();
        for j in 0..row.shape()[0] {
            assert!(array[&[i,j]] == row[&[j]]);
        }
    }
}

#[test]
fn columns() {
    let mut array = NDArray::<f64>::new(&[10, 5], 0.0);
    let mut csvfile = CSVFile::new("/tmp/test3.csv");
    for i in 0..array.shape()[0] {
        for j in 0..array.shape()[1] {
            array[&[i, j]] = (i * 2 + j * 5) as f64;
        }
    }
    assert!(csvfile.write_data(&array) == Ok(()));
    for j in 0..array.shape()[1] {
        let column : NDArray<f64> = csvfile.read_column(j).unwrap();
        for i in 0..column.shape()[0] {
            assert!(array[&[i,j]] == column[&[i]]);
        }
    }
}