udled 0.8.0

Tokenizer and parser
Documentation
use udled::{Buffer, Input};

#[test]
fn string_buffer_basic() {
    let input = Input::new("abc");
    let buf = input.buffer();

    assert_eq!(buf.len(), 3);
    assert_eq!(buf.source(), "abc");

    assert_eq!(buf.get(0).unwrap().item, 'a');
    assert_eq!(buf.get(0).unwrap().index, 0);
    assert_eq!(buf.get(0).unwrap().len, 1);

    assert_eq!(buf.get(2).unwrap().item, 'c');
    assert!(buf.get(3).is_none());
}

#[test]
fn string_buffer_multibyte() {
    let input = Input::new("aé🦀");
    let buf = input.buffer();

    assert_eq!(buf.len(), 3);

    let a = buf.get(0).unwrap();
    assert_eq!(a.item, 'a');
    assert_eq!(a.index, 0);
    assert_eq!(a.len, 1);

    let e = buf.get(1).unwrap();
    assert_eq!(e.item, 'é');
    assert_eq!(e.index, 1);
    assert_eq!(e.len, 2);

    let crab = buf.get(2).unwrap();
    assert_eq!(crab.item, '🦀');
    assert_eq!(crab.index, 3);
    assert_eq!(crab.len, 4);
}

#[test]
fn byte_buffer_basic() {
    let bytes: &[u8] = &[0x00, 0xFF, 0x42];
    let input = Input::new(bytes);
    let buf = input.buffer();

    assert_eq!(buf.len(), 3);
    assert_eq!(buf.source(), bytes);

    assert_eq!(buf.get(0).unwrap().item, 0x00);
    assert_eq!(buf.get(1).unwrap().item, 0xFF);
    assert_eq!(buf.get(2).unwrap().item, 0x42);
    assert!(buf.get(3).is_none());
}