public void Abs() { var abs = Equations.CreateEquation <int>("abs(x)"); Assert.AreEqual(3, abs.GetValue(-3)); Assert.AreEqual(3, abs.GetValue(3)); }
/// <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); }
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)); }
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)); }
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)); }
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"); }
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); }