ohsl 0.12.0

A collection of numerical routines and mathematical types for use in scientific computing.
Documentation
use ohsl::complex::{Complex, Cmplx};

#[test]
fn unary_subtract() {
    let z = Cmplx::new( 1.0, 1.0 );
    let zans = - z;
    assert_eq!( zans.real, -1.0 );
    assert_eq!( zans.imag, -1.0 );
}

#[test]
fn binary_add() {
    let z1 = Complex::<f32>::new( 1.0, 2.0 );
    let z2 = Complex::<f32>::new( 2.0, 1.0 );
    let zans = z1 + z2;
    assert_eq!( zans.real, 3.0 );
    assert_eq!( zans.imag, 3.0 );
}

#[test]
fn binary_subtract() {
    let z1 = Cmplx::new( 1.0, 2.0 );
    let z2 = Cmplx::new( 2.0, 1.0 );
    let zans = z1 - z2;
    assert_eq!( zans.real, -1.0 );
    assert_eq!( zans.imag, 1.0 );
}

#[test]
fn multiply() {
    let z1 = Cmplx::new( 1.0, 2.0 );
    let z2 = Cmplx::new( 2.0, 1.0 );
    let zans = z1 * z2;
    assert_eq!( zans.real, 0.0 );
    assert_eq!( zans.imag, 5.0 );
}

#[test]
fn divide() {
    let z1 = Cmplx::new( 1.0, 2.0 );
    let z2 = Cmplx::new( 2.0, 1.0 );
    let zans = z1 / z2;
    assert_eq!( zans.real, 0.8 );
    assert_eq!( zans.imag, 0.6 );
}

#[test]
fn plus_real() {
    let r: f64 = 1.0;
    let z = Cmplx::new( 1.0, 2.0 );
    let zans = z + r;
    assert_eq!( zans.real, 2.0 );
    assert_eq!( zans.imag, 2.0 );
}

#[test]
fn minus_real() {
    let r: f64 = 1.0;
    let z = Cmplx::new( 1.0, 2.0 );
    let zans = z - r;
    assert_eq!( zans.real, 0.0 );
    assert_eq!( zans.imag, 2.0 );
}

#[test]
fn multiply_real() {
    let r: f64 = 4.0;
    let z = Cmplx::new( 1.0, 2.0 );
    let zans = z * r;
    assert_eq!( zans.real, 4.0 );
    assert_eq!( zans.imag, 8.0 );
    let zans = r * z;
    assert_eq!( zans.real, 4.0 );
    assert_eq!( zans.imag, 8.0 );
}

#[test]
fn divide_real() {
    let r: f64 = 4.0;
    let z = Cmplx::new( 1.0, 2.0 );
    let zans = z / r;
    assert_eq!( zans.real, 0.25 );
    assert_eq!( zans.imag, 0.5 );
}