Ejemplo n.º 1
0
 /// <summary>
 /// If the value is an operand, returns it, otherwise creates the right kind of operand
 /// </summary>
 /// <param name="value"></param>
 /// <returns></returns>
 public static IOperand EnsureOperand(IConvertible value)
 {
     if (value is IOperand)
     {
         return((IOperand)value);
     }
     else if (value is string)
     {
         //TODO: parse quotes and return a string liteeral if need be
         return(Equations.CreateVariable((string)value));
     }
     else
     {
         return(Equations.CreateLiteral(value));
     }
 }
Ejemplo n.º 2
0
        public void Clone_()
        {
            //var variable = Equations.CreateVariable<int>("x");
            var variable = Equations.CreateVariable("x");

            var lit = Equations.CreateLiteral <int>("120");
            //var clause = Equations.CreateClause<int>(lit, variable, "-");
            var clause = new Difference(lit, variable);

            var exp = Equations.CreateEquation <int>(clause);

            exp.SetVariable("x", 5);
            Assert.AreEqual(115, exp.Value, "Built an equation by hand and it worked");

            //clause.Operator = Equations.CreateOperator("*");

            //Assert.AreEqual(600, exp.Value, "Built an equation by hand and it worked");

            var litClone = lit.Clone();

            Assert.AreEqual(120, litClone.Value, "Literal cloned ok");
            var clauseClone = clause.Clone();
            var cloneVars   = clauseClone.Variables.FirstOrDefault();

            Assert.IsTrue(cloneVars != null, "Clone has variables");

            // 120 - x + 3
            clauseClone.AddOperand(3);
            var newExp = Equations.CreateEquation <int>(clauseClone);

            newExp.SetVariable("x", 2);

            Assert.AreEqual(121, newExp.Value, "Cloned & chained worked");
            Assert.AreEqual(115, exp.Value, "Original unaffected");

            var exp3 = Equations.CreateEquation <double>("10/(2*x+3-y*1.5*(3+5))+22.5");

            Assert.AreEqual(10 / (2 * 5 + 3 - 3 * 1.5 * (3 + 5)) + 22.5, exp3.GetValue(5, 3), "long equation");
        }