public void test_managing_edit_variable() { // Test adding/removing edit variables. var s = new Solver(); var v1 = new Variable("foo"); var v2 = new Variable("bar"); Assert.False(s.HasEditVariable(v1)); s.AddEditVariable(v1, Strength.Weak); Assert.True(s.HasEditVariable(v1)); Assert.Throws <DuplicateEditVariable>(() => s.AddEditVariable(v1, Strength.Medium)); Assert.Throws <UnknownEditVariable>(() => s.RemoveEditVariable(v2)); s.RemoveEditVariable(v1); Assert.False(s.HasEditVariable(v1)); Assert.Throws <BadRequiredStrength>(() => s.AddEditVariable(v1, Strength.Required)); s.AddEditVariable(v2, Strength.Strong); Assert.True(s.HasEditVariable(v2)); Assert.Throws <UnknownEditVariable>(() => s.SuggestValue(v1, 10)); s.Reset(); Assert.False(s.HasEditVariable(v2)); }
public void test_solving_under_constrained_system() { // Test solving an under constrained system. var s = new Solver(); var v = new Variable("foo"); var c = 2 * v + 1 >= 0; s.AddEditVariable(v, Strength.Weak); s.AddConstraint(c); s.SuggestValue(v, 10); s.UpdateVariables(); Assert.Equal(21, c.Expression.Value); Assert.Equal(20, c.Expression.Terms[0].Value); Assert.Equal(10, c.Expression.Terms[0].Variable.Value); }