runmat-core 0.3.0

Host-agnostic RunMat execution engine (parser, interpreter, snapshot loader)
// None of these tests use #[wasm_bindgen_test], so they cannot run in the
// browser via wasm-pack. Excluding them from wasm32 avoids compiling a full
// runmat-runtime wasm binary per test file with zero executable tests.
#![cfg(not(target_arch = "wasm32"))]

use runmat_core::format_tokens;

#[test]
fn tokenize_simple_input() {
    let result = format_tokens("x = 1 + 2;");
    assert_eq!(result, "Ident Assign Integer Plus Integer Semicolon");
}

#[test]
fn handles_whitespace_and_comments() {
    let result = format_tokens("foo % comment\n+");
    assert_eq!(result, "Ident Newline Plus");
}

#[test]
fn empty_input_yields_empty_string() {
    let result = format_tokens("");
    assert!(result.is_empty());
}

#[test]
fn unknown_char_produces_error() {
    let result = format_tokens("$");
    assert_eq!(result, "Error");
}

#[test]
fn unterminated_string_is_error_token() {
    let result = format_tokens("'oops");
    assert!(result.contains("Error"));
}

#[test]
fn keywords_are_case_sensitive() {
    let result = format_tokens("IF ELSE");
    assert_eq!(result, "Ident Ident");
}

#[test]
fn complex_expression_tokens() {
    let result = format_tokens("1 * (2 + 3)");
    assert_eq!(result, "Integer Star LParen Integer Plus Integer RParen");
}

#[test]
fn multiple_statements() {
    let result = format_tokens("x=1; y=2;");
    assert_eq!(
        result,
        "Ident Assign Integer Semicolon Ident Assign Integer Semicolon"
    );
}