public async Task CreateInstanceTest8() { _factory = await EquationFactory.CreateInstance(string.Empty, SimpleEquation1); Assert.AreEqual(1, _factory.Equation.Variables.Count); Assert.AreEqual("_Variable_1", _factory.Equation.Variables[0]); }
public async Task CaseInsensitiveTest(string function, float value) { _factory = await EquationFactory.CreateInstance(string.Empty, function); Assert.IsNull(_factory.Equation); Assert.AreEqual(value, _factory.Value); }
/// <summary> /// Modules connect variables together /// This method make the connection and prepare the connected variables /// </summary> public async Task ResolveConnects() { foreach (var module in Variables.Modules.ToImmutableList()) { var connects = module.Connects; foreach (var connect in connects.ToImmutableList()) { var to = Variables.Get(connect.To); var from = Variables.Get(connect.From); if (to.Access != VariableAccess.Input || from.Access != VariableAccess.Output) { continue; } if (to is Stock) { // to prevent the computation of toVariable as a stock, it is cast as an auxiliary Variables[to.FullName] = new Auxiliary(to.Name, to.Model); to = Variables[to.FullName]; } var factory = await EquationFactory.CreateInstance(from.Model, from.Name); to.Equation = factory.Equation; to.Value = factory.Value; //to.Equation = new Equation(from.FullName) {Variables = new List<string> {from.FullName}}; //to.Value = from.Value; to.Children = new List <string> { from.FullName }; } Variables.Remove(module.FullName); } }
public static async Task <T> CreateVariable <T>(string name, string model, string eqn, GraphicalFunction graph, Range range, Range scale, NonNegative nonNegative, VariableAccess access) where T : IVariable, new() { var variable = new T { Model = model, Name = StringUtils.CleanName(name), GraphicalFunction = graph, Range = range, Scale = scale, Units = Units.CreateInstanceFromEquation(eqn), NonNegative = nonNegative, Access = access }; variable.FullName = StringUtils.FullName(variable.Model, variable.Name); var factory = await EquationFactory.CreateInstance(model, eqn); variable.Equation = factory.Equation; variable.Value = factory.Value; variable.AdjustValue(factory.Value); variable.Initialize(); variable.SetChildren(); return(variable); }
public async Task CreateInstanceTest10() { _factory = await EquationFactory.CreateInstance(string.Empty, ComplexEquation1); Assert.AreEqual(3, _factory.Equation.Variables.Count); Assert.AreEqual("_Variable_1", _factory.Equation.Variables[0]); Assert.AreEqual("_Variable2", _factory.Equation.Variables[1]); Assert.AreEqual("_Variable3", _factory.Equation.Variables[2]); }
public async Task GetParametersTest5() { const string function = @"SMTH1((Junior_doctor's__base_salary*Annual__Pay_Change),.5)"; _factory = await EquationFactory.CreateInstance(string.Empty, function); Assert.AreEqual(2, _factory.Equation.Variables.Count); Assert.AreEqual("_Junior_doctors_base_salary", _factory.Equation.Variables[0]); Assert.AreEqual("_Annual_pay_change", _factory.Equation.Variables[1]); }
public async Task CreateInstanceTest9() { _factory = await EquationFactory.CreateInstance(string.Empty, ComplexEquation); Assert.AreEqual(5, _factory.Equation.Variables.Count); Assert.AreEqual("_Name", _factory.Equation.Variables[0]); Assert.AreEqual("_Dt", _factory.Equation.Variables[1]); Assert.AreEqual("_Variable_1", _factory.Equation.Variables[2]); Assert.AreEqual("_Variable2", _factory.Equation.Variables[3]); Assert.AreEqual("_Time", _factory.Equation.Variables[4]); }
public async Task EvaluateTest(string function, float expected) { var factory = await EquationFactory.CreateInstanceAsync(string.Empty, function, null); Assert.AreEqual(expected, factory.Value); //var ifThenElse = await IfThenElse.CreateIfThenElse(string.Empty, function); //await ifThenElse.Prepare(Machine.Models.GetVariables().First(), Machine.Models.GetVariables(), Machine.Simulation); //Assert.AreEqual(expected, await ifThenElse.Evaluate(null, Machine.Models.GetVariables(), Machine.Simulation)); }
public static async Task <T> CreateVariable <T>(string name, string model, string eqn) where T : IVariable, new() { var variable = new T { Model = model, Name = StringUtils.CleanName(name), Units = Units.CreateInstanceFromEquation(eqn), NonNegative = new NonNegative(false) }; variable.FullName = StringUtils.FullName(variable.Model, variable.Name); var factory = await EquationFactory.CreateInstance(model, eqn); variable.Equation = factory.Equation; variable.Value = factory.Value; variable.Initialize(); variable.SetChildren(); return(variable); }
/// <summary> /// stock(t) = stock(t - dt) + dt*(inflows(t - dt) – outflows(t - dt)) /// Re compute SetChildren with the new equation /// </summary> public async Task SetStockEquation(string dt) { var equation = Name; var inflows = AggregateFlows(Inflow, "+"); var outflows = AggregateFlows(Outflow, "-"); if (inflows.Length > 0 || outflows.Length > 0) { equation += "+" + dt + "*(" + inflows; if (outflows.Length > 0) { equation += "-" + outflows; } equation += ")"; } Equation = (await EquationFactory.CreateInstance(Model, equation)).Equation; SetChildren(); }
public async Task CreateInstanceTest2() { await Assert.ThrowsExceptionAsync <ArgumentException>(async() => await EquationFactory.CreateInstance(string.Empty, "Func()")); }