sssf 0.1.0

Super simple simulation framework.
Documentation
use super::*;
use std::path::{PathBuf};
use assert_approx_eq::assert_approx_eq;

#[test]
fn building() {
    struct DynamicParameters {
        t: f32,
        x: f32,
        y: f32,
        v_x: f32,
        v_y: f32,
    }

    struct EnvironmentParameters {
        dt: f32,
    }

    SimManger::new(
        DynamicParameters {
            t: 0.,
            x: 0.,
            y: 0.,
            v_x: 0.,
            v_y: 0.,
        },
        EnvironmentParameters { dt: 0.1 },
        |dyn_parameteres, environment_parameters| DynamicParameters {
            t: dyn_parameteres.t + environment_parameters.dt,
            x: dyn_parameteres.x,
            y: dyn_parameteres.y,
            v_x: dyn_parameteres.v_x,
            v_y: dyn_parameteres.v_y,
        },
    );
}

#[test]
fn stop_fn_test() {
    struct DynamicParameters {
        t: f32,
    }
    struct EnvironmentParameters {
        dt: f32,
    }

    let mut simulation = SimManger::new(
        DynamicParameters { t: 0. },
        EnvironmentParameters { dt: 1. },
        |dyn_parameteres, environment_parameters| DynamicParameters {
            t: dyn_parameteres.t + environment_parameters.dt,
        },
    );

    simulation.run(|dyn_parameters, _environment_parameters| dyn_parameters.t == 5.);
    assert_approx_eq!(simulation.parameters.last().unwrap().t, 5., 0.1);
}

#[test]
fn to_csv_test() {
    struct DynamicParameters {
        t: i32,
        x: i32,
        y: i32,
    }
    impl ToCSV for DynamicParameters {
        fn get_header() -> String {
            String::from("t,x,y")
        }
        fn get_row(&self) -> String {
            format!("{},{},{}", self.t, self.x, self.y)
        }
    }

    let param = DynamicParameters { t: 0, x: 1, y: 2 };

    let header = DynamicParameters::get_header();
    assert_eq!("t,x,y", header);

    let row = param.get_row();
    assert_eq!("0,1,2", row);
}

#[test]
fn file_output() {
    struct DynamicParameters {
        t: f32,
        x: i32,
        y: i32,
    }
    impl ToCSV for DynamicParameters {
        fn get_header() -> String {
            String::from("t,x,y")
        }
        fn get_row(&self) -> String {
            format!("{},{},{}", self.t, self.x, self.y)
        }
    }
    struct EnvironmentParameters {
        dt: f32,
    }

    let mut _simulation = SimManger::new(
        DynamicParameters { t: 0., x: 4, y: 7 },
        EnvironmentParameters { dt: 1. },
        |dyn_parameteres, environment_parameters| DynamicParameters {
            t: dyn_parameteres.t + environment_parameters.dt,
            x: dyn_parameteres.x + 1,
            y: dyn_parameteres.y + 3,
        },
    ).to_file(PathBuf::from(r"output.csv"))
    .run_with_save(|dyn_parameters, _environment_parameters| dyn_parameters.t == 5.);
}