sklose/NCalc2

Antlr is not parsing specific numbers correctly

rexcfnghk opened this issue · 0 comments

This unit test fails unexpectedly:

[Fact]
public void IfTest()
{
    // Arrange
    const long expected = 9999999999L;
    var expression = $"if(true, {expected}, 0)";
    var e = new Expression(expression);

    // Act
    var actual = e.Evaluate();

    // Assert
    Assert.Equal(expected, actual);
}

Xunit.Sdk.EqualException
Assert.Equal() Failure
Expected: 9999999999
Actual: 1E+10

Strangely the test passes if you remove one 9 from the long constant. The same thing happens for the lambda version:

[Fact]
public void IfTest2()
{
    // Arrange
    const long expected = 9999999999L;
    var expression = $"if(true, {expected}, 0)";
    var e = new Expression(expression);
    var context = new object();

    var lambda = e.ToLambda<object, long>();

    // Act
    var actual = lambda(context);

    // Assert
    Assert.Equal(expected, actual);
}