plotnik-compiler 0.3.2

Compiler for Plotnik query language (parser, analyzer, bytecode emitter)
Documentation
use super::cst::{QLang, SyntaxKind::*, TokenSet};
use rowan::Language;

#[test]
fn test_token_set_contains() {
    let set = TokenSet::new(&[ParenOpen, ParenClose, Star]);
    assert!(set.contains(ParenOpen));
    assert!(set.contains(ParenClose));
    assert!(set.contains(Star));
    assert!(!set.contains(Plus));
    assert!(!set.contains(Colon));
}

#[test]
fn test_token_set_union() {
    let a = TokenSet::new(&[ParenOpen, ParenClose]);
    let b = TokenSet::new(&[Star, Plus]);
    let c = a.union(b);
    assert!(c.contains(ParenOpen));
    assert!(c.contains(ParenClose));
    assert!(c.contains(Star));
    assert!(c.contains(Plus));
    assert!(!c.contains(Colon));
}

#[test]
fn test_token_set_single() {
    let set = TokenSet::single(Colon);
    assert!(set.contains(Colon));
    assert!(!set.contains(ParenOpen));
}

#[test]
fn test_is_trivia() {
    assert!(Whitespace.is_trivia());
    assert!(Newline.is_trivia());
    assert!(LineComment.is_trivia());
    assert!(BlockComment.is_trivia());
    assert!(!ParenOpen.is_trivia());
    assert!(!Error.is_trivia());
}

#[test]
fn test_syntax_kind_count_under_128() {
    assert!(
        (__LAST as u16) < 128,
        "SyntaxKind has {} variants, exceeds TokenSet capacity of 128",
        __LAST as u16
    );
}

#[test]
fn test_is_error() {
    assert!(Error.is_error());
    assert!(XMLGarbage.is_error());
    assert!(Garbage.is_error());
    assert!(TsPredicate.is_error());
    assert!(!ParenOpen.is_error());
    assert!(!Id.is_error());
    assert!(!Whitespace.is_error());
}

#[test]
fn test_token_set_debug() {
    let set = TokenSet::new(&[ParenOpen, Star, Plus]);
    let debug_str = format!("{:?}", set);
    assert!(debug_str.contains("ParenOpen"));
    assert!(debug_str.contains("Star"));
    assert!(debug_str.contains("Plus"));
}

#[test]
fn test_token_set_empty_debug() {
    let set = TokenSet::EMPTY;
    let debug_str = format!("{:?}", set);
    assert_eq!(debug_str, "{}");
}

#[test]
fn test_qlang_roundtrip() {
    for kind in [ParenOpen, ParenClose, Star, Plus, Id, Error, Whitespace] {
        let raw = QLang::kind_to_raw(kind);
        let back = QLang::kind_from_raw(raw);
        assert_eq!(kind, back);
    }
}