// build/get static keyword table Dictionary <string, FunctionDefinition> GetFunctionTable() { if (_fnTbl == null) { // create table _fnTbl = new Dictionary <string, FunctionDefinition>(StringComparer.InvariantCultureIgnoreCase); // register built-in functions (and constants) Logical.Register(this); MathTrig.Register(this); Text.Register(this); Statistical.Register(this); } return(_fnTbl); }
public void Test() { // adjust culture var cultureInfo = this.CultureInfo; this.CultureInfo = System.Globalization.CultureInfo.InvariantCulture; // test internal operators Test("0", 0.0); Test("+1", 1.0); Test("-1", -1.0); Test("1+1", 1 + 1.0); Test("1*2*3*4*5*6*7*8*9", 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9.0); Test("1/(1+1/(1+1/(1+1/(1+1/(1+1/(1+1/(1+1/(1+1/(1+1/(1+1))))))))))", 1 / (1 + 1 / (1 + 1 / (1 + 1 / (1 + 1 / (1 + 1 / (1 + 1 / (1 + 1 / (1 + 1 / (1 + 1 / (1 + 1.0))))))))))); Test("((1+2)*(2+3)/(4+5))^0.123", Math.Pow((1 + 2) * (2 + 3) / (4 + 5.0), 0.123)); Test("10%", 0.1); Test("1e+3", 1000.0); // test simple variables Variables.Add("one", 1); Variables.Add("two", 2); Test("one + two", 3); Test("(two + two)^2", 16); Variables.Clear(); // test DataContext var dc = DataContext; var p = Person.CreateTestPerson(); DataContext = p; Test("Name", "Test Person"); Test("Name.Length * 2", p.Name.Length * 2); Test("Children.Count", p.Children.Count); Test("Children(2).Name", p.Children[2].Name); Test("ChildrenDct(\"Test Child 2\").Name", p.ChildrenDct["Test Child 2"].Name); Test("ChildrenDct.Count", p.ChildrenDct.Count); DataContext = dc; // test functions Logical.Test(this); MathTrig.Test(this); Text.Test(this); Statistical.Test(this); // restore culture this.CultureInfo = cultureInfo; }