air-parser 0.4.0

Parser for the AirScript language
Documentation
use super::{Symbol, Token, expect_valid_tokenization};

#[test]
fn root_module_tokenization() {
    let source = r#"
    def hello

    trace_columns {
        main: [a]
    }

    boundary_constraints {
        enf a.first = 0
    }"#;
    let tokens = vec![
        Token::Def,
        Token::Ident(Symbol::intern("hello")),
        Token::TraceColumns,
        Token::LBrace,
        Token::Main,
        Token::Colon,
        Token::LBracket,
        Token::Ident(Symbol::intern("a")),
        Token::RBracket,
        Token::RBrace,
        Token::BoundaryConstraints,
        Token::LBrace,
        Token::Enf,
        Token::Ident(Symbol::intern("a")),
        Token::Dot,
        Token::First,
        Token::Equal,
        Token::Num(0),
        Token::RBrace,
    ];
    expect_valid_tokenization(source, tokens);
}

#[test]
fn root_module_with_imports_tokenization() {
    let source = r#"
    def hello

    use std::*
    use my_constraints::first_is_zero

    trace_columns {
        main: [a]
    }

    integrity_constraints {
        enf first_is_zero(a)
    }"#;
    let tokens = vec![
        Token::Def,
        Token::Ident(Symbol::intern("hello")),
        Token::Use,
        Token::Ident(Symbol::intern("std")),
        Token::ColonColon,
        Token::Star,
        Token::Use,
        Token::Ident(Symbol::intern("my_constraints")),
        Token::ColonColon,
        Token::Ident(Symbol::intern("first_is_zero")),
        Token::TraceColumns,
        Token::LBrace,
        Token::Main,
        Token::Colon,
        Token::LBracket,
        Token::Ident(Symbol::intern("a")),
        Token::RBracket,
        Token::RBrace,
        Token::IntegrityConstraints,
        Token::LBrace,
        Token::Enf,
        Token::FunctionIdent(Symbol::intern("first_is_zero")),
        Token::LParen,
        Token::Ident(Symbol::intern("a")),
        Token::RParen,
        Token::RBrace,
    ];
    expect_valid_tokenization(source, tokens);
}

#[test]
fn library_module_tokenization() {
    let source = r#"
    mod my_constraints

    ev first_is_zero(state[a]) {
        enf a = 0
    }"#;
    let tokens = vec![
        Token::Mod,
        Token::Ident(Symbol::intern("my_constraints")),
        Token::Ev,
        Token::FunctionIdent(Symbol::intern("first_is_zero")),
        Token::LParen,
        Token::Ident(Symbol::intern("state")),
        Token::LBracket,
        Token::Ident(Symbol::intern("a")),
        Token::RBracket,
        Token::RParen,
        Token::LBrace,
        Token::Enf,
        Token::Ident(Symbol::intern("a")),
        Token::Equal,
        Token::Num(0),
        Token::RBrace,
    ];
    expect_valid_tokenization(source, tokens);
}