public void GoldfarbIdnaniConstructorTest5()
{
// min 1x² - 2xy + 3y² +z² - 4x - 5y -z, 6x-7y <= 8, 9x + 1y <= 11, 9x-y <= 11, -z-y = 12
// http://www.wolframalpha.com/input/?i=min+1x%C2%B2+-+2xy+%2B+3y%C2%B2+%2Bz%C2%B2+-+4x+-+5y+-z%2C+6x-7y+%3C%3D+8%2C+9x+%2B+1y+%3C%3D+11%2C+9x-y+%3C%3D+11%2C+-z-y+%3D+12
double x = 0, y = 0, z = 0;
var f = new QuadraticObjectiveFunction(() => x * x - 2 * x * y + 3 * y * y + z * z - 4 * x - 5 * y - z);
List<LinearConstraint> constraints = new List<LinearConstraint>();
constraints.Add(new LinearConstraint(f, () => 6 * x - 7 * y <= 8));
constraints.Add(new LinearConstraint(f, () => 9 * x + 1 * y <= 11));
constraints.Add(new LinearConstraint(f, () => 9 * x - y <= 11));
constraints.Add(new LinearConstraint(f, () => -z - y == 12));
GoldfarbIdnani target = new GoldfarbIdnani(f, constraints);
bool success = target.Minimize();
double value = target.Value;
Assert.IsTrue(success);
Assert.AreEqual(14376 / 109.0, value, 1e-10);
Assert.AreEqual(-186 / 109.0, target.Solution[0], 1e-10);
Assert.AreEqual(-284 / 109.0, target.Solution[1], 1e-10);
Assert.AreEqual(-1024 / 109.0, target.Solution[2], 1e-10);
foreach (double v in target.Solution)
Assert.IsFalse(double.IsNaN(v));
}