예제 #1
0
        public async Task <bool> TryOptimize(bool setInitialValue, SimSpecs sim)
        {
            if (Equation == null)
            {
                return(true);
            }

            // No variables or itself
            var canBeOptimized = !Children.Any() && Equation.CanBeOptimized(FullName);

            if (!canBeOptimized)
            {
                return(Equation == null);
            }

            if (setInitialValue)
            {
                if (Equation.Variables.Count == 1 && Equation.Variables[0] == FullName)
                {
                    Equation.Replace(FullName, Value.ToString(CultureInfo.InvariantCulture));
                }

                var value = await Equation.InitialValue(Model);

                AdjustValue(value);
            }

            Equation = null;

            return(true);
        }
예제 #2
0
 public void SimSpecsTest()
 {
     _sim = new SimSpecs(10, 100);
     Assert.AreEqual(10, _sim.Start);
     Assert.AreEqual <uint>(0, _sim.Step);
     Assert.AreEqual(100, _sim.Stop);
 }
예제 #3
0
        public void RunTest5()
        {
            _sim = new SimSpecs(0, 0);
            while (_sim.Run())
            {
            }

            Assert.AreEqual(0, _sim.Time);
            Assert.AreEqual <uint>(0, _sim.Step);
        }
예제 #4
0
        public void Prepare(IVariable selfVariable, VariableCollection variables, SimSpecs sim)
        {
            if (variables == null)
            {
                throw new ArgumentNullException(nameof(variables));
            }

            foreach (var variable in Variables.Where(variables.Exists))
            {
                Expression.Parameters[variable] = variables[variable].Value;
            }
        }
예제 #5
0
        public async Task Update(VariableCollection variables, SimSpecs simulation)
        {
            if (Updated)
            {
                return;
            }

            var eval = await Equation.Evaluate(this, variables, simulation);

            AdjustValue(eval);
            Updated = true;
        }
예제 #6
0
        public void RunTest6()
        {
            _sim = new SimSpecs(0, 0)
            {
                DeltaTime = 0.25F
            };
            while (_sim.Run())
            {
            }

            Assert.AreEqual(0, _sim.Time);
            Assert.AreEqual <uint>(0, _sim.Step);
        }
예제 #7
0
        public async Task <float> Evaluate(IVariable selfVariable, VariableCollection variables, SimSpecs sim)
        {
            try
            {
                Prepare(selfVariable, variables, sim);
                return(Convert.ToSingle(await Expression.EvaluateAsync(sim?.Time, sim?.Step, sim?.DeltaTime)));
            }
            catch (ArgumentException ex)
            {
                throw new ArgumentException(" the internal details for this exception are as follows: \r\n" +
                                            ex.Message);
            }

            //todo Trace.WriteLineIf(World.LoggingSwitch.TraceVerbose, equation + "was calculate");
        }
예제 #8
0
 public async Task <bool> TryOptimize(bool setInitialValue, SimSpecs sim)
 {
     return(true);
 }
예제 #9
0
 public async Task Update(VariableCollection variables, SimSpecs simulation)
 {
     //
 }
예제 #10
0
 public void ClearTest()
 {
     _sim = new SimSpecs(10, 100, 0.5F);
     _sim.Clear();
     Assert.AreEqual <uint>(20, _sim.Step);
 }