public EvalReturn Eval(string input) { try { EvalReturn retVal = new EvalReturn(Response.Ok, string.Empty, typeof(Types.EmptyType)); string[] parts = input.Split(' '); foreach (string i in parts) { Types.ICalculonType val = Parse(i); retVal = val.Eval(ref state); if (retVal.Response == Response.Help) { return(HelpType.ExtendedHelp(ref state, parts)); } if (retVal.Response != Response.Ok) { return(retVal); // Something went wrong, bail here } } return(retVal); } catch (System.FormatException) //Parser didn't understand input { Types.ErrorType err = new Types.ErrorType( String.Format(GetString("ParseErr"), input)); return(err.Eval(ref state)); } }
public void RandTest() { Controller calc = new Controller(); EvalReturn ret = calc.Eval("rand"); double output = Double.Parse(ret.Msg); Assert.InRange <double>(output, 0.0, 1.0); }
public void TrigTest(string input, string expected) { Controller calc = new Controller(); StringBuilder fullTest = new StringBuilder("\"degrees\" setmode "); fullTest.Append(input); fullTest.Append(" 4 roundto"); EvalReturn ret = calc.Eval(fullTest.ToString()); Assert.True(typeof(Calculon.Types.Real) == ret.Type); Assert.Equal(expected, ret.Msg); }
public void BasicTest(string test, string expectedOut, int maxChar = -1) { // What Calculon returns is a string, without data type // So regular xunit precision won't work // instead, truncate string representations of floating point // to provide bounds for "equals" Controller calc = new Controller(); EvalReturn ret = calc.Eval(test); string Actual; if (maxChar < 0) { Actual = ret.Msg; } else { Actual = ret.Msg.Substring(0, maxChar); } Assert.Equal(expectedOut, Actual); }
public void BasicPushParsingTest( string testStr, Type ExpectedType, Response ExpectedResponse = Response.Ok, string ExpectedMsg = null) { string msg; if (ExpectedMsg is null) { msg = testStr; } else { msg = ExpectedMsg; } Controller calc = new Controller(); EvalReturn ret = calc.Eval(testStr); Assert.Equal(ExpectedResponse, ret.Response); Assert.Equal(msg, ret.Msg); Assert.True(ExpectedType == ret.Type); }
static void Main(string[] args) { Controller calc = new Controller(); if (Console.IsInputRedirected) { Console.Out.WriteLine(calc.Eval(Console.In.ReadLine()).Msg); } else { AnsiConsole.Console.Clear(true); while (calc.Running) { try { AnsiConsole.Render(DrawStack(calc.StackView)); string input = AnsiConsole.Ask <string>("[green]" + calc.GetString("PROMPT") + "[/]"); AnsiConsole.Console.Clear(true); EvalReturn eval = calc.Eval(input); if (eval.Response == Response.Error) { AnsiConsole.MarkupLine("[red]" + eval.Msg + "[/]"); } else if (eval.Response == Response.Help) { AnsiConsole.MarkupLine("[bold]" + eval.Msg + "[/]"); } } catch (Exception e) { AnsiConsole.WriteException(e); } } } }