charred 2.2.0

charred char checking
Documentation
use crate::token::{EOFToken, Token};
use crate::token_reader::TokenReader;

struct AToken;
struct BToken;
struct CToken;

fn get_reader() -> TokenReader {
    let tokens = vec![
        Token::new(AToken),
        Token::new(BToken),
        Token::new(AToken),
        Token::new(CToken),
        Token::new(CToken),
        Token::new(EOFToken),
    ];

    TokenReader::new(tokens)
}

#[test]
fn peek_does_not_consume() {
    let reader = get_reader();

    assert!(reader.peek_is::<AToken>());
    assert!(!reader.peek_is::<BToken>());
    assert!(reader.peek_is::<AToken>());
}

#[test]
fn consume_does_consume() {
    let mut reader = get_reader();
    assert!(reader.consume_as::<AToken>().is_some());
    assert!(reader.consume_as::<BToken>().is_some());
    assert!(reader.consume_as::<AToken>().is_some());
    assert!(reader.consume_as::<CToken>().is_some());
}

#[test]
fn check_eof_works() {
    let mut reader = get_reader();
    reader.seek(4);
    assert!(!reader.check_eof());
    reader.seek(5);
    assert!(reader.check_eof());
}
#[test]
fn peek_and_consume_returns_eof_on_input_end() {
    let mut reader = get_reader();
    reader.seek(4);
    assert!(reader.consume_as::<EOFToken>().is_none());
    assert!(reader.consume_as::<EOFToken>().is_some());
    assert!(reader.consume_as::<EOFToken>().is_some());
    assert!(reader.consume_as::<EOFToken>().is_some());
    reader.seek(0);
    assert!(reader.consume_as::<EOFToken>().is_none());
}