ironcalc_base 0.7.1

Open source spreadsheet engine
Documentation
#![allow(clippy::unwrap_used)]
#![allow(clippy::expect_used)]

use crate::formatter::lexer::{Compare, Lexer, Token};

#[test]
fn condition() {
    let mut lexer = Lexer::new("[<100]");
    let token = lexer.next_token();
    assert!(matches!(token, Token::Condition(Compare::LessThan, 100.0)));
}

#[test]
fn condition_negative() {
    let mut lexer = Lexer::new("[>-100]");
    let token = lexer.next_token();
    assert!(matches!(
        token,
        Token::Condition(Compare::GreaterThan, -100.0)
    ));
    assert!(matches!(lexer.next_token(), Token::EOF));
}

#[test]
fn condition_period() {
    let mut lexer = Lexer::new("[<=.5]");
    let token = lexer.next_token();
    assert!(matches!(
        token,
        Token::Condition(Compare::LessOrEqualThan, 0.5)
    ));
    assert!(matches!(lexer.next_token(), Token::EOF));
}

#[test]
fn condition_scientific() {
    let mut lexer = Lexer::new("[<=-1.5E2]");
    let token = lexer.next_token();
    assert!(matches!(
        token,
        Token::Condition(Compare::LessOrEqualThan, -150.0)
    ));
    assert!(matches!(lexer.next_token(), Token::EOF));
}

#[test]
fn condition_invalid() {
    let mut lexer = Lexer::new("[<abc]");
    let token = lexer.next_token();
    assert!(matches!(token, Token::ILLEGAL));
    assert!(matches!(lexer.next_token(), Token::EOF));
}

#[test]
fn elapsed_time() {
    let mut lexer = Lexer::new("[hh]:mm:ss");
    let token = lexer.next_token();
    assert!(matches!(token, Token::ElapsedHourPadded));
    let token = lexer.next_token();
    assert!(matches!(token, Token::Literal(':')));
    let token = lexer.next_token();
    // We can't distinguish between minute and month here
    assert!(matches!(token, Token::MonthPadded));
    let token = lexer.next_token();
    assert!(matches!(token, Token::Literal(':')));
    let token = lexer.next_token();
    assert!(matches!(token, Token::SecondPadded));
    assert!(matches!(lexer.next_token(), Token::EOF));
}

#[test]
fn elapsed_hour() {
    let mut lexer = Lexer::new("[H]");
    let token = lexer.next_token();
    assert!(matches!(token, Token::ElapsedHour));
    assert!(matches!(lexer.next_token(), Token::EOF));
}

#[test]
fn elapsed_minute() {
    let mut lexer = Lexer::new("[M]");
    let token = lexer.next_token();
    assert!(matches!(token, Token::ElapsedMinute));
    assert!(matches!(lexer.next_token(), Token::EOF));
}

#[test]
fn elapsed_second() {
    let mut lexer = Lexer::new("[S]");
    let token = lexer.next_token();
    assert!(matches!(token, Token::ElapsedSecond));
    assert!(matches!(lexer.next_token(), Token::EOF));
}

#[test]
fn elapsed_minute_padded() {
    let mut lexer = Lexer::new("[MM]");
    let token = lexer.next_token();
    assert!(matches!(token, Token::ElapsedMinutePadded));
    assert!(matches!(lexer.next_token(), Token::EOF));
}

#[test]
fn elapsed_second_padded() {
    let mut lexer = Lexer::new("[SS]");
    let token = lexer.next_token();
    assert!(matches!(token, Token::ElapsedSecondPadded));
    assert!(matches!(lexer.next_token(), Token::EOF));
}

#[test]
fn too_many_h() {
    let mut lexer = Lexer::new("[HHH]");
    let token = lexer.next_token();
    assert!(matches!(token, Token::ILLEGAL));
    assert!(matches!(lexer.next_token(), Token::EOF));
}