ohsl 0.12.0

A collection of numerical routines and mathematical types for use in scientific computing.
Documentation
use ohsl::vector::Vector;

#[test]
fn unary_minus() {
    let v = Vector::<i32>::new( 10, 4 );
    let w = -v;
    assert_eq!( w[0], -4 ); 
}

#[test]
fn binary_addition() {
    let u = Vector::<i32>::new( 10, 3 );
    let v = Vector::<i32>::new( 10, 4 );
    let w = u + v;
    assert_eq!( w[0], 7 );
    assert_eq!( w.size(), 10 );
}

#[test]
fn non_consuming_addition() {
    let u = Vector::<i32>::new( 10, 3 );
    let v = Vector::<i32>::new( 10, 4 );
    let w = u + &v;
    assert_eq!( w[0], 7 );
    assert_eq!( w.size(), 10 );
}

#[test]
fn full_non_consuming_addition() {
    let mut u = Vector::<i32>::new( 10, 3 );
    let v = Vector::<i32>::new( 10, 4 );
    let w = &u + &v;
    assert_eq!( w[0], 7 );
    assert_eq!( w.size(), 10 );
    u[0] = 5;
}

#[test]
fn binary_subtraction() {
    let u = Vector::<i32>::new( 10, 3 );
    let v = Vector::<i32>::new( 10, 4 );
    let w = u - v;
    assert_eq!( w[0], -1 );
    assert_eq!( w.size(), 10 );
}

#[test]
fn non_consuming_subtraction() {
    let u = Vector::<i32>::new( 10, 3 );
    let v = Vector::<i32>::new( 10, 4 );
    let w = u - &v;
    assert_eq!( w[0], -1 );
    assert_eq!( w.size(), 10 );
}

#[test]
fn full_non_consuming_subtraction() {
    let mut u = Vector::<i32>::new( 10, 3 );
    let v = Vector::<i32>::new( 10, 4 );
    let w = &u - &v;
    assert_eq!( w[0], -1 );
    assert_eq!( w.size(), 10 );
    u[0] = 5;
}

#[test]
fn add_assign() {
    let mut u = Vector::<f64>::new( 5, 3.0 );
    let v = Vector::<f64>::new( 5, 2.0 );
    u += v;
    assert_eq!( u[0], 5.0 );
    u += 5.0;
    assert_eq!( u[1], 10.0 );
}

#[test]
fn subtract_assign() {
    let mut u = Vector::<f64>::new( 5, 3.0 );
    let v = Vector::<f64>::new( 5, 2.0 );
    u -= v;
    assert_eq!( u[0], 1.0 );
    assert_eq!( u.size(), 5 );
    u -= 1.0;
    assert_eq!( u[4], 0.0 );
}

#[test]
fn multiply_assign() {
    let mut u = Vector::<f64>::new( 5, 3.0 );
    u *= 2.0;
    assert_eq!( u[0], 6.0 );
}

#[test]
fn divide_assign() {
    let mut u = Vector::<f64>::new( 5, 3.0 );
    u /= 2.0;
    assert_eq!( u[0], 1.5 );
}

#[test]
fn multiply_scalar() {
    let u = Vector::<f64>::new( 5, 3.0 );
    let v = 2.0 * u;
    assert_eq!( v[0], 6.0 );
}

#[test]
fn multiply_scalar_ref() {
    let u = Vector::<f64>::new( 5, 3.0 );
    let v = 2.0 * &u;
    assert_eq!( v[0], 6.0 );
}