public void TestGradientWithoutIndices() { // Arrange1 double[] combinedAs1 = { 2, 3, 4, 5, 6 }; double[] combinedAs2 = { 9, 5, 1, 5, 8 }; double[] x = Vector.Random(5); var linearConstraint = new LinearConstraint(combinedAs1) { ShouldBe = ConstraintType.EqualTo, Value = 42 }; // Act1 double[] gradient = linearConstraint.Gradient(x); // Assert1 Assert.True(gradient.IsEqual(combinedAs1)); // Arrange2 linearConstraint.CombinedAs = combinedAs2; // Act2 double[] gradient2 = linearConstraint.Gradient(x); // Assert2 Assert.True(gradient2.IsEqual(combinedAs2)); }
public void TestGradientWithIndices() { // Arrange1 int[] indices1 = { 2, 4, 6 }; int[] indices2 = { 0, 4, 6 }; double[] combinedAs1 = { 2, 3, 4 }; double[] combinedAs2 = { 9, 5, 1 }; double[] x = Vector.Random(8); double[] expected1 = { 0, 0, 2, 0, 3, 0, 4, 0 }; double[] expected2 = { 0, 0, 9, 0, 5, 0, 1, 0 }; double[] expected3 = { 9, 0, 0, 0, 5, 0, 1, 0 }; var linearConstraint = new LinearConstraint(indices1.Length) { CombinedAs = combinedAs1, VariablesAtIndices = indices1, ShouldBe = ConstraintType.EqualTo, Value = 42 }; // Act1 double[] gradient = linearConstraint.Gradient(x); // Assert1 Assert.True(gradient.IsEqual(expected1)); // Arrange2 linearConstraint.CombinedAs = combinedAs2; // Act2 double[] gradient2 = linearConstraint.Gradient(x); // Assert2 Assert.True(gradient2.IsEqual(expected2)); // Arrange3 linearConstraint.VariablesAtIndices = indices2; // Act3 double[] gradient3 = linearConstraint.Gradient(x); // Assert3 Assert.True(gradient3.IsEqual(expected3)); }