package de.skuzzle.polly.test.core.parser.scanner;
import junit.framework.Assert;
import org.junit.Test;
import de.skuzzle.polly.core.parser.AbstractTokenStream;
import de.skuzzle.polly.core.parser.ParseException;
import de.skuzzle.polly.core.parser.Token;
import de.skuzzle.polly.core.parser.TokenType;
/**
* Tests to read several numbers from a scanner.
*
* @author Simon Taddiken
*/
public class TestReadNumbers extends AbstractScannerTest {
@Test
public final void testReadNumber1() throws ParseException {
final String input = "1234";
final AbstractTokenStream scanner = this.obtain(input);
final Token la = scanner.lookAhead();
Assert.assertTrue(la.getFloatValue() == 1234);
}
@Test
public final void testReadNumber2() throws ParseException {
final String input = "0.1";
final AbstractTokenStream scanner = this.obtain(input);
final Token la = scanner.lookAhead();
Assert.assertTrue(Double.compare(la.getFloatValue(), 0.1) == 0);
}
@Test
public final void testReadNumber3() throws ParseException {
final String input = ".1";
final AbstractTokenStream scanner = this.obtain(input);
final Token la = scanner.lookAhead();
Assert.assertTrue(Double.compare(la.getFloatValue(), 0.1) == 0);
}
@Test
public final void testReadNumber4() throws ParseException {
final String input = ".1e2";
final AbstractTokenStream scanner = this.obtain(input);
final Token la = scanner.lookAhead();
Assert.assertTrue(Double.compare(la.getFloatValue(), 10.0) == 0);
}
@Test
public final void testReadNumber5() throws ParseException {
final String input = ".1e-2";
final AbstractTokenStream scanner = this.obtain(input);
final Token la = scanner.lookAhead();
Assert.assertTrue(Double.compare(la.getFloatValue(), 0.001) == 0);
}
@Test
public final void testReadNumber6() throws ParseException {
final String input = "10°";
final AbstractTokenStream scanner = this.obtain(input);
final Token la = scanner.lookAhead();
Assert.assertTrue(Double.compare(la.getFloatValue(), Math.toRadians(10.0)) == 0);
}
@Test
public final void testReadNumber7() throws ParseException {
final String input = "10:25";
final AbstractTokenStream scanner = this.obtain(input);
final Token la = scanner.lookAhead();
Assert.assertTrue(la.getType() == TokenType.DATETIME);
}
@Test
public final void testReadNumber8() throws ParseException {
final String input = "10:25@15.10.2013";
final AbstractTokenStream scanner = this.obtain(input);
final Token la = scanner.lookAhead();
Assert.assertTrue(la.getType() == TokenType.DATETIME);
}
@Test
public final void testReadNumber9() throws ParseException {
final String input = "5m10h";
final AbstractTokenStream scanner = this.obtain(input);
final Token la = scanner.lookAhead();
Assert.assertTrue(la.getType() == TokenType.TIMESPAN);
}
@Test
public final void testReadNumber10() throws ParseException {
final String input = "5m10h5h";
final AbstractTokenStream scanner = this.obtain(input);
Assert.assertTrue(scanner.match(TokenType.ERROR));
}
@Test
public final void testReadNumber11() throws ParseException {
final String input = "5m10h4s3y1w";
final AbstractTokenStream scanner = this.obtain(input);
final Token la = scanner.lookAhead();
Assert.assertTrue(la.getType() == TokenType.TIMESPAN);
}
@Test
public final void testReadNumber12() throws ParseException {
final String input = "1e3 1E3 1.23e3 1.23e-3 1.23e+3 1.23e+ 1.23e- 1.23e";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.NUMBER);
Assert.assertTrue(Double.compare(la.getFloatValue(), 1000.0) == 0);
scanner.consume();
la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.NUMBER);
Assert.assertTrue(Double.compare(la.getFloatValue(), 1000.0) == 0);
scanner.consume();
la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.NUMBER);
Assert.assertTrue(Double.compare(la.getFloatValue(), 1230.0) == 0);
scanner.consume();
la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.NUMBER);
Assert.assertEquals(1.23E-3, la.getFloatValue());
scanner.consume();
la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.NUMBER);
Assert.assertEquals(1.23E+3, la.getFloatValue());
scanner.consume();
la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
scanner.consume();
la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
scanner.consume();
la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
}
@Test
public final void testReadNumber13() throws ParseException {
final String input = "1.5..2.5";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.NUMBER);
Assert.assertTrue(la.getFloatValue() == 1.5);
Assert.assertTrue(scanner.match(TokenType.DOTDOT));
la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.NUMBER);
Assert.assertTrue(la.getFloatValue() == 2.5);
}
@Test
public final void testReadNumber14() throws ParseException {
final String input = "1.";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
}
@Test
public final void testReadNumber15() throws ParseException {
final String input = "0x";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
}
@Test
public final void testReadNumber16() throws ParseException {
final String input = "0x44:";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
}
@Test
public final void testReadNumber17() throws ParseException {
final String input = "0x44";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
}
@Test
public final void testReadNumber18() throws ParseException {
final String input = "2#1001";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.NUMBER);
Assert.assertEquals(9.0, la.getFloatValue());
}
@Test
public final void testReadNumber19() throws ParseException {
final String input = "44#1001";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
}
@Test
public final void testReadNumber20() throws ParseException {
final String input = "2#a";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
}
@Test
public final void testReadNumber21() throws ParseException {
final String input = "2#1a";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.NUMBER);
Assert.assertEquals(1.0, la.getFloatValue());
}
@Test
public final void testReadNumber22() throws ParseException {
final String input = "24:15";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
}
@Test
public final void testReadNumber23() throws ParseException {
final String input = "23:15";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.DATETIME);
}
@Test
public final void testReadNumber24() throws ParseException {
final String input = "20°";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.NUMBER);
Assert.assertEquals(Math.toRadians(20.0), la.getFloatValue());
}
@Test
public final void testReadNumber25() throws ParseException {
final String input = "20";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.NUMBER);
Assert.assertEquals(20.0, la.getFloatValue());
}
@Test
public final void testReadNumber26() throws ParseException {
final String input = "10.12.1987@13:37";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.DATETIME);
}
@Test
public final void testReadNumber27() throws ParseException {
final String input = "32.12.1987@13:37";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
}
@Test
public final void testReadNumber28() throws ParseException {
final String input = "10.13.1987@13:37";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
}
@Test
public final void testReadNumber29() throws ParseException {
final String input = "10.12.1987@13";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
}
@Test
public final void testReadNumber31() throws ParseException {
final String input = "10.12.10000";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
}
@Test
public final void testReadNumber32() throws ParseException {
final String input = "10.12.1987@13:";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
}
@Test
public final void testReadNumber33() throws ParseException {
final String input = "10.12.1987@a";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
}
@Test
public final void testReadNumber34() throws ParseException {
final String input = "10.12.1987@";
final AbstractTokenStream scanner = this.obtain(input);
Token la = scanner.consume();
Assert.assertTrue(la.getType() == TokenType.ERROR);
}
}