示例#1
0
        public void PerformanceTest()
        {
            var compiler = new FormulaCompiler();

            compiler.WithInfo(FormulaCompilerBuildInfoLevels.Warning);
            var s = Stopwatch.StartNew();

            for (int i = 0; i < 1e4; i++)
            {
                var f = compiler.Compile <int>("2*5");
            }
            s.Stop();
            Debug.WriteLine("Compile time: " + s.Elapsed);

            var func = compiler.Compile <int>("2*5");

            s = Stopwatch.StartNew();

            for (int i = 0; i < 1e6; i++)
            {
                var res = func();
            }
            s.Stop();
            Debug.WriteLine("Compile time: " + s.Elapsed);
        }
示例#2
0
        public void Simple()
        {
            var compiler = new FormulaCompiler()
                           .WithInfo(FormulaCompilerBuildInfoLevels.None);

            compiler.Compile <int>("5+4");

            TestTime.Measure(1000, () => compiler.Compile <int>("5+4"));
        }
示例#3
0
 private void Compile(string formula, params int[] expectedErrorNumbers)
 {
     _compiler.Compile <int>(formula);
     //}
     //catch (ParseException e)
     //{
     //    Debug.WriteLine(e.Message);
     //    foreach (var errorNumber in expectedErrorNumbers)
     //    {
     //        if ( e.Errors.Where(err=>err.Number == errorNumber).FirstOrDefault() == null)
     //            Assert.Fail("Error {0} not thrown.", errorNumber);
     //    }
     //}
 }
示例#4
0
        public void Complex()
        {
            var compiler = new FormulaCompiler()
                           .WithMath().WithInfo(FormulaCompilerBuildInfoLevels.None);

            TestTime.Measure(1000, () => compiler.Compile <int>("2+2*2 + max(4,5)"));
        }
示例#5
0
        public void Test4()
        {
            var compiler = new FormulaCompiler();
            var f        = compiler.Compile <int>(@"55 + 5;");

            f().ShouldEqual(60);
        }
示例#6
0
        public void Test5()
        {
            var compiler = new FormulaCompiler();
            var f        = compiler.Compile <int>(@"5 {5}");

            f().ShouldEqual(5);
        }
示例#7
0
        public void Test()
        {
            var compiler = new FormulaCompiler();
            var f        = compiler.Compile <int>(@"5 + 5 {}");

            f().ShouldEqual(10);
        }
示例#8
0
        public void ProcessorCount()
        {
            var compiler = new FormulaCompiler()
                           .WithInfo(FormulaCompilerBuildInfoLevels.None)
                           .WithSystem();

            TestTime.Measure(1000, () => compiler.Compile <int>("Environment.ProcessorCount"));
        }
示例#9
0
        public void FlatTypeProviderTest()
        {
            var compiler = new FormulaCompiler()
                           .WithFlatType(typeof(Math));

            var f = compiler.Compile <int>("max(4,2)");

            f().ShouldEqual(4);
        }
示例#10
0
        public void Multiline()
        {
            var compiler = new FormulaCompiler();
            var f        = compiler.Compile <int>(@"5 +
4 + 2
-2");

            f().ShouldEqual(9);
        }
示例#11
0
        public void Simple()
        {
            var compiler = new FormulaCompiler().WithSystem();

            var f = compiler.Compile <Func <string, int, int> >("(string x, int y) => 5 + x.Length + y");

            f.ShouldNotBeNull();

            f()("abc", 2).ShouldEqual(10);
        }
示例#12
0
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            _func = null;

            var compiler = new FormulaCompiler();

            if (Custom.IsChecked ?? false)
            {
                compiler.
                WithMethod("rand", () => new Random(Environment.TickCount).Next())
                .WithMethod("rand", (int max) => new Random(Environment.TickCount).Next(max))
                .WithMethod("p", (int p) => 5);
            }
            if (Math.IsChecked ?? false)
            {
                compiler.WithMath();
            }
            if (Date.IsChecked ?? false)
            {
                compiler.WithDate();
            }
            if (All.IsChecked ?? false)
            {
                var a = new AssemblyCallProvider()
                        .AddAssembly("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
                        .AddAssembly("mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
                        .AddAssembly("System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
                        .Using(Using.Text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries))
                        .WithExtensionMethods();
                compiler.With(a);
            }

            if (SampleEntity.IsChecked ?? false)
            {
                compiler.WithType <SampleEntity>();
                var f = compiler.NewLambda()
                        .WithParam <SampleEntity>("s")
                        .Returns <object>()
                        .Compile(Formula.Text);
                if (f != null)
                {
                    _func = () => f(new SampleEntity());
                }
            }
            else
            {
                _func = compiler.Compile <object>(Formula.Text);
            }

            Status.Text = compiler.BuildInfo.Message;

            Button_Click_1(null, null);
        }
示例#13
0
        public void LineComment()
        {
            var f = _compiler.Compile <int>(@"5 // abc");

            f().ShouldEqual(5);
        }
示例#14
0
 public void AddTest()
 {
     _compiler.Compile <int>("5+4")().ShouldEqual(9);
 }
示例#15
0
        public void RootCallMethodTest()
        {
            var f = _compiler.Compile <int>("abs(-5)");

            f().ShouldEqual(Math.Abs(-5));
        }
示例#16
0
        public void IntLiteralTest()
        {
            var f = _compiler.Compile <int>("555");

            f().ShouldEqual(555);
        }