Example #1
0
        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));
            }
        }
Example #2
0
        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);
        }
Example #3
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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
                    }
                }
            }
        }