code-executor 1.1.0

A code runner library for online judge system
Documentation
mod util;

use std::path::Path;
use std::time::Duration;

use byte_unit::Byte;
use code_executor::{Code, Judge, Language, Resource, Verdict, language::*};
use rstest::rstest;

#[rstest]
#[tokio::test(flavor = "multi_thread")]
pub async fn should_return_accepted(
    #[rustfmt::skip]
    #[values(RUST, CPP, PYTHON, JAVA)]
    language: Language,

    #[dirs]
    #[files("tests/problem/easy/*")]
    #[exclude("wrong-answer")]
    #[by_ref]
    problem: &Path,
) {
    let inputs = util::read_inputs(problem);
    let checker = util::read_checker(problem, CPP).await;
    let solution = util::read_solution(problem, language);

    let judge = Judge::builder()
        .checker(Code {
            content: &checker,
            language: CPP,
        })
        .main(Code {
            content: &solution,
            language,
        })
        .resource(Resource {
            memory: Byte::GIGABYTE,
            ..Default::default()
        })
        .time_limit(Duration::from_secs(1))
        .build()
        .await
        .unwrap();
    let judge = judge.compile().await.unwrap().unwrap();

    for input in inputs {
        let metrics = judge.run(input.as_bytes()).await.unwrap();
        assert_eq!(metrics.verdict, Verdict::Accepted);
    }
}