public void TestExpressionVariableProvider() { var input = new Dictionary <string, string>() { { "A", "B*C" }, { "B", "C * 10" }, { "C", "SQRT[4] * 5" } }; var variableProvider = new ExpressionVariableProvider(input, DefaultFunctionProvider.Instance); var result = variableProvider.Lookup("A"); Assert.AreEqual(1000, result); }
public void TestAllDataDrivenTestCases() { foreach (var sourceFile in Directory.EnumerateFiles(@".\Data", "*.csv")) { using (var sr = new StreamReader(sourceFile)) { using (var csvReader = new CsvReader(sr)) { var assertions = new List <Tuple <string, double> >(); var expressions = new Dictionary <string, string>(); var dependencyMap = new Dictionary <string, HashSet <string> >(); foreach (var expressionEntry in csvReader.GetRecords <DataDrivenTestCase>()) { expressions.Add(expressionEntry.Name, expressionEntry.Expression); assertions.Add(new Tuple <string, double>(expressionEntry.Name, expressionEntry.Expected)); dependencyMap.Add(expressionEntry.Name, CsWrapper.ExtractExpressionDependencies(CsWrapper.ParseFormula(expressionEntry.Expression))); } var variableProvider = new ExpressionVariableProvider(expressions, DefaultFunctionProvider.Instance); foreach (var assertion in assertions) { foreach (var dependency in dependencyMap[assertion.Item1]) { Assert.IsTrue(dependencyMap.ContainsKey(dependency), $"Missing dependency {assertion.Item1}->{dependency}"); } Assert.AreEqual(assertion.Item2, variableProvider.Lookup(assertion.Item1)); Assert.AreEqual(assertion.Item2, CsWrapper.InterpretFormula(expressions[assertion.Item1], variableProvider)); } Console.WriteLine($"Validated {assertions.Count} entries from {sourceFile}"); } } } }