blob: 40f50f9def671f4e5cf1d55a40ca178bc8c9e24c [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2020, 2021 Stephan Wahlbrink and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
package org.eclipse.statet.r.core.rsource;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING;
import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_HEX_DIGIT_MISSING;
import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_HEX_FLOAT_EXP_MISSING;
import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_INT_WITH_DEC_POINT;
import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_NON_INT_WITH_L;
import org.junit.jupiter.api.Test;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.text.core.input.StringParserInput;
import org.eclipse.statet.r.core.rlang.RTerminal;
@NonNullByDefault
public class RLexerNumericLiteralTest {
private final StringParserInput input= new StringParserInput();
public RLexerNumericLiteralTest() {
}
protected int getConfig() {
return 0;
}
@Test
public void matchNumReal_Dec() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 01234567890 ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("01234567890", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumReal_Dec_1_0() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 1 2 3 4 5 6 7 8 9 0 ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("1", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("2", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("3", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("4", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("5", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("6", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("7", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("8", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("9", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumReal_Dec_with_Point() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 123.456 ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("123.456", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumReal_Dec_startsWith_Point() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" .123 ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(".123", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumReal_Dec_endsWith_Point() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 123. ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("123.", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumReal_Dec_withExp() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 123.4e0 123.e10 ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("123.4e0", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("123.e10", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumReal_Dec_withExp_withSign() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 123.4e+1 123.4e-1 ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("123.4e+1", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("123.4e-1", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumReal_Dec_withExp_missingExpDigit() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 123.4e 123.4e+ 123e- ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING, lexer.getFlags());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING, lexer.getFlags());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumReal_Hex() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x01234567890 0xabcdef 0xABCDEF ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x01234567890", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0xabcdef", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0xABCDEF", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumReal_Hex_0_F() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0xa 0xb 0xc 0xd 0xe 0xf ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x0", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x1", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x2", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x3", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x4", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x5", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x6", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x7", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x8", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x9", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0xA", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0xB", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0xC", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0xD", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0xE", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0xF", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0xa", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0xb", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0xc", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0xd", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0xe", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0xf", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumReal_Hex_missingDigit() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x 0xp ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_HEX_DIGIT_MISSING, lexer.getFlags());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_HEX_DIGIT_MISSING, lexer.getFlags());
}
@Test
public void matchNumReal_HexFloat_withoutPoint() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x123ABCp10 0x0FFp01 ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x123ABCp10", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x0FFp01", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumReal_HexFloat_with_Point() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x123.456p0 0x.ABCDEFp10 0x123.456 0xA.A ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x123.456p0", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x.ABCDEFp10", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_HEX_FLOAT_EXP_MISSING, lexer.getFlags());
assertEquals("0x123.456", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_HEX_FLOAT_EXP_MISSING, lexer.getFlags());
assertEquals("0xA.A", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumReal_HexFloat_startsWith_Point() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x.123p0 0x.123 ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x.123p0", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_HEX_FLOAT_EXP_MISSING, lexer.getFlags());
assertEquals("0x.123", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumReal_HexFloat_endsWith_Point() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x123.p0 0x123. ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x123.p0", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_HEX_FLOAT_EXP_MISSING, lexer.getFlags());
assertEquals("0x123.", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumReal_HexFloat_withExpSign() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x123.4p+10 0x123.4p-01 ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x123.4p+10", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x123.4p-01", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumReal_HexFloat_missingExpDigit() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x123.4p 0x123.4p+ 0x123p- 0x123.4pA ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING, lexer.getFlags());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING, lexer.getFlags());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING, lexer.getFlags());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING, lexer.getFlags());
assertEquals(RTerminal.SYMBOL, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("A", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumInt_Dec() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 123L ").init());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("123L", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumInt_Dec_check() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 2147483647L 2147483648L ").init());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_NON_INT_WITH_L, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumInt_Dec_with_Point() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 2147483647.0L .1L ").init());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_INT_WITH_DEC_POINT, lexer.getFlags());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_NON_INT_WITH_L, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumInt_Dec_withExp() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 1e9L 1.5e9L ").init());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("1e9L", lexer.getText());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("1.5e9L", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumInt_Dec_withExpSign() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0.5e+9L 100e-1L ").init());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0.5e+9L", lexer.getText());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("100e-1L", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumInt_Dec_withExp_check() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 2147483647e0L 2147483647.0e0L 2147483648.0e0L 1e10L ").init());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_NON_INT_WITH_L, lexer.getFlags());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_NON_INT_WITH_L, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumInt_Dec_missingExpDigit() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 123.4eL 123e+L 123e-L ").init());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING, lexer.getFlags());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING, lexer.getFlags());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumInt_Hex() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x0123ABCL ").init());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x0123ABCL", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumInt_Hex_check() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x7FFFFFFFL 0x8FFFFFFFL 0xfffffffffffffffffffffffffffffffffffffffL ").init());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_NON_INT_WITH_L, lexer.getFlags());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_NON_INT_WITH_L, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumInt_Hex_missingDigit() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0xL ").init());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_HEX_DIGIT_MISSING, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumInt_HexFloat() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x123p0L 0x.Ap10L 0x123.456L 0xA.AL ").init());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x123p0L", lexer.getText());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x.Ap10L", lexer.getText());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_HEX_FLOAT_EXP_MISSING, lexer.getFlags());
assertEquals("0x123.456L", lexer.getText());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_HEX_FLOAT_EXP_MISSING, lexer.getFlags());
assertEquals("0xA.AL", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumInt_HexFloat_check() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x123.4p0L 0x.ABCEp10L ").init());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_NON_INT_WITH_L, lexer.getFlags());
assertEquals("0x123.4p0L", lexer.getText());
assertEquals(RTerminal.NUM_NUM, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_NON_INT_WITH_L, lexer.getFlags());
assertEquals("0x.ABCEp10L", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumInt_HexFloat_withExpSign() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x123.4p+10L 0x1200p-01L ").init());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x123.4p+10L", lexer.getText());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x1200p-01L", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumInt_HexFloat_missingExpDigit() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x123.4pL 0x123.4p+L 0x123p-L ").init());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING, lexer.getFlags());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING, lexer.getFlags());
assertEquals(RTerminal.NUM_INT, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumCplx() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 123i ").init());
assertEquals(RTerminal.NUM_CPLX, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("123i", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumCplx_Dec() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 123.456i .456i 123.i").init());
assertEquals(RTerminal.NUM_CPLX, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("123.456i", lexer.getText());
assertEquals(RTerminal.NUM_CPLX, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(".456i", lexer.getText());
assertEquals(RTerminal.NUM_CPLX, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("123.i", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumCplx_Hex() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x0123ABCi ").init());
assertEquals(RTerminal.NUM_CPLX, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x0123ABCi", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumCplx_Hex_missingDigit() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0xi ").init());
assertEquals(RTerminal.NUM_CPLX, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_HEX_DIGIT_MISSING, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumCplx_HexFloat() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x0123A.BCp0i ").init());
assertEquals(RTerminal.NUM_CPLX, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("0x0123A.BCp0i", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNumCplx_HexFloat_missingExp() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" 0x0123A.BCi ").init());
assertEquals(RTerminal.NUM_CPLX, lexer.next());
assertEquals(STATUS123_SYNTAX_NUMBER_HEX_FLOAT_EXP_MISSING, lexer.getFlags());
assertEquals("0x0123A.BCi", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
}