clausen 1.0.1

Rust implementation of Clausen functions.
Documentation
use num::complex::Complex;
use num::Float;
use clausen::Sl;
mod common;


#[test]
fn test_values() {
    let eps = 1e-14;

    for n in [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1000, 1001].iter() {
        let values = common::read_data_file(&format!("Sl{}.txt", *n)).unwrap();

        for &(v, expected) in values.iter() {
            assert_eq_float!(v.sl(*n), expected, eps);
            assert_eq_float!(Complex::new(v, 0.0).sl(*n).re, expected, eps);
        }
    }
}


#[test]
fn test_complex_input() {
    let eps = 1e-14;

    assert_eq_complex!(Complex::new(0.0,  1.0).sl(1), Complex::new(  1.5707963267948966, -0.5), eps);
    assert_eq_complex!(Complex::new(0.0, -1.0).sl(1), Complex::new( -1.5707963267948966,  0.5), eps);
    assert_eq_complex!(Complex::new(0.0,  1.0).sl(2), Complex::new(  1.3949340668482264, -1.5707963267948966), eps);
    assert_eq_complex!(Complex::new(0.0, -1.0).sl(2), Complex::new(  1.3949340668482264, -1.5707963267948966), eps);
    assert_eq_complex!(Complex::new(1.0,  1.0).sl(2), Complex::new(  0.07413774005332982, -1.07079632679489662), eps);
    assert_eq_complex!(Complex::new(1.0, -1.0).sl(2), Complex::new(  0.07413774005332982,  1.07079632679489662), eps);
    assert_eq_complex!(Complex::new(0.0,  1.0).sl(3), Complex::new(  0.7853981633974483,  1.5616007335148931), eps);
    assert_eq_complex!(Complex::new(0.0, -1.0).sl(3), Complex::new( -0.7853981633974483, -1.5616007335148931), eps);
}


#[test]
fn test_signed_zero() {
    let pz64 = 0.0_f64;
    let nz64 = -0.0_f64;

    for n in (1..101).into_iter().step_by(2) {
        assert!(pz64.sl(n).is_sign_positive());
        assert!(nz64.sl(n).is_sign_negative());

        assert!(Complex::new(pz64, pz64).sl(n).re.is_sign_positive());
        assert!(Complex::new(pz64, pz64).sl(n).im.is_sign_positive());
        assert!(Complex::new(pz64, nz64).sl(n).re.is_sign_positive());
        assert!(Complex::new(pz64, nz64).sl(n).im.is_sign_negative());
        assert!(Complex::new(nz64, pz64).sl(n).re.is_sign_negative());
        assert!(Complex::new(nz64, pz64).sl(n).im.is_sign_positive());
        assert!(Complex::new(nz64, nz64).sl(n).re.is_sign_negative());
        assert!(Complex::new(nz64, nz64).sl(n).im.is_sign_negative());
    }
}