Example #1
0
        public void PassingNameAndValueIntoConstructor_SetsNamePropertyAndSetsValueProperty()
        {
            ClVariable variable = new ClVariable("name", 111.1);

            Assert.AreEqual("name", variable.Name);
            Assert.AreEqual(111.1, variable.Value);
        }
Example #2
0
        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);
        }
Example #4
0
        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));
        }
Example #6
0
        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);
            }
        }
Example #7
0
        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));
        }
Example #8
0
        public void AddingValueStayConstraintMakesValueNotChange()
        {
            var x = new ClVariable("x", 5);

            _solver.AddStay(x);

            Assert.IsTrue(Cl.Approx(x, 5));
        }
Example #9
0
        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);
 }
Example #11
0
        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"));
        }
Example #12
0
        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);
        }
Example #13
0
        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));
        }
Example #14
0
        public void Inconsistent1()
        {
            var x = new ClVariable("x");


            _solver
            .AddConstraint(new ClLinearEquation(x, 10.0))
            .AddConstraint(new ClLinearEquation(x, 5.0));
        }
Example #15
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);
        }
Example #16
0
        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);
        }
Example #17
0
        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
        }
Example #18
0
        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
        }
Example #19
0
        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
        }
Example #20
0
 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;
     }
 }
Example #21
0
        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);
        }
Example #23
0
        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));
        }
Example #24
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))
                );
        }
Example #25
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);
        }
Example #26
0
        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);
        }
Example #27
0
        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));
        }
Example #28
0
        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);
        }
Example #29
0
        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;
                }
            }
        }
Example #31
0
    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);
    }