hartree-cli 0.2.2

Command-line driver for hartree: an XYZ file plus a basis and method, to an SCF energy.
Documentation
use std::process::Command;

fn water_xyz(name: &str) -> std::path::PathBuf {
    let path = std::env::temp_dir().join(name);
    std::fs::write(
        &path,
        "3\nwater\nO 0.0 0.0 0.117\nH 0.0 0.757 -0.470\nH 0.0 -0.757 -0.470\n",
    )
    .unwrap();
    path
}

fn run_hartree(xyz: &std::path::Path, args: &[&str]) -> std::process::Output {
    Command::new(env!("CARGO_BIN_EXE_hartree"))
        .arg(xyz)
        .args(args)
        .output()
        .expect("run hartree")
}

#[test]
fn dh_ri_mp2_reports_backend() {
    let xyz = water_xyz("hartree_cli_dh_ri_mp2.xyz");
    let output = run_hartree(
        &xyz,
        &["--basis", "def2-svp", "--method", "b2plyp", "--ri-mp2"],
    );
    let stdout = String::from_utf8_lossy(&output.stdout);
    assert!(
        output.status.success(),
        "exit failure.\nstdout:\n{stdout}\nstderr:\n{}",
        String::from_utf8_lossy(&output.stderr)
    );
    assert!(stdout.contains("double hybrid b2plyp"), "{stdout}");
    assert!(
        stdout.contains("RI-MP2 (def2-svp/c)"),
        "PT2 backend line missing:\n{stdout}"
    );

    let output = run_hartree(&xyz, &["--basis", "def2-svp", "--method", "b2plyp"]);
    let stdout = String::from_utf8_lossy(&output.stdout);
    assert!(output.status.success(), "{stdout}");
    assert!(
        stdout.contains("conventional MP2"),
        "conventional backend line missing:\n{stdout}"
    );
}