public void TestVisitFunctionExp() { Setup("log(100)"); var context = parser.expression() as SpreadsheetParser.FunctionExpContext; var visitor = new SpreadsheetVisitor(); var result = visitor.VisitFunctionExp(context); Assert.Equal(result, double.Parse("2")); }
public void TestCompleteExp() { Setup("log(5+6*7/8)"); var context = parser.expression(); var visitor = new SpreadsheetVisitor(); var result = visitor.Visit(context); // we make sure that the correct format is selected, because different countries use different symbols as the decimal mark Assert.Equal("1.0107238653917732", result.ToString(System.Globalization.CultureInfo.GetCultureInfo("en-US").NumberFormat)); }
public void TestVisitPowerExp() { Setup("4^3^2"); var context = parser.expression() as SpreadsheetParser.PowerExpContext; var visitor = new SpreadsheetVisitor(); // we visit our test node and get the results var result = visitor.VisitPowerExp(context); Assert.Equal(double.Parse("262144"), result); }
static void Main(string[] args) { string input = "log(10 + A1 * 35 + (5.4 - 7.4))"; AntlrInputStream inputStream = new AntlrInputStream(input); SpreadsheetLexer spreadsheetLexer = new SpreadsheetLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(spreadsheetLexer); SpreadsheetParser spreadsheetParser = new SpreadsheetParser(commonTokenStream); SpreadsheetParser.ExpressionContext expressionContext = spreadsheetParser.expression(); SpreadsheetVisitor visitor = new SpreadsheetVisitor(); Console.WriteLine(visitor.Visit(expressionContext)); Console.ReadLine(); }
public void TestWrongVisitFunctionExp() { Setup("logga(100)"); var context = parser.expression() as SpreadsheetParser.FunctionExpContext; var visitor = new SpreadsheetVisitor(); var result = visitor.VisitFunctionExp(context); var ts = (CommonTokenStream)parser.InputStream; // When we check for the wrong function the parser actually works, // because indeed "logga" is syntactically valid as a function name, // but it’s not semantically correct. Assert.Equal(SpreadsheetLexer.NAME, ts.Get(0).Type); Assert.Null(errorListener.Symbol); // The function "logga" doesn't exist, so our program doesn't know what to do with it. // So when we visit it we get 0 as a result. Assert.Equal(0, result); }