expr-solver 1.0.6

Solves a mathematical expression while following precedence and associativity.
Documentation
use expr_solver::{lexer::Lexer, token::Token};

#[test]
fn basic() {
    let mut lexer = Lexer::new(&"2 + 2".to_string());
    lexer.scan();

    assert_eq!(lexer.len, 5);
    assert_eq!(lexer.tokens.len(), 4);
}

#[test]
fn basic_tokenization() {
    let mut lexer = Lexer::new(&"2 ++  2".to_string());
    lexer.scan();

    assert_eq!(lexer.tokens.len(), 5);

    match lexer.tokens[4] {
        Token::Number(n) => assert!(n == 2_f64, "Token is not 2."),
        _ => {
            assert!(!true, "Token is not number.");
        }
    }
    assert!(matches!(lexer.tokens[2], Token::Plus));
    assert!(matches!(lexer.tokens[3], Token::Plus));
}

#[test]
fn basic_number_scanning() {
    let mut lexer = Lexer::new(&"1414141 141.141 141".to_string());
    lexer.scan();

    match lexer.tokens[3] {
        Token::Number(n) => assert!(n == 1414141_f64, "Token is not 1414141."),
        _ => {
            assert!(!true, "Token is not number.");
        }
    }

    match lexer.tokens[2] {
        Token::Number(n) => assert!(n == 141.141_f64, "Token is not 1414141."),
        _ => {
            assert!(!true, "Token is not number.");
        }
    }
}

#[test]
fn error_flag() {
    let mut lexer = Lexer::new(&"2'2".to_string());
    lexer.scan();

    assert!(lexer.has_errors);
}