miden-debug-engine 0.17.0

Core debugger engine for miden-debug
Documentation
use alloc::string::ToString;
#[cfg(feature = "std")]
use std::{
    collections::hash_map::DefaultHasher,
    hash::{Hash, Hasher},
};

use super::*;

#[test]
fn print_ln_event_roundtrips() {
    assert_eq!(Event::from(PRINTLN_EVENT.to_event_id()), Event::PrintLn);
    assert_eq!(Event::PrintLn.as_event_id(), *PRINTLN_EVENT_ID);
    assert_eq!(Event::from(PRINTLN_EVENT), Event::PrintLn);
}

#[test]
fn event_metadata_covers_builtin_custom_and_unknown_events() {
    let custom_name = EventName::new("test::custom");
    let custom = Event::from(custom_name.clone());
    let unknown = Event::Unknown(EventId::from_u64(99));

    for event in [Event::FrameStart, Event::FrameEnd, Event::PrintLn] {
        assert!(event.as_event_name().is_some());
        assert!(event.has_builtin_handler());
        assert!(!event.to_string().is_empty());
    }
    assert!(custom.as_event_name().is_some());
    assert!(!custom.has_builtin_handler());
    assert_eq!(custom.to_string(), "test::custom");
    assert!(unknown.as_event_name().is_none());
    assert!(!unknown.has_builtin_handler());
    assert_eq!(unknown.to_string(), "99");

    assert!(Event::FrameStart.is_frame_start());
    assert!(!Event::FrameEnd.is_frame_start());
    assert!(Event::FrameEnd.is_frame_end());
    assert!(!Event::PrintLn.is_frame_end());
    assert_eq!(EventId::from(Event::FrameStart), *FRAME_START_EVENT_ID);
}

#[test]
#[cfg(feature = "std")]
fn events_order_by_name_with_unknown_values_last() {
    let custom = Event::from(EventName::new("test::custom"));
    let earlier = Event::from(EventName::new("test::alpha"));
    assert!(earlier < custom);
    assert!(custom > earlier);
    assert_eq!(custom.cmp(&custom), core::cmp::Ordering::Equal);
    let unknown = Event::Unknown(EventId::from_u64(1));
    assert!(Event::FrameStart < unknown);
    assert!(custom < unknown);
    assert_eq!(unknown, Event::Unknown(EventId::from_u64(1)));
    assert!(unknown > Event::FrameEnd);

    let mut first = DefaultHasher::new();
    unknown.hash(&mut first);
    let mut second = DefaultHasher::new();
    Event::Unknown(EventId::from_u64(1)).hash(&mut second);
    assert_eq!(first.finish(), second.finish());
}