rsjsonnet-lang 0.5.0

A Jsonnet evaluation library
Documentation
#![warn(
    rust_2018_idioms,
    trivial_casts,
    trivial_numeric_casts,
    unreachable_pub,
    unused_qualifications
)]
#![forbid(unsafe_code)]

use rsjsonnet_lang::span::{SpanContext, SpanContextId, SpanManager};

#[test]
fn test_span_manager() {
    let mut mgr = SpanManager::new();

    let (ctx1_id, src1_id) = mgr.insert_source_context(3);
    let (ctx2_id, src2_id) = mgr.insert_source_context(5);

    assert_ne!(src1_id, src2_id);
    assert_eq!(*mgr.get_context(ctx1_id), SpanContext::Source(src1_id));
    assert_eq!(*mgr.get_context(ctx2_id), SpanContext::Source(src2_id));

    #[track_caller]
    fn test_span(mgr: &mut SpanManager, context: SpanContextId, start: usize, end: usize) {
        let span_id = mgr.intern_span(context, start, end);
        assert_eq!(mgr.get_span(span_id), (context, start, end));
    }

    for s in 0..=3 {
        for e in s..=3 {
            test_span(&mut mgr, ctx1_id, s, e);
        }
    }

    for s in 0..=5 {
        for e in s..=5 {
            test_span(&mut mgr, ctx2_id, s, e);
        }
    }
}