public void TestCalcEngineDayDiff() { string[] maskDate = { "dd.MM.yyyy", "dd.MM.yyyy", "dd.MM.yyyy HH:mm", "dd.MM.yyyy HH:mm" }; string[] dateFrom = { "01.01.2014", "01.01.2014", "10.03.2014 12:00", "15.03.2014 15:00" }; string[] dateTo = { "01.01.2014", "10.01.2014", "10.03.2014 14:00", "16.03.2014 09:00" }; double[] answerDate = { 1, 10, 1, 2 }; string[] maskInterval = { "dd.MM.yyyy", "dd.MM.yyyy", "dd.MM.yyyy" }; string[] interval = { "01.01.2014", "01.01.2014 - 31.01.2014", "c 02.02.2014 по 10.02.2014" }; double[] answerInterval = { 1, 31, 9 }; var engine = new CalcEngine.CalcEngine(); for (int i = 0; i < dateFrom.Length; i++) { engine.Variables.Clear(); engine.Variables.Add("Mask", maskDate[i]); engine.Variables.Add("DateFrom", dateFrom[i]); engine.Variables.Add("DateTo", dateTo[i]); var res = (double)engine.Evaluate("DAYDIFF(DateFrom,DateTo,Mask)"); res.Should().Be(answerDate[i]); } for (int i = 0; i < interval.Length; i++) { engine.Variables.Clear(); engine.Variables.Add("Mask", maskInterval[i]); engine.Variables.Add("Interval", interval[i]); var res = (double)engine.Evaluate("DAYDIFF(Interval,Mask)"); res.Should().Be(answerInterval[i]); } }
public void TestCalcEngineLen() { var engine = new CalcEngine.CalcEngine(); engine.Variables.Add("A1", TestString); var res = (int)engine.Evaluate("LEN(A1)"); res.Should().Be(TestString.Length); }
public void TestCalcEngineLower() { var engine = new CalcEngine.CalcEngine(); engine.Variables.Add("A1", TestString); var res = (string)engine.Evaluate("LOWER(A1)"); res.Should().Be(TestString.ToLower()); }
public void TestCalcEngineLeft() { var engine = new CalcEngine.CalcEngine(); engine.Variables.Add("A1", TestString); var res = (string)engine.Evaluate("LEFT(A1,4)"); res.Should().Be(TestString.Remove(4)); res = (string)engine.Evaluate("LEFT(A1)"); res.Should().Be(TestString.Remove(1)); }
public void TestFormulaForDisplayName() { var engine = new CalcEngine.CalcEngine(); engine.Variables.Add("A", 5); engine.Variables.Add("B", "Test string"); engine.Variables.Add("C", "1"); var res = (string)engine.Evaluate("FORMAT(\"{0} [{1}]\", B, A)"); res.Should().Be("Test string [5]"); res = (string)engine.Evaluate("FORMAT(\"{0} [{1}]\", B, IF(A = 5, C, -1*C))"); res.Should().Be("Test string [1]"); }
private void button1_Click(object sender, EventArgs e) { var ce = new CalcEngine.CalcEngine(); var dct = new CalcDictionary(ce); ce.Variables = dct; dct["Amount"] = 12; dct["OfferPrice"] = 12.32; dct["Item1"] = "=Amount * OfferPrice"; dct["Item2"] = "=Item1 * 0.06"; // this will print "8.8704" // (Amount * OfferPrice) * 0.06 = 12 * 12.32 * 0.06 = 8.8704 Console.WriteLine(ce.Evaluate("Item2")); }
public void TestSKUExample() { var engine = new CalcEngine.CalcEngine(); engine.DataContext = new SKUTestClass() { SKUNAME = "test", SKUCOUNT = 1, SKUCLIENT = null }; var res = (string)engine.Evaluate("FORMAT(\"{0}, {1}{2}\",SKUNAME,SKUCOUNT,IF(SKUCLIENT = null, \", *\", \"\"))"); //engine.Variables.Add("privet", 66); //res = (string)engine.Evaluate("FORMAT(\"{0}, {1}{2}{3}\",SKUNAME,SKUCOUNT,IF(SKUCLIENT = null, \", *\", \"\"),privet)"); res.Should().Be("test, 1, *"); }
public void TestCalcEngineLastDateInInterval() { string[] mask = { "dd.MM.yyyy", "dd.MM.yyyy", "dd.MM.yyyy", "dd.MM.yyyy" }; string[] example = { "10.01.2014", "15.01.2014", "01.01.2014 - 31.01.2014", "c 01.01.2014 по 31.01.2014" }; string[] answer = { "10.01.2014", "15.01.2014", "31.01.2014", "31.01.2014" }; var engine = new CalcEngine.CalcEngine(); for (int i = 0; i < example.Length; i++) { engine.Variables.Clear(); engine.Variables.Add("Mask", mask[i]); engine.Variables.Add("Date", example[i]); var res = (string)engine.Evaluate("LASTDATEININTERVAL(Date,Mask)"); res.Should().Be(answer[i]); } }
public StatisticalFunctionTest() { calcEngine = new CalcEngine.CalcEngine(); }
public CalcUnaryExpressionTest() { calcEngine = new CalcEngine.CalcEngine(); }
public CalcBindingExpressionTest2() { calcEngine = new CalcEngine.CalcEngine(); calcEngine.DataContext = students = TestData.GetStudents(); }
private IViewModel GetViewModel() { var panelCaption = LookupTitle; var itemsSourceType = GetItemsSourceType(); if (string.IsNullOrEmpty(panelCaption) && itemsSourceType != null) { panelCaption = GetCaption(itemsSourceType); } switch (LookupType) { case RclLookupType.Default: var itemsSource = new List <CustomSelectControlBase.SelectListItem>(); var data = ItemsSource as IList; if (data != null && data.Count > 0) { PropertyDescriptorCollection prdesc = null; PropertyDescriptor idProp = null; PropertyDescriptor displayMemberProp = null; CalcEngine.CalcEngine engine = null; if (!string.IsNullOrEmpty(CustomDisplayMember)) { engine = new CalcEngine.CalcEngine(); } var id = 0; foreach (var d in data) { if (prdesc == null) { prdesc = TypeDescriptor.GetProperties(d); } if (idProp == null) { idProp = prdesc.Find(ValueMember, true); } if (displayMemberProp == null) { displayMemberProp = prdesc.Find(DisplayMember, true); } var item = new CustomSelectControlBase.SelectViewItem { Id = idProp.GetValue(d) }; if (engine != null) { try { engine.DataContext = d; item.Name = engine.Evaluate(CustomDisplayMember).To <string>(); } catch (Exception ex) { _log.WarnFormat( "При попытке получить описание по CustomDisplayMember='{0}' возникла ошибка: {1}", CustomDisplayMember, ExceptionHelper.ExceptionToString(ex)); _log.Debug(ex); // прописываем текст из DisplayMember item.Name = displayMemberProp.GetValue(d).To <string>(); } } else { item.Name = displayMemberProp.GetValue(d).To <string>(); } var listItem = new CustomSelectControlBase.SelectListItem { Id = id++, Value = item }; itemsSource.Add(listItem); } } var model = new CustomComboBoxEditRclContentViewModel { ItemsSource = itemsSource, SelectedItem = EditValue, FontSize = FontSize, UseFunctionKeys = UseFunctionKeys, ParentKeyPreview = ParentKeyPreview, PanelCaption = panelCaption }; if (MaxRowsOnPage.HasValue) { model.MaxRowsOnPage = MaxRowsOnPage.Value; } return(model); case RclLookupType.DefaultGrid: if (itemsSourceType == null) { return(null); } var destType = typeof(RclLookupViewModel <>).MakeGenericType(itemsSourceType); var rclListViewModel = (IRclListViewModel)Activator.CreateInstance(destType); rclListViewModel.PanelCaption = panelCaption; rclListViewModel.FontSize = FontSize; rclListViewModel.SetItemsSource(ItemsSource); rclListViewModel.LayoutValue = LayoutValue; rclListViewModel.IsWfDesignMode = IsWfDesignMode; rclListViewModel.SelectedItem = EditValue; return(rclListViewModel); } return(null); }
private List <SelectListItem> PrepareItemSource(string valueMember, string displayMember, ICollection itemsSource) { const string rownumvariable = "rownumvariable"; var result = new List <SelectListItem>(); if (!string.IsNullOrEmpty(valueMember) && !string.IsNullOrEmpty(displayMember) && itemsSource != null && itemsSource.Count > 0) { PropertyDescriptorCollection prdesc = null; PropertyDescriptor idProp = null; PropertyDescriptor displayMemberProp = null; CalcEngine.CalcEngine engine = null; var customDisplayMember = CustomDisplayMember; if (!string.IsNullOrEmpty(CustomDisplayMember)) { engine = new CalcEngine.CalcEngine(); if (customDisplayMember.Contains(ValueDataFieldConstants.RowNumberFlag)) { customDisplayMember = CustomDisplayMember.Replace(ValueDataFieldConstants.RowNumberFlag, rownumvariable); if (!engine.Variables.ContainsKey(rownumvariable)) { engine.Variables.Add(rownumvariable, 0); } } } var id = 0; foreach (var d in itemsSource) { if (prdesc == null) { prdesc = TypeDescriptor.GetProperties(d); } if (idProp == null) { idProp = prdesc.Find(valueMember, true); } if (displayMemberProp == null) { displayMemberProp = prdesc.Find(displayMember, true); } var item = new SelectViewItem { Id = idProp.GetValue(d) }; if (engine != null) { try { if (engine.Variables.ContainsKey(rownumvariable)) { engine.Variables[rownumvariable] = id + 1; } engine.DataContext = d; item.Name = engine.Evaluate(customDisplayMember).To <string>(); } catch (Exception ex) { _log.WarnFormat("При попытке получить описание по CustomDisplayMember='{0}' возникла ошибка: {1}", CustomDisplayMember, ExceptionHelper.ExceptionToString(ex)); _log.Debug(ex); // прописываем текст из DisplayMember item.Name = displayMemberProp.GetValue(d).To <string>(); } } else { item.Name = displayMemberProp.GetValue(d).To <string>(); } var listItem = new SelectListItem { Id = id++, Value = item }; result.Add(listItem); } } return(result); }
public void Dispose() { calcEngine = null; }
public CalcDictionary(CalcEngine.CalcEngine ce) { _ce = ce; _dct = new Dictionary <string, object>(); }
public MathFunctionTest() { calcEngine = new CalcEngine.CalcEngine(); }
static void RunBenchmark(BenchmarkKind which) { var yamp = new YAMP.Parser(); var mpparser = new MathParser.Parser(); var mptk = new MathParserTK_NET.MathParserTK(); var mpnet = new MathParserNet.Parser(); var mfmp = new MathFunctions.MathParser(); var llmp = new MathParserDataStructures.MathObj(); var calcEngine = new CalcEngine.CalcEngine(); calcEngine.CacheExpressions = false; var lines = new string[0]; switch (which) { case BenchmarkKind.Standard: // UB //YAMP : 154 ms //LLMP : 108 ms //MP : 4134 ms //MPTK : 375 ms //MPNET : 3054 ms //MFP : 88 ms //CALEN : 33 ms //NCALC : 420 ms lines = MakeTenK("2-3*5+7/2-8*2"); break; case BenchmarkKind.File: // UB //YAMP : 2084 ms //LLMP : 1072 ms //MP : 372847 ms //MPTK : --- //MPNET : --- //MFP : --- //CALEN : 271 ms //NCALC : --- if (!File.Exists(BMK_FILE)) GenerateBenchmarks(); lines = File.ReadAllLines(BMK_FILE); break; case BenchmarkKind.Little: // UB //YAMP : 71 ms //LLMP : 59 ms //MP : 1840 ms //MPTK : 87 ms //MPNET : 3232 ms //MFP : 37 ms //CALEN : 23 ms //NCALC : 247 ms lines = MakeTenK("2+3"); break; case BenchmarkKind.Thomson: // UB //YAMP : 193 ms //LLMP : 138 ms //MP : 11508 ms //MPTK : 647 ms //MPNET : 3827 ms //MFP : --- //CALEN : 41 ms //NCALC : --- lines = MakeTenK("2-(3*5)^2+7/(2-8)*2"); break; } Console.WriteLine("Starting benchmarks ..."); Console.WriteLine("----------"); // The implementation here... YAMP Benchmark("YAMP", lines, query => yamp.Evaluate(query)); //http://www.codeproject.com/Articles/53001/LL-Mathematical-Parser Benchmark("LLMathParser", lines, query => llmp.Evaluate(query, new char[0], new double[0])); //http://www.codeproject.com/Articles/11164/Math-Parser Benchmark("MathParser", lines, query => mpparser.Evaluate(query)); //http://www.codeproject.com/Tips/381509/Math-Parser-NET-Csharp Benchmark("MathParserTK", lines, query => mptk.Parse(query, false)); //http://www.codeproject.com/Articles/274093/Math-Parser-NET Benchmark("MathParserNet", lines, query => mpnet.Simplify(query)); //http://www.codeproject.com/Articles/23061/MathParser-Math-Formula-Parser Benchmark("MathFormulaParser", lines, query => mfmp.Calculate(query)); //http://www.codeproject.com/Articles/246374/A-Calculation-Engine-for-NET Benchmark("CalcEngine", lines, query => calcEngine.Evaluate(query)); //http://ncalc.codeplex.com/ //Benchmark("NCalc", lines, query => new NCalc.Expression(query, NCalc.EvaluateOptions.NoCache).Evaluate()); }
public void TestCalcEngineHourDiff() { //HourDiff([дата с], [дата по],[формат даты]) string[] maskDate = { "dd.MM.yyyy HH:mm", "dd.MM.yyyy HH:mm" }; string[] dateFrom = { "01.01.2014 11:00", "01.02.2014 21:00" }; string[] dateTo = { "01.01.2014 13:30", "02.02.2014 03:00" }; double[] answerDate = { 2.5, 6 }; //HourDiff([период с по],[формат даты]) string[] maskInterval = { "dd.MM.yyyy HH:mm", "dd.MM.yyyy HH:mm", }; string[] interval = { "01.01.2014 15:30 - 01.01.2014 16:00 ", " c 01.01.2014 22:00 по 02.01.2014 02:00" }; double[] answerInterval = { 0.5, 4 }; //HourDiff([время с], [время по]) string[] timeFrom = { "11:00", "21:00" }; string[] timeTo = { "13:30", "00:00" }; double[] answerTime = { 2.5, 3 }; //HourDiff([период времен]) string[] timeInterval = { "09:00 - 13:30", "21:00 - 00:00" }; double[] answerTimeInterval = { 4.5, 3 }; var engine = new CalcEngine.CalcEngine(); for (int i = 0; i < dateFrom.Length; i++) { engine.Variables.Clear(); engine.Variables.Add("Mask", maskDate[i]); engine.Variables.Add("DateFrom", dateFrom[i]); engine.Variables.Add("DateTo", dateTo[i]); var res = (double)engine.Evaluate("HOURDIFF(DateFrom,DateTo,Mask)"); res.Should().Be(answerDate[i]); } for (int i = 0; i < interval.Length; i++) { engine.Variables.Clear(); engine.Variables.Add("Mask", maskInterval[i]); engine.Variables.Add("Interval", interval[i]); var res = (double)engine.Evaluate("HOURDIFF(Interval,Mask)"); res.Should().Be(answerInterval[i]); } for (int i = 0; i < timeFrom.Length; i++) { engine.Variables.Clear(); engine.Variables.Add("TimeFrom", timeFrom[i]); engine.Variables.Add("TimeTo", timeTo[i]); var res = (double)engine.Evaluate("HOURDIFF(TimeFrom,TimeTo)"); res.Should().Be(answerTime[i]); } for (int i = 0; i < timeInterval.Length; i++) { engine.Variables.Clear(); engine.Variables.Add("TimeInterval", timeInterval[i]); var res = (double)engine.Evaluate("HOURDIFF(TimeInterval)"); res.Should().Be(answerTimeInterval[i]); } }
public CollectionFunctionTest() { calcEngine = new CalcEngine.CalcEngine(); calcEngine.DataContext = students = TestData.GetStudents(); }
public CalcCommand() { engine = new CalcEngine.CalcEngine(); engine.Variables[VARIABLE_RESULT] = 0; }
public CalcXObjectExpressionTest() { calcEngine = new CalcEngine.CalcEngine(); }
public CalcFunctionExpressionTest() { calcEngine = new CalcEngine.CalcEngine(); }
public ExpressionContext() { Expressions = new Dictionary <string, Expression>(); Variables = new Dictionary <string, object>(); _calEngine = new CalcEngine.CalcEngine(); }
static void RunBenchmark(BenchmarkKind which) { var yamp = YAMP.Parser.PrimaryContext; var mpparser = new MathParser.Parser(); var mptk = new MathParserTK_NET.MathParserTK(); var mpnet = new MathParserNet.Parser(); var mfmp = new MathFunctions.MathParser(); var llmp = new MathParserDataStructures.MathObj(); var calcEngine = new CalcEngine.CalcEngine(); calcEngine.CacheExpressions = false; var lines = new string[0]; switch (which) { case BenchmarkKind.Standard: // UB //YAMP : 154 ms //LLMP : 108 ms //MP : 4134 ms //MPTK : 375 ms //MPNET : 3054 ms //MFP : 88 ms //CALEN : 33 ms //NCALC : 420 ms lines = MakeTenK("2-3*5+7/2-8*2"); break; case BenchmarkKind.File: // UB //YAMP : 2084 ms //LLMP : 1072 ms //MP : 372847 ms //MPTK : --- //MPNET : --- //MFP : --- //CALEN : 271 ms //NCALC : --- if (!File.Exists(BMK_FILE)) { GenerateBenchmarks(); } lines = File.ReadAllLines(BMK_FILE); break; case BenchmarkKind.Little: // UB //YAMP : 71 ms //LLMP : 59 ms //MP : 1840 ms //MPTK : 87 ms //MPNET : 3232 ms //MFP : 37 ms //CALEN : 23 ms //NCALC : 247 ms lines = MakeTenK("2+3"); break; case BenchmarkKind.Thomson: // UB //YAMP : 193 ms //LLMP : 138 ms //MP : 11508 ms //MPTK : 647 ms //MPNET : 3827 ms //MFP : --- //CALEN : 41 ms //NCALC : --- lines = MakeTenK("2-(3*5)^2+7/(2-8)*2"); break; } Console.WriteLine("Starting benchmarks ..."); Console.WriteLine("----------"); // The implementation here... YAMP Benchmark("YAMP", lines, query => yamp.Run(query)); //http://www.codeproject.com/Articles/53001/LL-Mathematical-Parser Benchmark("LLMathParser", lines, query => llmp.Evaluate(query, new char[0], new double[0])); //http://www.codeproject.com/Articles/11164/Math-Parser Benchmark("MathParser", lines, query => mpparser.Evaluate(query)); //http://www.codeproject.com/Tips/381509/Math-Parser-NET-Csharp Benchmark("MathParserTK", lines, query => mptk.Parse(query, false)); //http://www.codeproject.com/Articles/274093/Math-Parser-NET Benchmark("MathParserNet", lines, query => mpnet.Simplify(query)); //http://www.codeproject.com/Articles/23061/MathParser-Math-Formula-Parser Benchmark("MathFormulaParser", lines, query => mfmp.Calculate(query)); //http://www.codeproject.com/Articles/246374/A-Calculation-Engine-for-NET Benchmark("CalcEngine", lines, query => calcEngine.Evaluate(query)); //http://ncalc.codeplex.com/ //Benchmark("NCalc", lines, query => new NCalc.Expression(query, NCalc.EvaluateOptions.NoCache).Evaluate()); }
public LogicalFunctionTest() { calcEngine = new CalcEngine.CalcEngine(); }
public TextFunctionTest() { calcEngine = new CalcEngine.CalcEngine(); }
private static void EvaluateExpressionAndAssign(CalcExpressionVm calcVm, CellVm targetCell) { var expr = new CalcEngine.CalcEngine(); var result = (double)expr.Evaluate(calcVm.Expression); if (UpdateContextIsCellValue(calcVm.UpdateContext)) { targetCell.Value = FormatCellValue(result, targetCell); } else { FormatCellHoverAddition(result, targetCell); } }
private void Calc() { var cpv = _billOperation2Contract.Operation2ContractCpvL; if (cpv != null) { var formulaDate = cpv.FirstOrDefault(p => p != null && p.CustomParamCode.EqIgnoreCase("BillO2CCalcFDateL2")); var formulaDateStr = formulaDate != null && _dateTimeFormats != null ? formulaDate.CPVValue : string.Empty; var formulaCount = cpv.FirstOrDefault(p => p != null && p.CustomParamCode.EqIgnoreCase("BillO2CCalcFCountL2")); var formulaCountStr = formulaCount != null ? formulaCount.CPVValue : string.Empty; var formulaFactor = cpv.FirstOrDefault(p => p != null && p.CustomParamCode.EqIgnoreCase("BillO2CCalcFFactorL2")); var formulaFactorStr = formulaFactor != null ? formulaFactor.CPVValue : string.Empty; var formulaSumm = cpv.FirstOrDefault(p => p != null && p.CustomParamCode.EqIgnoreCase("BillO2CCalcFSummL2")); var formulaSummStr = formulaSumm != null ? formulaSumm.CPVValue : string.Empty; var engine = new CalcEngine.CalcEngine { DataContext = Source }; //дата DateTime?date; if (!formulaDateStr.IsNullOrEmptyAfterTrim()) { var culture = System.Threading.Thread.CurrentThread.CurrentCulture; try { date = new StringToDateTimeConverter().Convert(engine.Evaluate(formulaDateStr), null, _dateTimeFormats, culture) as DateTime?; } catch (Exception) { date = null; } } else { date = _defaltCalcDate; } //цена double price = 0; if (date.HasValue) { using (var mgrTariff = IoC.Instance.Resolve <IBaseManager <BillTariff> >()) { var filter = string.Format( "operation2contractid_r = {0} and TO_DATE('{1}','YYYY.MM.DD') >= tariffdatefrom and TO_DATE('{1}','YYYY.MM.DD') < tariffdatetill", Source.Operation2ContractID, ((DateTime)date).ToString("yyyy.MM.dd")); var values = mgrTariff.GetFiltered(filter).ToArray(); if (values.Length == 1) { price = values[0].Value; } } } engine.Variables.Add("PRICE", price); //кол-во double count; if (!formulaCountStr.IsNullOrEmptyAfterTrim()) { try { if (!double.TryParse(engine.Evaluate(formulaCountStr).ToString(), out count)) { count = 0; } } catch (Exception) { count = 0; } } else { count = DefaultCalcCount; } Source.WorkActDetailCount = count; //коэффициент double factor; if (!formulaFactorStr.IsNullOrEmptyAfterTrim()) { try { if (!double.TryParse(engine.Evaluate(formulaFactorStr).ToString(), out factor)) { factor = 0; } } catch (Exception) { factor = 0; } } else { factor = DefaultCalcFactor; } Source.WorkActDetailMulti = factor; //сумма if (!Source.IsEnabledTotalSum) { double summ = 0; if (!formulaSummStr.IsNullOrEmptyAfterTrim()) { try { if (!double.TryParse(engine.Evaluate(formulaSummStr).ToString(), out summ)) { summ = 0; } } catch (Exception) { summ = 0; } } Source.WorkActDetailTotalSum = summ; } } }
public CalcVariableExpressionTest() { calcEngine = new CalcEngine.CalcEngine(); calcEngine.Variables = TestData.GetDictory(); }