start-command 0.33.0

Gamification of coding, execute any command with ability to auto-report issues on GitHub
Documentation
use start_command::parse_args;

#[test]
fn invalid_resource_inputs_are_rejected_before_launch() {
    for value in ["100%-90%", "101%", "0%", "0g", "3watts"] {
        let args = [
            "--isolated",
            "docker",
            "--image",
            "alpine",
            "--memory",
            value,
            "--",
            "true",
        ]
        .into_iter()
        .map(String::from)
        .collect::<Vec<_>>();
        assert!(parse_args(&args).is_err(), "{}", value);
    }
}

use serde_json::json;
use start_command::execution_control::{CommandRunOutput, CommandRunner};
struct Daemon;
impl CommandRunner for Daemon {
    fn run(&self, _: &str, args: &[String]) -> CommandRunOutput {
        assert_eq!(args[0], "info");
        CommandRunOutput {
            success: true,
            stdout: json!({"MemTotal":10737418240_u64,"NCPU":8}).to_string(),
            ..Default::default()
        }
    }
}
#[test]
fn launch_limits_resolve_daemon_percentages_and_default_swap() {
    let args = [
        "--isolated",
        "docker",
        "--memory",
        "70%-80%",
        "--cpus=50%",
        "--",
        "true",
    ]
    .map(String::from);
    let parsed = parse_args(&args).unwrap();
    assert_eq!(parsed.wrapper_options.memory.as_deref(), Some("70%-80%"));
    let (flags, values) = start_command::docker_resource_options::resolve(
        &start_command::docker_resource_options::specs(&parsed.wrapper_options),
        &[],
        &Daemon,
        || 0.5,
    )
    .unwrap();
    assert!(flags.contains(&"--memory=8053063680".into()));
    assert!(flags.contains(&"--cpus=4".into()));
    assert_eq!(values["memory"], values["memorySwap"]);
}