sciforge 0.0.3

A comprehensive scientific computing library in pure Rust with zero dependencies
Documentation
use sciforge::hub::prelude::*;

fn run_maths(name: &str, params: Vec<(&str, ParameterValue)>) -> RunOutput {
    let mut exp = Experiment::new(DomainType::Maths, name);
    for (k, v) in params {
        exp = exp.param(k, v);
    }
    ExperimentRunner::new()
        .run(&exp)
        .unwrap_or_else(|_| panic!("dispatch '{name}' failed"))
}

#[test]
fn heat_equation_1d_explicit() {
    let out = run_maths(
        "heat_equation_1d_explicit",
        vec![
            ("u", ParameterValue::Vector(vec![0.0, 100.0, 0.0])),
            ("alpha", ParameterValue::Scalar(0.01)),
            ("dx", ParameterValue::Scalar(1.0)),
            ("dt", ParameterValue::Scalar(0.1)),
        ],
    );
    match out {
        RunOutput::Vector(v) => assert_eq!(v.len(), 3, "output should have same size as input"),
        _ => panic!("expected Vector output, got {out:?}"),
    }
}

#[test]
fn wave_equation_1d() {
    let out = run_maths(
        "wave_equation_1d",
        vec![
            ("u", ParameterValue::Vector(vec![0.0, 1.0, 0.0])),
            ("u_prev", ParameterValue::Vector(vec![0.0, 1.0, 0.0])),
            ("c", ParameterValue::Scalar(1.0)),
            ("dx", ParameterValue::Scalar(1.0)),
            ("dt", ParameterValue::Scalar(0.1)),
        ],
    );
    match out {
        RunOutput::Vector(v) => assert!(!v.is_empty(), "wave equation should return data"),
        _ => panic!("expected Vector output, got {out:?}"),
    }
}