#include #include #include TEST_CASE("min_quad_with_fixed: dense", "[igl]" ) { const Eigen::Matrix H = (Eigen::Matrix(3,3)<<62,43,76,43,69,62,76,62,101).finished(); const Eigen::Matrix f = (Eigen::Matrix(3,1)<<9,8,5).finished(); const Eigen::Matrix A = (Eigen::Matrix(1,3)<<1,1,1).finished(); const Eigen::Matrix b = (Eigen::Matrix(1,1)<<2).finished(); const Eigen::Array k = (Eigen::Array()< bc = (Eigen::Matrix(3,1)<<1,0,0).finished(); // Windows needs template args spelled out const Eigen::Matrix x = igl::min_quad_with_fixed(H,f,k,bc,A,b); REQUIRE(abs(x(0)- 1.0)()); REQUIRE(abs(x(1)- 1.5)()); REQUIRE(abs(x(2)- -.5)()); } TEST_CASE("min_quad_with_fixed: Aeq", "[igl]" ) { Eigen::MatrixXd Q(4,4); Q<< 1,-1,0,0, -1,2,-1,0, 0,-1,2,-1, 0,0,-1,1; Eigen::VectorXd B = Eigen::VectorXd::Zero(4); Eigen::MatrixXd Aeq(1,4); Aeq<<-1,0,0,1; Eigen::VectorXd beq(1); beq<<3; Eigen::VectorXi b(1); b<<0; Eigen::VectorXd bc(1); bc<<0; Eigen::VectorXd Z; igl::min_quad_with_fixed( Eigen::SparseMatrix(Q.sparseView()),B,b,bc, Eigen::SparseMatrix(Aeq.sparseView()),beq,true,Z); Eigen::VectorXd Zgt(4); Zgt << 0,1,2,3; const double epsilon = 1e-15; test_common::assert_near(Z,Zgt,epsilon); }