public void PassingNameAndValueIntoConstructor_SetsNamePropertyAndSetsValueProperty() { ClVariable variable = new ClVariable("name", 111.1); Assert.AreEqual("name", variable.Name); Assert.AreEqual(111.1, variable.Value); }
public void AddingAndRemovingConstraintsUpdatesValue() { var x = new ClVariable("x"); _solver.AddConstraint(new ClLinearEquation(x, 100, ClStrength.Weak)); var c10 = new ClLinearInequality(x, Cl.Operator.LessThanOrEqualTo, 10.0); var c20 = new ClLinearInequality(x, Cl.Operator.LessThanOrEqualTo, 20.0); _solver.AddConstraint(c10).AddConstraint(c20); Assert.IsTrue(Cl.Approx(x, 10.0)); _solver.RemoveConstraint(c10); Assert.IsTrue(Cl.Approx(x, 20.0)); _solver.RemoveConstraint(c20); Assert.IsTrue(Cl.Approx(x, 100.0)); var c10Again = new ClLinearInequality(x, Cl.Operator.LessThanOrEqualTo, 10.0); _solver.AddConstraint(c10).AddConstraint(c10Again); Assert.IsTrue(Cl.Approx(x, 10.0)); _solver.RemoveConstraint(c10); Assert.IsTrue(Cl.Approx(x, 10.0)); _solver.RemoveConstraint(c10Again); Assert.IsTrue(Cl.Approx(x, 100.0)); }
public void SingleParameterGreaterThanOrEqualToExpressionRuntimeVars() { ClVariable variable = new ClVariable(Guid.NewGuid().ToString()); _solver.AddConstraint(variable, a => a >= 10); Assert.IsTrue(variable.Value >= 10); }
public void ToStringRepresentation_IncludesNameAndValue() { ClVariable variable = new ClVariable("name", 111.1); Assert.IsTrue(variable.ToString().Contains("name")); Assert.IsTrue(variable.ToString().Contains("111.1")); }
public void NonLinearExpressionThrowsException() { var a = new ClVariable("a"); var b = new ClVariable("b"); _solver.AddConstraint(a, b, (x, y) => (x / y) >= (y / x)); }
public static bool Inconsistent3() { try { ClVariable w = new ClVariable("w"); ClVariable x = new ClVariable("x"); ClVariable y = new ClVariable("y"); ClVariable z = new ClVariable("z"); ClSimplexSolver solver = new ClSimplexSolver(); solver .AddConstraint(new ClLinearInequality(w, Cl.GEQ, 10.0)) .AddConstraint(new ClLinearInequality(x, Cl.GEQ, w)) .AddConstraint(new ClLinearInequality(y, Cl.GEQ, x)) .AddConstraint(new ClLinearInequality(z, Cl.GEQ, y)) .AddConstraint(new ClLinearInequality(z, Cl.GEQ, 8.0)) .AddConstraint(new ClLinearInequality(z, Cl.LEQ, 4.0)); // no exception, we failed! return(false); } catch (ExClRequiredFailure) { // we want this exception to get thrown Console.WriteLine("-- got the exception"); return(true); } }
protected void AddNewControl(UIElement cntl) { ClVariable clX = FindClVariableByUIElementAndProperty(cntl, "X"); ClVariable clY = FindClVariableByUIElementAndProperty(cntl, "Y"); ClVariable clWidth = FindClVariableByUIElementAndProperty(cntl, "Width"); ClVariable clHeight = FindClVariableByUIElementAndProperty(cntl, "Height"); ClVariable clLeft = FindClVariableByUIElementAndProperty(cntl, "Left"); ClVariable clRight = FindClVariableByUIElementAndProperty(cntl, "Right"); ClVariable clCenter = FindClVariableByUIElementAndProperty(cntl, "Center"); ClVariable clMiddle = FindClVariableByUIElementAndProperty(cntl, "Middle"); ClVariable clTop = FindClVariableByUIElementAndProperty(cntl, "Top"); ClVariable clBottom = FindClVariableByUIElementAndProperty(cntl, "Bottom"); // X = Left solver.AddConstraint(new ClLinearEquation(clX, new ClLinearExpression(clLeft), ClStrength.Required)); // X = Center - (Width/2) solver.AddConstraint(new ClLinearEquation(clX, new ClLinearExpression(clCenter).Minus(new ClLinearExpression(clWidth).Divide(2)), ClStrength.Required)); // X = Right - Width solver.AddConstraintNoException(new ClLinearEquation(clX, new ClLinearExpression(clRight).Minus(clWidth), ClStrength.Required)); // Y = Top solver.AddConstraint(new ClLinearEquation(clY, new ClLinearExpression(clTop), ClStrength.Required)); // Y = Middle - (Height/2) solver.AddConstraint(new ClLinearEquation(clY, new ClLinearExpression(clMiddle).Minus(new ClLinearExpression(clHeight).Divide(2)), ClStrength.Required)); // Y = Bottom - Height solver.AddConstraint(new ClLinearEquation(clY, new ClLinearExpression(clBottom).Minus(clHeight), ClStrength.Required)); }
public void AddingValueStayConstraintMakesValueNotChange() { var x = new ClVariable("x", 5); _solver.AddStay(x); Assert.IsTrue(Cl.Approx(x, 5)); }
public void Playground() { var x = new ClVariable("x"); _solver.AddConstraint(x, a => a < -1); Assert.IsTrue(x.Value < -1); }
protected ClEditOrStayConstraint(ClVariable var, ClStrength strength, double weight = 1.0) : base(strength, weight) { _variable = var; _expression = new ClLinearExpression(_variable, -1.0, _variable.Value); }
public void PassingIdAndPrefixIntoConstructor_SetsNameProperty() { ClVariable variable = new ClVariable(1, "prefix"); Assert.IsNotNull(variable.Name); Assert.IsTrue(variable.Name.Contains("prefix")); Assert.IsTrue(variable.Name.Contains("1")); }
public void GreaterThanOrEqualToConstraint_ResolvesToAllowableValue() { ClVariable varA = new ClVariable("a"); ClVariable varB = new ClVariable("b"); _solver.AddConstraint(varA, varB, (a, b) => a >= b); Assert.IsTrue(varA.Value >= varB.Value); }
public void Inconsistent2() { var x = new ClVariable("x"); _solver .AddConstraint(new ClLinearInequality(x, Cl.Operator.GreaterThanOrEqualTo, 10.0)) .AddConstraint(new ClLinearInequality(x, Cl.Operator.LessThanOrEqualTo, 5.0)); }
public void Inconsistent1() { var x = new ClVariable("x"); _solver .AddConstraint(new ClLinearEquation(x, 10.0)) .AddConstraint(new ClLinearEquation(x, 5.0)); }
public void AddingConstraintToMakeTwoVariablesEqualMakesVariablesEqual() { var x = new ClVariable("x", 167); var y = new ClVariable("y", 2); var eq = new ClLinearEquation(x, new ClLinearExpression(y)); _solver.AddConstraint(eq); Assert.AreEqual(x.Value, y.Value); }
public void InconsistentConstraintsAreCorrectlyResolvedAccordingToStrength() { var x = new ClVariable("x"); // ReSharper disable CompareOfFloatsByEqualityOperator _solver.AddConstraint(x, a => a == 10, ClStrength.Strong); _solver.AddConstraint(x, a => a == 5, ClStrength.Medium); // ReSharper restore CompareOfFloatsByEqualityOperator Assert.IsTrue(Math.Abs(x.Value - 10.0) < float.Epsilon); }
public void EndEdit_Throws() { var value = new ClVariable("value", 0); var solver = new ClSimplexSolver(); solver.AddStay(value, ClStrength.Strong); solver.BeginEdit(value) .SuggestValue(value, 25) .EndEdit(); // <- Exception raised here }
public void FieldMemberAccessWithArithmeticExpression() { // ReSharper disable ConvertToConstant.Local float field = 1; // ReSharper restore ConvertToConstant.Local var variable = new ClVariable("a"); // ReSharper disable CompareOfFloatsByEqualityOperator _solver.AddConstraint(variable, a => a == -field / 2 * 3 + 4 - 2); // ReSharper restore CompareOfFloatsByEqualityOperator }
public void ConvertExpression() { // ReSharper disable ConvertToConstant.Local float field = 1; // ReSharper restore ConvertToConstant.Local var variable = new ClVariable("a"); // ReSharper disable CompareOfFloatsByEqualityOperator _solver.AddConstraint(variable, a => a == field); // ReSharper restore CompareOfFloatsByEqualityOperator }
void Variable(out ClVariable v) { Expect(12); if (Context.ContainsKey(t.val)) { v = (ClVariable)Context[t.val]; } else { SemErr("Undefined variable: " + t.val); v = null; } }
protected void SetValue(ClVariable v, double x, ClStrength s) { // TODO: Find a better way then manually adding/removing constriants. if (VarConstraints.ContainsKey(v.Name)) { ClLinearEquation eq = (ClLinearEquation)VarConstraints[v.Name]; solver.RemoveConstraint(eq); VarConstraints.Remove(v.Name); } ClLinearEquation eq2 = new ClLinearEquation(v, new ClLinearExpression(x), s); solver.AddConstraint(eq2); VarConstraints.Add(v.Name, eq2); }
protected ClVariable GetVariableFromViewAndAttribute(T view, LayoutAttribute attribute) { ClVariable variable = null; var viewAndAttribute = new ViewAndLayoutAttribute <T> (view, attribute); if (!variables.TryGetValue(viewAndAttribute, out variable)) { var value = viewEngine.GetAttribute(view, attribute); var name = string.Format("{0}.{1}", viewEngine.GetViewName(view), attribute.ToString()); variable = new ClVariable(name, value); variables.Add(viewAndAttribute, variable); } return(variable); }
public void Inconsistent3() { var w = new ClVariable("w"); var x = new ClVariable("x"); var y = new ClVariable("y"); var z = new ClVariable("z"); _solver .AddConstraint(new ClLinearInequality(w, Cl.Operator.GreaterThanOrEqualTo, 10.0)) .AddConstraint(new ClLinearInequality(x, Cl.Operator.GreaterThanOrEqualTo, w)) .AddConstraint(new ClLinearInequality(y, Cl.Operator.GreaterThanOrEqualTo, x)) .AddConstraint(new ClLinearInequality(z, Cl.Operator.GreaterThanOrEqualTo, y)) .AddConstraint(new ClLinearInequality(z, Cl.Operator.GreaterThanOrEqualTo, 8.0)) .AddConstraint(new ClLinearInequality(z, Cl.Operator.LessThanOrEqualTo, 4.0)); }
public void Casso1() { var x = new ClVariable("x"); var y = new ClVariable("y"); _solver .AddConstraint(new ClLinearInequality(x, Cl.Operator.LessThanOrEqualTo, y)) .AddConstraint(new ClLinearEquation(y, Cl.Plus(x, 3.0))) .AddConstraint(new ClLinearEquation(x, 10.0, ClStrength.Weak)) .AddConstraint(new ClLinearEquation(y, 10.0, ClStrength.Weak)); Assert.IsTrue( (Cl.Approx(x, 10.0) && Cl.Approx(y, 13.0)) || (Cl.Approx(x, 7.0) && Cl.Approx(y, 10.0)) ); }
public static bool JustStay1() { bool okResult = true; ClVariable x = new ClVariable(5); ClVariable y = new ClVariable(10); ClSimplexSolver solver = new ClSimplexSolver(); solver.AddStay(x); solver.AddStay(y); okResult = okResult && Cl.Approx(x, 5); okResult = okResult && Cl.Approx(y, 10); Console.WriteLine("x == " + x.Value); Console.WriteLine("y == " + y.Value); return(okResult); }
public static bool Simple1() { bool okResult = true; ClVariable x = new ClVariable(167); ClVariable y = new ClVariable(2); ClSimplexSolver solver = new ClSimplexSolver(); ClLinearEquation eq = new ClLinearEquation(x, new ClLinearExpression(y)); solver.AddConstraint(eq); okResult = (x.Value == y.Value); Console.WriteLine("x == " + x.Value); Console.WriteLine("y == " + y.Value); return(okResult); }
public void Multiedit() { var x = new ClVariable("x"); var y = new ClVariable("y"); var w = new ClVariable("w"); var h = new ClVariable("h"); var e1 = _solver .AddStay(x) .AddStay(y) .AddStay(w) .AddStay(h) .BeginEdit(x, y) .SuggestValue(x, 10) .SuggestValue(y, 20) .Resolve(); Assert.IsTrue(Cl.Approx(x, 10)); Assert.IsTrue(Cl.Approx(y, 20)); Assert.IsTrue(Cl.Approx(w, 0)); Assert.IsTrue(Cl.Approx(h, 0)); _solver .BeginEdit(w, h) .SuggestValue(w, 30) .SuggestValue(h, 40) .EndEdit(); Assert.IsTrue(Cl.Approx(x, 10)); Assert.IsTrue(Cl.Approx(y, 20)); Assert.IsTrue(Cl.Approx(w, 30)); Assert.IsTrue(Cl.Approx(h, 40)); e1 .SuggestValue(x, 50) .SuggestValue(y, 60) .EndEdit(); Assert.IsTrue(Cl.Approx(x, 50)); Assert.IsTrue(Cl.Approx(y, 60)); Assert.IsTrue(Cl.Approx(w, 30)); Assert.IsTrue(Cl.Approx(h, 40)); }
public void Playground() { var windowHeight = new ClVariable(1); _solver.AddStay(windowHeight); var doorHeightVariable = new ClVariable(2); _solver.AddStay(doorHeightVariable); var margin = new ClVariable("margin"); // ReSharper disable CompareOfFloatsByEqualityOperator _solver.AddConstraint(windowHeight, doorHeightVariable, margin, (wh, dh, wm) => ((5 - dh) - wh) == wm * 2); // ReSharper restore CompareOfFloatsByEqualityOperator Assert.AreEqual(5 - 2 - 1, margin.Value * 2); }
public static bool AddDelete1() { bool okResult = true; ClVariable x = new ClVariable("x"); ClSimplexSolver solver = new ClSimplexSolver(); solver.AddConstraint(new ClLinearEquation(x, 100, ClStrength.Weak)); ClLinearInequality c10 = new ClLinearInequality(x, Cl.LEQ, 10.0); ClLinearInequality c20 = new ClLinearInequality(x, Cl.LEQ, 20.0); solver .AddConstraint(c10) .AddConstraint(c20); okResult = okResult && Cl.Approx(x, 10.0); Console.WriteLine("x == " + x.Value); solver.RemoveConstraint(c10); okResult = okResult && Cl.Approx(x, 20.0); Console.WriteLine("x == " + x.Value); solver.RemoveConstraint(c20); okResult = okResult && Cl.Approx(x, 100.0); Console.WriteLine("x == " + x.Value); ClLinearInequality c10again = new ClLinearInequality(x, Cl.LEQ, 10.0); solver .AddConstraint(c10) .AddConstraint(c10again); okResult = okResult && Cl.Approx(x, 10.0); Console.WriteLine("x == " + x.Value); solver.RemoveConstraint(c10); okResult = okResult && Cl.Approx(x, 10.0); Console.WriteLine("x == " + x.Value); solver.RemoveConstraint(c10again); okResult = okResult && Cl.Approx(x, 100.0); Console.WriteLine("x == " + x.Value); return(okResult); }
void AddEditVar(ClSimplexSolver solver, ClVariable variable) { if (!isStay.ContainsKey(variable.Name)) { isStay.Add(variable.Name, 1); solver.AddStay(variable); solver.AddEditVar(variable, ClStrength.Strong); } else { var status = isStay[variable.Name]; if (status == 0) { solver.AddEditVar(variable); isStay[variable.Name] = 1; } } }
protected static void BuildVariables() { //////////////////////////////////////////////////////////////// // Individual widgets // //////////////////////////////////////////////////////////////// update_top = new ClVariable("update.top", 0); update_bottom = new ClVariable("update.bottom", 23); update_left = new ClVariable("update.left", 0); update_right = new ClVariable("update.right", 75); update_height = new ClVariable("update.height", 23); update_width = new ClVariable("update.width", 75); newpost_top = new ClVariable("newpost.top", 0); newpost_bottom = new ClVariable("newpost.bottom", 23); newpost_left = new ClVariable("newpost.left", 0); newpost_right = new ClVariable("newpost.right", 75); newpost_width = new ClVariable("newpost.width", 75); newpost_height = new ClVariable("newpost.height", 23); quit_bottom = new ClVariable("quit.bottom", 23); quit_right = new ClVariable("quit.right", 75); quit_height = new ClVariable("quit.height", 23); quit_width = new ClVariable("quit.width", 75); quit_left = new ClVariable("quit.left", 0); quit_top = new ClVariable("quit.top", 0); l_title_top = new ClVariable("l_title.top", 0); l_title_bottom = new ClVariable("l_title.bottom", 23); l_title_left = new ClVariable("l_title.left", 0); l_title_right = new ClVariable("l_title.right", 100); l_title_height = new ClVariable("l_title.height", 23); l_title_width = new ClVariable("l_title.width", 100); title_top = new ClVariable("title.top", 0); title_bottom = new ClVariable("title.bottom", 20); title_left = new ClVariable("title.left.", 0); title_right = new ClVariable("title.right", 100); title_height = new ClVariable("title.height", 20); title_width = new ClVariable("title.width", 100); l_body_top = new ClVariable("l_body.top", 0); l_body_bottom = new ClVariable("l_body.bottom", 23); l_body_left = new ClVariable("l_body.left", 0); l_body_right = new ClVariable("l_body.right", 100); l_body_height = new ClVariable("l_body.height.", 23); l_body_width = new ClVariable("l_body.width", 100); blogentry_top = new ClVariable("blogentry.top", 0); blogentry_bottom = new ClVariable("blogentry.bottom", 315); blogentry_left = new ClVariable("blogentry.left", 0); blogentry_right = new ClVariable("blogentry.right", 400); blogentry_height = new ClVariable("blogentry.height", 315); blogentry_width = new ClVariable("blogentry.width", 400); l_recent_top = new ClVariable("l_recent.top", 0); l_recent_bottom = new ClVariable("l_recent.bottom", 23); l_recent_left = new ClVariable("l_recent.left", 0); l_recent_right = new ClVariable("l_recent.right", 100); l_recent_height = new ClVariable("l_recent.height", 23); l_recent_width = new ClVariable("l_recent.width", 100); articles_top = new ClVariable("articles.top", 0); articles_bottom = new ClVariable("articles.bottom", 415); articles_left = new ClVariable("articles.left", 0); articles_right = new ClVariable("articles.right", 180); articles_height = new ClVariable("articles.height", 415); articles_width = new ClVariable("articles.width", 100); //////////////////////////////////////////////////////////////// // Container widgets // //////////////////////////////////////////////////////////////// topRight_top = new ClVariable("topRight.top", 0); //topRight_top = new ClVariable("topRight.top", 0); topRight_bottom = new ClVariable("topRight.bottom", 100); //topRight_bottom = new ClVariable("topRight.bottom", 100); topRight_left = new ClVariable("topRight.left", 0); //topRight_left = new ClVariable("topRight.left", 0); topRight_right = new ClVariable("topRight.right", 200); //topRight_right = new ClVariable("topRight.right", 200); topRight_height = new ClVariable("topRight.height", 100); //topRight_height = new ClVariable("topRight.height", 100); topRight_width = new ClVariable("topRight.width", 200); //topRight_width = new ClVariable("topRight.width", 200); //topRight_width = new ClVariable("topRight.width", 200); bottomRight_top = new ClVariable("bottomRight.top", 0); //bottomRight_top = new ClVariable("bottomRight.top", 0); bottomRight_bottom = new ClVariable("bottomRight.bottom", 100); //bottomRight_bottom = new ClVariable("bottomRight.bottom", 100); bottomRight_left = new ClVariable("bottomRight.left", 0); //bottomRight_left = new ClVariable("bottomRight.left", 0); bottomRight_right = new ClVariable("bottomRight.right", 200); //bottomRight_right = new ClVariable("bottomRight.right", 200); bottomRight_height = new ClVariable("bottomRight.height", 100); //bottomRight_height = new ClVariable("bottomRight.height", 100); bottomRight_width = new ClVariable("bottomRight.width", 200); //bottomRight_width = new ClVariable("bottomRight.width", 200); right_top = new ClVariable("right.top", 0); //right_top = new ClVariable("right.top", 0); right_bottom = new ClVariable("right.bottom", 100); //right_bottom = new ClVariable("right.bottom", 100); //right_bottom = new ClVariable("right.bottom", 100); right_left = new ClVariable("right.left", 0); //right_left = new ClVariable("right.left", 0); right_right = new ClVariable("right.right", 200); //right_right = new ClVariable("right.right", 200); right_height = new ClVariable("right.height", 100); //right_height = new ClVariable("right.height", 100); right_width = new ClVariable("right.width", 200); //right_width = new ClVariable("right.width", 200); //right_width = new ClVariable("right.width", 200); left_top = new ClVariable("left.top", 0); //left_top = new ClVariable("left.top", 0); left_bottom = new ClVariable("left.bottom", 100); //left_bottom = new ClVariable("left.bottom", 100); left_left = new ClVariable("left.left", 0); //left_left = new ClVariable("left.left", 0); left_right = new ClVariable("left.right", 200); //left_right = new ClVariable("left.right", 200); left_height = new ClVariable("left.height", 100); //left_height = new ClVariable("left.height", 100); left_width = new ClVariable("left.width", 200); //left_width = new ClVariable("left.width", 200); fr_top = new ClVariable("fr.top", 0); fr_bottom = new ClVariable("fr.bottom", 100); fr_left = new ClVariable("fr.left", 0); fr_right = new ClVariable("fr.right", 200); fr_height = new ClVariable("fr.height", 100); fr_width = new ClVariable("fr.width", 200); }