Пример #1
0
        public void Abs()
        {
            var abs = Equations.CreateEquation <int>("abs(x)");

            Assert.AreEqual(3, abs.GetValue(-3));
            Assert.AreEqual(3, abs.GetValue(3));
        }
Пример #2
0
        /// <summary>
        /// Returns a parsed equation from a string, validating that it appears to be a legitimate nth-child equation
        /// </summary>
        /// <param name="equationText"></param>
        /// <returns></returns>
        private IEquation <int> GetEquation(string equationText)
        {
            IEquation <int> equation;

            try
            {
                equation = Equations.CreateEquation <int>(equationText);
            }
            catch (InvalidCastException e)
            {
                throw new ArgumentException(String.Format("The equation {{0}} could not be parsed.", equationText), e);
            }

            IVariable variable;

            try
            {
                variable = equation.Variables.Single();
            }
            catch (InvalidOperationException e)
            {
                throw new ArgumentException(String.Format("The equation {{0}} must contain a single variable 'n'.", equation), e);
            }

            if (variable.Name != "n")
            {
                throw new ArgumentException(String.Format("The equation {{0}} does not have a variable 'n'.", equation));
            }
            return(equation);
        }
Пример #3
0
        public void Basic()
        {
            var eq = Equations.CreateEquation <int>("2+abs(x)");

            Assert.AreEqual("2+abs(x)", eq.ToString(), "Equation looks like it got parsed");
            Assert.AreEqual(6, eq.GetValue(3.5));

            var eq2 = Equations.CreateEquation <double>("2+abs(x)");

            Assert.AreEqual(5.5, eq2.GetValue(3.5));
        }
Пример #4
0
        public void Power()
        {
            var square = Equations.CreateEquation <int>("x^2");

            Assert.AreEqual(9, square.GetValue(3));

            square = Equations.CreateEquation <int>("(x+1)^2");
            Assert.AreEqual(4, square.GetValue(1));

            square = Equations.CreateEquation <int>("3*(x+2)^2");
            Assert.AreEqual(48, square.GetValue(2));
        }
Пример #5
0
        public void LeadingSigns()
        {
            var eq = Equations.CreateEquation <int>("+2");

            Assert.AreEqual("2", eq.ToString(), "Equation looks like it got parsed");
            Assert.AreEqual(2, eq.GetValue());

            eq = Equations.CreateEquation <int>("-n+1");
            Assert.AreEqual("-1*n+1", eq.ToString(), "Equation looks like it got parsed");
            Assert.AreEqual(-2, eq.GetValue(3));

            eq = Equations.CreateEquation <int>("n+1");
            Assert.AreEqual("n+1", eq.ToString(), "Equation looks like it got parsed");
            Assert.AreEqual(4, eq.GetValue(3));

            eq = Equations.CreateEquation <int>("-1n+1");
            Assert.AreEqual("-1*n+1", eq.ToString(), "Equation looks like it got parsed");
            Assert.AreEqual(-2, eq.GetValue(3));
        }
Пример #6
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");
        }
Пример #7
0
        public void ParseHTMLSpec()
        {
            string html;

            DateTime start = DateTime.Now;

            System.GC.Collect();
            var GC_MemoryStart = System.GC.GetTotalMemory(true);

            html = Support.GetFile("csquery\\csquery.tests\\resources\\HTML Standard.htm");
            for (int i = 0; i < iterationsLoad; i++)
            {
                Dom = CQ.Create(html);
            }
            var GC_MemoryEnd = System.GC.GetTotalMemory(true);

            DateTime loaded = DateTime.Now;

            int divSpan = 0;

            int randomLength = Dom.Select("p").Eq(22).RenderSelection().Length;

            var equation = Equations.CreateEquation <int>("2x+2");

            for (int i = 0; i < iterationsSelect; i++)
            {
                // todo: cache equations once parsed - should speed this up immenseley
                CQ sel = Dom.Select("div:nth-child(2n+1)");
                //CsQuery sel = Dom.Select("div span");

                // get length to force it to iterate through everything
                int len = sel.Length;

                //equation.SetVariable("x", 12);
                // var y = equation.Value;
            }

            CQ selFinal = Dom.Select("div span");

            divSpan = selFinal.Length;

            DateTime selected = DateTime.Now;


            for (int i = 0; i < iterationsClone; i++)
            {
                CQ c = Dom.Clone();
                Assert.AreEqual(divSpan, Dom.Select("div span").Length, "Clone wasn't equal in # of elements");
                string cloneContents = c.Select("p").Eq(22).RenderSelection();
                Assert.AreEqual(randomLength, cloneContents.Length, "Some random text was right");
            }
            DateTime done     = DateTime.Now;
            TimeSpan loadTime = loaded - start;

            string result = Dom.Select("div").Length + " div elements";

            result += ", " + Dom.Select("*").Length + " total elements";
            result += ", " + loadTime.TotalSeconds / iterationsLoad + " seconds to load domain";
            result += ", " + (selected - loaded).TotalSeconds / iterationsSelect + " seconds to perform select 'div span' - " + Dom.Select("div span").Length + " elements";
            result += ", " + (done - selected).TotalSeconds / iterationsClone + " seconds to cloning";
            result += ", " + (GC_MemoryEnd - GC_MemoryStart) + " bytes used by object";
            //Debug.WriteLine(result);
            Assert.Pass(result);
        }