miden-debug-engine 0.17.0

Core debugger engine for miden-debug
Documentation
use alloc::string::ToString;

use super::*;

#[test]
fn validates_report_directory_and_instrument_dependencies() {
    assert!(
        ProfilerConfig::try_from(ProfilerCliArgs::default())
            .unwrap()
            .instruments
            .is_empty()
    );
    let directory = tempfile::tempdir().unwrap();
    for args in [
        ProfilerCliArgs {
            reports_dir: Some(directory.path().into()),
            instruments: vec![],
        },
        ProfilerCliArgs {
            reports_dir: None,
            instruments: vec!["unknown".into()],
        },
        ProfilerCliArgs {
            reports_dir: Some(directory.path().into()),
            instruments: vec!["unknown".into()],
        },
    ] {
        assert!(ProfilerConfig::try_from(args).is_err());
    }
    let file = tempfile::NamedTempFile::new().unwrap();
    let error = ProfilerConfig::try_from(ProfilerCliArgs {
        reports_dir: Some(file.path().into()),
        instruments: vec!["unknown".into()],
    })
    .unwrap_err();
    assert!(error.to_string().contains("not a directory"));
}

#[test]
fn builds_known_instruments_once_in_sorted_order() {
    use crate::profiling::InstrumentRegistration;

    let global = crate::profiling::OpHistogramGlobal::NAME;
    let procedure = crate::profiling::OpHistogramProc::NAME;
    let directory = tempfile::tempdir().unwrap();
    let config = ProfilerConfig::try_from(ProfilerCliArgs {
        reports_dir: Some(directory.path().join("reports")),
        instruments: vec![procedure.into(), global.into(), procedure.into()],
    })
    .unwrap();
    let names: Vec<_> = config.instruments.iter().map(|instrument| instrument.name()).collect();
    let mut expected = vec![global, procedure];
    expected.sort();
    assert_eq!(names, expected);
    assert!(format!("{config:?}").contains(global));
    assert_eq!(config.reports_dir.as_deref(), Some(directory.path().join("reports").as_path()));
}